xtep-workspace 1.10.10
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 +525 -0
- package/README.md +188 -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 +89 -0
- package/plugin/README.md +141 -0
- package/plugin/agents/xtep-executor.md +114 -0
- package/plugin/agents/xtep-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//351/205/215/347/275/256/346/226/271/345/274/217.md +330 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// src/services/GuidanceService.ts
|
|
2
|
+
// 引导内容生成服务 - 场景检测与内容生成
|
|
3
|
+
import { getGuidanceConfig } from "../prompts/guidanceContent.js";
|
|
4
|
+
/**
|
|
5
|
+
* 引导服务
|
|
6
|
+
* 实现场景检测和引导内容生成
|
|
7
|
+
*/
|
|
8
|
+
export class GuidanceService {
|
|
9
|
+
/**
|
|
10
|
+
* 检测当前场景
|
|
11
|
+
* @param context 当前操作上下文
|
|
12
|
+
* @returns 检测到的场景类型
|
|
13
|
+
*/
|
|
14
|
+
detectScenario(context) {
|
|
15
|
+
// 1. 优先检查错误场景
|
|
16
|
+
if (context.error) {
|
|
17
|
+
return this.detectErrorScenario(context);
|
|
18
|
+
}
|
|
19
|
+
// 2. 检查工具名称,确定操作类型
|
|
20
|
+
const toolName = context.toolName;
|
|
21
|
+
if (!toolName) {
|
|
22
|
+
return "unknown";
|
|
23
|
+
}
|
|
24
|
+
// 3. 根据工具名称分发到具体的检测逻辑
|
|
25
|
+
switch (toolName) {
|
|
26
|
+
case "workspace_init":
|
|
27
|
+
return "workspace_init";
|
|
28
|
+
case "workspace_archive":
|
|
29
|
+
return "workspace_archived";
|
|
30
|
+
case "workspace_restore":
|
|
31
|
+
return "workspace_restored";
|
|
32
|
+
case "node_create":
|
|
33
|
+
return this.detectNodeCreateScenario(context);
|
|
34
|
+
case "node_transition":
|
|
35
|
+
return this.detectNodeTransitionScenario(context);
|
|
36
|
+
case "node_get":
|
|
37
|
+
case "context_get":
|
|
38
|
+
return this.detectContextScenario(context);
|
|
39
|
+
default:
|
|
40
|
+
return "unknown";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 检测错误场景
|
|
45
|
+
*/
|
|
46
|
+
detectErrorScenario(context) {
|
|
47
|
+
const errorCode = context.error?.code;
|
|
48
|
+
if (!errorCode) {
|
|
49
|
+
return "unknown";
|
|
50
|
+
}
|
|
51
|
+
// 映射错误代码到场景
|
|
52
|
+
if (errorCode === "INVALID_TRANSITION") {
|
|
53
|
+
return "error_invalid_transition";
|
|
54
|
+
}
|
|
55
|
+
if (errorCode === "EXECUTION_HAS_CHILDREN") {
|
|
56
|
+
return "error_execution_has_children";
|
|
57
|
+
}
|
|
58
|
+
if (errorCode === "WORKSPACE_NOT_FOUND" ||
|
|
59
|
+
errorCode === "NODE_NOT_FOUND") {
|
|
60
|
+
return "error_workspace_not_found";
|
|
61
|
+
}
|
|
62
|
+
return "unknown";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 检测节点创建场景
|
|
66
|
+
*/
|
|
67
|
+
detectNodeCreateScenario(context) {
|
|
68
|
+
const nodeType = context.nodeType;
|
|
69
|
+
const nodeRole = context.nodeRole;
|
|
70
|
+
// 信息收集节点优先识别
|
|
71
|
+
if (nodeRole === "info_collection") {
|
|
72
|
+
return "node_create_info_collection";
|
|
73
|
+
}
|
|
74
|
+
// 根据节点类型
|
|
75
|
+
if (nodeType === "planning") {
|
|
76
|
+
return "node_create_planning";
|
|
77
|
+
}
|
|
78
|
+
if (nodeType === "execution") {
|
|
79
|
+
return "node_create_execution";
|
|
80
|
+
}
|
|
81
|
+
return "unknown";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 检测节点状态转换场景
|
|
85
|
+
*/
|
|
86
|
+
detectNodeTransitionScenario(context) {
|
|
87
|
+
const action = context.toolInput?.action;
|
|
88
|
+
const nodeType = context.nodeType;
|
|
89
|
+
const nodeStatus = context.nodeStatus;
|
|
90
|
+
const hasChildren = context.hasChildren;
|
|
91
|
+
if (!action || !nodeType) {
|
|
92
|
+
return "unknown";
|
|
93
|
+
}
|
|
94
|
+
// 检查 reopen 已有子节点的情况
|
|
95
|
+
if (action === "reopen" && hasChildren) {
|
|
96
|
+
return "node_reopen_with_children";
|
|
97
|
+
}
|
|
98
|
+
// 检查是否是根节点首次 start
|
|
99
|
+
if (action === "start" &&
|
|
100
|
+
nodeType === "planning" &&
|
|
101
|
+
nodeStatus === "pending" &&
|
|
102
|
+
context.extra?.isRootNode) {
|
|
103
|
+
return "workspace_first_planning";
|
|
104
|
+
}
|
|
105
|
+
// 执行节点状态转换
|
|
106
|
+
if (nodeType === "execution") {
|
|
107
|
+
switch (action) {
|
|
108
|
+
case "start":
|
|
109
|
+
return "execution_start";
|
|
110
|
+
case "complete":
|
|
111
|
+
return "execution_complete";
|
|
112
|
+
case "fail":
|
|
113
|
+
return "execution_fail";
|
|
114
|
+
default:
|
|
115
|
+
return "unknown";
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// 规划节点状态转换
|
|
119
|
+
if (nodeType === "planning") {
|
|
120
|
+
switch (action) {
|
|
121
|
+
case "start":
|
|
122
|
+
return "planning_start";
|
|
123
|
+
case "complete":
|
|
124
|
+
return "planning_complete";
|
|
125
|
+
default:
|
|
126
|
+
return "unknown";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// 规划节点进入 monitoring
|
|
130
|
+
if (nodeType === "planning" && nodeStatus === "monitoring") {
|
|
131
|
+
return "planning_monitoring";
|
|
132
|
+
}
|
|
133
|
+
return "unknown";
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 检测上下文查询场景
|
|
137
|
+
* 用于检测特殊情况(如缺少信息收集节点、文档派发等)
|
|
138
|
+
*/
|
|
139
|
+
detectContextScenario(context) {
|
|
140
|
+
// 检查是否有 actionRequired
|
|
141
|
+
if (context.toolOutput?.actionRequired) {
|
|
142
|
+
const actionRequired = context.toolOutput.actionRequired;
|
|
143
|
+
if (actionRequired.confirmationToken) {
|
|
144
|
+
return "confirmation_required";
|
|
145
|
+
}
|
|
146
|
+
return "actionRequired_triggered";
|
|
147
|
+
}
|
|
148
|
+
// 检查是否缺少信息收集节点
|
|
149
|
+
if (context.extra?.needsInfoCollection) {
|
|
150
|
+
return "info_collection_missing";
|
|
151
|
+
}
|
|
152
|
+
// 检查是否缺少文档派发
|
|
153
|
+
if (context.extra?.docsNotDispatched) {
|
|
154
|
+
return "docs_派发_missing";
|
|
155
|
+
}
|
|
156
|
+
return "unknown";
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 生成引导内容
|
|
160
|
+
* @param scenario 场景类型
|
|
161
|
+
* @param level 引导级别
|
|
162
|
+
* @param context 上下文数据(用于动态填充)
|
|
163
|
+
* @returns 引导内容
|
|
164
|
+
*/
|
|
165
|
+
generate(scenario, level, context) {
|
|
166
|
+
const config = this.getConfig(scenario);
|
|
167
|
+
if (!config) {
|
|
168
|
+
return {
|
|
169
|
+
level,
|
|
170
|
+
scenario,
|
|
171
|
+
content: "未找到对应的引导内容配置",
|
|
172
|
+
expandable: false,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// 根据级别选择内容
|
|
176
|
+
let content;
|
|
177
|
+
let expandable;
|
|
178
|
+
switch (level) {
|
|
179
|
+
case 0:
|
|
180
|
+
content = config.l0;
|
|
181
|
+
expandable = true;
|
|
182
|
+
break;
|
|
183
|
+
case 1:
|
|
184
|
+
content = config.l1;
|
|
185
|
+
expandable = true;
|
|
186
|
+
break;
|
|
187
|
+
case 2:
|
|
188
|
+
content = config.l2;
|
|
189
|
+
expandable = false;
|
|
190
|
+
break;
|
|
191
|
+
default:
|
|
192
|
+
content = config.l0;
|
|
193
|
+
expandable = true;
|
|
194
|
+
}
|
|
195
|
+
// 动态替换占位符(如果有 context)
|
|
196
|
+
if (context) {
|
|
197
|
+
content = this.replacePlaceholders(content, context);
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
level,
|
|
201
|
+
scenario,
|
|
202
|
+
content,
|
|
203
|
+
expandable,
|
|
204
|
+
expandTo: expandable && level < 2 ? scenario : undefined,
|
|
205
|
+
relatedHelpTopics: config.relatedHelpTopics,
|
|
206
|
+
metadata: config.metadata,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 替换内容中的占位符
|
|
211
|
+
*/
|
|
212
|
+
replacePlaceholders(content, context) {
|
|
213
|
+
let result = content;
|
|
214
|
+
// 替换节点类型
|
|
215
|
+
if (context.nodeType) {
|
|
216
|
+
result = result.replace(/\{nodeType\}/g, context.nodeType);
|
|
217
|
+
}
|
|
218
|
+
// 替换节点状态
|
|
219
|
+
if (context.nodeStatus) {
|
|
220
|
+
result = result.replace(/\{nodeStatus\}/g, context.nodeStatus);
|
|
221
|
+
}
|
|
222
|
+
// 替换错误信息
|
|
223
|
+
if (context.error) {
|
|
224
|
+
result = result.replace(/\{errorCode\}/g, context.error.code);
|
|
225
|
+
result = result.replace(/\{errorMessage\}/g, context.error.message);
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 获取场景的完整配置
|
|
231
|
+
* @param scenario 场景类型
|
|
232
|
+
* @returns 引导配置
|
|
233
|
+
*/
|
|
234
|
+
getConfig(scenario) {
|
|
235
|
+
return getGuidanceConfig(scenario);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 便捷方法:直接获取指定场景和级别的内容
|
|
239
|
+
* @param scenario 场景类型
|
|
240
|
+
* @param level 引导级别(默认 L0)
|
|
241
|
+
* @param context 上下文数据
|
|
242
|
+
* @returns 引导内容字符串,如果未找到则返回空字符串
|
|
243
|
+
*/
|
|
244
|
+
getContent(scenario, level = 0, context) {
|
|
245
|
+
const guidance = this.generate(scenario, level, context);
|
|
246
|
+
return guidance.content;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 便捷方法:从上下文自动检测场景并生成引导
|
|
250
|
+
* @param context 上下文数据
|
|
251
|
+
* @param level 引导级别(默认 L0)
|
|
252
|
+
* @returns 引导内容
|
|
253
|
+
*/
|
|
254
|
+
generateFromContext(context, level = 0) {
|
|
255
|
+
const scenario = this.detectScenario(context);
|
|
256
|
+
return this.generate(scenario, level, context);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=GuidanceService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuidanceService.js","sourceRoot":"","sources":["../../src/services/GuidanceService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { JsonStorage } from "../storage/JsonStorage.js";
|
|
2
|
+
import type { FileSystemAdapter } from "../storage/FileSystemAdapter.js";
|
|
3
|
+
import type { HealthReport } from "../types/health.js";
|
|
4
|
+
import type { WorkspaceService } from "./WorkspaceService.js";
|
|
5
|
+
/**
|
|
6
|
+
* 健康检测服务
|
|
7
|
+
* 提供工作区健康状态检测功能
|
|
8
|
+
*/
|
|
9
|
+
export declare class HealthService {
|
|
10
|
+
private json;
|
|
11
|
+
private fs;
|
|
12
|
+
private static readonly DIAGNOSTIC_TOKEN;
|
|
13
|
+
private currentCodeVersion;
|
|
14
|
+
private workspaceService?;
|
|
15
|
+
constructor(json: JsonStorage, fs: FileSystemAdapter);
|
|
16
|
+
/**
|
|
17
|
+
* 设置 WorkspaceService 依赖(用于警告标记管理)
|
|
18
|
+
*/
|
|
19
|
+
setWorkspaceService(workspaceService: WorkspaceService): void;
|
|
20
|
+
/**
|
|
21
|
+
* 获取当前代码版本
|
|
22
|
+
*/
|
|
23
|
+
private getCurrentCodeVersion;
|
|
24
|
+
/**
|
|
25
|
+
* 获取诊断指南路径
|
|
26
|
+
*/
|
|
27
|
+
getGuidePath(): string;
|
|
28
|
+
/**
|
|
29
|
+
* 验证诊断令牌
|
|
30
|
+
*/
|
|
31
|
+
validateToken(token: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 执行健康检测
|
|
34
|
+
* @param workspaceId 可选,指定则只检测该工作区
|
|
35
|
+
* @returns 健康报告
|
|
36
|
+
*/
|
|
37
|
+
checkHealth(workspaceId?: string): Promise<HealthReport>;
|
|
38
|
+
/**
|
|
39
|
+
* 检测单个工作区
|
|
40
|
+
*/
|
|
41
|
+
private checkWorkspace;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=HealthService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HealthService.d.ts","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,oBAAoB,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,aAAa;IAMtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IANZ,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IAC/D,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,gBAAgB,CAAC,CAAmB;gBAGlC,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,iBAAiB;IAG/B;;OAEG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAI7D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,YAAY,IAAI,MAAM;IAMtB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACG,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0D9D;;OAEG;YACW,cAAc;CAyK7B"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// src/services/HealthService.ts
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import { dirname, join } from "path";
|
|
4
|
+
import { createRequire } from "module";
|
|
5
|
+
/**
|
|
6
|
+
* 健康检测服务
|
|
7
|
+
* 提供工作区健康状态检测功能
|
|
8
|
+
*/
|
|
9
|
+
export class HealthService {
|
|
10
|
+
json;
|
|
11
|
+
fs;
|
|
12
|
+
static DIAGNOSTIC_TOKEN = "HEALTH_CHECK_2025";
|
|
13
|
+
currentCodeVersion = null;
|
|
14
|
+
workspaceService;
|
|
15
|
+
constructor(json, fs) {
|
|
16
|
+
this.json = json;
|
|
17
|
+
this.fs = fs;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 设置 WorkspaceService 依赖(用于警告标记管理)
|
|
21
|
+
*/
|
|
22
|
+
setWorkspaceService(workspaceService) {
|
|
23
|
+
this.workspaceService = workspaceService;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 获取当前代码版本
|
|
27
|
+
*/
|
|
28
|
+
getCurrentCodeVersion() {
|
|
29
|
+
if (this.currentCodeVersion)
|
|
30
|
+
return this.currentCodeVersion;
|
|
31
|
+
try {
|
|
32
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
33
|
+
const __dirname = dirname(__filename);
|
|
34
|
+
const require = createRequire(import.meta.url);
|
|
35
|
+
const pkg = require(join(__dirname, "..", "..", "package.json"));
|
|
36
|
+
this.currentCodeVersion = pkg.version;
|
|
37
|
+
return this.currentCodeVersion;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return "0.0.0";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 获取诊断指南路径
|
|
45
|
+
*/
|
|
46
|
+
getGuidePath() {
|
|
47
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
48
|
+
const __dirname = dirname(__filename);
|
|
49
|
+
return join(__dirname, "..", "..", "plugin", "docs", "diagnostic-guide.md");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 验证诊断令牌
|
|
53
|
+
*/
|
|
54
|
+
validateToken(token) {
|
|
55
|
+
return token === HealthService.DIAGNOSTIC_TOKEN;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 执行健康检测
|
|
59
|
+
* @param workspaceId 可选,指定则只检测该工作区
|
|
60
|
+
* @returns 健康报告
|
|
61
|
+
*/
|
|
62
|
+
async checkHealth(workspaceId) {
|
|
63
|
+
const index = await this.json.readIndex();
|
|
64
|
+
const issues = [];
|
|
65
|
+
const workspaceResults = [];
|
|
66
|
+
// 确定检测范围
|
|
67
|
+
const workspaces = workspaceId
|
|
68
|
+
? index.workspaces.filter(ws => ws.id === workspaceId)
|
|
69
|
+
: index.workspaces.filter(ws => ws.status !== "error");
|
|
70
|
+
// 并行检测所有工作区
|
|
71
|
+
const results = await Promise.all(workspaces.map(ws => this.checkWorkspace(ws)));
|
|
72
|
+
for (const result of results) {
|
|
73
|
+
workspaceResults.push(result);
|
|
74
|
+
issues.push(...result.issues);
|
|
75
|
+
// 更新警告标记
|
|
76
|
+
if (this.workspaceService) {
|
|
77
|
+
if (result.status === "healthy") {
|
|
78
|
+
// 检测通过,清除警告标记
|
|
79
|
+
await this.workspaceService.clearWarningFlag(result.workspaceId);
|
|
80
|
+
}
|
|
81
|
+
else if (result.issues.length > 0) {
|
|
82
|
+
// 检测到问题,设置警告标记
|
|
83
|
+
await this.workspaceService.setWarningFlag(result.workspaceId, result.issues);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// 统计
|
|
88
|
+
const healthyCount = workspaceResults.filter(r => r.status === "healthy").length;
|
|
89
|
+
const warningCount = workspaceResults.filter(r => r.status === "warning").length;
|
|
90
|
+
const errorCount = workspaceResults.filter(r => r.status === "error").length;
|
|
91
|
+
// 确定整体状态
|
|
92
|
+
let status = "healthy";
|
|
93
|
+
if (errorCount > 0) {
|
|
94
|
+
status = "error";
|
|
95
|
+
}
|
|
96
|
+
else if (warningCount > 0) {
|
|
97
|
+
status = "warning";
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
status,
|
|
101
|
+
checkedAt: new Date().toISOString(),
|
|
102
|
+
codeVersion: this.getCurrentCodeVersion(),
|
|
103
|
+
issues,
|
|
104
|
+
summary: {
|
|
105
|
+
totalWorkspaces: workspaceResults.length,
|
|
106
|
+
healthyWorkspaces: healthyCount,
|
|
107
|
+
warningWorkspaces: warningCount,
|
|
108
|
+
errorWorkspaces: errorCount,
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 检测单个工作区
|
|
114
|
+
*/
|
|
115
|
+
async checkWorkspace(entry) {
|
|
116
|
+
const issues = [];
|
|
117
|
+
const { id, name, dirName, projectRoot, status } = entry;
|
|
118
|
+
const wsDirName = dirName || id;
|
|
119
|
+
// 跳过 error 状态的工作区
|
|
120
|
+
if (status === "error") {
|
|
121
|
+
return {
|
|
122
|
+
workspaceId: id,
|
|
123
|
+
workspaceName: name,
|
|
124
|
+
status: "error",
|
|
125
|
+
issues: [{
|
|
126
|
+
type: "dir_missing",
|
|
127
|
+
severity: "error",
|
|
128
|
+
target: id,
|
|
129
|
+
message: entry.errorInfo?.message || "工作区已标记为错误状态",
|
|
130
|
+
suggestion: "检查错误详情并尝试修复或删除",
|
|
131
|
+
}],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const isArchived = status === "archived";
|
|
135
|
+
// 1. 目录存在检测
|
|
136
|
+
const workspacePath = isArchived
|
|
137
|
+
? this.fs.getArchivePath(projectRoot, wsDirName)
|
|
138
|
+
: this.fs.getWorkspacePath(projectRoot, wsDirName);
|
|
139
|
+
if (!(await this.fs.exists(workspacePath))) {
|
|
140
|
+
issues.push({
|
|
141
|
+
type: "dir_missing",
|
|
142
|
+
severity: "error",
|
|
143
|
+
target: id,
|
|
144
|
+
message: `工作区目录不存在: ${workspacePath}`,
|
|
145
|
+
suggestion: "从备份恢复或删除该工作区",
|
|
146
|
+
});
|
|
147
|
+
return {
|
|
148
|
+
workspaceId: id,
|
|
149
|
+
workspaceName: name,
|
|
150
|
+
status: "error",
|
|
151
|
+
issues,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// 2. 配置文件检测
|
|
155
|
+
const configPath = isArchived
|
|
156
|
+
? `${this.fs.getArchivePath(projectRoot, wsDirName)}/workspace.json`
|
|
157
|
+
: this.fs.getWorkspaceConfigPath(projectRoot, wsDirName);
|
|
158
|
+
if (!(await this.fs.exists(configPath))) {
|
|
159
|
+
issues.push({
|
|
160
|
+
type: "config_corrupt",
|
|
161
|
+
severity: "error",
|
|
162
|
+
target: id,
|
|
163
|
+
message: "配置文件不存在: workspace.json",
|
|
164
|
+
suggestion: "从备份恢复配置文件",
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
try {
|
|
169
|
+
const content = await this.fs.readFile(configPath);
|
|
170
|
+
JSON.parse(content);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
issues.push({
|
|
174
|
+
type: "config_corrupt",
|
|
175
|
+
severity: "error",
|
|
176
|
+
target: id,
|
|
177
|
+
message: "配置文件 JSON 格式无效",
|
|
178
|
+
suggestion: "从备份恢复或手动修复配置文件",
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// 3. 图文件检测
|
|
183
|
+
const graphPath = isArchived
|
|
184
|
+
? this.fs.getGraphPathWithArchive(projectRoot, wsDirName, true)
|
|
185
|
+
: this.fs.getGraphPath(projectRoot, wsDirName);
|
|
186
|
+
if (!(await this.fs.exists(graphPath))) {
|
|
187
|
+
issues.push({
|
|
188
|
+
type: "graph_corrupt",
|
|
189
|
+
severity: "error",
|
|
190
|
+
target: id,
|
|
191
|
+
message: "图文件不存在: graph.json",
|
|
192
|
+
suggestion: "从备份恢复图文件",
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
try {
|
|
197
|
+
const content = await this.fs.readFile(graphPath);
|
|
198
|
+
const graph = JSON.parse(content);
|
|
199
|
+
// 4. 版本检测
|
|
200
|
+
if (graph.lastWriteCodeVersion) {
|
|
201
|
+
const currentVersion = this.getCurrentCodeVersion();
|
|
202
|
+
const dataVersion = graph.lastWriteCodeVersion;
|
|
203
|
+
const [dataMajor, dataMinor] = dataVersion.split(".").map(Number);
|
|
204
|
+
const [curMajor, curMinor] = currentVersion.split(".").map(Number);
|
|
205
|
+
if (dataMajor > curMajor || (dataMajor === curMajor && dataMinor > curMinor)) {
|
|
206
|
+
issues.push({
|
|
207
|
+
type: "version_mismatch",
|
|
208
|
+
severity: "warning",
|
|
209
|
+
target: id,
|
|
210
|
+
message: `数据版本 ${dataVersion} 高于当前代码版本 ${currentVersion}`,
|
|
211
|
+
suggestion: "升级 xtep-workspace 或使用兼容版本",
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// 5. 节点完整性检测
|
|
216
|
+
const nodesDir = isArchived
|
|
217
|
+
? `${this.fs.getArchivePath(projectRoot, wsDirName)}/nodes`
|
|
218
|
+
: this.fs.getNodesDir(projectRoot, wsDirName);
|
|
219
|
+
if (graph.nodes) {
|
|
220
|
+
for (const [nodeId, node] of Object.entries(graph.nodes)) {
|
|
221
|
+
const nodeMeta = node;
|
|
222
|
+
const nodeDirName = nodeMeta.dirName || nodeId;
|
|
223
|
+
const nodePath = `${nodesDir}/${nodeDirName}`;
|
|
224
|
+
if (!(await this.fs.exists(nodePath))) {
|
|
225
|
+
issues.push({
|
|
226
|
+
type: "node_corrupt",
|
|
227
|
+
severity: "error",
|
|
228
|
+
target: nodeId,
|
|
229
|
+
message: `节点目录不存在: ${nodeDirName}`,
|
|
230
|
+
suggestion: "从备份恢复或删除该节点",
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
const infoPath = `${nodePath}/Info.md`;
|
|
235
|
+
if (!(await this.fs.exists(infoPath))) {
|
|
236
|
+
issues.push({
|
|
237
|
+
type: "node_corrupt",
|
|
238
|
+
severity: "warning",
|
|
239
|
+
target: nodeId,
|
|
240
|
+
message: `节点 Info.md 缺失: ${nodeDirName}`,
|
|
241
|
+
suggestion: "可尝试重建节点信息文件",
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
issues.push({
|
|
250
|
+
type: "graph_corrupt",
|
|
251
|
+
severity: "error",
|
|
252
|
+
target: id,
|
|
253
|
+
message: "图文件 JSON 格式无效",
|
|
254
|
+
suggestion: "从备份恢复或手动修复图文件",
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// 确定状态
|
|
259
|
+
const hasError = issues.some(i => i.severity === "error");
|
|
260
|
+
const hasWarning = issues.some(i => i.severity === "warning");
|
|
261
|
+
let wsStatus = "healthy";
|
|
262
|
+
if (hasError) {
|
|
263
|
+
wsStatus = "error";
|
|
264
|
+
}
|
|
265
|
+
else if (hasWarning) {
|
|
266
|
+
wsStatus = "warning";
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
workspaceId: id,
|
|
270
|
+
workspaceName: name,
|
|
271
|
+
status: wsStatus,
|
|
272
|
+
issues,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=HealthService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HealthService.js","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { InstallationMeta, PlatformType, PlatformInstallation } from "../types/settings.js";
|
|
2
|
+
/**
|
|
3
|
+
* 安装服务
|
|
4
|
+
* 管理安装元信息文件 ~/.xtep-workspace/installation-meta.json
|
|
5
|
+
* 用于跟踪各平台组件的安装状态和版本
|
|
6
|
+
*/
|
|
7
|
+
export declare class InstallationService {
|
|
8
|
+
private metaPath;
|
|
9
|
+
private packageVersion;
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* 获取包版本号
|
|
13
|
+
*/
|
|
14
|
+
private loadPackageVersion;
|
|
15
|
+
/**
|
|
16
|
+
* 获取元信息文件路径
|
|
17
|
+
*/
|
|
18
|
+
getPath(): string;
|
|
19
|
+
/**
|
|
20
|
+
* 获取当前包版本
|
|
21
|
+
*/
|
|
22
|
+
getPackageVersion(): string;
|
|
23
|
+
/**
|
|
24
|
+
* 读取安装元信息
|
|
25
|
+
* 如果文件不存在,返回默认结构
|
|
26
|
+
*/
|
|
27
|
+
read(): Promise<InstallationMeta>;
|
|
28
|
+
/**
|
|
29
|
+
* 写入安装元信息
|
|
30
|
+
*/
|
|
31
|
+
write(meta: InstallationMeta): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* 更新指定平台的安装信息
|
|
34
|
+
*/
|
|
35
|
+
updatePlatform(platform: PlatformType, info: Partial<PlatformInstallation>): Promise<InstallationMeta>;
|
|
36
|
+
/**
|
|
37
|
+
* 合并组件信息
|
|
38
|
+
*/
|
|
39
|
+
private mergeComponent;
|
|
40
|
+
/**
|
|
41
|
+
* 更新单个组件
|
|
42
|
+
*/
|
|
43
|
+
updateComponent(platform: PlatformType, component: string, installed: boolean, version?: string): Promise<InstallationMeta>;
|
|
44
|
+
/**
|
|
45
|
+
* 获取指定平台的安装信息
|
|
46
|
+
*/
|
|
47
|
+
getPlatform(platform: PlatformType): Promise<PlatformInstallation | undefined>;
|
|
48
|
+
/**
|
|
49
|
+
* 检查平台组件版本
|
|
50
|
+
* 返回需要更新的组件列表
|
|
51
|
+
*/
|
|
52
|
+
checkComponentUpdates(platform: PlatformType): Promise<Array<{
|
|
53
|
+
component: string;
|
|
54
|
+
installedVersion: string;
|
|
55
|
+
currentVersion: string;
|
|
56
|
+
}>>;
|
|
57
|
+
/**
|
|
58
|
+
* 创建默认的元信息结构
|
|
59
|
+
*/
|
|
60
|
+
private createDefaultMeta;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=InstallationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstallationService.d.ts","sourceRoot":"","sources":["../../src/services/InstallationService.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAG9B;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAS;;IAS/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAqBvC;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlD;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAClC,OAAO,CAAC,gBAAgB,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IAgC5B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAKpF;;;OAGG;IACG,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QACjE,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IA0BH;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAY1B"}
|