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,429 @@
|
|
|
1
|
+
// src/services/RepairService.ts
|
|
2
|
+
// 工作区修复服务 - 诊断和自动修复工作区问题
|
|
3
|
+
import { XtepError } from "../types/errors.js";
|
|
4
|
+
// 当前存储版本
|
|
5
|
+
const STORAGE_VERSION = "5.0";
|
|
6
|
+
/**
|
|
7
|
+
* 工作区修复服务
|
|
8
|
+
*/
|
|
9
|
+
export class RepairService {
|
|
10
|
+
json;
|
|
11
|
+
fs;
|
|
12
|
+
constructor(json, fs) {
|
|
13
|
+
this.json = json;
|
|
14
|
+
this.fs = fs;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 诊断工作区问题
|
|
18
|
+
*/
|
|
19
|
+
async diagnose(params) {
|
|
20
|
+
const { workspaceId } = params;
|
|
21
|
+
// 1. 获取工作区在 index 中的信息
|
|
22
|
+
const index = await this.json.readIndex();
|
|
23
|
+
const wsEntry = index.workspaces.find(ws => ws.id === workspaceId);
|
|
24
|
+
if (!wsEntry) {
|
|
25
|
+
throw new XtepError("WORKSPACE_NOT_FOUND", `工作区 "${workspaceId}" 不在索引中`);
|
|
26
|
+
}
|
|
27
|
+
const projectRoot = wsEntry.projectRoot;
|
|
28
|
+
const wsDirName = wsEntry.dirName || wsEntry.id;
|
|
29
|
+
const wsPath = this.fs.getWorkspacePath(projectRoot, wsDirName);
|
|
30
|
+
// 2. 诊断问题
|
|
31
|
+
const issues = await this.diagnoseWorkspace(workspaceId, projectRoot, wsDirName, wsPath, wsEntry);
|
|
32
|
+
// 3. 统计
|
|
33
|
+
const summary = {
|
|
34
|
+
total: issues.length,
|
|
35
|
+
errors: issues.filter(i => i.severity === "error").length,
|
|
36
|
+
warnings: issues.filter(i => i.severity === "warning").length,
|
|
37
|
+
autoFixable: issues.filter(i => i.fixType === "auto").length,
|
|
38
|
+
interactiveFixable: issues.filter(i => i.fixType === "interactive").length,
|
|
39
|
+
manualFixable: issues.filter(i => i.fixType === "manual").length,
|
|
40
|
+
};
|
|
41
|
+
return {
|
|
42
|
+
workspaceId,
|
|
43
|
+
workspacePath: wsPath,
|
|
44
|
+
issues: issues.map(i => ({
|
|
45
|
+
id: i.id,
|
|
46
|
+
severity: i.severity,
|
|
47
|
+
message: i.message,
|
|
48
|
+
detail: i.detail,
|
|
49
|
+
fixType: i.fixType,
|
|
50
|
+
})),
|
|
51
|
+
summary,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 修复工作区问题(仅自动修复)
|
|
56
|
+
*/
|
|
57
|
+
async repair(params) {
|
|
58
|
+
const { workspaceId, issueIds } = params;
|
|
59
|
+
// 1. 先诊断获取问题列表
|
|
60
|
+
const index = await this.json.readIndex();
|
|
61
|
+
const wsEntry = index.workspaces.find(ws => ws.id === workspaceId);
|
|
62
|
+
if (!wsEntry) {
|
|
63
|
+
throw new XtepError("WORKSPACE_NOT_FOUND", `工作区 "${workspaceId}" 不在索引中`);
|
|
64
|
+
}
|
|
65
|
+
const projectRoot = wsEntry.projectRoot;
|
|
66
|
+
const wsDirName = wsEntry.dirName || wsEntry.id;
|
|
67
|
+
const wsPath = this.fs.getWorkspacePath(projectRoot, wsDirName);
|
|
68
|
+
// 2. 获取带修复函数的问题列表
|
|
69
|
+
const issues = await this.diagnoseWorkspace(workspaceId, projectRoot, wsDirName, wsPath, wsEntry);
|
|
70
|
+
// 3. 筛选要修复的问题
|
|
71
|
+
let toFix = issues.filter(i => i.fixType === "auto" && i.autoFix);
|
|
72
|
+
if (issueIds && issueIds.length > 0) {
|
|
73
|
+
toFix = toFix.filter(i => issueIds.includes(i.id));
|
|
74
|
+
}
|
|
75
|
+
// 4. 执行修复
|
|
76
|
+
const details = [];
|
|
77
|
+
let fixed = 0;
|
|
78
|
+
let failed = 0;
|
|
79
|
+
for (const issue of toFix) {
|
|
80
|
+
try {
|
|
81
|
+
const success = await issue.autoFix();
|
|
82
|
+
if (success) {
|
|
83
|
+
fixed++;
|
|
84
|
+
details.push({ issueId: issue.id, success: true });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
failed++;
|
|
88
|
+
details.push({ issueId: issue.id, success: false, message: "修复返回失败" });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
failed++;
|
|
93
|
+
details.push({
|
|
94
|
+
issueId: issue.id,
|
|
95
|
+
success: false,
|
|
96
|
+
message: e instanceof Error ? e.message : "未知错误",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// 5. 统计跳过的(非自动修复的)
|
|
101
|
+
const skipped = issues.length - toFix.length;
|
|
102
|
+
return {
|
|
103
|
+
workspaceId,
|
|
104
|
+
fixed,
|
|
105
|
+
failed,
|
|
106
|
+
skipped,
|
|
107
|
+
details,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 诊断工作区(内部方法,返回带修复函数的问题)
|
|
112
|
+
*/
|
|
113
|
+
async diagnoseWorkspace(workspaceId, projectRoot, wsDirName, wsPath, indexEntry) {
|
|
114
|
+
const issues = [];
|
|
115
|
+
// ========== 1. 工作区目录检查 ==========
|
|
116
|
+
const wsExists = await this.fs.exists(wsPath);
|
|
117
|
+
if (!wsExists) {
|
|
118
|
+
issues.push({
|
|
119
|
+
id: "ws-dir-missing",
|
|
120
|
+
severity: "error",
|
|
121
|
+
message: "工作区目录不存在",
|
|
122
|
+
detail: `期望路径: ${wsPath}`,
|
|
123
|
+
fixType: "manual",
|
|
124
|
+
});
|
|
125
|
+
// 目录不存在,无法继续诊断
|
|
126
|
+
return issues;
|
|
127
|
+
}
|
|
128
|
+
// ========== 2. Index 相关问题 ==========
|
|
129
|
+
// 2.1 index 中 dirName 缺失
|
|
130
|
+
if (!indexEntry.dirName) {
|
|
131
|
+
issues.push({
|
|
132
|
+
id: "index-missing-dirname",
|
|
133
|
+
severity: "error",
|
|
134
|
+
message: "索引条目缺少 dirName 字段",
|
|
135
|
+
fixType: "auto",
|
|
136
|
+
autoFix: async () => {
|
|
137
|
+
const idx = await this.json.readIndex();
|
|
138
|
+
const entry = idx.workspaces.find(w => w.id === workspaceId);
|
|
139
|
+
if (entry) {
|
|
140
|
+
entry.dirName = wsDirName;
|
|
141
|
+
await this.json.writeIndex(idx);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// 2.2 index 中 dirName 与实际不匹配(尝试修复)
|
|
149
|
+
if (indexEntry.dirName && indexEntry.dirName !== wsDirName) {
|
|
150
|
+
// 检查实际目录是否存在
|
|
151
|
+
const actualPath = this.fs.getWorkspacePath(projectRoot, indexEntry.dirName);
|
|
152
|
+
const actualExists = await this.fs.exists(actualPath);
|
|
153
|
+
if (!actualExists) {
|
|
154
|
+
// 实际目录不存在,可能是 dirName 错误,尝试查找
|
|
155
|
+
issues.push({
|
|
156
|
+
id: "index-dirname-mismatch",
|
|
157
|
+
severity: "error",
|
|
158
|
+
message: "索引中的 dirName 与实际目录名不匹配",
|
|
159
|
+
detail: `索引: ${indexEntry.dirName}, 实际: ${wsDirName}`,
|
|
160
|
+
fixType: "auto",
|
|
161
|
+
autoFix: async () => {
|
|
162
|
+
const idx = await this.json.readIndex();
|
|
163
|
+
const entry = idx.workspaces.find(w => w.id === workspaceId);
|
|
164
|
+
if (entry) {
|
|
165
|
+
entry.dirName = wsDirName;
|
|
166
|
+
await this.json.writeIndex(idx);
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ========== 3. workspace.json 问题 ==========
|
|
175
|
+
const configPath = this.fs.getWorkspaceConfigPath(projectRoot, wsDirName);
|
|
176
|
+
const configExists = await this.fs.exists(configPath);
|
|
177
|
+
if (!configExists) {
|
|
178
|
+
issues.push({
|
|
179
|
+
id: "missing-workspace-json",
|
|
180
|
+
severity: "error",
|
|
181
|
+
message: "workspace.json 文件缺失",
|
|
182
|
+
fixType: "interactive", // 需要用户输入工作区名称
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
try {
|
|
187
|
+
const config = await this.json.readWorkspaceConfig(projectRoot, wsDirName);
|
|
188
|
+
// 3.1 缺少 dirName
|
|
189
|
+
if (!config.dirName) {
|
|
190
|
+
issues.push({
|
|
191
|
+
id: "config-missing-dirname",
|
|
192
|
+
severity: "warning",
|
|
193
|
+
message: "workspace.json 缺少 dirName 字段",
|
|
194
|
+
fixType: "auto",
|
|
195
|
+
autoFix: async () => {
|
|
196
|
+
const cfg = await this.json.readWorkspaceConfig(projectRoot, wsDirName);
|
|
197
|
+
cfg.dirName = wsDirName;
|
|
198
|
+
await this.json.writeWorkspaceConfig(projectRoot, wsDirName, cfg);
|
|
199
|
+
return true;
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
// 3.2 dirName 不匹配
|
|
204
|
+
if (config.dirName && config.dirName !== wsDirName) {
|
|
205
|
+
issues.push({
|
|
206
|
+
id: "config-dirname-mismatch",
|
|
207
|
+
severity: "warning",
|
|
208
|
+
message: "workspace.json 中的 dirName 与实际目录名不匹配",
|
|
209
|
+
detail: `配置: ${config.dirName}, 实际: ${wsDirName}`,
|
|
210
|
+
fixType: "auto",
|
|
211
|
+
autoFix: async () => {
|
|
212
|
+
const cfg = await this.json.readWorkspaceConfig(projectRoot, wsDirName);
|
|
213
|
+
cfg.dirName = wsDirName;
|
|
214
|
+
await this.json.writeWorkspaceConfig(projectRoot, wsDirName, cfg);
|
|
215
|
+
return true;
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
issues.push({
|
|
222
|
+
id: "invalid-workspace-json",
|
|
223
|
+
severity: "error",
|
|
224
|
+
message: "workspace.json 格式无效 (JSON 解析失败)",
|
|
225
|
+
fixType: "interactive", // 需要用户确认重建
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// ========== 4. graph.json 问题 ==========
|
|
230
|
+
const graphPath = this.fs.getGraphPath(projectRoot, wsDirName);
|
|
231
|
+
const graphExists = await this.fs.exists(graphPath);
|
|
232
|
+
if (!graphExists) {
|
|
233
|
+
issues.push({
|
|
234
|
+
id: "missing-graph-json",
|
|
235
|
+
severity: "error",
|
|
236
|
+
message: "graph.json 文件缺失",
|
|
237
|
+
fixType: "auto",
|
|
238
|
+
autoFix: async () => {
|
|
239
|
+
// 创建基本的 graph.json
|
|
240
|
+
const graph = {
|
|
241
|
+
version: STORAGE_VERSION,
|
|
242
|
+
currentFocus: "root",
|
|
243
|
+
nodes: {
|
|
244
|
+
root: {
|
|
245
|
+
id: "root",
|
|
246
|
+
dirName: "root",
|
|
247
|
+
status: "planning",
|
|
248
|
+
parentId: null,
|
|
249
|
+
children: [],
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
await this.fs.writeFile(graphPath, JSON.stringify(graph, null, 2));
|
|
254
|
+
// 创建 root 节点目录
|
|
255
|
+
const rootDir = this.fs.getNodePath(projectRoot, wsDirName, "root");
|
|
256
|
+
await this.fs.ensureDir(rootDir);
|
|
257
|
+
const infoPath = this.fs.getNodeInfoPath(projectRoot, wsDirName, "root");
|
|
258
|
+
const infoContent = `---
|
|
259
|
+
id: root
|
|
260
|
+
type: planning
|
|
261
|
+
title: 根节点
|
|
262
|
+
status: planning
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 需求
|
|
266
|
+
|
|
267
|
+
(待填写)
|
|
268
|
+
`;
|
|
269
|
+
await this.fs.writeFile(infoPath, infoContent);
|
|
270
|
+
return true;
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
try {
|
|
276
|
+
const graph = await this.json.readGraph(projectRoot, wsDirName);
|
|
277
|
+
// 4.1 检查悬空的子节点引用
|
|
278
|
+
if (graph.nodes) {
|
|
279
|
+
for (const [nodeId, nodeMeta] of Object.entries(graph.nodes)) {
|
|
280
|
+
const meta = nodeMeta;
|
|
281
|
+
if (meta.children && Array.isArray(meta.children)) {
|
|
282
|
+
for (const childId of meta.children) {
|
|
283
|
+
if (!graph.nodes[childId]) {
|
|
284
|
+
const capturedNodeId = nodeId;
|
|
285
|
+
const capturedChildId = childId;
|
|
286
|
+
issues.push({
|
|
287
|
+
id: `dangling-child-${nodeId}-${childId}`,
|
|
288
|
+
severity: "warning",
|
|
289
|
+
message: `节点 ${nodeId} 引用了不存在的子节点 ${childId}`,
|
|
290
|
+
detail: `子节点 "${childId}" 不在 graph.nodes 中`,
|
|
291
|
+
fixType: "auto",
|
|
292
|
+
autoFix: async () => {
|
|
293
|
+
const g = await this.json.readGraph(projectRoot, wsDirName);
|
|
294
|
+
const node = g.nodes?.[capturedNodeId];
|
|
295
|
+
if (node?.children) {
|
|
296
|
+
node.children = node.children.filter(c => c !== capturedChildId);
|
|
297
|
+
await this.json.writeGraph(projectRoot, wsDirName, g);
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
return false;
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// 4.2 检查孤立的父节点引用
|
|
309
|
+
if (graph.nodes) {
|
|
310
|
+
for (const [nodeId, nodeMeta] of Object.entries(graph.nodes)) {
|
|
311
|
+
const meta = nodeMeta;
|
|
312
|
+
if (meta.parentId && !graph.nodes[meta.parentId]) {
|
|
313
|
+
issues.push({
|
|
314
|
+
id: `orphan-parent-${nodeId}`,
|
|
315
|
+
severity: "warning",
|
|
316
|
+
message: `节点 ${nodeId} 的父节点 ${meta.parentId} 不存在`,
|
|
317
|
+
detail: `父节点 "${meta.parentId}" 不在 graph.nodes 中`,
|
|
318
|
+
fixType: "interactive", // 需要用户决定如何处理
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// 4.3 版本检查
|
|
324
|
+
if (graph.version && this.compareVersion(graph.version, STORAGE_VERSION) > 0) {
|
|
325
|
+
issues.push({
|
|
326
|
+
id: "graph-version-too-high",
|
|
327
|
+
severity: "error",
|
|
328
|
+
message: `graph.json 版本过高`,
|
|
329
|
+
detail: `文件版本: ${graph.version}, 当前支持: ${STORAGE_VERSION}`,
|
|
330
|
+
fixType: "interactive", // 需要用户确认降级
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
// 4.4 检查节点目录是否存在
|
|
334
|
+
const nodesDir = this.fs.getNodesDir(projectRoot, wsDirName);
|
|
335
|
+
if (await this.fs.exists(nodesDir) && graph.nodes) {
|
|
336
|
+
for (const [nodeId, nodeMeta] of Object.entries(graph.nodes)) {
|
|
337
|
+
const nodeDirName = nodeMeta.dirName || nodeId;
|
|
338
|
+
const nodePath = this.fs.getNodePath(projectRoot, wsDirName, nodeDirName);
|
|
339
|
+
if (!(await this.fs.exists(nodePath))) {
|
|
340
|
+
// 尝试通过 shortId 查找
|
|
341
|
+
const foundDir = await this.findDirByShortId(nodesDir, nodeId);
|
|
342
|
+
if (foundDir) {
|
|
343
|
+
const capturedNodeId = nodeId;
|
|
344
|
+
const capturedFoundDir = foundDir;
|
|
345
|
+
issues.push({
|
|
346
|
+
id: `node-dirname-mismatch-${nodeId}`,
|
|
347
|
+
severity: "warning",
|
|
348
|
+
message: `节点 ${nodeId} 的目录名不匹配`,
|
|
349
|
+
detail: `配置: ${nodeDirName}, 找到: ${foundDir}`,
|
|
350
|
+
fixType: "auto",
|
|
351
|
+
autoFix: async () => {
|
|
352
|
+
const g = await this.json.readGraph(projectRoot, wsDirName);
|
|
353
|
+
if (g.nodes && g.nodes[capturedNodeId]) {
|
|
354
|
+
g.nodes[capturedNodeId].dirName = capturedFoundDir;
|
|
355
|
+
await this.json.writeGraph(projectRoot, wsDirName, g);
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
return false;
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
issues.push({
|
|
364
|
+
id: `node-dir-missing-${nodeId}`,
|
|
365
|
+
severity: "warning",
|
|
366
|
+
message: `节点 ${nodeId} 的目录不存在`,
|
|
367
|
+
detail: `期望目录: ${nodeDirName}`,
|
|
368
|
+
fixType: "interactive", // 需要用户指定正确目录
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
issues.push({
|
|
377
|
+
id: "invalid-graph-json",
|
|
378
|
+
severity: "error",
|
|
379
|
+
message: "graph.json 格式无效 (JSON 解析失败)",
|
|
380
|
+
fixType: "interactive", // 需要用户确认重建
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return issues;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* 提取 ID 的短标识
|
|
388
|
+
*/
|
|
389
|
+
extractShortId(id) {
|
|
390
|
+
const match = id.match(/^(?:ws-|node-|memo-)?([a-z0-9]+)-([a-z0-9]+)$/);
|
|
391
|
+
return match ? match[1] : id.slice(-8);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* 通过 shortId 查找目录
|
|
395
|
+
*/
|
|
396
|
+
async findDirByShortId(parentDir, id) {
|
|
397
|
+
const shortId = this.extractShortId(id);
|
|
398
|
+
try {
|
|
399
|
+
const items = await this.fs.readdir(parentDir);
|
|
400
|
+
// 优先匹配 _shortId 后缀
|
|
401
|
+
for (const item of items) {
|
|
402
|
+
if (item.endsWith(`_${shortId}`)) {
|
|
403
|
+
return item;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// 兜底:包含 shortId
|
|
407
|
+
for (const item of items) {
|
|
408
|
+
if (item.includes(shortId)) {
|
|
409
|
+
return item;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
// ignore
|
|
415
|
+
}
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* 版本比较
|
|
420
|
+
*/
|
|
421
|
+
compareVersion(a, b) {
|
|
422
|
+
const [aMajor, aMinor = 0] = a.split(".").map(Number);
|
|
423
|
+
const [bMajor, bMinor = 0] = b.split(".").map(Number);
|
|
424
|
+
if (aMajor !== bMajor)
|
|
425
|
+
return aMajor - bMajor;
|
|
426
|
+
return aMinor - bMinor;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=RepairService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RepairService.js","sourceRoot":"","sources":["../../src/services/RepairService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FileSystemAdapter } from "../storage/FileSystemAdapter.js";
|
|
2
|
+
import type { JsonStorage } from "../storage/JsonStorage.js";
|
|
3
|
+
import type { MarkdownStorage } from "../storage/MarkdownStorage.js";
|
|
4
|
+
import type { WorkspaceSearchParams, WorkspaceSearchResult, ContentSearchParams, ContentSearchResult } from "../types/search.js";
|
|
5
|
+
/**
|
|
6
|
+
* 搜索服务
|
|
7
|
+
*/
|
|
8
|
+
export declare class SearchService {
|
|
9
|
+
private json;
|
|
10
|
+
private md;
|
|
11
|
+
private fs;
|
|
12
|
+
constructor(json: JsonStorage, md: MarkdownStorage, fs: FileSystemAdapter);
|
|
13
|
+
/**
|
|
14
|
+
* 搜索工作区
|
|
15
|
+
*/
|
|
16
|
+
workspaceSearch(params: WorkspaceSearchParams): Promise<WorkspaceSearchResult>;
|
|
17
|
+
/**
|
|
18
|
+
* 搜索工作区内容
|
|
19
|
+
*/
|
|
20
|
+
contentSearch(params: ContentSearchParams): Promise<ContentSearchResult>;
|
|
21
|
+
/**
|
|
22
|
+
* 收集节点子树中所有节点 ID
|
|
23
|
+
*/
|
|
24
|
+
private collectSubtreeNodes;
|
|
25
|
+
/**
|
|
26
|
+
* 在文本中查找关键词,返回第一个匹配的片段
|
|
27
|
+
*/
|
|
28
|
+
private findInText;
|
|
29
|
+
/**
|
|
30
|
+
* 在文本中查找所有匹配,返回带行号的片段列表
|
|
31
|
+
*/
|
|
32
|
+
private findAllInText;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=SearchService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchService.d.ts","sourceRoot":"","sources":["../../src/services/SearchService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;gBAFF,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,eAAe,EACnB,EAAE,EAAE,iBAAiB;IAG/B;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA6DpF;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoL9E;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAgBlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAmBtB"}
|