@specpow/framework 0.2.0
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 +307 -0
- package/LICENSE +21 -0
- package/README.md +557 -0
- package/agents/controller/sdd-controller.md +55 -0
- package/agents/execution/java-codegen-agent.md +39 -0
- package/agents/execution/ui-codegen-agent.md +32 -0
- package/agents/ops/deploy-agent.md +181 -0
- package/agents/planning/db-designer-agent.md +30 -0
- package/agents/planning/prd-agent.md +31 -0
- package/agents/quality/review-agent.md +36 -0
- package/agents/quality/test-agent.md +33 -0
- package/bin/specpow.js +10 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +444 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/apply.d.ts +14 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +195 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/archive.d.ts +30 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +141 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/channel.d.ts +61 -0
- package/dist/commands/channel.d.ts.map +1 -0
- package/dist/commands/channel.js +613 -0
- package/dist/commands/channel.js.map +1 -0
- package/dist/commands/config.d.ts +40 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +130 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/debug.d.ts +45 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +167 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/doctor.d.ts +20 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +121 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/execute.d.ts +25 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +120 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/explore.d.ts +71 -0
- package/dist/commands/explore.d.ts.map +1 -0
- package/dist/commands/explore.js +481 -0
- package/dist/commands/explore.js.map +1 -0
- package/dist/commands/init.d.ts +20 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +146 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/memory.d.ts +32 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +455 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/propose.d.ts +13 -0
- package/dist/commands/propose.d.ts.map +1 -0
- package/dist/commands/propose.js +193 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/commands/review.d.ts +50 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +198 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/schema.d.ts +22 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +79 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +130 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/store.d.ts +31 -0
- package/dist/commands/store.d.ts.map +1 -0
- package/dist/commands/store.js +109 -0
- package/dist/commands/store.js.map +1 -0
- package/dist/commands/update.d.ts +42 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +239 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +39 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +386 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/workflow/index.d.ts +12 -0
- package/dist/commands/workflow/index.d.ts.map +1 -0
- package/dist/commands/workflow/index.js +435 -0
- package/dist/commands/workflow/index.js.map +1 -0
- package/dist/core/agent-contract.d.ts +133 -0
- package/dist/core/agent-contract.d.ts.map +1 -0
- package/dist/core/agent-contract.js +71 -0
- package/dist/core/agent-contract.js.map +1 -0
- package/dist/core/archive/delta-merger.d.ts +101 -0
- package/dist/core/archive/delta-merger.d.ts.map +1 -0
- package/dist/core/archive/delta-merger.js +398 -0
- package/dist/core/archive/delta-merger.js.map +1 -0
- package/dist/core/archive/delta-parser.d.ts +48 -0
- package/dist/core/archive/delta-parser.d.ts.map +1 -0
- package/dist/core/archive/delta-parser.js +193 -0
- package/dist/core/archive/delta-parser.js.map +1 -0
- package/dist/core/archive/engine.d.ts +136 -0
- package/dist/core/archive/engine.d.ts.map +1 -0
- package/dist/core/archive/engine.js +506 -0
- package/dist/core/archive/engine.js.map +1 -0
- package/dist/core/archive/index.d.ts +11 -0
- package/dist/core/archive/index.d.ts.map +1 -0
- package/dist/core/archive/index.js +9 -0
- package/dist/core/archive/index.js.map +1 -0
- package/dist/core/artifact-graph/graph.d.ts +48 -0
- package/dist/core/artifact-graph/graph.d.ts.map +1 -0
- package/dist/core/artifact-graph/graph.js +170 -0
- package/dist/core/artifact-graph/graph.js.map +1 -0
- package/dist/core/artifact-graph/index.d.ts +13 -0
- package/dist/core/artifact-graph/index.d.ts.map +1 -0
- package/dist/core/artifact-graph/index.js +12 -0
- package/dist/core/artifact-graph/index.js.map +1 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts +60 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -0
- package/dist/core/artifact-graph/instruction-loader.js +166 -0
- package/dist/core/artifact-graph/instruction-loader.js.map +1 -0
- package/dist/core/artifact-graph/outputs.d.ts +17 -0
- package/dist/core/artifact-graph/outputs.d.ts.map +1 -0
- package/dist/core/artifact-graph/outputs.js +27 -0
- package/dist/core/artifact-graph/outputs.js.map +1 -0
- package/dist/core/artifact-graph/resolver.d.ts +34 -0
- package/dist/core/artifact-graph/resolver.d.ts.map +1 -0
- package/dist/core/artifact-graph/resolver.js +99 -0
- package/dist/core/artifact-graph/resolver.js.map +1 -0
- package/dist/core/artifact-graph/state.d.ts +54 -0
- package/dist/core/artifact-graph/state.d.ts.map +1 -0
- package/dist/core/artifact-graph/state.js +149 -0
- package/dist/core/artifact-graph/state.js.map +1 -0
- package/dist/core/artifact-graph/types.d.ts +151 -0
- package/dist/core/artifact-graph/types.d.ts.map +1 -0
- package/dist/core/artifact-graph/types.js +44 -0
- package/dist/core/artifact-graph/types.js.map +1 -0
- package/dist/core/channel/channel-event-log.d.ts +81 -0
- package/dist/core/channel/channel-event-log.d.ts.map +1 -0
- package/dist/core/channel/channel-event-log.js +177 -0
- package/dist/core/channel/channel-event-log.js.map +1 -0
- package/dist/core/channel/channel-inbox.d.ts +70 -0
- package/dist/core/channel/channel-inbox.d.ts.map +1 -0
- package/dist/core/channel/channel-inbox.js +122 -0
- package/dist/core/channel/channel-inbox.js.map +1 -0
- package/dist/core/channel/channel-runtime.d.ts +81 -0
- package/dist/core/channel/channel-runtime.d.ts.map +1 -0
- package/dist/core/channel/channel-runtime.js +291 -0
- package/dist/core/channel/channel-runtime.js.map +1 -0
- package/dist/core/channel/channel-supervisor.d.ts +72 -0
- package/dist/core/channel/channel-supervisor.d.ts.map +1 -0
- package/dist/core/channel/channel-supervisor.js +189 -0
- package/dist/core/channel/channel-supervisor.js.map +1 -0
- package/dist/core/channel/channel-types.d.ts +169 -0
- package/dist/core/channel/channel-types.d.ts.map +1 -0
- package/dist/core/channel/channel-types.js +26 -0
- package/dist/core/channel/channel-types.js.map +1 -0
- package/dist/core/channel/index.d.ts +21 -0
- package/dist/core/channel/index.d.ts.map +1 -0
- package/dist/core/channel/index.js +23 -0
- package/dist/core/channel/index.js.map +1 -0
- package/dist/core/command-generation/index.d.ts +225 -0
- package/dist/core/command-generation/index.d.ts.map +1 -0
- package/dist/core/command-generation/index.js +462 -0
- package/dist/core/command-generation/index.js.map +1 -0
- package/dist/core/config/config-schema.d.ts +745 -0
- package/dist/core/config/config-schema.d.ts.map +1 -0
- package/dist/core/config/config-schema.js +108 -0
- package/dist/core/config/config-schema.js.map +1 -0
- package/dist/core/config/global-config.d.ts +73 -0
- package/dist/core/config/global-config.d.ts.map +1 -0
- package/dist/core/config/global-config.js +225 -0
- package/dist/core/config/global-config.js.map +1 -0
- package/dist/core/config/index.d.ts +8 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +8 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/hooks/hook-registry.d.ts +55 -0
- package/dist/core/hooks/hook-registry.d.ts.map +1 -0
- package/dist/core/hooks/hook-registry.js +172 -0
- package/dist/core/hooks/hook-registry.js.map +1 -0
- package/dist/core/hooks/hook-types.d.ts +87 -0
- package/dist/core/hooks/hook-types.d.ts.map +1 -0
- package/dist/core/hooks/hook-types.js +11 -0
- package/dist/core/hooks/hook-types.js.map +1 -0
- package/dist/core/hooks/index.d.ts +28 -0
- package/dist/core/hooks/index.d.ts.map +1 -0
- package/dist/core/hooks/index.js +28 -0
- package/dist/core/hooks/index.js.map +1 -0
- package/dist/core/hooks/post-tool-call-hook.d.ts +21 -0
- package/dist/core/hooks/post-tool-call-hook.d.ts.map +1 -0
- package/dist/core/hooks/post-tool-call-hook.js +191 -0
- package/dist/core/hooks/post-tool-call-hook.js.map +1 -0
- package/dist/core/hooks/pre-tool-call-hook.d.ts +31 -0
- package/dist/core/hooks/pre-tool-call-hook.d.ts.map +1 -0
- package/dist/core/hooks/pre-tool-call-hook.js +122 -0
- package/dist/core/hooks/pre-tool-call-hook.js.map +1 -0
- package/dist/core/hooks/session-start-hook.d.ts +25 -0
- package/dist/core/hooks/session-start-hook.d.ts.map +1 -0
- package/dist/core/hooks/session-start-hook.js +226 -0
- package/dist/core/hooks/session-start-hook.js.map +1 -0
- package/dist/core/hooks/workflow-state-hook.d.ts +18 -0
- package/dist/core/hooks/workflow-state-hook.d.ts.map +1 -0
- package/dist/core/hooks/workflow-state-hook.js +181 -0
- package/dist/core/hooks/workflow-state-hook.js.map +1 -0
- package/dist/core/init/engine.d.ts +69 -0
- package/dist/core/init/engine.d.ts.map +1 -0
- package/dist/core/init/engine.js +211 -0
- package/dist/core/init/engine.js.map +1 -0
- package/dist/core/init/template-hash.d.ts +86 -0
- package/dist/core/init/template-hash.d.ts.map +1 -0
- package/dist/core/init/template-hash.js +228 -0
- package/dist/core/init/template-hash.js.map +1 -0
- package/dist/core/memory/adapters/json-adapter.d.ts +50 -0
- package/dist/core/memory/adapters/json-adapter.d.ts.map +1 -0
- package/dist/core/memory/adapters/json-adapter.js +273 -0
- package/dist/core/memory/adapters/json-adapter.js.map +1 -0
- package/dist/core/memory/adapters/sqlite-adapter.d.ts +26 -0
- package/dist/core/memory/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/core/memory/adapters/sqlite-adapter.js +230 -0
- package/dist/core/memory/adapters/sqlite-adapter.js.map +1 -0
- package/dist/core/memory/index.d.ts +38 -0
- package/dist/core/memory/index.d.ts.map +1 -0
- package/dist/core/memory/index.js +40 -0
- package/dist/core/memory/index.js.map +1 -0
- package/dist/core/memory/memory-indexer.d.ts +39 -0
- package/dist/core/memory/memory-indexer.d.ts.map +1 -0
- package/dist/core/memory/memory-indexer.js +213 -0
- package/dist/core/memory/memory-indexer.js.map +1 -0
- package/dist/core/memory/memory-manager.d.ts +59 -0
- package/dist/core/memory/memory-manager.d.ts.map +1 -0
- package/dist/core/memory/memory-manager.js +194 -0
- package/dist/core/memory/memory-manager.js.map +1 -0
- package/dist/core/memory/memory-store.d.ts +31 -0
- package/dist/core/memory/memory-store.d.ts.map +1 -0
- package/dist/core/memory/memory-store.js +148 -0
- package/dist/core/memory/memory-store.js.map +1 -0
- package/dist/core/memory/memory-types.d.ts +154 -0
- package/dist/core/memory/memory-types.d.ts.map +1 -0
- package/dist/core/memory/memory-types.js +13 -0
- package/dist/core/memory/memory-types.js.map +1 -0
- package/dist/core/migration/index.d.ts +80 -0
- package/dist/core/migration/index.d.ts.map +1 -0
- package/dist/core/migration/index.js +361 -0
- package/dist/core/migration/index.js.map +1 -0
- package/dist/core/parsers/index.d.ts +95 -0
- package/dist/core/parsers/index.d.ts.map +1 -0
- package/dist/core/parsers/index.js +367 -0
- package/dist/core/parsers/index.js.map +1 -0
- package/dist/core/sdd-engine/ai-caller.d.ts +118 -0
- package/dist/core/sdd-engine/ai-caller.d.ts.map +1 -0
- package/dist/core/sdd-engine/ai-caller.js +624 -0
- package/dist/core/sdd-engine/ai-caller.js.map +1 -0
- package/dist/core/sdd-engine/controller.d.ts +107 -0
- package/dist/core/sdd-engine/controller.d.ts.map +1 -0
- package/dist/core/sdd-engine/controller.js +357 -0
- package/dist/core/sdd-engine/controller.js.map +1 -0
- package/dist/core/sdd-engine/dispatcher.d.ts +69 -0
- package/dist/core/sdd-engine/dispatcher.d.ts.map +1 -0
- package/dist/core/sdd-engine/dispatcher.js +146 -0
- package/dist/core/sdd-engine/dispatcher.js.map +1 -0
- package/dist/core/sdd-engine/git-ops.d.ts +73 -0
- package/dist/core/sdd-engine/git-ops.d.ts.map +1 -0
- package/dist/core/sdd-engine/git-ops.js +326 -0
- package/dist/core/sdd-engine/git-ops.js.map +1 -0
- package/dist/core/sdd-engine/index.d.ts +17 -0
- package/dist/core/sdd-engine/index.d.ts.map +1 -0
- package/dist/core/sdd-engine/index.js +15 -0
- package/dist/core/sdd-engine/index.js.map +1 -0
- package/dist/core/sdd-engine/ledger.d.ts +92 -0
- package/dist/core/sdd-engine/ledger.d.ts.map +1 -0
- package/dist/core/sdd-engine/ledger.js +273 -0
- package/dist/core/sdd-engine/ledger.js.map +1 -0
- package/dist/core/sdd-engine/model-selector.d.ts +49 -0
- package/dist/core/sdd-engine/model-selector.d.ts.map +1 -0
- package/dist/core/sdd-engine/model-selector.js +76 -0
- package/dist/core/sdd-engine/model-selector.js.map +1 -0
- package/dist/core/sdd-engine/parallel-dispatcher.d.ts +99 -0
- package/dist/core/sdd-engine/parallel-dispatcher.d.ts.map +1 -0
- package/dist/core/sdd-engine/parallel-dispatcher.js +350 -0
- package/dist/core/sdd-engine/parallel-dispatcher.js.map +1 -0
- package/dist/core/sdd-engine/review-loop.d.ts +61 -0
- package/dist/core/sdd-engine/review-loop.d.ts.map +1 -0
- package/dist/core/sdd-engine/review-loop.js +139 -0
- package/dist/core/sdd-engine/review-loop.js.map +1 -0
- package/dist/core/sdd-engine/types.d.ts +104 -0
- package/dist/core/sdd-engine/types.d.ts.map +1 -0
- package/dist/core/sdd-engine/types.js +7 -0
- package/dist/core/sdd-engine/types.js.map +1 -0
- package/dist/core/store/index.d.ts +78 -0
- package/dist/core/store/index.d.ts.map +1 -0
- package/dist/core/store/index.js +182 -0
- package/dist/core/store/index.js.map +1 -0
- package/dist/core/templates/index.d.ts +58 -0
- package/dist/core/templates/index.d.ts.map +1 -0
- package/dist/core/templates/index.js +158 -0
- package/dist/core/templates/index.js.map +1 -0
- package/dist/core/validation/index.d.ts +34 -0
- package/dist/core/validation/index.d.ts.map +1 -0
- package/dist/core/validation/index.js +153 -0
- package/dist/core/validation/index.js.map +1 -0
- package/dist/core/workflow-state.d.ts +96 -0
- package/dist/core/workflow-state.d.ts.map +1 -0
- package/dist/core/workflow-state.js +284 -0
- package/dist/core/workflow-state.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/index.d.ts +48 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +119 -0
- package/dist/utils/index.js.map +1 -0
- package/hooks/hooks.json +30 -0
- package/hooks/run-hook.cmd +19 -0
- package/hooks/session-start +62 -0
- package/hooks/workflow-state +150 -0
- package/package.json +122 -0
- package/schemas/bug-fix/schema.yaml +64 -0
- package/schemas/bug-fix/templates/analysis.md +43 -0
- package/schemas/bug-fix/templates/fix-plan.md +19 -0
- package/schemas/bug-fix/templates/proposal.md +30 -0
- package/schemas/crud-module/schema.yaml +65 -0
- package/schemas/crud-module/templates/design.md +36 -0
- package/schemas/crud-module/templates/proposal.md +30 -0
- package/schemas/crud-module/templates/spec.md +33 -0
- package/schemas/crud-module/templates/tasks.md +57 -0
- package/schemas/spec-driven/schema.yaml +87 -0
- package/schemas/spec-driven/templates/design.md +54 -0
- package/schemas/spec-driven/templates/proposal.md +31 -0
- package/schemas/spec-driven/templates/spec.md +44 -0
- package/schemas/spec-driven/templates/tasks.md +98 -0
- package/skills/business-code-review/SKILL.md +78 -0
- package/skills/business-db-design/SKILL.md +74 -0
- package/skills/business-deploy-check/SKILL.md +72 -0
- package/skills/business-doc-sync/SKILL.md +72 -0
- package/skills/business-java-codegen/SKILL.md +97 -0
- package/skills/business-menu-register/SKILL.md +63 -0
- package/skills/business-prd-writer/SKILL.md +80 -0
- package/skills/business-test-gen/SKILL.md +82 -0
- package/skills/business-ui-codegen/SKILL.md +104 -0
- package/skills/execution-finish-branch/SKILL.md +58 -0
- package/skills/execution-git-worktrees/SKILL.md +48 -0
- package/skills/execution-parallel-agents/SKILL.md +51 -0
- package/skills/execution-receiving-review/SKILL.md +47 -0
- package/skills/execution-requesting-review/SKILL.md +51 -0
- package/skills/execution-subagent-driven-dev/SKILL.md +148 -0
- package/skills/execution-systematic-debugging/SKILL.md +95 -0
- package/skills/execution-tdd/SKILL.md +74 -0
- package/skills/execution-verification-before-completion/SKILL.md +75 -0
- package/skills/meta-create-skill/SKILL.md +374 -0
- package/skills/meta-using-skills/SKILL.md +97 -0
- package/skills/meta-writing-skills/SKILL.md +66 -0
- package/skills/planning-apply-change/SKILL.md +199 -0
- package/skills/planning-archive-change/SKILL.md +43 -0
- package/skills/planning-explore/SKILL.md +108 -0
- package/skills/planning-onboard/SKILL.md +60 -0
- package/skills/planning-propose/SKILL.md +145 -0
- package/skills/planning-update-change/SKILL.md +45 -0
- package/skills/planning-verify-change/SKILL.md +58 -0
- package/skills/planning-write-design/SKILL.md +59 -0
- package/skills/planning-write-plans/SKILL.md +55 -0
- package/skills/planning-write-specs/SKILL.md +73 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config 命令 — 项目配置管理
|
|
3
|
+
*
|
|
4
|
+
* 委托给 core/config/global-config.ts 的 GlobalConfigManager
|
|
5
|
+
* 保持向后兼容的导出接口(readConfig/writeConfig/getConfigValue/setConfigValue/listConfig)
|
|
6
|
+
*/
|
|
7
|
+
import type { GlobalConfig } from '../core/config/config-schema.js';
|
|
8
|
+
/**
|
|
9
|
+
* 向后兼容的配置类型
|
|
10
|
+
* 映射到 GlobalConfig(core 层的 Zod 验证类型)
|
|
11
|
+
* 使用 passthrough 保留旧配置中的额外字段
|
|
12
|
+
*/
|
|
13
|
+
export type SpecPowConfig = GlobalConfig & Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* 读取配置 — 委托给 GlobalConfigManager
|
|
16
|
+
* 补充向后兼容字段(defaultSchema、defaultTool、paths)
|
|
17
|
+
*/
|
|
18
|
+
export declare function readConfig(projectRoot: string): SpecPowConfig;
|
|
19
|
+
/**
|
|
20
|
+
* 写入配置 — 委托给 GlobalConfigManager
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeConfig(projectRoot: string, config: SpecPowConfig): void;
|
|
23
|
+
/**
|
|
24
|
+
* 获取单个配置值 — 支持点号路径和向后兼容字段
|
|
25
|
+
*/
|
|
26
|
+
export declare function getConfigValue(projectRoot: string, key: string): unknown;
|
|
27
|
+
/**
|
|
28
|
+
* 设置单个配置值 — 委托给 GlobalConfigManager.set()
|
|
29
|
+
* 支持点号路径和自动类型强制转换
|
|
30
|
+
*/
|
|
31
|
+
export declare function setConfigValue(projectRoot: string, key: string, value: unknown): void;
|
|
32
|
+
/**
|
|
33
|
+
* 列出所有配置 — 返回完整配置对象(向后兼容)
|
|
34
|
+
*/
|
|
35
|
+
export declare function listConfig(projectRoot: string): SpecPowConfig;
|
|
36
|
+
/**
|
|
37
|
+
* CLI 入口:管理配置
|
|
38
|
+
*/
|
|
39
|
+
export declare function manageConfig(action: string, key?: string, value?: string): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAoB7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAG5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAiBxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGrF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAE7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD9F"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* config 命令 — 项目配置管理
|
|
3
|
+
*
|
|
4
|
+
* 委托给 core/config/global-config.ts 的 GlobalConfigManager
|
|
5
|
+
* 保持向后兼容的导出接口(readConfig/writeConfig/getConfigValue/setConfigValue/listConfig)
|
|
6
|
+
*/
|
|
7
|
+
import { GlobalConfigManager } from '../core/config/global-config.js';
|
|
8
|
+
/**
|
|
9
|
+
* 读取配置 — 委托给 GlobalConfigManager
|
|
10
|
+
* 补充向后兼容字段(defaultSchema、defaultTool、paths)
|
|
11
|
+
*/
|
|
12
|
+
export function readConfig(projectRoot) {
|
|
13
|
+
const mgr = new GlobalConfigManager(projectRoot);
|
|
14
|
+
const config = mgr.load();
|
|
15
|
+
// 使用 Record<string, unknown> 安全访问 passthrough 保留的旧字段
|
|
16
|
+
const raw = config;
|
|
17
|
+
const artifactGraph = raw.artifactGraph;
|
|
18
|
+
const tools = raw.tools;
|
|
19
|
+
// 向后兼容:从新结构映射旧字段
|
|
20
|
+
return {
|
|
21
|
+
...config,
|
|
22
|
+
defaultSchema: raw.defaultSchema || artifactGraph?.schema || 'spec-driven',
|
|
23
|
+
defaultTool: raw.defaultTool || tools?.[0]?.toolId || 'codebuddy',
|
|
24
|
+
paths: raw.paths || {
|
|
25
|
+
openspecDir: 'openspec',
|
|
26
|
+
schemasDir: 'schemas',
|
|
27
|
+
skillsDir: 'skills',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 写入配置 — 委托给 GlobalConfigManager
|
|
33
|
+
*/
|
|
34
|
+
export function writeConfig(projectRoot, config) {
|
|
35
|
+
const mgr = new GlobalConfigManager(projectRoot);
|
|
36
|
+
mgr.save(config);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 获取单个配置值 — 支持点号路径和向后兼容字段
|
|
40
|
+
*/
|
|
41
|
+
export function getConfigValue(projectRoot, key) {
|
|
42
|
+
// 先尝试从向后兼容的完整配置中查找
|
|
43
|
+
const config = readConfig(projectRoot);
|
|
44
|
+
const keys = key.split('.');
|
|
45
|
+
let value = config;
|
|
46
|
+
for (const k of keys) {
|
|
47
|
+
if (value && typeof value === 'object') {
|
|
48
|
+
value = value[k];
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (value !== undefined)
|
|
55
|
+
return value;
|
|
56
|
+
// 回退到核心配置管理器
|
|
57
|
+
const mgr = new GlobalConfigManager(projectRoot);
|
|
58
|
+
return mgr.get(key);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 设置单个配置值 — 委托给 GlobalConfigManager.set()
|
|
62
|
+
* 支持点号路径和自动类型强制转换
|
|
63
|
+
*/
|
|
64
|
+
export function setConfigValue(projectRoot, key, value) {
|
|
65
|
+
const mgr = new GlobalConfigManager(projectRoot);
|
|
66
|
+
mgr.set(key, value);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 列出所有配置 — 返回完整配置对象(向后兼容)
|
|
70
|
+
*/
|
|
71
|
+
export function listConfig(projectRoot) {
|
|
72
|
+
return readConfig(projectRoot);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* CLI 入口:管理配置
|
|
76
|
+
*/
|
|
77
|
+
export async function manageConfig(action, key, value) {
|
|
78
|
+
const projectRoot = process.cwd();
|
|
79
|
+
console.log(`\n⚙️ 配置管理\n`);
|
|
80
|
+
switch (action) {
|
|
81
|
+
case 'get':
|
|
82
|
+
if (!key) {
|
|
83
|
+
console.error('❌ 请指定配置键');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const val = getConfigValue(projectRoot, key);
|
|
87
|
+
console.log(`${key} = ${JSON.stringify(val)}`);
|
|
88
|
+
break;
|
|
89
|
+
case 'set':
|
|
90
|
+
if (!key || value === undefined) {
|
|
91
|
+
console.error('❌ 请指定配置键和值');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let parsedValue = value;
|
|
95
|
+
try {
|
|
96
|
+
parsedValue = JSON.parse(value);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// 保持字符串
|
|
100
|
+
}
|
|
101
|
+
setConfigValue(projectRoot, key, parsedValue);
|
|
102
|
+
console.log(`✓ 已设置 ${key} = ${JSON.stringify(parsedValue)}`);
|
|
103
|
+
break;
|
|
104
|
+
case 'delete':
|
|
105
|
+
if (!key) {
|
|
106
|
+
console.error('❌ 请指定配置键');
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const mgr = new GlobalConfigManager(projectRoot);
|
|
110
|
+
const deleted = mgr.delete(key);
|
|
111
|
+
if (deleted) {
|
|
112
|
+
console.log(`✓ 已删除 ${key}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.log(`⚠ ${key} 不存在`);
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
case 'reset':
|
|
119
|
+
const resetMgr = new GlobalConfigManager(projectRoot);
|
|
120
|
+
resetMgr.reset();
|
|
121
|
+
console.log('✓ 配置已重置为默认值');
|
|
122
|
+
break;
|
|
123
|
+
case 'list':
|
|
124
|
+
default:
|
|
125
|
+
const config = listConfig(projectRoot);
|
|
126
|
+
console.log(JSON.stringify(config, null, 2));
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAUtE;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE1B,qDAAqD;IACrD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,CAAC,aAAoD,CAAC;IAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAmD,CAAC;IAEtE,iBAAiB;IACjB,OAAO;QACL,GAAG,MAAM;QACT,aAAa,EAAG,GAAG,CAAC,aAAwB,IAAI,aAAa,EAAE,MAAgB,IAAI,aAAa;QAChG,WAAW,EAAG,GAAG,CAAC,WAAsB,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAgB,IAAI,WAAW;QACvF,KAAK,EAAG,GAAG,CAAC,KAAgC,IAAI;YAC9C,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,QAAQ;SACpB;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,MAAqB;IACpE,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,GAAW;IAC7D,mBAAmB;IACnB,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAA4B,CAAC;IAClE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,GAAY,MAAM,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEtC,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,GAAW,EAAE,KAAc;IAC7E,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,GAAY,EAAE,KAAc;IAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE5B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM;QAER,KAAK,KAAK;YACR,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,IAAI,WAAW,GAAY,KAAK,CAAC;YACjC,IAAI,CAAC;gBACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ;YACV,CAAC;YACD,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7D,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM;QAER,KAAK,OAAO;YACV,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACtD,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM;QAER,KAAK,MAAM,CAAC;QACZ;YACE,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM;IACV,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* debug 命令 — 系统化调试辅助
|
|
3
|
+
*
|
|
4
|
+
* 4 阶段根因分析流程:
|
|
5
|
+
* 1. 调查 — 收集日志、堆栈、复现步骤
|
|
6
|
+
* 2. 模式分析 — 识别错误模式
|
|
7
|
+
* 3. 假设测试 — 提出并验证根因假设
|
|
8
|
+
* 4. 实现修复 — 修复并验证
|
|
9
|
+
*/
|
|
10
|
+
export interface DebugSession {
|
|
11
|
+
id: string;
|
|
12
|
+
startTime: string;
|
|
13
|
+
phase: 'investigation' | 'pattern-analysis' | 'hypothesis' | 'fix';
|
|
14
|
+
evidence: Evidence[];
|
|
15
|
+
hypotheses: Hypothesis[];
|
|
16
|
+
conclusion?: string;
|
|
17
|
+
fix?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface Evidence {
|
|
20
|
+
type: 'log' | 'stack' | 'reproduction' | 'code' | 'config';
|
|
21
|
+
source: string;
|
|
22
|
+
content: string;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
}
|
|
25
|
+
export interface Hypothesis {
|
|
26
|
+
id: string;
|
|
27
|
+
description: string;
|
|
28
|
+
confidence: 'low' | 'medium' | 'high';
|
|
29
|
+
evidence: string[];
|
|
30
|
+
verified: boolean;
|
|
31
|
+
verificationMethod?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 启动调试会话
|
|
35
|
+
*/
|
|
36
|
+
export declare function startDebugSession(projectRoot: string, description: string): Promise<DebugSession>;
|
|
37
|
+
/**
|
|
38
|
+
* 生成调试报告
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateDebugReport(session: DebugSession): string;
|
|
41
|
+
/**
|
|
42
|
+
* CLI 入口:系统化调试
|
|
43
|
+
*/
|
|
44
|
+
export declare function systematicDebug(description: string): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,eAAe,GAAG,kBAAkB,GAAG,YAAY,GAAG,KAAK,CAAC;IACnE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAwBvB;AA8DD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAqDjE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* debug 命令 — 系统化调试辅助
|
|
3
|
+
*
|
|
4
|
+
* 4 阶段根因分析流程:
|
|
5
|
+
* 1. 调查 — 收集日志、堆栈、复现步骤
|
|
6
|
+
* 2. 模式分析 — 识别错误模式
|
|
7
|
+
* 3. 假设测试 — 提出并验证根因假设
|
|
8
|
+
* 4. 实现修复 — 修复并验证
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { execFileSync } from 'child_process';
|
|
13
|
+
/**
|
|
14
|
+
* 启动调试会话
|
|
15
|
+
*/
|
|
16
|
+
export async function startDebugSession(projectRoot, description) {
|
|
17
|
+
const session = {
|
|
18
|
+
id: `debug-${Date.now()}`,
|
|
19
|
+
startTime: new Date().toISOString(),
|
|
20
|
+
phase: 'investigation',
|
|
21
|
+
evidence: [],
|
|
22
|
+
hypotheses: [],
|
|
23
|
+
};
|
|
24
|
+
// 保存描述为初始证据
|
|
25
|
+
if (description) {
|
|
26
|
+
session.evidence.push({
|
|
27
|
+
type: 'code',
|
|
28
|
+
source: 'user-description',
|
|
29
|
+
content: description,
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// 自动收集证据
|
|
34
|
+
const autoEvidence = await collectAutoEvidence(projectRoot);
|
|
35
|
+
session.evidence.push(...autoEvidence);
|
|
36
|
+
return session;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 自动收集证据
|
|
40
|
+
*/
|
|
41
|
+
async function collectAutoEvidence(projectRoot) {
|
|
42
|
+
const evidence = [];
|
|
43
|
+
const now = new Date().toISOString();
|
|
44
|
+
// 1. 最近的 git log
|
|
45
|
+
try {
|
|
46
|
+
const gitLog = execFileSync('git', ['log', '--oneline', '-10'], {
|
|
47
|
+
cwd: projectRoot,
|
|
48
|
+
encoding: 'utf-8',
|
|
49
|
+
});
|
|
50
|
+
evidence.push({
|
|
51
|
+
type: 'code',
|
|
52
|
+
source: 'git log',
|
|
53
|
+
content: gitLog,
|
|
54
|
+
timestamp: now,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// git 不可用
|
|
59
|
+
}
|
|
60
|
+
// 2. 最近的 git diff
|
|
61
|
+
try {
|
|
62
|
+
const gitDiff = execFileSync('git', ['diff', '--stat', 'HEAD~3'], {
|
|
63
|
+
cwd: projectRoot,
|
|
64
|
+
encoding: 'utf-8',
|
|
65
|
+
});
|
|
66
|
+
evidence.push({
|
|
67
|
+
type: 'code',
|
|
68
|
+
source: 'git diff',
|
|
69
|
+
content: gitDiff,
|
|
70
|
+
timestamp: now,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// 忽略
|
|
75
|
+
}
|
|
76
|
+
// 3. 检查错误日志文件
|
|
77
|
+
const logFiles = ['error.log', 'app.log', 'logs/error.log', 'logs/app.log'];
|
|
78
|
+
for (const logFile of logFiles) {
|
|
79
|
+
const logPath = path.join(projectRoot, logFile);
|
|
80
|
+
if (fs.existsSync(logPath)) {
|
|
81
|
+
const stats = fs.statSync(logPath);
|
|
82
|
+
const content = fs.readFileSync(logPath, 'utf-8');
|
|
83
|
+
// 取最后 50 行
|
|
84
|
+
const lastLines = content.split('\n').slice(-50).join('\n');
|
|
85
|
+
evidence.push({
|
|
86
|
+
type: 'log',
|
|
87
|
+
source: logFile,
|
|
88
|
+
content: lastLines,
|
|
89
|
+
timestamp: stats.mtime.toISOString(),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return evidence;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 生成调试报告
|
|
97
|
+
*/
|
|
98
|
+
export function generateDebugReport(session) {
|
|
99
|
+
const lines = [];
|
|
100
|
+
lines.push('# 调试报告');
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push(`**会话 ID**: ${session.id}`);
|
|
103
|
+
lines.push(`**开始时间**: ${session.startTime}`);
|
|
104
|
+
lines.push(`**当前阶段**: ${session.phase}`);
|
|
105
|
+
lines.push('');
|
|
106
|
+
// 证据
|
|
107
|
+
lines.push('## 收集的证据');
|
|
108
|
+
lines.push('');
|
|
109
|
+
for (const e of session.evidence) {
|
|
110
|
+
lines.push(`### ${e.type} — ${e.source}`);
|
|
111
|
+
lines.push(`时间: ${e.timestamp}`);
|
|
112
|
+
lines.push('```');
|
|
113
|
+
lines.push(e.content.substring(0, 1000));
|
|
114
|
+
lines.push('```');
|
|
115
|
+
lines.push('');
|
|
116
|
+
}
|
|
117
|
+
// 假设
|
|
118
|
+
if (session.hypotheses.length > 0) {
|
|
119
|
+
lines.push('## 根因假设');
|
|
120
|
+
lines.push('');
|
|
121
|
+
for (const h of session.hypotheses) {
|
|
122
|
+
const status = h.verified ? '✅ 已验证' : '⏳ 待验证';
|
|
123
|
+
lines.push(`### ${h.id}: ${h.description} [${h.confidence}] ${status}`);
|
|
124
|
+
if (h.verificationMethod) {
|
|
125
|
+
lines.push(`验证方法: ${h.verificationMethod}`);
|
|
126
|
+
}
|
|
127
|
+
lines.push('');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// 结论
|
|
131
|
+
if (session.conclusion) {
|
|
132
|
+
lines.push('## 结论');
|
|
133
|
+
lines.push('');
|
|
134
|
+
lines.push(session.conclusion);
|
|
135
|
+
lines.push('');
|
|
136
|
+
}
|
|
137
|
+
// 修复
|
|
138
|
+
if (session.fix) {
|
|
139
|
+
lines.push('## 修复方案');
|
|
140
|
+
lines.push('');
|
|
141
|
+
lines.push(session.fix);
|
|
142
|
+
lines.push('');
|
|
143
|
+
}
|
|
144
|
+
return lines.join('\n');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* CLI 入口:系统化调试
|
|
148
|
+
*/
|
|
149
|
+
export async function systematicDebug(description) {
|
|
150
|
+
const projectRoot = process.cwd();
|
|
151
|
+
console.log(`\n🐛 系统化调试\n`);
|
|
152
|
+
console.log(`问题描述: ${description}\n`);
|
|
153
|
+
const session = await startDebugSession(projectRoot, description);
|
|
154
|
+
console.log(`📊 调试会话: ${session.id}`);
|
|
155
|
+
console.log(`阶段: ${session.phase}`);
|
|
156
|
+
console.log(`收集证据: ${session.evidence.length} 项\n`);
|
|
157
|
+
session.evidence.forEach((e, i) => {
|
|
158
|
+
console.log(` ${i + 1}. [${e.type}] ${e.source}`);
|
|
159
|
+
console.log(` 时间: ${e.timestamp}`);
|
|
160
|
+
console.log(` 内容预览: ${e.content.substring(0, 100)}...`);
|
|
161
|
+
console.log();
|
|
162
|
+
});
|
|
163
|
+
const report = generateDebugReport(session);
|
|
164
|
+
console.log(report);
|
|
165
|
+
console.log(`\n💡 提示: 运行 'specpow debug --report' 生成完整报告`);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doctor 命令 — 项目健康检查
|
|
3
|
+
*
|
|
4
|
+
* 检查 SpecPow 安装状态、配置正确性、依赖完整性
|
|
5
|
+
*/
|
|
6
|
+
export interface DoctorCheck {
|
|
7
|
+
name: string;
|
|
8
|
+
status: 'ok' | 'warn' | 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
fix?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 执行项目健康检查
|
|
14
|
+
*/
|
|
15
|
+
export declare function runDoctor(projectRoot: string): Promise<DoctorCheck[]>;
|
|
16
|
+
/**
|
|
17
|
+
* CLI 入口:诊断
|
|
18
|
+
*/
|
|
19
|
+
export declare function diagnose(): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA+E3E;AAYD;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B9C"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* doctor 命令 — 项目健康检查
|
|
3
|
+
*
|
|
4
|
+
* 检查 SpecPow 安装状态、配置正确性、依赖完整性
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
/**
|
|
9
|
+
* 执行项目健康检查
|
|
10
|
+
*/
|
|
11
|
+
export async function runDoctor(projectRoot) {
|
|
12
|
+
const checks = [];
|
|
13
|
+
// 1. 检查 openspec 目录
|
|
14
|
+
const openspecDir = path.join(projectRoot, 'openspec');
|
|
15
|
+
checks.push({
|
|
16
|
+
name: 'OpenSpec 目录',
|
|
17
|
+
status: fs.existsSync(openspecDir) ? 'ok' : 'error',
|
|
18
|
+
message: fs.existsSync(openspecDir) ? 'openspec/ 目录存在' : 'openspec/ 目录不存在',
|
|
19
|
+
fix: fs.existsSync(openspecDir) ? undefined : '运行 specpow init 初始化',
|
|
20
|
+
});
|
|
21
|
+
// 2. 检查 Schema 文件
|
|
22
|
+
const schemaDir = path.join(projectRoot, 'schemas');
|
|
23
|
+
const hasSchema = fs.existsSync(path.join(schemaDir, 'spec-driven', 'schema.yaml'));
|
|
24
|
+
checks.push({
|
|
25
|
+
name: '默认 Schema',
|
|
26
|
+
status: hasSchema ? 'ok' : 'warn',
|
|
27
|
+
message: hasSchema ? 'spec-driven Schema 已安装' : '未找到默认 Schema',
|
|
28
|
+
fix: hasSchema ? undefined : '运行 specpow init 重新安装',
|
|
29
|
+
});
|
|
30
|
+
// 3. 检查技能文件
|
|
31
|
+
const skillsDir = path.join(projectRoot, 'skills');
|
|
32
|
+
const skillCount = countSkillFiles(skillsDir);
|
|
33
|
+
checks.push({
|
|
34
|
+
name: '技能文件',
|
|
35
|
+
status: skillCount > 0 ? 'ok' : 'warn',
|
|
36
|
+
message: `找到 ${skillCount} 个技能文件`,
|
|
37
|
+
fix: skillCount === 0 ? '运行 specpow init 安装技能' : undefined,
|
|
38
|
+
});
|
|
39
|
+
// 4. 检查 AI 工具配置
|
|
40
|
+
const tools = [
|
|
41
|
+
{ name: 'Claude Code', dir: '.claude/commands' },
|
|
42
|
+
{ name: 'Cursor', dir: '.cursor/rules' },
|
|
43
|
+
{ name: 'CodeBuddy', dir: '.codebuddy/rules' },
|
|
44
|
+
{ name: 'Copilot', dir: '.github/copilot-instructions.md' },
|
|
45
|
+
];
|
|
46
|
+
for (const tool of tools) {
|
|
47
|
+
const toolPath = path.join(projectRoot, tool.dir);
|
|
48
|
+
const exists = fs.existsSync(toolPath);
|
|
49
|
+
checks.push({
|
|
50
|
+
name: `${tool.name} 配置`,
|
|
51
|
+
status: exists ? 'ok' : 'warn',
|
|
52
|
+
message: exists ? `${tool.name} 命令已安装` : `${tool.name} 未配置`,
|
|
53
|
+
fix: exists ? undefined : `运行 specpow init --tool ${tool.name.toLowerCase().split(' ')[0]}`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// 5. 检查 Hook 配置
|
|
57
|
+
const hooksFile = path.join(projectRoot, 'hooks', 'hooks.json');
|
|
58
|
+
checks.push({
|
|
59
|
+
name: 'Hook 配置',
|
|
60
|
+
status: fs.existsSync(hooksFile) ? 'ok' : 'warn',
|
|
61
|
+
message: fs.existsSync(hooksFile) ? 'Hook 配置存在' : '未找到 Hook 配置',
|
|
62
|
+
});
|
|
63
|
+
// 6. 检查 Node.js 版本
|
|
64
|
+
const nodeVersion = process.version;
|
|
65
|
+
const major = parseInt(nodeVersion.slice(1).split('.')[0]);
|
|
66
|
+
checks.push({
|
|
67
|
+
name: 'Node.js 版本',
|
|
68
|
+
status: major >= 20 ? 'ok' : 'error',
|
|
69
|
+
message: `当前版本: ${nodeVersion}`,
|
|
70
|
+
fix: major < 20 ? '升级到 Node.js >= 20.19.0' : undefined,
|
|
71
|
+
});
|
|
72
|
+
// 7. 检查依赖安装
|
|
73
|
+
const nodeModules = path.join(projectRoot, 'node_modules');
|
|
74
|
+
checks.push({
|
|
75
|
+
name: '依赖安装',
|
|
76
|
+
status: fs.existsSync(nodeModules) ? 'ok' : 'error',
|
|
77
|
+
message: fs.existsSync(nodeModules) ? 'node_modules 存在' : '依赖未安装',
|
|
78
|
+
fix: fs.existsSync(nodeModules) ? undefined : '运行 pnpm install',
|
|
79
|
+
});
|
|
80
|
+
return checks;
|
|
81
|
+
}
|
|
82
|
+
function countSkillFiles(dir) {
|
|
83
|
+
if (!fs.existsSync(dir))
|
|
84
|
+
return 0;
|
|
85
|
+
let count = 0;
|
|
86
|
+
const entries = fs.readdirSync(dir, { recursive: true, withFileTypes: true });
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
if (entry.isFile() && entry.name === 'SKILL.md')
|
|
89
|
+
count++;
|
|
90
|
+
}
|
|
91
|
+
return count;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* CLI 入口:诊断
|
|
95
|
+
*/
|
|
96
|
+
export async function diagnose() {
|
|
97
|
+
const projectRoot = process.cwd();
|
|
98
|
+
console.log(`\n🏥 项目健康检查\n`);
|
|
99
|
+
const checks = await runDoctor(projectRoot);
|
|
100
|
+
checks.forEach(check => {
|
|
101
|
+
const icon = check.status === 'ok' ? '✓' : check.status === 'warn' ? '⚠' : '✗';
|
|
102
|
+
console.log(`${icon} ${check.name}: ${check.message}`);
|
|
103
|
+
if (check.fix) {
|
|
104
|
+
console.log(` 修复: ${check.fix}`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
const okCount = checks.filter(c => c.status === 'ok').length;
|
|
108
|
+
const warnCount = checks.filter(c => c.status === 'warn').length;
|
|
109
|
+
const errorCount = checks.filter(c => c.status === 'error').length;
|
|
110
|
+
console.log(`\n📊 汇总: ${okCount} 通过, ${warnCount} 警告, ${errorCount} 错误`);
|
|
111
|
+
if (errorCount > 0) {
|
|
112
|
+
console.log(`\n❌ 发现 ${errorCount} 个错误,请修复后重试`);
|
|
113
|
+
}
|
|
114
|
+
else if (warnCount > 0) {
|
|
115
|
+
console.log(`\n⚠️ 发现 ${warnCount} 个警告,建议处理`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log(`\n✅ 项目健康状态良好`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute 命令 — 直接执行任务(跳过规范流程)
|
|
3
|
+
*
|
|
4
|
+
* 用于快速执行单个任务,不经过完整的 propose → apply 流程
|
|
5
|
+
* 适用于:紧急修复、小改动、实验性修改
|
|
6
|
+
*/
|
|
7
|
+
export interface ExecuteOptions {
|
|
8
|
+
task: string;
|
|
9
|
+
files?: string[];
|
|
10
|
+
model?: string;
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 直接执行任务
|
|
15
|
+
*/
|
|
16
|
+
export declare function executeTask(projectRoot: string, options: ExecuteOptions): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* CLI 入口:执行 SDD
|
|
19
|
+
*/
|
|
20
|
+
export declare function executeSDD(planFile: string, options: {
|
|
21
|
+
model?: string;
|
|
22
|
+
maxFixRounds?: string;
|
|
23
|
+
parallel?: boolean;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
|