zero-workspace 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +187 -0
- package/config/component-versions.json +16 -0
- package/config/scenarioCapabilities.json +29 -0
- package/config/version-notes.yaml +244 -0
- package/dist/adapters/OutputAdapter.d.ts +79 -0
- package/dist/adapters/OutputAdapter.d.ts.map +1 -0
- package/dist/adapters/OutputAdapter.js +124 -0
- package/dist/adapters/OutputAdapter.js.map +1 -0
- package/dist/cli/check-node-version.d.ts +3 -0
- package/dist/cli/check-node-version.d.ts.map +1 -0
- package/dist/cli/check-node-version.js +153 -0
- package/dist/cli/check-node-version.js.map +1 -0
- package/dist/cli/plugins.d.ts +41 -0
- package/dist/cli/plugins.d.ts.map +1 -0
- package/dist/cli/plugins.js +742 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/rebuild.d.ts +63 -0
- package/dist/cli/rebuild.d.ts.map +1 -0
- package/dist/cli/rebuild.js +989 -0
- package/dist/cli/rebuild.js.map +1 -0
- package/dist/cli/repair.d.ts +7 -0
- package/dist/cli/repair.d.ts.map +1 -0
- package/dist/cli/repair.js +925 -0
- package/dist/cli/repair.js.map +1 -0
- package/dist/cli/setup.d.ts +7 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +452 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/update.d.ts +10 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +426 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/webui.d.ts +6 -0
- package/dist/cli/webui.d.ts.map +1 -0
- package/dist/cli/webui.js +210 -0
- package/dist/cli/webui.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +15 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/middleware/errorHandler.d.ts +16 -0
- package/dist/http/middleware/errorHandler.d.ts.map +1 -0
- package/dist/http/middleware/errorHandler.js +79 -0
- package/dist/http/middleware/errorHandler.js.map +1 -0
- package/dist/http/routes/admin.d.ts +3 -0
- package/dist/http/routes/admin.d.ts.map +1 -0
- package/dist/http/routes/admin.js +730 -0
- package/dist/http/routes/admin.js.map +1 -0
- package/dist/http/routes/backup.d.ts +3 -0
- package/dist/http/routes/backup.d.ts.map +1 -0
- package/dist/http/routes/backup.js +172 -0
- package/dist/http/routes/backup.js.map +1 -0
- package/dist/http/routes/config.d.ts +3 -0
- package/dist/http/routes/config.d.ts.map +1 -0
- package/dist/http/routes/config.js +157 -0
- package/dist/http/routes/config.js.map +1 -0
- package/dist/http/routes/context.d.ts +3 -0
- package/dist/http/routes/context.d.ts.map +1 -0
- package/dist/http/routes/context.js +82 -0
- package/dist/http/routes/context.js.map +1 -0
- package/dist/http/routes/log.d.ts +3 -0
- package/dist/http/routes/log.d.ts.map +1 -0
- package/dist/http/routes/log.js +105 -0
- package/dist/http/routes/log.js.map +1 -0
- package/dist/http/routes/memo.d.ts +6 -0
- package/dist/http/routes/memo.d.ts.map +1 -0
- package/dist/http/routes/memo.js +29 -0
- package/dist/http/routes/memo.js.map +1 -0
- package/dist/http/routes/node.d.ts +3 -0
- package/dist/http/routes/node.d.ts.map +1 -0
- package/dist/http/routes/node.js +251 -0
- package/dist/http/routes/node.js.map +1 -0
- package/dist/http/routes/state.d.ts +3 -0
- package/dist/http/routes/state.d.ts.map +1 -0
- package/dist/http/routes/state.js +48 -0
- package/dist/http/routes/state.js.map +1 -0
- package/dist/http/routes/workspace.d.ts +3 -0
- package/dist/http/routes/workspace.d.ts.map +1 -0
- package/dist/http/routes/workspace.js +249 -0
- package/dist/http/routes/workspace.js.map +1 -0
- package/dist/http/server.d.ts +10 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +284 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/services.d.ts +93 -0
- package/dist/http/services.d.ts.map +1 -0
- package/dist/http/services.js +297 -0
- package/dist/http/services.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1073 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/guidanceContent.d.ts +18 -0
- package/dist/prompts/guidanceContent.d.ts.map +1 -0
- package/dist/prompts/guidanceContent.js +814 -0
- package/dist/prompts/guidanceContent.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +4 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/instructions.d.ts +56 -0
- package/dist/prompts/instructions.d.ts.map +1 -0
- package/dist/prompts/instructions.js +1343 -0
- package/dist/prompts/instructions.js.map +1 -0
- package/dist/services/BackupService.d.ts +104 -0
- package/dist/services/BackupService.d.ts.map +1 -0
- package/dist/services/BackupService.js +549 -0
- package/dist/services/BackupService.js.map +1 -0
- package/dist/services/CapabilityService.d.ts +38 -0
- package/dist/services/CapabilityService.d.ts.map +1 -0
- package/dist/services/CapabilityService.js +256 -0
- package/dist/services/CapabilityService.js.map +1 -0
- package/dist/services/ConfigService.d.ts +35 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +105 -0
- package/dist/services/ConfigService.js.map +1 -0
- package/dist/services/ContextService.d.ts +65 -0
- package/dist/services/ContextService.d.ts.map +1 -0
- package/dist/services/ContextService.js +503 -0
- package/dist/services/ContextService.js.map +1 -0
- package/dist/services/DetectionService.d.ts +76 -0
- package/dist/services/DetectionService.d.ts.map +1 -0
- package/dist/services/DetectionService.js +262 -0
- package/dist/services/DetectionService.js.map +1 -0
- package/dist/services/DispatchService.d.ts +267 -0
- package/dist/services/DispatchService.d.ts.map +1 -0
- package/dist/services/DispatchService.js +1357 -0
- package/dist/services/DispatchService.js.map +1 -0
- package/dist/services/EventService.d.ts +81 -0
- package/dist/services/EventService.d.ts.map +1 -0
- package/dist/services/EventService.js +187 -0
- package/dist/services/EventService.js.map +1 -0
- package/dist/services/GuidanceService.d.ts +64 -0
- package/dist/services/GuidanceService.d.ts.map +1 -0
- package/dist/services/GuidanceService.js +259 -0
- package/dist/services/GuidanceService.js.map +1 -0
- package/dist/services/HealthService.d.ts +43 -0
- package/dist/services/HealthService.d.ts.map +1 -0
- package/dist/services/HealthService.js +276 -0
- package/dist/services/HealthService.js.map +1 -0
- package/dist/services/InstallationService.d.ts +62 -0
- package/dist/services/InstallationService.d.ts.map +1 -0
- package/dist/services/InstallationService.js +204 -0
- package/dist/services/InstallationService.js.map +1 -0
- package/dist/services/LogService.d.ts +35 -0
- package/dist/services/LogService.d.ts.map +1 -0
- package/dist/services/LogService.js +189 -0
- package/dist/services/LogService.js.map +1 -0
- package/dist/services/MemoService.d.ts +39 -0
- package/dist/services/MemoService.d.ts.map +1 -0
- package/dist/services/MemoService.js +288 -0
- package/dist/services/MemoService.js.map +1 -0
- package/dist/services/NodeService.d.ts +90 -0
- package/dist/services/NodeService.d.ts.map +1 -0
- package/dist/services/NodeService.js +958 -0
- package/dist/services/NodeService.js.map +1 -0
- package/dist/services/OpenSpecParser.d.ts +43 -0
- package/dist/services/OpenSpecParser.d.ts.map +1 -0
- package/dist/services/OpenSpecParser.js +191 -0
- package/dist/services/OpenSpecParser.js.map +1 -0
- package/dist/services/ReferenceService.d.ts +35 -0
- package/dist/services/ReferenceService.d.ts.map +1 -0
- package/dist/services/ReferenceService.js +195 -0
- package/dist/services/ReferenceService.js.map +1 -0
- package/dist/services/RepairService.d.ts +36 -0
- package/dist/services/RepairService.d.ts.map +1 -0
- package/dist/services/RepairService.js +429 -0
- package/dist/services/RepairService.js.map +1 -0
- package/dist/services/SearchService.d.ts +34 -0
- package/dist/services/SearchService.d.ts.map +1 -0
- package/dist/services/SearchService.js +293 -0
- package/dist/services/SearchService.js.map +1 -0
- package/dist/services/SessionService.d.ts +136 -0
- package/dist/services/SessionService.d.ts.map +1 -0
- package/dist/services/SessionService.js +297 -0
- package/dist/services/SessionService.js.map +1 -0
- package/dist/services/StateService.d.ts +97 -0
- package/dist/services/StateService.d.ts.map +1 -0
- package/dist/services/StateService.js +846 -0
- package/dist/services/StateService.js.map +1 -0
- package/dist/services/TutorialService.d.ts +114 -0
- package/dist/services/TutorialService.d.ts.map +1 -0
- package/dist/services/TutorialService.js +1262 -0
- package/dist/services/TutorialService.js.map +1 -0
- package/dist/services/WorkspaceService.d.ts +273 -0
- package/dist/services/WorkspaceService.d.ts.map +1 -0
- package/dist/services/WorkspaceService.js +1764 -0
- package/dist/services/WorkspaceService.js.map +1 -0
- package/dist/services/index.d.ts +15 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -0
- package/dist/storage/FileSystemAdapter.d.ts +223 -0
- package/dist/storage/FileSystemAdapter.d.ts.map +1 -0
- package/dist/storage/FileSystemAdapter.js +384 -0
- package/dist/storage/FileSystemAdapter.js.map +1 -0
- package/dist/storage/JsonStorage.d.ts +158 -0
- package/dist/storage/JsonStorage.d.ts.map +1 -0
- package/dist/storage/JsonStorage.js +613 -0
- package/dist/storage/JsonStorage.js.map +1 -0
- package/dist/storage/MarkdownStorage.d.ts +178 -0
- package/dist/storage/MarkdownStorage.d.ts.map +1 -0
- package/dist/storage/MarkdownStorage.js +918 -0
- package/dist/storage/MarkdownStorage.js.map +1 -0
- package/dist/storage/SessionBindingStorage.d.ts +69 -0
- package/dist/storage/SessionBindingStorage.d.ts.map +1 -0
- package/dist/storage/SessionBindingStorage.js +131 -0
- package/dist/storage/SessionBindingStorage.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tools/capability.d.ts +18 -0
- package/dist/tools/capability.d.ts.map +1 -0
- package/dist/tools/capability.js +73 -0
- package/dist/tools/capability.js.map +1 -0
- package/dist/tools/config.d.ts +14 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +61 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/context.d.ts +22 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +139 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/dispatch.d.ts +41 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +380 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/help.d.ts +44 -0
- package/dist/tools/help.d.ts.map +1 -0
- package/dist/tools/help.js +227 -0
- package/dist/tools/help.js.map +1 -0
- package/dist/tools/import.d.ts +17 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +96 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/log.d.ts +21 -0
- package/dist/tools/log.d.ts.map +1 -0
- package/dist/tools/log.js +93 -0
- package/dist/tools/log.js.map +1 -0
- package/dist/tools/memo.d.ts +26 -0
- package/dist/tools/memo.d.ts.map +1 -0
- package/dist/tools/memo.js +188 -0
- package/dist/tools/memo.js.map +1 -0
- package/dist/tools/node.d.ts +34 -0
- package/dist/tools/node.d.ts.map +1 -0
- package/dist/tools/node.js +328 -0
- package/dist/tools/node.js.map +1 -0
- package/dist/tools/search.d.ts +14 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +95 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/session.d.ts +22 -0
- package/dist/tools/session.d.ts.map +1 -0
- package/dist/tools/session.js +127 -0
- package/dist/tools/session.js.map +1 -0
- package/dist/tools/state.d.ts +10 -0
- package/dist/tools/state.d.ts.map +1 -0
- package/dist/tools/state.js +79 -0
- package/dist/tools/state.js.map +1 -0
- package/dist/tools/workspace.d.ts +38 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +240 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/types/capability.d.ts +36 -0
- package/dist/types/capability.d.ts.map +1 -0
- package/dist/types/capability.js +3 -0
- package/dist/types/capability.js.map +1 -0
- package/dist/types/confirmation.d.ts +35 -0
- package/dist/types/confirmation.d.ts.map +1 -0
- package/dist/types/confirmation.js +3 -0
- package/dist/types/confirmation.js.map +1 -0
- package/dist/types/context.d.ts +174 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +3 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/errors.d.ts +81 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +154 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/guidance.d.ts +162 -0
- package/dist/types/guidance.d.ts.map +1 -0
- package/dist/types/guidance.js +4 -0
- package/dist/types/guidance.js.map +1 -0
- package/dist/types/health.d.ts +61 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +3 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memo.d.ts +132 -0
- package/dist/types/memo.d.ts.map +1 -0
- package/dist/types/memo.js +3 -0
- package/dist/types/memo.js.map +1 -0
- package/dist/types/node.d.ts +316 -0
- package/dist/types/node.d.ts.map +1 -0
- package/dist/types/node.js +3 -0
- package/dist/types/node.js.map +1 -0
- package/dist/types/repair.d.ts +62 -0
- package/dist/types/repair.d.ts.map +1 -0
- package/dist/types/repair.js +4 -0
- package/dist/types/repair.js.map +1 -0
- package/dist/types/search.d.ts +58 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +3 -0
- package/dist/types/search.js.map +1 -0
- package/dist/types/settings.d.ts +109 -0
- package/dist/types/settings.d.ts.map +1 -0
- package/dist/types/settings.js +30 -0
- package/dist/types/settings.js.map +1 -0
- package/dist/types/workspace.d.ts +357 -0
- package/dist/types/workspace.d.ts.map +1 -0
- package/dist/types/workspace.js +3 -0
- package/dist/types/workspace.js.map +1 -0
- package/dist/utils/contentValidation.d.ts +47 -0
- package/dist/utils/contentValidation.d.ts.map +1 -0
- package/dist/utils/contentValidation.js +93 -0
- package/dist/utils/contentValidation.js.map +1 -0
- package/dist/utils/devLog.d.ts +43 -0
- package/dist/utils/devLog.d.ts.map +1 -0
- package/dist/utils/devLog.js +94 -0
- package/dist/utils/devLog.js.map +1 -0
- package/dist/utils/errorLogger.d.ts +27 -0
- package/dist/utils/errorLogger.d.ts.map +1 -0
- package/dist/utils/errorLogger.js +105 -0
- package/dist/utils/errorLogger.js.map +1 -0
- package/dist/utils/git.d.ts +123 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +400 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/hash.d.ts +32 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +37 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/id.d.ts +54 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +96 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +228 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/manualChangeFormatter.d.ts +8 -0
- package/dist/utils/manualChangeFormatter.d.ts.map +1 -0
- package/dist/utils/manualChangeFormatter.js +21 -0
- package/dist/utils/manualChangeFormatter.js.map +1 -0
- package/dist/utils/paramValidator.d.ts +35 -0
- package/dist/utils/paramValidator.d.ts.map +1 -0
- package/dist/utils/paramValidator.js +214 -0
- package/dist/utils/paramValidator.js.map +1 -0
- package/dist/utils/port.d.ts +7 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +28 -0
- package/dist/utils/port.js.map +1 -0
- package/dist/utils/processManager.d.ts +53 -0
- package/dist/utils/processManager.d.ts.map +1 -0
- package/dist/utils/processManager.js +267 -0
- package/dist/utils/processManager.js.map +1 -0
- package/dist/utils/sessionLogger.d.ts +28 -0
- package/dist/utils/sessionLogger.d.ts.map +1 -0
- package/dist/utils/sessionLogger.js +142 -0
- package/dist/utils/sessionLogger.js.map +1 -0
- package/dist/utils/time.d.ts +15 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +32 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/validation.d.ts +23 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +88 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs//346/227/245/345/277/227/347/263/273/347/273/237.md +389 -0
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +1446 -0
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214/344/270/216/346/212/200/346/234/257/346/214/207/345/215/227.md +873 -0
- package/package.json +94 -0
- package/plugin/README.md +141 -0
- package/plugin/agents/zero-executor.md +114 -0
- package/plugin/agents/zero-reviewer.md +133 -0
- package/plugin/docs/diagnostic-guide.md +128 -0
- package/plugin/hooks/hooks.json.deprecated +70 -0
- package/plugin/scripts/cursor-hook-entry.cjs +217 -0
- package/plugin/scripts/hook-entry.cjs +663 -0
- package/plugin/scripts/openspec-import.cjs +714 -0
- package/plugin/scripts/shared/binding.cjs +98 -0
- package/plugin/scripts/shared/config.cjs +65 -0
- package/plugin/scripts/shared/context.cjs +120 -0
- package/plugin/scripts/shared/index.cjs +34 -0
- package/plugin/scripts/shared/logger.cjs +196 -0
- package/plugin/scripts/shared/reminder.cjs +261 -0
- package/plugin/scripts/shared/utils.cjs +62 -0
- package/plugin/scripts/shared/workspace.cjs +322 -0
- package/plugin/skills/aligning-intent/SKILL.md +275 -0
- package/plugin/skills/analyzing-measurements/SKILL.md +223 -0
- package/plugin/skills/bootstrapping-workspace/SKILL.md +260 -0
- package/plugin/skills/designing-solutions/SKILL.md +363 -0
- package/plugin/skills/diagnosing-issues/SKILL.md +219 -0
- package/plugin/skills/discovering-context/SKILL.md +283 -0
- package/plugin/skills/dispatching-parent/SKILL.md +399 -0
- package/plugin/skills/executing-task/SKILL.md +340 -0
- package/plugin/skills/memo-create/SKILL.md +222 -0
- package/plugin/skills/planning-verification/SKILL.md +245 -0
- package/plugin/skills/preparing-dispatch/SKILL.md +299 -0
- package/plugin/skills/researching-tech/SKILL.md +223 -0
- package/plugin/skills/reviewing-quality/SKILL.md +354 -0
- package/plugin/skills/reviewing-spec/SKILL.md +333 -0
- package/plugin/skills/starting-info-flow/SKILL.md +196 -0
- package/web/README.md +5 -0
- package/web/dist/assets/DocsView-Bls_Vjsr.css +1 -0
- package/web/dist/assets/DocsView-Cxc0B63r.js +1447 -0
- package/web/dist/assets/HomeView-C7df9thb.js +9 -0
- package/web/dist/assets/HomeView-ufUdnfHk.css +1 -0
- package/web/dist/assets/MarkdownContent-DXp6CtSP.js +308 -0
- package/web/dist/assets/MarkdownContent-NFqiOBLH.css +1 -0
- package/web/dist/assets/NotFoundView-BYX1oZAn.css +1 -0
- package/web/dist/assets/NotFoundView-zrc0lT9q.js +1 -0
- package/web/dist/assets/WorkspaceView-BckqgNcX.js +27 -0
- package/web/dist/assets/WorkspaceView-J1dgpYMx.css +1 -0
- package/web/dist/assets/WsConfirmDialog-C1CvL4my.css +1 -0
- package/web/dist/assets/WsConfirmDialog-gLEP7uBD.js +4 -0
- package/web/dist/assets/arc-DPkKTkUT.js +1 -0
- package/web/dist/assets/architectureDiagram-VXUJARFQ-CEGpqUlZ.js +36 -0
- package/web/dist/assets/blockDiagram-VD42YOAC-Bv-mqdQH.js +122 -0
- package/web/dist/assets/c4Diagram-YG6GDRKO-DRyPatZ_.js +10 -0
- package/web/dist/assets/channel-B84mKLDZ.js +1 -0
- package/web/dist/assets/chunk-4BX2VUAB-c7DivX0u.js +1 -0
- package/web/dist/assets/chunk-55IACEB6-CGKTaLlo.js +1 -0
- package/web/dist/assets/chunk-B4BG7PRW-Czhx5Q_P.js +165 -0
- package/web/dist/assets/chunk-DI55MBZ5-CQVA7hcZ.js +220 -0
- package/web/dist/assets/chunk-FMBD7UC4-hEiPmi7V.js +15 -0
- package/web/dist/assets/chunk-QN33PNHL-rL6yYI-E.js +1 -0
- package/web/dist/assets/chunk-QZHKN3VN-BRyHBBzq.js +1 -0
- package/web/dist/assets/chunk-TZMSLE5B-D4PXmTz9.js +1 -0
- package/web/dist/assets/classDiagram-2ON5EDUG-CNn53ohi.js +1 -0
- package/web/dist/assets/classDiagram-v2-WZHVMYZB-CNn53ohi.js +1 -0
- package/web/dist/assets/cose-bilkent-S5V4N54A-BAREnRga.js +1 -0
- package/web/dist/assets/cytoscape.esm-BnkdMOzK.js +321 -0
- package/web/dist/assets/dagre-6UL2VRFP-DaYzb3MT.js +4 -0
- package/web/dist/assets/defaultLocale-C4B-KCzX.js +1 -0
- package/web/dist/assets/diagram-PSM6KHXK-BFltDqvd.js +24 -0
- package/web/dist/assets/diagram-QEK2KX5R-CR4VU2La.js +43 -0
- package/web/dist/assets/diagram-S2PKOQOG-0UfIeT-1.js +24 -0
- package/web/dist/assets/erDiagram-Q2GNP2WA-Bo17Xmng.js +60 -0
- package/web/dist/assets/flowDiagram-NV44I4VS-CzqhQp8s.js +162 -0
- package/web/dist/assets/ganttDiagram-JELNMOA3-TXwXtUcq.js +267 -0
- package/web/dist/assets/gitGraphDiagram-NY62KEGX-CoFQTy9O.js +65 -0
- package/web/dist/assets/graph-CIQcRIVd.js +1 -0
- package/web/dist/assets/index-BgLd_o_M.css +1 -0
- package/web/dist/assets/index-Cd_J3fZn.js +30 -0
- package/web/dist/assets/infoDiagram-WHAUD3N6-Dq0xXfVu.js +2 -0
- package/web/dist/assets/init-Gi6I4Gst.js +1 -0
- package/web/dist/assets/journeyDiagram-XKPGCS4Q-jIg5BOfC.js +139 -0
- package/web/dist/assets/kanban-definition-3W4ZIXB7-D2giu6aZ.js +89 -0
- package/web/dist/assets/katex-XbL3y5x-.js +261 -0
- package/web/dist/assets/layout-Bm-XCM-8.js +1 -0
- package/web/dist/assets/linear-FbekP9OZ.js +1 -0
- package/web/dist/assets/min-BrRCpYmF.js +1 -0
- package/web/dist/assets/mindmap-definition-VGOIOE7T-o-4ubbY9.js +68 -0
- package/web/dist/assets/noto-emoji-0-400-normal-BTQbhB77.woff +0 -0
- package/web/dist/assets/noto-emoji-0-400-normal-DHdy6Uhy.woff2 +0 -0
- package/web/dist/assets/noto-emoji-1-400-normal-0IvkdXBB.woff +0 -0
- package/web/dist/assets/noto-emoji-1-400-normal-BY9OovbM.woff2 +0 -0
- package/web/dist/assets/noto-emoji-10-400-normal-D9w4QCof.woff2 +0 -0
- package/web/dist/assets/noto-emoji-10-400-normal-DtCumcZR.woff +0 -0
- package/web/dist/assets/noto-emoji-11-400-normal-BboTlyvx.woff +0 -0
- package/web/dist/assets/noto-emoji-12-400-normal-BB5pgBKj.woff2 +0 -0
- package/web/dist/assets/noto-emoji-12-400-normal-g186qhiA.woff +0 -0
- package/web/dist/assets/noto-emoji-2-400-normal-BKCR1azW.woff2 +0 -0
- package/web/dist/assets/noto-emoji-2-400-normal-BYH0KhDr.woff +0 -0
- package/web/dist/assets/noto-emoji-3-400-normal-CnPTUeEK.woff +0 -0
- package/web/dist/assets/noto-emoji-3-400-normal-TrTb2VQM.woff2 +0 -0
- package/web/dist/assets/noto-emoji-4-400-normal-BxD0KVdj.woff +0 -0
- package/web/dist/assets/noto-emoji-4-400-normal-s_n9EyG1.woff2 +0 -0
- package/web/dist/assets/noto-emoji-5-400-normal-C190AIxR.woff +0 -0
- package/web/dist/assets/noto-emoji-5-400-normal-Ctfx4xc6.woff2 +0 -0
- package/web/dist/assets/noto-emoji-6-400-normal-DlXlXWt7.woff +0 -0
- package/web/dist/assets/noto-emoji-6-400-normal-NzsjD754.woff2 +0 -0
- package/web/dist/assets/noto-emoji-7-400-normal-BHP8KeA6.woff2 +0 -0
- package/web/dist/assets/noto-emoji-7-400-normal-CtuKhtAZ.woff +0 -0
- package/web/dist/assets/noto-emoji-8-400-normal-DR49ZFe7.woff +0 -0
- package/web/dist/assets/noto-emoji-8-400-normal-Dvmkf6b2.woff2 +0 -0
- package/web/dist/assets/noto-emoji-9-400-normal-BeHJQ2iK.woff2 +0 -0
- package/web/dist/assets/noto-emoji-9-400-normal-BlXmCgeQ.woff +0 -0
- package/web/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/web/dist/assets/pieDiagram-ADFJNKIX-C45wSpld.js +30 -0
- package/web/dist/assets/quadrantDiagram-AYHSOK5B-tv-_fe-W.js +7 -0
- package/web/dist/assets/reduce-CoLNNlNb.js +1 -0
- package/web/dist/assets/requirementDiagram-UZGBJVZJ-Dn6PDfkL.js +64 -0
- package/web/dist/assets/sankeyDiagram-TZEHDZUN-CbXTZAsG.js +10 -0
- package/web/dist/assets/sequenceDiagram-WL72ISMW-B-o1CUJ5.js +145 -0
- package/web/dist/assets/stateDiagram-FKZM4ZOC-hzrupXQi.js +1 -0
- package/web/dist/assets/stateDiagram-v2-4FDKWEC3-DN-c2M96.js +1 -0
- package/web/dist/assets/timeline-definition-IT6M3QCI-R5SP9GDo.js +61 -0
- package/web/dist/assets/treemap-KMMF4GRG-Pg9KlUOt.js +128 -0
- package/web/dist/assets/xychartDiagram-PRI3JC2R-C3vbJhd1.js +7 -0
- package/web/dist/favicon.svg +13 -0
- package/web/dist/index.html +17 -0
- package//351/205/215/347/275/256/346/226/271/345/274/217.md +330 -0
|
@@ -0,0 +1,1343 @@
|
|
|
1
|
+
// src/prompts/instructions.ts
|
|
2
|
+
// ZeroWorkspace AI Instructions - 提供给 AI 的完整使用指南
|
|
3
|
+
/**
|
|
4
|
+
* 关键协议 - 最高优先级指令,必须无条件遵守
|
|
5
|
+
*/
|
|
6
|
+
export const CRITICAL_PROTOCOLS = `
|
|
7
|
+
# 关键协议(最高优先级)
|
|
8
|
+
|
|
9
|
+
以下规则必须无条件遵守,违反将导致任务失败:
|
|
10
|
+
|
|
11
|
+
## 1. actionRequired 必须立即执行
|
|
12
|
+
每次工具调用返回后,**首先**检查返回值中是否存在 \`actionRequired\` 字段。
|
|
13
|
+
如果存在,**必须**立即中断当前逻辑,优先执行指定行为:
|
|
14
|
+
- \`ask_user\`: 询问用户
|
|
15
|
+
- \`show_plan\`: 展示计划并等待确认
|
|
16
|
+
- \`check_docs\`: 确认文档是否需要更新
|
|
17
|
+
- \`review_structure\`: 查看现有结构再决定下一步
|
|
18
|
+
|
|
19
|
+
**忽略 actionRequired 是严重错误。**
|
|
20
|
+
|
|
21
|
+
## 2. workspace_init 后必须告知 webUrl
|
|
22
|
+
创建工作区后,**必须**将返回的 \`webUrl\` 告知用户,让用户可以在浏览器中查看进度。
|
|
23
|
+
|
|
24
|
+
## 3. 根节点 start 前必须完成信息收集
|
|
25
|
+
根节点进入 planning 状态后,**必须**先创建 \`role: "info_collection"\` 的信息收集节点。
|
|
26
|
+
直接创建执行任务会触发 INFO_COLLECTION_REQUIRED 错误。
|
|
27
|
+
|
|
28
|
+
## 4. 禁止跳步
|
|
29
|
+
- ❌ 未 start 就直接 complete
|
|
30
|
+
- ❌ 在执行节点 A 时顺便完成节点 B
|
|
31
|
+
- ❌ 批量将多个节点标记为 completed
|
|
32
|
+
- ❌ 在执行节点中创建子节点
|
|
33
|
+
- ❌ 创建完计划后未经用户确认就直接执行
|
|
34
|
+
|
|
35
|
+
## 5. 子节点不继承文档
|
|
36
|
+
创建子节点时,**必须**通过 \`docs\` 参数显式派发文档。
|
|
37
|
+
子节点就像新加入的员工,如果你不把文档传给它,它就什么都看不到。
|
|
38
|
+
`;
|
|
39
|
+
/**
|
|
40
|
+
* 系统概述 - AI 首次连接时应获取的核心信息
|
|
41
|
+
*/
|
|
42
|
+
export const SYSTEM_OVERVIEW = `
|
|
43
|
+
# ZeroWorkspace 使用指南
|
|
44
|
+
|
|
45
|
+
## 这是什么?
|
|
46
|
+
ZeroWorkspace 是一个**分形任务跟踪系统**,帮助你(AI)和用户一起管理复杂的开发任务。
|
|
47
|
+
它通过树状结构组织任务,支持任务的无限嵌套、状态追踪、上下文隔离。
|
|
48
|
+
|
|
49
|
+
## 核心价值
|
|
50
|
+
- **分形结构**:任何步骤都可以升级为独立子任务
|
|
51
|
+
- **聚焦上下文**:执行特定节点时自动过滤无关信息
|
|
52
|
+
- **过程可追溯**:完整记录操作历史,支持回溯复盘
|
|
53
|
+
- **动态管理**:支持任务分解、引用、隔离等高级操作
|
|
54
|
+
- **可视化界面**:提供 Web UI 查看任务进度和节点详情
|
|
55
|
+
|
|
56
|
+
## Web UI
|
|
57
|
+
ZeroWorkspace 提供可视化 Web 界面。所有 workspace 相关的工具返回值都包含 \`webUrl\` 字段。
|
|
58
|
+
|
|
59
|
+
**端口规则**:
|
|
60
|
+
- 正式环境:\`http://localhost:19540/workspace/{workspaceId}\`
|
|
61
|
+
- 开发环境(ZERO_DEV=true):\`http://localhost:19541/workspace/{workspaceId}\`
|
|
62
|
+
|
|
63
|
+
**重要边界**:
|
|
64
|
+
- 你**无法看到** Web UI 的界面,也**无法控制**用户的浏览器
|
|
65
|
+
- 你只能通过 MCP 工具读写数据,webUrl 仅供用户使用
|
|
66
|
+
- 正确说法:"我已更新数据,你可以在 Web UI 上查看"
|
|
67
|
+
- 错误说法:"我正在浏览器上更新..."
|
|
68
|
+
|
|
69
|
+
## 你的角色
|
|
70
|
+
作为 AI 助手,你应该:
|
|
71
|
+
1. **主动推进**:减少不必要的询问,有明确参考时直接执行
|
|
72
|
+
2. **记录过程**:每个关键动作都追加日志
|
|
73
|
+
3. **引导用户**:当用户不熟悉流程时,主动解释并引导
|
|
74
|
+
4. **保持聚焦**:使用 context_focus 保持在正确的任务上下文中
|
|
75
|
+
`;
|
|
76
|
+
/**
|
|
77
|
+
* 核心工作流程
|
|
78
|
+
*/
|
|
79
|
+
export const CORE_WORKFLOW = `
|
|
80
|
+
## 核心工作流程
|
|
81
|
+
|
|
82
|
+
### 1. 创建工作区流程
|
|
83
|
+
\`\`\`
|
|
84
|
+
用户提出任务
|
|
85
|
+
↓
|
|
86
|
+
调用 workspace_init 创建工作区
|
|
87
|
+
- name: 任务名称
|
|
88
|
+
- goal: 任务目标
|
|
89
|
+
- rules: 初始规则(可选,后续会通过信息收集补充)
|
|
90
|
+
- docs: 初始文档(可选,后续会通过信息收集补充)
|
|
91
|
+
↓
|
|
92
|
+
★ 告知用户 webUrl
|
|
93
|
+
↓
|
|
94
|
+
★★★ 必须先创建信息收集节点 ★★★
|
|
95
|
+
↓
|
|
96
|
+
创建 planning 类型、role='info_collection' 的信息收集节点
|
|
97
|
+
↓
|
|
98
|
+
在信息收集节点中:
|
|
99
|
+
- 扫描项目根目录一级菜单,分析结构
|
|
100
|
+
- 查找文档文件夹(./Doc/, ./assets/, ./documentation/)
|
|
101
|
+
- 查找规则文件夹(./RULE/, ./rules/)
|
|
102
|
+
- 阅读 README 和项目配置
|
|
103
|
+
- 收集环境配置、路径信息等
|
|
104
|
+
↓
|
|
105
|
+
信息收集节点 complete 时,在 conclusion 中按格式归档:
|
|
106
|
+
## 规则
|
|
107
|
+
- 规则1
|
|
108
|
+
- 规则2
|
|
109
|
+
|
|
110
|
+
## 文档
|
|
111
|
+
- /path/to/doc1: 文档1描述
|
|
112
|
+
- /path/to/doc2: 文档2描述
|
|
113
|
+
↓
|
|
114
|
+
★ 系统自动将规则和文档追加到工作区
|
|
115
|
+
↓
|
|
116
|
+
返回根节点,开始规划具体执行任务
|
|
117
|
+
\`\`\`
|
|
118
|
+
|
|
119
|
+
**重要**:根节点 start 前必须先完成信息收集节点,否则会报错 INFO_COLLECTION_REQUIRED。
|
|
120
|
+
|
|
121
|
+
### 2. 节点类型与执行流程
|
|
122
|
+
|
|
123
|
+
**两种节点类型**:
|
|
124
|
+
- **规划节点 (planning)**:分析、分解任务、创建子节点、汇总结论
|
|
125
|
+
- **执行节点 (execution)**:具体执行,不能有子节点,遇到问题需 fail 回退
|
|
126
|
+
|
|
127
|
+
**⚠️ 重要:每个节点必须严格遵循此流程,不可跳步!**
|
|
128
|
+
|
|
129
|
+
#### 执行节点流程
|
|
130
|
+
\`\`\`
|
|
131
|
+
★ 第一步必须是 start!
|
|
132
|
+
调用 node_transition(action="start") 进入 implementing 状态
|
|
133
|
+
(系统会自动将父规划节点链设为 monitoring)
|
|
134
|
+
↓
|
|
135
|
+
获取上下文:如对当前任务理解不清晰,调用 context_get 获取完整上下文
|
|
136
|
+
↓
|
|
137
|
+
自查引用:检查文档引用是否充足,不足则 fail 回退父节点补充
|
|
138
|
+
↓
|
|
139
|
+
执行 + 日志:log_append 记录关键动作
|
|
140
|
+
↓
|
|
141
|
+
★ 阶段性结论:每形成一个结论,立即 node_update 记录到 note
|
|
142
|
+
↓
|
|
143
|
+
遇阻处理:
|
|
144
|
+
- 任务过于复杂 → fail 回退到父规划节点重新分解
|
|
145
|
+
- 信息不足 → fail 并说明缺少什么
|
|
146
|
+
- 可继续 → problem_update 记录问题
|
|
147
|
+
↓
|
|
148
|
+
★ 最终结论:node_transition(action="complete", conclusion="...")
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
#### 规划节点流程
|
|
152
|
+
\`\`\`
|
|
153
|
+
★ start 进入 planning 状态
|
|
154
|
+
↓
|
|
155
|
+
分析任务,确定分解方案
|
|
156
|
+
↓
|
|
157
|
+
创建子节点(第一个子节点创建时自动进入 monitoring 状态)
|
|
158
|
+
- 简单任务 → execution 类型
|
|
159
|
+
- 复杂任务 → planning 类型(可继续分解)
|
|
160
|
+
↓
|
|
161
|
+
★★★ 向用户展示计划并等待确认 ★★★
|
|
162
|
+
- 列出所有子节点的标题和需求
|
|
163
|
+
- 等待用户说"好"、"可以"、"继续"等确认
|
|
164
|
+
- 用户有异议时调整计划
|
|
165
|
+
↓
|
|
166
|
+
用户确认后,开始执行第一个子节点
|
|
167
|
+
↓
|
|
168
|
+
监控子节点执行情况
|
|
169
|
+
↓
|
|
170
|
+
所有子节点完成后 → complete 汇总结论
|
|
171
|
+
如需取消 → cancel
|
|
172
|
+
\`\`\`
|
|
173
|
+
|
|
174
|
+
**禁止跳步行为**:
|
|
175
|
+
- ❌ 未 start 就直接 complete
|
|
176
|
+
- ❌ 在执行节点 A 时顺便完成节点 B
|
|
177
|
+
- ❌ 批量将多个节点标记为 completed
|
|
178
|
+
- ❌ 在执行节点中创建子节点(执行节点不能有子节点)
|
|
179
|
+
- ❌ 创建完计划后未经用户确认就直接开始执行
|
|
180
|
+
|
|
181
|
+
### 2.0.0 工具调用错误处理
|
|
182
|
+
|
|
183
|
+
当 MCP 工具调用失败(返回 Error)时:
|
|
184
|
+
1. **不要**立即用相同的参数重试
|
|
185
|
+
2. 仔细阅读错误信息(Error Message),理解失败原因
|
|
186
|
+
3. 如果是参数错误,检查工具 Schema 定义并修正参数
|
|
187
|
+
4. 如果是前置条件未满足(如父节点未 Start),先解决前置条件
|
|
188
|
+
5. 如果连续失败 2 次,**必须**停止并向用户报告技术问题,等待人工干预
|
|
189
|
+
|
|
190
|
+
### 2.0.1 actionRequired 必须执行指令(重要!)
|
|
191
|
+
|
|
192
|
+
**当工具返回值包含 \`actionRequired\` 字段时,你必须立即执行指定行为,不可忽略!**
|
|
193
|
+
|
|
194
|
+
| type | 触发场景 | 你必须做什么 |
|
|
195
|
+
|------|----------|-------------|
|
|
196
|
+
| \`ask_user\` | workspace_init 完成 | 有文档时询问是否使用;无文档时询问用户是否有其他文档可提供 |
|
|
197
|
+
| \`show_plan\` | node_create 创建计划节点后 | 向用户展示当前计划,等待用户确认("好"/"继续"/"可以")后再执行 |
|
|
198
|
+
| \`check_docs\` | 执行节点完成且有文档引用 | 向用户确认引用的文档是否需要同步更新 |
|
|
199
|
+
| \`review_structure\` | reopen 且有子节点 | 先调用 node_list 查看现有结构,评估是否调整现有节点而非创建新节点 |
|
|
200
|
+
| \`ask_dispatch\` | 首个执行节点启动且项目是 Git 仓库 | 询问用户是否启用派发模式(subagent 执行 + 自动验证 + 失败回滚) |
|
|
201
|
+
| \`dispatch_task\` | dispatch_node 准备完成 | 使用 Task tool 调用 subagent 执行任务,按返回的 prompt 和参数调用 |
|
|
202
|
+
|
|
203
|
+
**执行示例**:
|
|
204
|
+
\`\`\`
|
|
205
|
+
// 工具返回
|
|
206
|
+
{
|
|
207
|
+
"nodeId": "...",
|
|
208
|
+
"actionRequired": {
|
|
209
|
+
"type": "show_plan",
|
|
210
|
+
"message": "已创建计划节点,请向用户展示当前计划并等待确认后再开始执行。"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// 你应该立即向用户展示计划:
|
|
215
|
+
"我已创建以下执行计划:
|
|
216
|
+
1. 任务A - ...
|
|
217
|
+
2. 任务B - ...
|
|
218
|
+
确认开始执行吗?"
|
|
219
|
+
|
|
220
|
+
// 等待用户回复后再继续
|
|
221
|
+
\`\`\`
|
|
222
|
+
|
|
223
|
+
### 2.1 结论记录原则(重要!)
|
|
224
|
+
|
|
225
|
+
**每个节点必须有结论**:节点完成时,conclusion 字段必须包含有价值的信息。
|
|
226
|
+
|
|
227
|
+
| 节点类型 | 结论应包含 |
|
|
228
|
+
|----------|-----------|
|
|
229
|
+
| 分析类 | 分析结果、发现的问题、根因 |
|
|
230
|
+
| 实现类 | 实际采用的方案、关键修改点 |
|
|
231
|
+
| 验证类 | 验证结果、通过/失败原因 |
|
|
232
|
+
| 调试类 | Bug 原因、修复方法 |
|
|
233
|
+
|
|
234
|
+
**中间过程也要记录**:
|
|
235
|
+
- 使用 \`node_update({ note: "..." })\` 记录分析中的阶段性结论
|
|
236
|
+
- 创建子节点前,先在父节点记录"截至目前的发现"
|
|
237
|
+
- 这样即使后续分析失败,之前的结论也不会丢失
|
|
238
|
+
|
|
239
|
+
### 3. 状态流转规则
|
|
240
|
+
|
|
241
|
+
**执行节点状态机**:
|
|
242
|
+
\`\`\`
|
|
243
|
+
pending ──start──→ implementing ──submit──→ validating ──complete──→ completed
|
|
244
|
+
│ │ │
|
|
245
|
+
│ complete │ fail │ reopen
|
|
246
|
+
↓ ↓ ↓
|
|
247
|
+
completed failed ──retry──→ implementing
|
|
248
|
+
\`\`\`
|
|
249
|
+
|
|
250
|
+
**规划节点状态机**:
|
|
251
|
+
\`\`\`
|
|
252
|
+
pending ──start──→ planning ──(创建子节点)──→ monitoring ──complete──→ completed
|
|
253
|
+
│ │ │
|
|
254
|
+
│ complete/cancel │ cancel │ reopen
|
|
255
|
+
↓ ↓ ↓
|
|
256
|
+
completed/cancelled cancelled ────reopen────→ planning
|
|
257
|
+
\`\`\`
|
|
258
|
+
|
|
259
|
+
**自动级联规则**:
|
|
260
|
+
- 当执行节点 start 时,父规划节点链自动从 pending/planning → monitoring
|
|
261
|
+
- 当创建第一个子节点时,规划节点自动从 planning → monitoring
|
|
262
|
+
- 当子节点 reopen 时,已完成的父节点链也会自动 reopen
|
|
263
|
+
|
|
264
|
+
**重新激活节点**:
|
|
265
|
+
- 对于已完成的节点,如需添加新功能,使用 \`node_transition(action="reopen")\`
|
|
266
|
+
- reopen 会自动级联激活已完成的父节点
|
|
267
|
+
|
|
268
|
+
### 4. 任务分解原则(重要!)
|
|
269
|
+
|
|
270
|
+
**规划节点应主动分解任务为子节点**
|
|
271
|
+
|
|
272
|
+
| 场景 | 子节点类型 | 说明 |
|
|
273
|
+
|------|-----------|------|
|
|
274
|
+
| 简单具体任务 | execution | 如:修复某个 bug、添加某个函数 |
|
|
275
|
+
| 复杂多步任务 | planning | 如:重构某个模块、实现某个功能 |
|
|
276
|
+
| 并行探索路径 | 多个平级节点 | 每条路径一个节点 |
|
|
277
|
+
| 验证假设 | execution | 具体的验证步骤 |
|
|
278
|
+
|
|
279
|
+
**执行节点遇到问题时的处理**:
|
|
280
|
+
- 任务过于复杂 → fail 回退到父规划节点,让父节点重新分解
|
|
281
|
+
- 信息不足 → fail 并说明缺少什么,父节点补充后重新派发
|
|
282
|
+
- 发现新的子任务 → fail 回退,因为执行节点不能创建子节点
|
|
283
|
+
|
|
284
|
+
**分解触发器**(规划节点应主动执行):
|
|
285
|
+
1. 任务包含多个独立步骤时 → 为每个步骤创建子节点
|
|
286
|
+
2. 需要在多个方向同时探索时 → 创建平级子节点
|
|
287
|
+
3. 复杂任务难以一次完成时 → 分解为多个小任务
|
|
288
|
+
`;
|
|
289
|
+
/**
|
|
290
|
+
* 工具速查表
|
|
291
|
+
*/
|
|
292
|
+
export const TOOLS_QUICK_REFERENCE = `
|
|
293
|
+
## 工具速查表
|
|
294
|
+
|
|
295
|
+
### 工作区管理
|
|
296
|
+
| 工具 | 用途 | 关键参数 |
|
|
297
|
+
|------|------|----------|
|
|
298
|
+
| workspace_init | 创建新工作区 | name, goal, rules?, docs? |
|
|
299
|
+
| workspace_list | 列出所有工作区 | status? (active/archived/all) |
|
|
300
|
+
| workspace_get | 获取工作区详情 | workspaceId |
|
|
301
|
+
| workspace_delete | 删除工作区 | workspaceId, force? |
|
|
302
|
+
|
|
303
|
+
**重要**:workspace_init 返回 \`webUrl\`,务必告知用户此地址可在浏览器中查看任务进度。
|
|
304
|
+
|
|
305
|
+
### 节点管理
|
|
306
|
+
| 工具 | 用途 | 关键参数 |
|
|
307
|
+
|------|------|----------|
|
|
308
|
+
| node_create | 创建子节点 | workspaceId, parentId, **type**, title, requirement, docs? |
|
|
309
|
+
| node_get | 获取节点详情(返回 nodeHash) | workspaceId, nodeId |
|
|
310
|
+
| node_list | 列出节点树 | workspaceId, rootId?, depth? |
|
|
311
|
+
| node_update | 更新节点信息(需 nodeHash) | workspaceId, nodeId, **nodeHash**, ... |
|
|
312
|
+
| node_delete | 删除节点 | workspaceId, nodeId |
|
|
313
|
+
|
|
314
|
+
**★ node_update 先读后写机制(重要!)**:
|
|
315
|
+
|
|
316
|
+
更新节点前**必须**先调用 \`node_get\` 获取 \`nodeHash\`,然后在 \`node_update\` 中提供该 hash。这是乐观锁机制,防止并发覆盖。
|
|
317
|
+
|
|
318
|
+
**两种编辑模式**:
|
|
319
|
+
1. **全量替换**:直接提供新值覆盖整个字段
|
|
320
|
+
\`\`\`typescript
|
|
321
|
+
node_update({
|
|
322
|
+
workspaceId: "ws-xxx",
|
|
323
|
+
nodeId: "node-xxx",
|
|
324
|
+
nodeHash: "abc123", // 从 node_get 获取
|
|
325
|
+
title: "新标题",
|
|
326
|
+
requirement: "新需求"
|
|
327
|
+
})
|
|
328
|
+
\`\`\`
|
|
329
|
+
|
|
330
|
+
2. **精确替换**:使用 \`field\` + \`old_str\` + \`new_str\` 只替换部分内容
|
|
331
|
+
\`\`\`typescript
|
|
332
|
+
node_update({
|
|
333
|
+
workspaceId: "ws-xxx",
|
|
334
|
+
nodeId: "node-xxx",
|
|
335
|
+
nodeHash: "abc123",
|
|
336
|
+
field: "requirement", // 目标字段
|
|
337
|
+
old_str: "旧的部分内容", // 要替换的内容
|
|
338
|
+
new_str: "新的部分内容" // 替换后的内容
|
|
339
|
+
})
|
|
340
|
+
\`\`\`
|
|
341
|
+
|
|
342
|
+
⚠️ **注意**:\`node_update\` 成功后**不返回新 hash**,如需再次更新,必须重新调用 \`node_get\` 获取最新 hash。
|
|
343
|
+
|
|
344
|
+
**★ type 参数(必填)**:
|
|
345
|
+
- **planning**:规划节点,负责分析、分解任务、创建子节点、汇总结论
|
|
346
|
+
- **execution**:执行节点,负责具体执行,不能有子节点,遇到问题需 fail 回退
|
|
347
|
+
|
|
348
|
+
**★ docs 参数(重要!)**:
|
|
349
|
+
创建子节点时,**必须**使用 docs 参数显式派发该子任务需要的文档引用。
|
|
350
|
+
⚠️ 子节点就像新加入的员工,如果你不把文档传给它,它就什么都看不到。
|
|
351
|
+
子节点不会自动继承父节点的文档,必须显式派发!
|
|
352
|
+
|
|
353
|
+
### 状态转换
|
|
354
|
+
|
|
355
|
+
**执行节点 (execution)**:
|
|
356
|
+
| action | 转换 |
|
|
357
|
+
|--------|------|
|
|
358
|
+
| start | pending → implementing |
|
|
359
|
+
| submit | implementing → validating |
|
|
360
|
+
| complete | implementing/validating → completed |
|
|
361
|
+
| fail | implementing/validating → failed |
|
|
362
|
+
| retry | failed → implementing |
|
|
363
|
+
| reopen | completed → implementing |
|
|
364
|
+
|
|
365
|
+
**规划节点 (planning)**:
|
|
366
|
+
| action | 转换 |
|
|
367
|
+
|--------|------|
|
|
368
|
+
| start | pending → planning |
|
|
369
|
+
| complete | planning/monitoring → completed |
|
|
370
|
+
| cancel | planning/monitoring → cancelled |
|
|
371
|
+
| reopen | completed/cancelled → planning |
|
|
372
|
+
|
|
373
|
+
### 上下文管理
|
|
374
|
+
| 工具 | 用途 | 关键参数 |
|
|
375
|
+
|------|------|----------|
|
|
376
|
+
| context_get | 获取聚焦上下文 | workspaceId, nodeId, includeLog?, includeProblem? |
|
|
377
|
+
| context_focus | 切换当前焦点 | workspaceId, nodeId |
|
|
378
|
+
| node_isolate | 设置/取消隔离 | workspaceId, nodeId, isolate |
|
|
379
|
+
| node_reference | 管理引用 | workspaceId, nodeId, targetIdOrPath, action |
|
|
380
|
+
|
|
381
|
+
### 日志与问题
|
|
382
|
+
| 工具 | 用途 | 关键参数 |
|
|
383
|
+
|------|------|----------|
|
|
384
|
+
| log_append | 追加日志 | workspaceId, nodeId?, operator, event |
|
|
385
|
+
| problem_update | 更新问题 | workspaceId, nodeId?, problem, nextStep? |
|
|
386
|
+
| problem_clear | 清除问题 | workspaceId, nodeId? |
|
|
387
|
+
|
|
388
|
+
### 备忘录管理
|
|
389
|
+
| 工具 | 用途 | 关键参数 |
|
|
390
|
+
|------|------|----------|
|
|
391
|
+
| memo_create | 创建备忘录 | workspaceId, title, content, tags? |
|
|
392
|
+
| memo_list | 列出备忘录 | workspaceId, tag? |
|
|
393
|
+
| memo_get | 获取备忘录详情(返回 contentHash) | workspaceId, memoId |
|
|
394
|
+
| memo_update | 更新备忘录(需 contentHash) | workspaceId, memoId, **contentHash**, ... |
|
|
395
|
+
| memo_delete | 删除备忘录 | workspaceId, memoId |
|
|
396
|
+
|
|
397
|
+
**★ memo_update 先读后写机制(重要!)**:
|
|
398
|
+
|
|
399
|
+
更新备忘录前**必须**先调用 \`memo_get\` 获取 \`contentHash\`,然后在 \`memo_update\` 中提供该 hash。这是乐观锁机制,防止并发覆盖。
|
|
400
|
+
|
|
401
|
+
**两种编辑模式**:
|
|
402
|
+
1. **全量替换**:直接提供新值覆盖整个字段
|
|
403
|
+
\`\`\`typescript
|
|
404
|
+
memo_update({
|
|
405
|
+
workspaceId: "ws-xxx",
|
|
406
|
+
memoId: "memo-xxx",
|
|
407
|
+
contentHash: "def456", // 从 memo_get 获取
|
|
408
|
+
title: "新标题",
|
|
409
|
+
content: "新内容"
|
|
410
|
+
})
|
|
411
|
+
\`\`\`
|
|
412
|
+
|
|
413
|
+
2. **精确替换**:使用 \`field\` + \`old_str\` + \`new_str\` 只替换部分内容
|
|
414
|
+
\`\`\`typescript
|
|
415
|
+
memo_update({
|
|
416
|
+
workspaceId: "ws-xxx",
|
|
417
|
+
memoId: "memo-xxx",
|
|
418
|
+
contentHash: "def456",
|
|
419
|
+
field: "content", // 目标字段
|
|
420
|
+
old_str: "旧的部分内容", // 要替换的内容
|
|
421
|
+
new_str: "新的部分内容" // 替换后的内容
|
|
422
|
+
})
|
|
423
|
+
\`\`\`
|
|
424
|
+
|
|
425
|
+
⚠️ **注意**:\`memo_update\` 成功后**不返回新 hash**,如需再次更新,必须重新调用 \`memo_get\` 获取最新 hash。
|
|
426
|
+
|
|
427
|
+
### 派发模式(可选)
|
|
428
|
+
| 工具 | 用途 | 关键参数 |
|
|
429
|
+
|------|------|----------|
|
|
430
|
+
| dispatch_enable | 启用派发模式 | workspaceId |
|
|
431
|
+
| dispatch_disable | 禁用派发模式 | workspaceId, merge? |
|
|
432
|
+
| dispatch_node | 准备派发任务 | workspaceId, nodeId |
|
|
433
|
+
| dispatch_complete | 处理派发结果 | workspaceId, nodeId, success, conclusion? |
|
|
434
|
+
| dispatch_cleanup | 清理派发分支 | workspaceId, cleanupType? |
|
|
435
|
+
|
|
436
|
+
**派发模式说明**:
|
|
437
|
+
- 派发模式允许将执行节点任务交给独立的 subagent 执行
|
|
438
|
+
- 启用后自动创建 Git 分支,支持失败回滚
|
|
439
|
+
- 可配合测试节点实现自动验证
|
|
440
|
+
- 使用 node_create 的 createTestNode 参数创建配对测试节点
|
|
441
|
+
`;
|
|
442
|
+
/**
|
|
443
|
+
* 场景化引导内容 - 针对不同任务场景的规划引导
|
|
444
|
+
*/
|
|
445
|
+
export const SCENARIO_GUIDANCE = {
|
|
446
|
+
feature: `Feature 场景引导:
|
|
447
|
+
1. 先完成信息收集节点,重点收集:
|
|
448
|
+
- 需求澄清:用户角色、功能描述、验收标准
|
|
449
|
+
- 技术调研:相关模块、依赖、接口
|
|
450
|
+
2. 创建技术设计节点(可选创建 alternatives 讨论多方案)
|
|
451
|
+
3. 任务分解时默认 isNeedTest=true`,
|
|
452
|
+
summary: `Summary 场景引导:
|
|
453
|
+
1. 信息收集重点:分析范围、现有结构
|
|
454
|
+
2. 输出总结文档,无需测试`,
|
|
455
|
+
optimize: `Optimize 场景引导:
|
|
456
|
+
1. 信息收集重点:现有实现、当前性能基准
|
|
457
|
+
2. 优化后需对比验证,默认启用测试`,
|
|
458
|
+
debug: `Debug 场景引导:
|
|
459
|
+
1. 信息收集重点:错误现象、复现步骤、日志
|
|
460
|
+
2. 采用假设-验证循环,默认启用回归测试`,
|
|
461
|
+
misc: `Misc 场景:自由规划模式,按需创建节点。`
|
|
462
|
+
};
|
|
463
|
+
/**
|
|
464
|
+
* 获取场景引导内容
|
|
465
|
+
* @param scenario 任务场景类型
|
|
466
|
+
* @returns 场景引导文本
|
|
467
|
+
*/
|
|
468
|
+
export function getScenarioGuidance(scenario) {
|
|
469
|
+
return SCENARIO_GUIDANCE[scenario] || SCENARIO_GUIDANCE.misc;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* 场景化指导
|
|
473
|
+
*/
|
|
474
|
+
export const SCENARIO_GUIDES = {
|
|
475
|
+
// 开始新任务
|
|
476
|
+
"start_task": `
|
|
477
|
+
## 场景:开始新任务
|
|
478
|
+
|
|
479
|
+
### 当用户说"帮我做 XXX"时:
|
|
480
|
+
|
|
481
|
+
**步骤 1:向用户确认任务目标**
|
|
482
|
+
\`\`\`
|
|
483
|
+
向用户确认:
|
|
484
|
+
1. 任务目标是什么?(简明描述)
|
|
485
|
+
2. 这是什么类型的任务?(需求开发/Bug修复/重构/总结)
|
|
486
|
+
\`\`\`
|
|
487
|
+
|
|
488
|
+
**步骤 2:创建工作区**
|
|
489
|
+
\`\`\`typescript
|
|
490
|
+
workspace_init({
|
|
491
|
+
name: "实现用户登录功能",
|
|
492
|
+
goal: "为应用添加用户名密码登录功能"
|
|
493
|
+
// 不需要预先填写 rules 和 docs,信息收集阶段会补充
|
|
494
|
+
})
|
|
495
|
+
\`\`\`
|
|
496
|
+
|
|
497
|
+
**步骤 2.5:告知用户 Web UI 地址**
|
|
498
|
+
workspace_init 返回的 \`webUrl\` 是可视化界面地址,**务必告知用户**。
|
|
499
|
+
|
|
500
|
+
**步骤 3:★ 创建信息收集节点(必须!)**
|
|
501
|
+
\`\`\`typescript
|
|
502
|
+
node_create({
|
|
503
|
+
workspaceId: "ws-xxx",
|
|
504
|
+
parentId: "root",
|
|
505
|
+
type: "planning",
|
|
506
|
+
role: "info_collection", // 关键!标记为信息收集节点
|
|
507
|
+
title: "项目信息收集",
|
|
508
|
+
requirement: "收集项目结构、开发规范、相关文档等信息"
|
|
509
|
+
})
|
|
510
|
+
\`\`\`
|
|
511
|
+
|
|
512
|
+
**步骤 4:在信息收集节点中执行调研**
|
|
513
|
+
- 扫描项目根目录,了解结构
|
|
514
|
+
- 查找文档文件夹、规则文件夹
|
|
515
|
+
- 阅读 README 和配置文件
|
|
516
|
+
- 收集环境变量、路径配置等
|
|
517
|
+
|
|
518
|
+
**步骤 5:完成信息收集,归档到工作区**
|
|
519
|
+
\`\`\`typescript
|
|
520
|
+
node_transition({
|
|
521
|
+
workspaceId: "ws-xxx",
|
|
522
|
+
nodeId: "info-collection-node",
|
|
523
|
+
action: "complete",
|
|
524
|
+
conclusion: \`
|
|
525
|
+
## 规则
|
|
526
|
+
- 使用 TypeScript 开发
|
|
527
|
+
- 遵循 ESLint 规范
|
|
528
|
+
- 测试覆盖率 > 80%
|
|
529
|
+
|
|
530
|
+
## 文档
|
|
531
|
+
- ./assets/API.md: API 设计文档
|
|
532
|
+
- ./assets/架构.md: 系统架构说明
|
|
533
|
+
\`
|
|
534
|
+
})
|
|
535
|
+
// 系统会自动将规则和文档追加到工作区
|
|
536
|
+
\`\`\`
|
|
537
|
+
|
|
538
|
+
**步骤 6:返回根节点,制定执行计划**
|
|
539
|
+
信息收集完成后,根节点可以 start,开始规划具体任务。
|
|
540
|
+
创建子节点分解任务。
|
|
541
|
+
|
|
542
|
+
**步骤 7:★★★ 展示计划并等待用户确认 ★★★**
|
|
543
|
+
\`\`\`
|
|
544
|
+
向用户展示计划:
|
|
545
|
+
> "我制定了以下执行计划:
|
|
546
|
+
> 1. [子节点1标题] - [需求简述]
|
|
547
|
+
> 2. [子节点2标题] - [需求简述]
|
|
548
|
+
> ...
|
|
549
|
+
>
|
|
550
|
+
> 确认后我会开始执行。需要调整吗?"
|
|
551
|
+
|
|
552
|
+
等待用户确认("好"、"可以"、"继续"等)
|
|
553
|
+
如用户有异议 → 调整计划(删除/修改/新增子节点)
|
|
554
|
+
\`\`\`
|
|
555
|
+
|
|
556
|
+
**步骤 8:用户确认后开始执行**
|
|
557
|
+
开始执行第一个子节点。
|
|
558
|
+
|
|
559
|
+
**引导话术**:
|
|
560
|
+
> "好的,我来帮你管理这个任务。让我先创建工作区,然后收集一下项目信息..."
|
|
561
|
+
`,
|
|
562
|
+
// 继续任务
|
|
563
|
+
"resume_task": `
|
|
564
|
+
## 场景:继续之前的任务
|
|
565
|
+
|
|
566
|
+
### 当用户说"继续之前的任务"时:
|
|
567
|
+
|
|
568
|
+
**步骤 1:查看工作区列表**
|
|
569
|
+
\`\`\`typescript
|
|
570
|
+
workspace_list({ status: "active" })
|
|
571
|
+
\`\`\`
|
|
572
|
+
|
|
573
|
+
**步骤 2:如果有多个,让用户选择**
|
|
574
|
+
|
|
575
|
+
**步骤 3:获取工作区状态**
|
|
576
|
+
\`\`\`typescript
|
|
577
|
+
workspace_get({ workspaceId: "xxx" })
|
|
578
|
+
\`\`\`
|
|
579
|
+
|
|
580
|
+
**步骤 4:找到当前焦点或最近活跃的节点**
|
|
581
|
+
\`\`\`typescript
|
|
582
|
+
context_get({ workspaceId: "xxx", nodeId: "current-focus", includeLog: true })
|
|
583
|
+
\`\`\`
|
|
584
|
+
|
|
585
|
+
**步骤 5:恢复执行**
|
|
586
|
+
|
|
587
|
+
**引导话术**:
|
|
588
|
+
> "让我看看之前的进度..."
|
|
589
|
+
> "找到了,上次我们在处理 [节点名称],当前状态是 [状态]。"
|
|
590
|
+
> "上次记录的问题是:[问题内容]"
|
|
591
|
+
> "我们继续吗?"
|
|
592
|
+
`,
|
|
593
|
+
// 会话恢复(从摘要恢复)
|
|
594
|
+
"session_restore": `
|
|
595
|
+
## 场景:会话从摘要恢复
|
|
596
|
+
|
|
597
|
+
### 当会话因上下文过长被截断,从摘要恢复时:
|
|
598
|
+
|
|
599
|
+
**重要**:摘要中的工作区 ID 可能已经失效(工作区被删除/重建、环境变化等)。
|
|
600
|
+
必须先验证 ID 是否有效,再进行后续操作。
|
|
601
|
+
|
|
602
|
+
**步骤 1:验证工作区 ID**
|
|
603
|
+
\`\`\`typescript
|
|
604
|
+
// 先尝试获取摘要中的工作区
|
|
605
|
+
workspace_get({ workspaceId: "摘要中的ID" })
|
|
606
|
+
\`\`\`
|
|
607
|
+
|
|
608
|
+
**步骤 2:如果 ID 无效(返回 WORKSPACE_NOT_FOUND)**
|
|
609
|
+
|
|
610
|
+
错误响应会**自动包含**活跃工作区列表,无需额外调用 workspace_list():
|
|
611
|
+
\`\`\`json
|
|
612
|
+
{
|
|
613
|
+
"error": {
|
|
614
|
+
"code": "WORKSPACE_NOT_FOUND",
|
|
615
|
+
"message": "工作区 \"ws-xxx\" 不存在",
|
|
616
|
+
"availableWorkspaces": [
|
|
617
|
+
{ "id": "ws-yyy", "name": "ZeroWorkspace 查缺补漏", "status": "active" },
|
|
618
|
+
...
|
|
619
|
+
]
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
\`\`\`
|
|
623
|
+
|
|
624
|
+
直接从错误响应的 \`availableWorkspaces\` 中通过名称或项目路径匹配正确的工作区。
|
|
625
|
+
|
|
626
|
+
**步骤 3:继续执行**
|
|
627
|
+
使用匹配到的正确 ID 继续之前的任务。
|
|
628
|
+
|
|
629
|
+
**错误处理原则**:
|
|
630
|
+
- WORKSPACE_NOT_FOUND 错误响应已包含可用工作区列表,直接使用
|
|
631
|
+
- 通过名称或 projectRoot 匹配摘要中的工作区信息
|
|
632
|
+
- 如果无法找到匹配的工作区,告知用户情况
|
|
633
|
+
|
|
634
|
+
**示例**:
|
|
635
|
+
摘要显示工作区 "ZeroWorkspace 查缺补漏" (ID: ws-xxx)
|
|
636
|
+
1. 尝试任意工作区操作 → 返回 WORKSPACE_NOT_FOUND
|
|
637
|
+
2. 从 error.availableWorkspaces 中找到名称匹配的 ws-yyy
|
|
638
|
+
3. 使用 ws-yyy 继续执行
|
|
639
|
+
`,
|
|
640
|
+
// 任务受阻
|
|
641
|
+
"task_blocked": `
|
|
642
|
+
## 场景:任务遇到问题
|
|
643
|
+
|
|
644
|
+
### 当执行中遇到无法解决的问题时:
|
|
645
|
+
|
|
646
|
+
**步骤 1:记录问题**
|
|
647
|
+
\`\`\`typescript
|
|
648
|
+
problem_update({
|
|
649
|
+
workspaceId: "xxx",
|
|
650
|
+
nodeId: "current-node",
|
|
651
|
+
problem: "无法找到 ModuleFactory 的定义,可能需要先配置开发环境",
|
|
652
|
+
nextStep: "需要用户确认项目依赖是否已安装"
|
|
653
|
+
})
|
|
654
|
+
\`\`\`
|
|
655
|
+
|
|
656
|
+
**步骤 2:记录日志**
|
|
657
|
+
\`\`\`typescript
|
|
658
|
+
log_append({
|
|
659
|
+
workspaceId: "xxx",
|
|
660
|
+
nodeId: "current-node",
|
|
661
|
+
operator: "AI",
|
|
662
|
+
event: "执行受阻:缺少 ModuleFactory 定义,等待用户确认"
|
|
663
|
+
})
|
|
664
|
+
\`\`\`
|
|
665
|
+
|
|
666
|
+
**步骤 3:向用户报告**
|
|
667
|
+
|
|
668
|
+
**引导话术**:
|
|
669
|
+
> "在执行过程中遇到了一个问题:[问题描述]
|
|
670
|
+
>
|
|
671
|
+
> 我的建议是:[下一步建议]
|
|
672
|
+
>
|
|
673
|
+
> 需要你确认:[需要用户提供的信息]
|
|
674
|
+
>
|
|
675
|
+
> 这个问题已经记录在任务中,等解决后我们可以继续。"
|
|
676
|
+
`,
|
|
677
|
+
// 任务分解(原"分裂任务")
|
|
678
|
+
"split_task": `
|
|
679
|
+
## 场景:需要分解任务
|
|
680
|
+
|
|
681
|
+
### 规划节点分解任务
|
|
682
|
+
|
|
683
|
+
规划节点的核心职责是分析任务并创建子节点。
|
|
684
|
+
|
|
685
|
+
**何时创建子节点**:
|
|
686
|
+
| 条件 | 子节点类型 |
|
|
687
|
+
|------|-----------|
|
|
688
|
+
| 简单具体任务 | execution |
|
|
689
|
+
| 复杂多步任务 | planning |
|
|
690
|
+
| 并行探索多条路径 | 多个平级节点 |
|
|
691
|
+
| 需要验证假设 | execution |
|
|
692
|
+
| 需要改代码 | execution |
|
|
693
|
+
|
|
694
|
+
### 分解流程(三步法):
|
|
695
|
+
|
|
696
|
+
**步骤 1:先记录当前分析结论(关键!)**
|
|
697
|
+
\`\`\`typescript
|
|
698
|
+
// 在创建子节点前,先把当前分析记录到规划节点
|
|
699
|
+
node_update({
|
|
700
|
+
workspaceId: "xxx",
|
|
701
|
+
nodeId: "current-planning-node",
|
|
702
|
+
note: "分析发现:问题出在 UserModule 的类型定义缺失。需要创建类型文件后才能继续。"
|
|
703
|
+
})
|
|
704
|
+
\`\`\`
|
|
705
|
+
|
|
706
|
+
**步骤 2:创建子节点**
|
|
707
|
+
\`\`\`typescript
|
|
708
|
+
node_create({
|
|
709
|
+
workspaceId: "xxx",
|
|
710
|
+
parentId: "current-planning-node",
|
|
711
|
+
type: "execution", // 具体任务用 execution
|
|
712
|
+
title: "添加类型定义文件",
|
|
713
|
+
requirement: "为 UserModule 创建 TypeScript 类型定义",
|
|
714
|
+
docs: [{ path: "./src/types/", description: "类型定义目录" }]
|
|
715
|
+
})
|
|
716
|
+
\`\`\`
|
|
717
|
+
|
|
718
|
+
**步骤 3:执行子节点**
|
|
719
|
+
|
|
720
|
+
### 执行节点遇到复杂问题时
|
|
721
|
+
|
|
722
|
+
执行节点不能创建子节点。当任务过于复杂时:
|
|
723
|
+
|
|
724
|
+
\`\`\`
|
|
725
|
+
执行节点发现任务复杂
|
|
726
|
+
↓
|
|
727
|
+
fail 并说明原因
|
|
728
|
+
↓
|
|
729
|
+
返回父规划节点
|
|
730
|
+
↓
|
|
731
|
+
父节点分析后创建更细粒度的子节点
|
|
732
|
+
\`\`\`
|
|
733
|
+
|
|
734
|
+
\`\`\`typescript
|
|
735
|
+
// 执行节点标记失败
|
|
736
|
+
node_transition({
|
|
737
|
+
workspaceId: "xxx",
|
|
738
|
+
nodeId: "execution-node",
|
|
739
|
+
action: "fail",
|
|
740
|
+
conclusion: "任务过于复杂,需要分解为:1. 创建类型定义 2. 修复引用 3. 测试验证"
|
|
741
|
+
})
|
|
742
|
+
|
|
743
|
+
// 父规划节点创建更细粒度的子节点
|
|
744
|
+
node_create({ type: "execution", title: "创建类型定义", ... })
|
|
745
|
+
node_create({ type: "execution", title: "修复引用", ... })
|
|
746
|
+
node_create({ type: "execution", title: "测试验证", ... })
|
|
747
|
+
\`\`\`
|
|
748
|
+
|
|
749
|
+
**引导话术**:
|
|
750
|
+
> "经过分析,我发现这个任务需要分解为以下步骤:
|
|
751
|
+
> 1. [步骤1]
|
|
752
|
+
> 2. [步骤2]
|
|
753
|
+
>
|
|
754
|
+
> 现在创建子任务来逐个处理。"
|
|
755
|
+
`,
|
|
756
|
+
// 完成任务
|
|
757
|
+
"complete_task": `
|
|
758
|
+
## 场景:完成任务
|
|
759
|
+
|
|
760
|
+
### 当节点任务完成时:
|
|
761
|
+
|
|
762
|
+
**步骤 1:更新节点结论**
|
|
763
|
+
\`\`\`typescript
|
|
764
|
+
node_update({
|
|
765
|
+
workspaceId: "xxx",
|
|
766
|
+
nodeId: "current-node",
|
|
767
|
+
note: "实际采用了策略模式实现,比原计划的工厂模式更灵活"
|
|
768
|
+
})
|
|
769
|
+
\`\`\`
|
|
770
|
+
|
|
771
|
+
**步骤 2:转换状态**
|
|
772
|
+
\`\`\`typescript
|
|
773
|
+
// 如果需要验证
|
|
774
|
+
node_transition({
|
|
775
|
+
workspaceId: "xxx",
|
|
776
|
+
nodeId: "current-node",
|
|
777
|
+
action: "submit",
|
|
778
|
+
reason: "代码已完成,等待测试验证"
|
|
779
|
+
})
|
|
780
|
+
|
|
781
|
+
// 如果可以直接完成
|
|
782
|
+
node_transition({
|
|
783
|
+
workspaceId: "xxx",
|
|
784
|
+
nodeId: "current-node",
|
|
785
|
+
action: "complete",
|
|
786
|
+
conclusion: "成功实现用户登录功能,包括表单验证和JWT认证"
|
|
787
|
+
})
|
|
788
|
+
\`\`\`
|
|
789
|
+
|
|
790
|
+
**步骤 3:检查父节点**
|
|
791
|
+
如果当前是子节点,完成后应返回父节点继续。
|
|
792
|
+
|
|
793
|
+
**引导话术**:
|
|
794
|
+
> "这个任务已经完成了!
|
|
795
|
+
>
|
|
796
|
+
> **完成内容**:[结论摘要]
|
|
797
|
+
>
|
|
798
|
+
> **产出**:
|
|
799
|
+
> - [具体产出列表]
|
|
800
|
+
>
|
|
801
|
+
> [如果有父任务] 现在回到上级任务继续..."
|
|
802
|
+
`,
|
|
803
|
+
// 查看进度
|
|
804
|
+
"check_progress": `
|
|
805
|
+
## 场景:查看任务进度
|
|
806
|
+
|
|
807
|
+
### 当用户询问进度时:
|
|
808
|
+
|
|
809
|
+
**获取工作区状态**
|
|
810
|
+
\`\`\`typescript
|
|
811
|
+
workspace_get({ workspaceId: "xxx" })
|
|
812
|
+
\`\`\`
|
|
813
|
+
|
|
814
|
+
**输出格式示例**:
|
|
815
|
+
\`\`\`
|
|
816
|
+
## 工作区:实现用户登录功能
|
|
817
|
+
|
|
818
|
+
**状态**:进行中
|
|
819
|
+
**当前焦点**:后端API实现
|
|
820
|
+
|
|
821
|
+
### 节点树
|
|
822
|
+
\`\`\`
|
|
823
|
+
[●] 根节点 - 实现用户登录功能
|
|
824
|
+
├─[●] 前端表单 (completed)
|
|
825
|
+
├─[◐] 后端API实现 (implementing) ← 当前
|
|
826
|
+
│ ├─[●] 数据库设计 (completed)
|
|
827
|
+
│ └─[○] JWT集成 (pending)
|
|
828
|
+
└─[○] 集成测试 (pending)
|
|
829
|
+
\`\`\`
|
|
830
|
+
|
|
831
|
+
**当前问题**:无
|
|
832
|
+
|
|
833
|
+
**最近日志**:
|
|
834
|
+
- 10:30 [AI] 完成数据库表设计
|
|
835
|
+
- 10:35 [AI] 开始实现登录接口
|
|
836
|
+
\`\`\`
|
|
837
|
+
`,
|
|
838
|
+
// 文档引用管理
|
|
839
|
+
"docs_management": `
|
|
840
|
+
## 场景:文档引用管理
|
|
841
|
+
|
|
842
|
+
### 文档 vs 规则
|
|
843
|
+
|
|
844
|
+
| 类型 | 文档 (docs) | 规则 (rules) |
|
|
845
|
+
|------|-------------|--------------|
|
|
846
|
+
| 性质 | 可读写、动态变化 | 只读、全局固定 |
|
|
847
|
+
| 内容 | md 文档、重要代码文件 | md 规则文件、对话中补充的临时规则 |
|
|
848
|
+
| 存储 | 工作区(全局索引)+ 节点(当前需要) | 仅工作区 |
|
|
849
|
+
| 生命周期 | 可添加、可过期 | 创建时设定,不变 |
|
|
850
|
+
|
|
851
|
+
### 核心原则:显式派发,不自动继承
|
|
852
|
+
|
|
853
|
+
\`\`\`
|
|
854
|
+
父节点 (docs: [A, B, C])
|
|
855
|
+
│
|
|
856
|
+
│ node_create(docs: [A, B]) ← 显式指定派发哪些
|
|
857
|
+
↓
|
|
858
|
+
子节点 (docs: [A, B]) ← 只有被派发的文档
|
|
859
|
+
│
|
|
860
|
+
│ 执行过程中发现信息不足
|
|
861
|
+
↓
|
|
862
|
+
子节点标记失败 → 返回父节点 → 补充信息/文档 → 重新派发
|
|
863
|
+
\`\`\`
|
|
864
|
+
|
|
865
|
+
### 文档查找优先级
|
|
866
|
+
|
|
867
|
+
当节点需要文档时:
|
|
868
|
+
1. **先查工作区全局索引**(Workspace.md ## 文档)
|
|
869
|
+
2. **没有 → 搜索项目文件系统**
|
|
870
|
+
3. **搜索结果 → 存入工作区索引 + 引用到节点**
|
|
871
|
+
|
|
872
|
+
### 创建子节点时派发文档
|
|
873
|
+
|
|
874
|
+
\`\`\`typescript
|
|
875
|
+
// 创建子节点时显式派发文档
|
|
876
|
+
node_create({
|
|
877
|
+
workspaceId: "xxx",
|
|
878
|
+
parentId: "parent-node",
|
|
879
|
+
type: "execution", // 或 "planning"
|
|
880
|
+
title: "实现登录 API",
|
|
881
|
+
requirement: "实现用户名密码登录接口",
|
|
882
|
+
docs: [
|
|
883
|
+
{ path: "./assets/api-spec.md", description: "API 规范文档" },
|
|
884
|
+
{ path: "./src/auth/types.ts", description: "认证类型定义" }
|
|
885
|
+
]
|
|
886
|
+
})
|
|
887
|
+
\`\`\`
|
|
888
|
+
|
|
889
|
+
### 文档生命周期
|
|
890
|
+
|
|
891
|
+
- **添加时机**:任务开始、需求变化时
|
|
892
|
+
- **过期时机**:任务完成后评估,调用 node_reference(action="expire")
|
|
893
|
+
- **工作区索引**:记录所有使用过的文档(除被删除的),作为查找优先级
|
|
894
|
+
|
|
895
|
+
### 信息不足时的处理
|
|
896
|
+
|
|
897
|
+
当子节点因信息不足而无法完成时:
|
|
898
|
+
1. 子节点标记为 failed,conclusion 说明缺少什么信息
|
|
899
|
+
2. 返回父节点补充信息/文档
|
|
900
|
+
3. 重新创建或 retry 子节点,带上补充的文档
|
|
901
|
+
`,
|
|
902
|
+
// 用户不熟悉
|
|
903
|
+
"user_guide": `
|
|
904
|
+
## 场景:用户不熟悉 ZeroWorkspace
|
|
905
|
+
|
|
906
|
+
### 当用户首次使用或询问时:
|
|
907
|
+
|
|
908
|
+
**简单介绍**:
|
|
909
|
+
> "ZeroWorkspace 是一个帮助我们管理复杂任务的工具。
|
|
910
|
+
>
|
|
911
|
+
> **它能做什么**:
|
|
912
|
+
> - 📋 把大任务拆分成小步骤
|
|
913
|
+
> - 🔍 追踪每个步骤的进度
|
|
914
|
+
> - 📝 记录执行过程,方便回顾
|
|
915
|
+
> - 🔄 遇到问题时可以回退和重试
|
|
916
|
+
>
|
|
917
|
+
> **基本概念**:
|
|
918
|
+
> - **工作区**:一个完整任务的容器
|
|
919
|
+
> - **节点**:任务的每个步骤
|
|
920
|
+
> - **状态**:pending(待做)→ implementing(执行中)→ completed(完成)
|
|
921
|
+
>
|
|
922
|
+
> **你只需要**:
|
|
923
|
+
> 1. 告诉我你要做什么
|
|
924
|
+
> 2. 确认任务计划
|
|
925
|
+
> 3. 让我执行,有问题时我会询问你
|
|
926
|
+
>
|
|
927
|
+
> 需要我演示一下吗?"
|
|
928
|
+
|
|
929
|
+
**演示流程**:
|
|
930
|
+
1. 创建一个简单的示例工作区
|
|
931
|
+
2. 展示节点创建和状态流转
|
|
932
|
+
3. 演示日志记录
|
|
933
|
+
4. 删除示例工作区
|
|
934
|
+
`,
|
|
935
|
+
// 派发模式
|
|
936
|
+
"dispatch_mode": `
|
|
937
|
+
## 场景:使用派发模式
|
|
938
|
+
|
|
939
|
+
### 什么是派发模式?
|
|
940
|
+
|
|
941
|
+
派发模式允许将执行节点任务交给独立的 subagent 执行。提供两种模式:
|
|
942
|
+
|
|
943
|
+
| 模式 | 定位 | 推荐度 | 特性 |
|
|
944
|
+
|------|------|--------|------|
|
|
945
|
+
| **无 Git 模式** | 标准模式 | ✅ 推荐(默认) | 仅更新元数据,不影响代码,安全 |
|
|
946
|
+
| **Git 模式** | 实验功能 | ⚠️ 谨慎使用 | 自动分支、提交、回滚,有一定风险 |
|
|
947
|
+
|
|
948
|
+
**共同特性**:
|
|
949
|
+
- **自动测试验证**:配对测试节点验证执行结果
|
|
950
|
+
- **任务隔离**:将任务交给专门的 subagent 执行
|
|
951
|
+
- **并发保护**:同一项目同时只允许一个工作区启用派发
|
|
952
|
+
|
|
953
|
+
**模式差异**:
|
|
954
|
+
|
|
955
|
+
| 场景 | 无 Git 模式 | Git 模式 |
|
|
956
|
+
|------|------------|----------|
|
|
957
|
+
| 启用派发 | 仅更新配置 | 创建派发分支 |
|
|
958
|
+
| 有未提交内容 | 警告用户手动备份 | 自动创建备份分支 |
|
|
959
|
+
| 执行任务 | 直接在当前目录执行 | 在派发分支执行 |
|
|
960
|
+
| 任务完成 | 记录时间戳 | 自动 commit |
|
|
961
|
+
| 测试失败 | 无法回滚,需手动处理 | 自动 git reset 回滚 |
|
|
962
|
+
| 禁用派发 | 仅清理配置 | 4 种合并策略 |
|
|
963
|
+
|
|
964
|
+
### 何时启用派发?
|
|
965
|
+
|
|
966
|
+
系统会在首个执行节点启动时询问(actionRequired: ask_dispatch)。
|
|
967
|
+
|
|
968
|
+
**模式选择建议**:
|
|
969
|
+
|
|
970
|
+
| 场景 | 推荐模式 | 原因 |
|
|
971
|
+
|------|----------|------|
|
|
972
|
+
| 简单任务 | 无 Git 模式 | 轻量、安全、无副作用 |
|
|
973
|
+
| 需要测试验证 | 无 Git 模式 | 测试验证不需要 git 分支隔离 |
|
|
974
|
+
| 需要失败回滚 | Git 模式 | 自动回滚机制 |
|
|
975
|
+
| 非 git 项目 | 无 Git 模式(自动) | 唯一可用模式 |
|
|
976
|
+
| 学习探索 | 无 Git 模式 | 降低出错风险 |
|
|
977
|
+
|
|
978
|
+
**无 Git 模式限制**:
|
|
979
|
+
- ⚠️ 测试失败时无法自动回滚(需手动恢复代码)
|
|
980
|
+
- ⚠️ 建议执行前手动备份重要文件
|
|
981
|
+
- ⚠️ 并发检测通过配置文件(而非 git 分支)
|
|
982
|
+
|
|
983
|
+
### 派发流程
|
|
984
|
+
|
|
985
|
+
\`\`\`
|
|
986
|
+
1. 用户确认启用派发
|
|
987
|
+
↓
|
|
988
|
+
dispatch_enable({ workspaceId, useGit: true/false })
|
|
989
|
+
- useGit: false(默认)→ 无 Git 模式
|
|
990
|
+
- useGit: true → Git 模式(需要项目是 git 仓库)
|
|
991
|
+
↓
|
|
992
|
+
2. 创建执行节点(可带配对测试节点)
|
|
993
|
+
node_create({
|
|
994
|
+
type: "execution",
|
|
995
|
+
createTestNode: { title: "验证xxx", requirement: "验收标准" }
|
|
996
|
+
})
|
|
997
|
+
↓
|
|
998
|
+
3. 启动执行节点
|
|
999
|
+
node_transition({ action: "start" })
|
|
1000
|
+
↓
|
|
1001
|
+
4. 准备派发
|
|
1002
|
+
dispatch_node({ workspaceId, nodeId })
|
|
1003
|
+
→ 返回 actionRequired: { type: "dispatch_task", prompt: "..." }
|
|
1004
|
+
→ 返回 startMarker(Git 模式=commit hash,无 Git 模式=时间戳)
|
|
1005
|
+
↓
|
|
1006
|
+
5. 调用 Task tool 执行
|
|
1007
|
+
Task({ subagent_type: "zero-executor", prompt: "..." })
|
|
1008
|
+
↓
|
|
1009
|
+
6. 处理执行结果
|
|
1010
|
+
dispatch_complete({ success: true/false, conclusion: "..." })
|
|
1011
|
+
→ 成功时返回 endMarker(Git 模式=commit hash,无 Git 模式=时间戳)
|
|
1012
|
+
↓
|
|
1013
|
+
7. 如果有测试节点,自动触发测试
|
|
1014
|
+
↓
|
|
1015
|
+
8. 完成后禁用派发
|
|
1016
|
+
dispatch_disable({ workspaceId })
|
|
1017
|
+
→ 返回 actionRequired: { type: "dispatch_complete_choice", ... }
|
|
1018
|
+
⚠️ **必须询问用户**:使用 AskUserQuestion 让用户选择:
|
|
1019
|
+
- Git 模式:合并策略(sequential/squash/cherry-pick/skip)、是否保留分支
|
|
1020
|
+
- 无 Git 模式:确认禁用即可
|
|
1021
|
+
dispatch_disable_execute({ workspaceId, mergeStrategy, ... }) // 参数来自用户选择
|
|
1022
|
+
\`\`\`
|
|
1023
|
+
|
|
1024
|
+
### 测试节点验证
|
|
1025
|
+
|
|
1026
|
+
\`\`\`typescript
|
|
1027
|
+
// 创建执行节点时同时创建测试节点
|
|
1028
|
+
node_create({
|
|
1029
|
+
workspaceId: "xxx",
|
|
1030
|
+
parentId: "parent",
|
|
1031
|
+
type: "execution",
|
|
1032
|
+
title: "实现登录功能",
|
|
1033
|
+
requirement: "实现用户名密码登录",
|
|
1034
|
+
createTestNode: {
|
|
1035
|
+
title: "验证登录功能",
|
|
1036
|
+
requirement: "1. 正确用户名密码能登录成功\\n2. 错误密码返回401"
|
|
1037
|
+
}
|
|
1038
|
+
})
|
|
1039
|
+
// 返回 { nodeId: "exec-xxx", testNodeId: "test-xxx" }
|
|
1040
|
+
\`\`\`
|
|
1041
|
+
|
|
1042
|
+
### 失败处理
|
|
1043
|
+
|
|
1044
|
+
当 dispatch_complete 传入 success: false 时:
|
|
1045
|
+
- 节点状态变为 failed,dispatch.status 变为 failed
|
|
1046
|
+
- **不会自动回滚**,由母节点决定下一步操作
|
|
1047
|
+
- 母节点可以通过 context_get 读取子节点状态来决策
|
|
1048
|
+
|
|
1049
|
+
**Git 模式下的手动回滚**:
|
|
1050
|
+
- 如需回滚,母节点可使用 startMarker(commit hash)执行 git reset
|
|
1051
|
+
- 或直接重新派发任务
|
|
1052
|
+
|
|
1053
|
+
**无 Git 模式**:
|
|
1054
|
+
- 需要手动恢复代码
|
|
1055
|
+
- 可通过 startMarker(时间戳)追溯执行时间点
|
|
1056
|
+
|
|
1057
|
+
### 常见问题
|
|
1058
|
+
|
|
1059
|
+
**Q: 不启用派发模式也能正常使用吗?**
|
|
1060
|
+
A: 可以。派发模式是可选功能,普通模式下 AI 直接执行任务。
|
|
1061
|
+
|
|
1062
|
+
**Q: 派发失败会影响代码吗?**
|
|
1063
|
+
A:
|
|
1064
|
+
- Git 模式:不会。在独立分支执行,失败会回滚,只有测试通过才会合并。
|
|
1065
|
+
- 无 Git 模式:可能会。直接在当前目录执行,失败需手动恢复。
|
|
1066
|
+
|
|
1067
|
+
**Q: 如何选择模式?**
|
|
1068
|
+
A: 优先使用无 Git 模式(安全、简单)。只在明确需要自动回滚时使用 Git 模式。
|
|
1069
|
+
|
|
1070
|
+
**Q: 启用后可以切换模式吗?**
|
|
1071
|
+
A: 不可以。派发启用后模式不可变更,如需切换必须先 disable 再重新 enable。
|
|
1072
|
+
`,
|
|
1073
|
+
// 重开任务/追加需求
|
|
1074
|
+
"reopen_task": `
|
|
1075
|
+
## 场景:重开任务或追加需求
|
|
1076
|
+
|
|
1077
|
+
### 当需要在已完成的工作区/节点上追加需求时:
|
|
1078
|
+
|
|
1079
|
+
**核心原则**:先了解现有结构,再决定是调整还是新建。
|
|
1080
|
+
|
|
1081
|
+
**步骤 1:重开节点**
|
|
1082
|
+
\`\`\`typescript
|
|
1083
|
+
node_transition({
|
|
1084
|
+
workspaceId: "xxx",
|
|
1085
|
+
nodeId: "target-node",
|
|
1086
|
+
action: "reopen"
|
|
1087
|
+
})
|
|
1088
|
+
\`\`\`
|
|
1089
|
+
|
|
1090
|
+
**步骤 2:★★★ 必须先查看现有结构 ★★★**
|
|
1091
|
+
|
|
1092
|
+
当返回 \`actionRequired: { type: "review_structure" }\` 时,你必须:
|
|
1093
|
+
\`\`\`typescript
|
|
1094
|
+
// 查看节点树
|
|
1095
|
+
node_list({ workspaceId: "xxx", rootId: "target-node" })
|
|
1096
|
+
|
|
1097
|
+
// 或查看工作区状态
|
|
1098
|
+
workspace_get({ workspaceId: "xxx" })
|
|
1099
|
+
\`\`\`
|
|
1100
|
+
|
|
1101
|
+
**步骤 3:评估并决定**
|
|
1102
|
+
|
|
1103
|
+
| 情况 | 正确做法 | 错误做法 |
|
|
1104
|
+
|------|----------|----------|
|
|
1105
|
+
| 原有节点可复用 | node_update 修改需求后 reopen | 创建重复的新节点 |
|
|
1106
|
+
| 需要补充子任务 | 在原结构上添加新节点 | 重建整个结构 |
|
|
1107
|
+
| 原结构不适用 | 先 cancel/delete 旧节点再创建 | 保留旧节点又创建新的 |
|
|
1108
|
+
|
|
1109
|
+
**步骤 4:向用户说明**
|
|
1110
|
+
\`\`\`
|
|
1111
|
+
"我查看了现有结构,发现:
|
|
1112
|
+
- 已有 X 个子节点,其中 Y 个已完成
|
|
1113
|
+
- [节点A] 可以复用,只需补充 XXX
|
|
1114
|
+
- 需要新增一个节点处理 YYY
|
|
1115
|
+
|
|
1116
|
+
是否按此方案调整?"
|
|
1117
|
+
\`\`\`
|
|
1118
|
+
|
|
1119
|
+
**禁止行为**:
|
|
1120
|
+
- ❌ reopen 后不看结构直接创建新节点
|
|
1121
|
+
- ❌ 创建与现有节点功能重复的新节点
|
|
1122
|
+
- ❌ 忽略 actionRequired 的 review_structure 指令
|
|
1123
|
+
`
|
|
1124
|
+
};
|
|
1125
|
+
/**
|
|
1126
|
+
* 用户引导话术模板
|
|
1127
|
+
*/
|
|
1128
|
+
export const USER_PROMPTS = {
|
|
1129
|
+
// 首次使用引导
|
|
1130
|
+
welcome: `欢迎使用 ZeroWorkspace!我可以帮你管理开发任务。
|
|
1131
|
+
|
|
1132
|
+
你可以:
|
|
1133
|
+
- 说"帮我做 XXX"开始一个新任务
|
|
1134
|
+
- 说"继续之前的任务"恢复工作
|
|
1135
|
+
- 说"查看进度"了解当前状态
|
|
1136
|
+
- 说"这是什么"了解更多
|
|
1137
|
+
|
|
1138
|
+
有什么可以帮你的?`,
|
|
1139
|
+
// 确认创建工作区
|
|
1140
|
+
confirmWorkspace: (name, goal) => `
|
|
1141
|
+
我来确认一下任务信息:
|
|
1142
|
+
|
|
1143
|
+
**任务名称**:${name}
|
|
1144
|
+
**目标**:${goal}
|
|
1145
|
+
|
|
1146
|
+
确认后我会创建工作区并制定执行计划。可以继续吗?`,
|
|
1147
|
+
// 任务计划确认
|
|
1148
|
+
confirmPlan: (tasks) => `
|
|
1149
|
+
根据任务目标,我制定了以下计划:
|
|
1150
|
+
|
|
1151
|
+
${tasks.map((t, i) => `${i + 1}. ${t}`).join('\n')}
|
|
1152
|
+
|
|
1153
|
+
确认后我会开始执行。需要调整吗?`,
|
|
1154
|
+
// 状态报告
|
|
1155
|
+
statusReport: (status, current, problem) => `
|
|
1156
|
+
**当前状态**:${status}
|
|
1157
|
+
**正在处理**:${current}
|
|
1158
|
+
${problem ? `**遇到问题**:${problem}` : ''}
|
|
1159
|
+
|
|
1160
|
+
继续执行吗?`,
|
|
1161
|
+
// 完成报告
|
|
1162
|
+
completionReport: (conclusion, outputs) => `
|
|
1163
|
+
✅ 任务完成!
|
|
1164
|
+
|
|
1165
|
+
**结论**:${conclusion}
|
|
1166
|
+
|
|
1167
|
+
**产出**:
|
|
1168
|
+
${outputs.map(o => `- ${o}`).join('\n')}
|
|
1169
|
+
|
|
1170
|
+
还有其他需要吗?`
|
|
1171
|
+
};
|
|
1172
|
+
/**
|
|
1173
|
+
* 服务器状态与自检指南
|
|
1174
|
+
*/
|
|
1175
|
+
export const SERVER_STATUS_GUIDE = `
|
|
1176
|
+
# 服务器状态与自检
|
|
1177
|
+
|
|
1178
|
+
## 端口配置
|
|
1179
|
+
- **正式环境**: 19540
|
|
1180
|
+
- **开发环境** (ZERO_DEV=true): 19541
|
|
1181
|
+
|
|
1182
|
+
## CLI 命令
|
|
1183
|
+
用户可通过以下命令管理 WebUI 服务:
|
|
1184
|
+
\`\`\`bash
|
|
1185
|
+
zero-workspace webui # 启动服务
|
|
1186
|
+
zero-workspace webui stop # 停止服务
|
|
1187
|
+
zero-workspace webui restart # 重启服务
|
|
1188
|
+
zero-workspace webui status # 查看状态
|
|
1189
|
+
\`\`\`
|
|
1190
|
+
|
|
1191
|
+
## 常见问题自检
|
|
1192
|
+
|
|
1193
|
+
### 1. 服务未启动
|
|
1194
|
+
**现象**: API 调用失败、超时
|
|
1195
|
+
**自检**:
|
|
1196
|
+
- 检查返回值中是否有错误信息
|
|
1197
|
+
- 建议用户执行 \`zero-workspace webui status\` 查看服务状态
|
|
1198
|
+
|
|
1199
|
+
### 2. 版本不匹配
|
|
1200
|
+
**现象**: 数据格式异常、功能缺失、WebUI 显示版本警告
|
|
1201
|
+
**原因**: npm 更新后 MCP 服务未重启,前后端版本不一致
|
|
1202
|
+
**解决**:
|
|
1203
|
+
- 用户需重启 Claude Code / Cursor 以重新加载 MCP 服务
|
|
1204
|
+
- 或执行 \`zero-workspace webui restart\` 重启 WebUI
|
|
1205
|
+
|
|
1206
|
+
### 3. 端口被占用
|
|
1207
|
+
**现象**: 服务启动失败
|
|
1208
|
+
**解决**:
|
|
1209
|
+
- 使用 \`HTTP_PORT=19542 zero-workspace webui\` 指定其他端口
|
|
1210
|
+
- 或停止占用该端口的其他服务
|
|
1211
|
+
|
|
1212
|
+
## PID 文件位置
|
|
1213
|
+
- 正式环境: \`~/.zero-workspace/webui.pid\`
|
|
1214
|
+
- 开发环境: \`~/.zero-workspace-dev/webui.pid\`
|
|
1215
|
+
|
|
1216
|
+
## 端口迁移(从旧版本升级)
|
|
1217
|
+
从 v1.7.x 之前的版本升级时,端口从 3000/3001 迁移到 19540/19541。
|
|
1218
|
+
系统会**自动检测并关闭**旧端口上的 zero-workspace 服务,并提示用户:
|
|
1219
|
+
\`\`\`
|
|
1220
|
+
[迁移] 检测到旧版本服务在端口 3000 运行
|
|
1221
|
+
[迁移] 端口已从 3000 迁移到 19540/19541
|
|
1222
|
+
[迁移] 提示:新版本 WebUI 地址为 http://localhost:19540
|
|
1223
|
+
[迁移] 请更新浏览器书签
|
|
1224
|
+
\`\`\`
|
|
1225
|
+
|
|
1226
|
+
## 如何告知用户
|
|
1227
|
+
当遇到服务相关问题时,可以这样引导用户:
|
|
1228
|
+
> "看起来 ZeroWorkspace 服务可能未启动或版本不匹配。
|
|
1229
|
+
> 请在终端执行 \`zero-workspace webui status\` 查看服务状态。
|
|
1230
|
+
> 如果需要重启,执行 \`zero-workspace webui restart\`。"
|
|
1231
|
+
`;
|
|
1232
|
+
/**
|
|
1233
|
+
* zero_help 工具的帮助内容
|
|
1234
|
+
*/
|
|
1235
|
+
export const HELP_TOPICS = {
|
|
1236
|
+
"overview": {
|
|
1237
|
+
title: "系统概述",
|
|
1238
|
+
content: SYSTEM_OVERVIEW
|
|
1239
|
+
},
|
|
1240
|
+
"workflow": {
|
|
1241
|
+
title: "核心工作流程",
|
|
1242
|
+
content: CORE_WORKFLOW
|
|
1243
|
+
},
|
|
1244
|
+
"tools": {
|
|
1245
|
+
title: "工具速查表",
|
|
1246
|
+
content: TOOLS_QUICK_REFERENCE
|
|
1247
|
+
},
|
|
1248
|
+
"start": {
|
|
1249
|
+
title: "如何开始新任务",
|
|
1250
|
+
content: SCENARIO_GUIDES["start_task"]
|
|
1251
|
+
},
|
|
1252
|
+
"resume": {
|
|
1253
|
+
title: "如何继续任务",
|
|
1254
|
+
content: SCENARIO_GUIDES["resume_task"]
|
|
1255
|
+
},
|
|
1256
|
+
"session_restore": {
|
|
1257
|
+
title: "会话恢复(从摘要恢复)",
|
|
1258
|
+
content: SCENARIO_GUIDES["session_restore"]
|
|
1259
|
+
},
|
|
1260
|
+
"blocked": {
|
|
1261
|
+
title: "任务受阻时怎么办",
|
|
1262
|
+
content: SCENARIO_GUIDES["task_blocked"]
|
|
1263
|
+
},
|
|
1264
|
+
"split": {
|
|
1265
|
+
title: "何时分解任务",
|
|
1266
|
+
content: SCENARIO_GUIDES["split_task"]
|
|
1267
|
+
},
|
|
1268
|
+
"complete": {
|
|
1269
|
+
title: "如何完成任务",
|
|
1270
|
+
content: SCENARIO_GUIDES["complete_task"]
|
|
1271
|
+
},
|
|
1272
|
+
"progress": {
|
|
1273
|
+
title: "如何查看进度",
|
|
1274
|
+
content: SCENARIO_GUIDES["check_progress"]
|
|
1275
|
+
},
|
|
1276
|
+
"guide": {
|
|
1277
|
+
title: "用户引导",
|
|
1278
|
+
content: SCENARIO_GUIDES["user_guide"]
|
|
1279
|
+
},
|
|
1280
|
+
"docs": {
|
|
1281
|
+
title: "文档引用管理",
|
|
1282
|
+
content: SCENARIO_GUIDES["docs_management"]
|
|
1283
|
+
},
|
|
1284
|
+
"reopen": {
|
|
1285
|
+
title: "重开任务/追加需求",
|
|
1286
|
+
content: SCENARIO_GUIDES["reopen_task"]
|
|
1287
|
+
},
|
|
1288
|
+
"dispatch": {
|
|
1289
|
+
title: "派发模式",
|
|
1290
|
+
content: SCENARIO_GUIDES["dispatch_mode"]
|
|
1291
|
+
},
|
|
1292
|
+
"server": {
|
|
1293
|
+
title: "服务器状态与自检",
|
|
1294
|
+
content: SERVER_STATUS_GUIDE
|
|
1295
|
+
}
|
|
1296
|
+
};
|
|
1297
|
+
/**
|
|
1298
|
+
* 获取完整的 Instructions
|
|
1299
|
+
*/
|
|
1300
|
+
export function getFullInstructions() {
|
|
1301
|
+
return [
|
|
1302
|
+
CRITICAL_PROTOCOLS,
|
|
1303
|
+
SYSTEM_OVERVIEW,
|
|
1304
|
+
CORE_WORKFLOW,
|
|
1305
|
+
TOOLS_QUICK_REFERENCE,
|
|
1306
|
+
`
|
|
1307
|
+
## 工作原则
|
|
1308
|
+
|
|
1309
|
+
1. **主动分解**:规划节点应主动分解任务为子节点,不要等用户要求
|
|
1310
|
+
2. **结论不丢**:每形成一个结论就记录,创建子节点前先记录当前发现
|
|
1311
|
+
3. **及时记录**:每个关键动作都应追加日志
|
|
1312
|
+
4. **主动推进**:AI 应主动推进流程,减少不必要的选择询问
|
|
1313
|
+
5. **节点粒度**:节点代表"需要独立追踪的工作单元",日志代表"执行过程的细节记录"
|
|
1314
|
+
6. **用户引导**:当用户不熟悉时,主动解释概念和流程
|
|
1315
|
+
7. **需求变化时更新节点**:
|
|
1316
|
+
- 当调研发现问题本质与最初理解不同时,用 \`node_update\` 更新节点标题和需求描述
|
|
1317
|
+
- 当方案需要调整时,更新节点信息并用 \`log_append\` 记录变更原因
|
|
1318
|
+
8. **调研过程记录日志**:
|
|
1319
|
+
- 发现问题根因时,立即用 \`log_append\` 记录分析过程和关键发现
|
|
1320
|
+
- 不要只在最后 complete 时才写结论,中间的分析过程同样重要
|
|
1321
|
+
|
|
1322
|
+
## 获取帮助
|
|
1323
|
+
|
|
1324
|
+
**遇到不确定的场景时,必须先调用 zero_help 查询指南,不要猜测!**
|
|
1325
|
+
|
|
1326
|
+
可用主题:
|
|
1327
|
+
- overview: 系统概述
|
|
1328
|
+
- workflow: 核心工作流程
|
|
1329
|
+
- tools: 工具速查表
|
|
1330
|
+
- start: 如何开始新任务
|
|
1331
|
+
- resume: 如何继续任务
|
|
1332
|
+
- session_restore: 会话恢复(从摘要恢复)
|
|
1333
|
+
- blocked: 任务受阻时怎么办
|
|
1334
|
+
- split: 何时分解任务
|
|
1335
|
+
- complete: 如何完成任务
|
|
1336
|
+
- progress: 如何查看进度
|
|
1337
|
+
- guide: 用户引导话术
|
|
1338
|
+
- docs: 文档引用管理
|
|
1339
|
+
- reopen: 重开任务/追加需求
|
|
1340
|
+
`
|
|
1341
|
+
].join('\n\n');
|
|
1342
|
+
}
|
|
1343
|
+
//# sourceMappingURL=instructions.js.map
|