@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,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-deploy-check
|
|
3
|
+
description: SpecPow business-deploy-check skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 部署检查
|
|
7
|
+
> 在部署前执行全面检查,确保代码、配置、依赖就绪
|
|
8
|
+
|
|
9
|
+
## 触发条件
|
|
10
|
+
|
|
11
|
+
- 用户提到"部署"/"发布"/"上线"
|
|
12
|
+
- 准备合并到主分支前
|
|
13
|
+
- CI/CD 流水线触发前
|
|
14
|
+
|
|
15
|
+
## 检查清单
|
|
16
|
+
|
|
17
|
+
### 1. 代码完整性
|
|
18
|
+
- [ ] 所有任务已完成(tasks.md 全部 [x])
|
|
19
|
+
- [ ] 无未提交的变更(git status clean)
|
|
20
|
+
- [ ] 分支已 rebase 到最新主分支
|
|
21
|
+
|
|
22
|
+
### 2. 构建验证
|
|
23
|
+
- [ ] 后端编译通过(mvn clean package)
|
|
24
|
+
- [ ] 前端构建通过(npm run build)
|
|
25
|
+
- [ ] 无编译警告(或警告已评估)
|
|
26
|
+
|
|
27
|
+
### 3. 测试验证
|
|
28
|
+
- [ ] 单元测试全部通过
|
|
29
|
+
- [ ] 测试覆盖率 ≥ 阈值
|
|
30
|
+
- [ ] 集成测试通过(如有)
|
|
31
|
+
|
|
32
|
+
### 4. 配置检查
|
|
33
|
+
- [ ] 环境变量已配置
|
|
34
|
+
- [ ] 数据库变更脚本已准备
|
|
35
|
+
- [ ] 配置文件无硬编码敏感信息
|
|
36
|
+
- [ ] 多环境配置一致(dev/test/prod)
|
|
37
|
+
|
|
38
|
+
### 5. 依赖检查
|
|
39
|
+
- [ ] 无 SNAPSHOT 版本依赖
|
|
40
|
+
- [ ] 新增依赖已审批
|
|
41
|
+
- [ ] 依赖安全扫描通过
|
|
42
|
+
|
|
43
|
+
### 6. 文档检查
|
|
44
|
+
- [ ] API 文档已更新
|
|
45
|
+
- [ ] 变更日志已编写
|
|
46
|
+
- [ ] 运维手册已更新(如需要)
|
|
47
|
+
|
|
48
|
+
## 输出格式
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
# 部署检查报告
|
|
52
|
+
|
|
53
|
+
## 检查结果: ✅ 通过 / ❌ 未通过
|
|
54
|
+
|
|
55
|
+
### 通过项 (8/10)
|
|
56
|
+
- ✅ 代码完整性
|
|
57
|
+
- ✅ 构建验证
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
### 未通过项
|
|
61
|
+
- ❌ 测试覆盖率 58% < 60% 阈值
|
|
62
|
+
- 建议: 补充 XxxService 的测试用例
|
|
63
|
+
|
|
64
|
+
### 风险提示
|
|
65
|
+
- 新增依赖: xxx-lib 2.0.0(首次引入)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 红旗
|
|
69
|
+
|
|
70
|
+
- 任何"代码完整性"检查失败 → 阻止部署
|
|
71
|
+
- 安全扫描发现高危漏洞 → 阻止部署
|
|
72
|
+
- 配置不一致 → 警告并确认
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-doc-sync
|
|
3
|
+
description: SpecPow business-doc-sync skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 文档同步
|
|
7
|
+
|
|
8
|
+
> 确保代码变更后,相关文档同步更新
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
- 代码变更完成后
|
|
13
|
+
- API 接口发生变化
|
|
14
|
+
- 数据库结构发生变更
|
|
15
|
+
- 用户提到"更新文档"/"同步文档"
|
|
16
|
+
|
|
17
|
+
## 铁律
|
|
18
|
+
|
|
19
|
+
1. **代码即文档** — 代码变更必须伴随文档更新
|
|
20
|
+
2. **自动检测** — 扫描变更文件,识别需要同步的文档
|
|
21
|
+
3. **不遗漏** — API、数据库、配置变更必须同步
|
|
22
|
+
|
|
23
|
+
## 检查维度
|
|
24
|
+
|
|
25
|
+
### 1. API 文档
|
|
26
|
+
- Controller 变更 → 更新 Swagger/接口文档
|
|
27
|
+
- 新增接口 → 添加接口说明
|
|
28
|
+
- 修改参数 → 更新参数说明
|
|
29
|
+
- 删除接口 → 标记废弃
|
|
30
|
+
|
|
31
|
+
### 2. 数据库文档
|
|
32
|
+
- DDL 变更 → 更新数据字典
|
|
33
|
+
- 新增表 → 添加表说明
|
|
34
|
+
- 修改字段 → 更新字段说明
|
|
35
|
+
|
|
36
|
+
### 3. 配置文档
|
|
37
|
+
- 新增配置项 → 更新配置说明
|
|
38
|
+
- 修改默认值 → 更新配置示例
|
|
39
|
+
|
|
40
|
+
### 4. README / CHANGELOG
|
|
41
|
+
- 功能变更 → 更新 README
|
|
42
|
+
- 版本发布 → 编写 CHANGELOG
|
|
43
|
+
|
|
44
|
+
## 工作流
|
|
45
|
+
|
|
46
|
+
1. **扫描变更** — 获取 git diff 或变更文件列表
|
|
47
|
+
2. **识别影响** — 判断哪些文档需要同步
|
|
48
|
+
3. **生成更新** — 自动更新受影响的文档
|
|
49
|
+
4. **验证一致性** — 检查文档与代码是否一致
|
|
50
|
+
|
|
51
|
+
## 输出格式
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
# 文档同步报告
|
|
55
|
+
|
|
56
|
+
## 需要同步的文档 (3)
|
|
57
|
+
1. `docs/api/user-api.md` — 新增 2 个接口
|
|
58
|
+
2. `docs/data-dictionary.md` — 新增 1 张表
|
|
59
|
+
3. `CHANGELOG.md` — 添加 v1.2.0 变更记录
|
|
60
|
+
|
|
61
|
+
## 已自动更新
|
|
62
|
+
- ✓ docs/api/user-api.md
|
|
63
|
+
- ✓ docs/data-dictionary.md
|
|
64
|
+
|
|
65
|
+
## 需要手动确认
|
|
66
|
+
- ⚠️ README.md — 建议添加新功能说明
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 红旗
|
|
70
|
+
|
|
71
|
+
- API 变更但无文档更新 → 警告
|
|
72
|
+
- 数据库变更但数据字典未更新 → 警告
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-java-codegen
|
|
3
|
+
description: SpecPow business-java-codegen skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Java 代码生成
|
|
7
|
+
|
|
8
|
+
> 根据设计文档和数据库表结构,生成符合项目规范的 Java 后端代码(Entity/Mapper/Service/Controller 四层)
|
|
9
|
+
|
|
10
|
+
## 技术栈配置
|
|
11
|
+
|
|
12
|
+
本技能的**默认**技术栈为 MyBatis-Plus + Spring Boot,但会根据项目实际使用的框架自动适配:
|
|
13
|
+
|
|
14
|
+
- **ORM 框架** — 优先使用项目已有的 ORM(MyBatis-Plus / JPA / MyBatis / JDBC Template)
|
|
15
|
+
- **基类** — 扫描项目已有 BaseEntity、BaseController 等基类并继承
|
|
16
|
+
- **包名规范** — 从已有代码推断包结构,而非硬编码
|
|
17
|
+
- **返回格式** — 使用项目已有的统一返回类型(Result / Response / ApiResponse)
|
|
18
|
+
|
|
19
|
+
如果项目无已有代码可参考,则在阶段 1 询问用户确认技术选型。
|
|
20
|
+
|
|
21
|
+
## 触发条件
|
|
22
|
+
|
|
23
|
+
- 用户要求生成 Java 代码
|
|
24
|
+
- 执行 apply-change 时涉及后端任务
|
|
25
|
+
- 用户提到"生成接口"/"写 Service"/"创建 Controller"
|
|
26
|
+
|
|
27
|
+
## 铁律
|
|
28
|
+
|
|
29
|
+
1. **先查 DB 再生成** — 必须确认表结构已存在,字段名以数据库为准
|
|
30
|
+
2. **四层齐全** — Entity、Mapper(XML)、Service(Interface+Impl)、Controller 缺一不可
|
|
31
|
+
3. **不造轮子** — 使用项目已有的基类(BaseEntity、BaseController 等)
|
|
32
|
+
4. **注释完整** — 类注释、方法注释、关键逻辑行注释
|
|
33
|
+
|
|
34
|
+
## 工作流
|
|
35
|
+
|
|
36
|
+
### 阶段 1:上下文收集
|
|
37
|
+
|
|
38
|
+
1. 读取 design.md 获取接口定义和数据模型
|
|
39
|
+
2. 查询数据库表结构(DDL 或已有 Entity)
|
|
40
|
+
3. **扫描项目已有代码,识别技术栈**(ORM 框架、基类、包名、返回格式)
|
|
41
|
+
4. 如果项目无已有代码,询问用户确认技术选型
|
|
42
|
+
|
|
43
|
+
### 阶段 2:代码生成
|
|
44
|
+
|
|
45
|
+
按以下顺序生成:
|
|
46
|
+
|
|
47
|
+
**2.1 Entity(实体类)**
|
|
48
|
+
```
|
|
49
|
+
- 继承 BaseEntity(如有)
|
|
50
|
+
- 字段与数据库列一一对应
|
|
51
|
+
- 使用 @Table、@Column 注解
|
|
52
|
+
- 包含 getter/setter 或 @Data
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**2.2 Mapper(数据访问层)**
|
|
56
|
+
```
|
|
57
|
+
- 继承 BaseMapper<T>(MyBatis-Plus)或对应基类
|
|
58
|
+
- 自定义 SQL 写在 XML 中
|
|
59
|
+
- 复杂查询方法命名:select + By + 条件
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**2.3 Service(业务逻辑层)**
|
|
63
|
+
```
|
|
64
|
+
- 接口 + 实现分离
|
|
65
|
+
- 继承 IService<T> / ServiceImpl(如有基类)
|
|
66
|
+
- 事务注解 @Transactional 加在实现类方法上
|
|
67
|
+
- 业务异常使用自定义 BusinessException
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**2.4 Controller(控制层)**
|
|
71
|
+
```
|
|
72
|
+
- 继承 BaseController(如有)
|
|
73
|
+
- RESTful 风格:GET 查询、POST 创建、PUT 更新、DELETE 删除
|
|
74
|
+
- 参数校验使用 @Valid + DTO
|
|
75
|
+
- 统一返回 Result<T> 格式
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 阶段 3:验证
|
|
79
|
+
|
|
80
|
+
1. 编译检查:确保无语法错误
|
|
81
|
+
2. 依赖检查:所有 import 可解析
|
|
82
|
+
3. 规范检查:命名、注释、分层符合规范
|
|
83
|
+
|
|
84
|
+
## 输出格式
|
|
85
|
+
|
|
86
|
+
每个文件输出时标注:
|
|
87
|
+
```
|
|
88
|
+
文件: src/main/java/com/company/xxx/entity/XxxEntity.java
|
|
89
|
+
类型: Entity
|
|
90
|
+
依赖: BaseEntity, Lombok
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 红旗(立即停止)
|
|
94
|
+
|
|
95
|
+
- 数据库表不存在 → 先执行 DB 设计
|
|
96
|
+
- 项目无基类且用户未指定 → 询问用户
|
|
97
|
+
- 发现已有同名类 → 报告冲突,不覆盖
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-menu-register
|
|
3
|
+
description: SpecPow business-menu-register skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 菜单注册
|
|
7
|
+
|
|
8
|
+
> 根据新增页面/功能,生成系统菜单注册 SQL 和路由配置
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
- 新增页面需要注册到系统菜单
|
|
13
|
+
- 用户提到"注册菜单"/"添加菜单"/"系统菜单"
|
|
14
|
+
- 新模块的权限配置
|
|
15
|
+
|
|
16
|
+
## 铁律
|
|
17
|
+
|
|
18
|
+
1. **层级正确** — 一级菜单 → 二级菜单 → 按钮权限
|
|
19
|
+
2. **ID 唯一** — 菜单 ID 不与已有冲突
|
|
20
|
+
3. **路径一致** — 菜单路径与前端路由一致
|
|
21
|
+
4. **权限编码规范** — 模块:功能:操作
|
|
22
|
+
|
|
23
|
+
## 菜单结构
|
|
24
|
+
|
|
25
|
+
```sql
|
|
26
|
+
-- 一级菜单(目录)
|
|
27
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, menu_type, visible, status)
|
|
28
|
+
VALUES (2000, '模块名称', 0, 1, '/module', 'M', '0', '0');
|
|
29
|
+
|
|
30
|
+
-- 二级菜单(页面)
|
|
31
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status)
|
|
32
|
+
VALUES (2001, '页面名称', 2000, 1, 'page', 'module/page/index', 'C', '0', '0');
|
|
33
|
+
|
|
34
|
+
-- 按钮权限
|
|
35
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
|
|
36
|
+
VALUES (2011, '新增', 2001, 1, 'F', 'module:entity:add', '0', '0');
|
|
37
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
|
|
38
|
+
VALUES (2012, '修改', 2001, 2, 'F', 'module:entity:edit', '0', '0');
|
|
39
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
|
|
40
|
+
VALUES (2013, '删除', 2001, 3, 'F', 'module:entity:remove', '0', '0');
|
|
41
|
+
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
|
|
42
|
+
VALUES (2014, '查询', 2001, 4, 'F', 'module:entity:query', '0', '0');
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 工作流
|
|
46
|
+
|
|
47
|
+
1. **扫描已有菜单** — 查询最大 menu_id,避免冲突
|
|
48
|
+
2. **确认菜单层级** — 目录(M) → 菜单(C) → 按钮(F)
|
|
49
|
+
3. **生成 SQL** — 按层级顺序生成 INSERT 语句
|
|
50
|
+
4. **生成路由** — 对应的前端路由配置
|
|
51
|
+
5. **验证** — 检查 ID 唯一性和路径一致性
|
|
52
|
+
|
|
53
|
+
## 输出格式
|
|
54
|
+
|
|
55
|
+
1. 菜单注册 SQL(可直接执行)
|
|
56
|
+
2. 前端路由配置
|
|
57
|
+
3. 权限编码清单
|
|
58
|
+
|
|
59
|
+
## 红旗
|
|
60
|
+
|
|
61
|
+
- 菜单 ID 冲突 → 重新分配
|
|
62
|
+
- 路径与已有路由冲突 → 报告冲突
|
|
63
|
+
- 缺少父级菜单 → 先创建目录
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-prd-writer
|
|
3
|
+
description: SpecPow business-prd-writer skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PRD 编写
|
|
7
|
+
|
|
8
|
+
> 将用户口述、会议纪要、原型截图转化为结构化 PRD 文档
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
- 用户描述一个新功能/需求
|
|
13
|
+
- 用户提到"写 PRD"/"需求文档"/"产品需求"
|
|
14
|
+
- 项目启动阶段的需求梳理
|
|
15
|
+
|
|
16
|
+
## 铁律
|
|
17
|
+
|
|
18
|
+
1. **不替用户决定** — 不确定的地方标注 [待确认]
|
|
19
|
+
2. **用例驱动** — 每个功能点至少 1 个用例
|
|
20
|
+
3. **可验证** — 每个需求有明确的验收标准
|
|
21
|
+
4. **边界清晰** — 明确"做什么"和"不做什么"
|
|
22
|
+
|
|
23
|
+
## PRD 结构
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
# [功能名称] PRD
|
|
27
|
+
|
|
28
|
+
## 1. 背景与目标
|
|
29
|
+
- 业务背景
|
|
30
|
+
- 核心目标(可量化)
|
|
31
|
+
- 成功指标
|
|
32
|
+
|
|
33
|
+
## 2. 用户角色
|
|
34
|
+
| 角色 | 描述 | 核心诉求 |
|
|
35
|
+
|------|------|----------|
|
|
36
|
+
|
|
37
|
+
## 3. 功能需求
|
|
38
|
+
### 3.1 [功能模块]
|
|
39
|
+
- 用例 UC-001: [用例名称]
|
|
40
|
+
- 前置条件:
|
|
41
|
+
- 主流程:
|
|
42
|
+
- 备选流程:
|
|
43
|
+
- 异常流程:
|
|
44
|
+
|
|
45
|
+
## 4. 非功能需求
|
|
46
|
+
- 性能要求
|
|
47
|
+
- 安全要求
|
|
48
|
+
- 兼容性要求
|
|
49
|
+
|
|
50
|
+
## 5. 数据需求
|
|
51
|
+
- 核心实体
|
|
52
|
+
- 字段清单
|
|
53
|
+
- 数据流向
|
|
54
|
+
|
|
55
|
+
## 6. 界面原型
|
|
56
|
+
- 页面列表
|
|
57
|
+
- 关键交互说明
|
|
58
|
+
|
|
59
|
+
## 7. 排期建议
|
|
60
|
+
- 优先级排序(P0/P1/P2)
|
|
61
|
+
- 依赖关系
|
|
62
|
+
|
|
63
|
+
## 8. 待确认项
|
|
64
|
+
- [ ] 问题1
|
|
65
|
+
- [ ] 问题2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 工作流
|
|
69
|
+
|
|
70
|
+
1. **收集信息** — 与用户对话,提取关键需求
|
|
71
|
+
2. **结构化** — 按 PRD 模板整理
|
|
72
|
+
3. **补充细节** — 推断合理的用例和边界
|
|
73
|
+
4. **标注不确定** — 用 [待确认] 标记
|
|
74
|
+
5. **用户确认** — 输出后请用户审核
|
|
75
|
+
|
|
76
|
+
## 红旗
|
|
77
|
+
|
|
78
|
+
- 用户描述模糊 → 提出澄清问题,不猜测
|
|
79
|
+
- 需求超出当前迭代 → 标注"后续迭代"
|
|
80
|
+
- 涉及其他系统 → 标注集成依赖
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-test-gen
|
|
3
|
+
description: SpecPow business-test-gen skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 测试代码生成
|
|
7
|
+
|
|
8
|
+
> 根据业务层代码,生成单元测试
|
|
9
|
+
|
|
10
|
+
## 技术栈配置
|
|
11
|
+
|
|
12
|
+
本技能的**默认**技术栈为 JUnit5 + Mockito(Java),但会根据项目实际使用的测试框架自动适配:
|
|
13
|
+
|
|
14
|
+
- **测试框架** — 优先使用项目已有的框架(JUnit5 / JUnit4 / TestNG / Jest / Vitest / pytest)
|
|
15
|
+
- **Mock 工具** — 匹配项目已有 Mock 方案(Mockito / Sinon / unittest.mock / gomock)
|
|
16
|
+
- **断言库** — 使用项目已有的断言风格(AssertJ / Hamcrest / Jest expect / chai)
|
|
17
|
+
- **运行命令** — 从项目 package.json / pom.xml / build.gradle 推断测试运行命令
|
|
18
|
+
|
|
19
|
+
## 触发条件
|
|
20
|
+
|
|
21
|
+
- 用户要求生成测试代码
|
|
22
|
+
- 执行 apply-change 中任务包含验证步骤
|
|
23
|
+
- 用户提到"写测试"/"单测"/"覆盖率"
|
|
24
|
+
|
|
25
|
+
## 铁律
|
|
26
|
+
|
|
27
|
+
1. **测行为不测实现** — 测试输入→输出,不关心内部怎么实现
|
|
28
|
+
2. **Mock 外部依赖** — 数据库、RPC、HTTP 全部 Mock
|
|
29
|
+
3. **边界必测** — null、空集合、极值、异常路径
|
|
30
|
+
4. **失败自修** — 测试失败自动修复,最多 3 轮
|
|
31
|
+
|
|
32
|
+
## 工作流
|
|
33
|
+
|
|
34
|
+
### 阶段 1:分析被测代码
|
|
35
|
+
1. 读取目标 Service/Mapper 类
|
|
36
|
+
2. 识别所有 public 方法
|
|
37
|
+
3. 分析方法依赖(需要 Mock 的对象)
|
|
38
|
+
4. 提取业务规则和边界条件
|
|
39
|
+
|
|
40
|
+
### 阶段 2:生成测试
|
|
41
|
+
|
|
42
|
+
**测试类结构:**
|
|
43
|
+
```java
|
|
44
|
+
@ExtendWith(MockitoExtension.class)
|
|
45
|
+
class XxxServiceTest {
|
|
46
|
+
|
|
47
|
+
@InjectMocks
|
|
48
|
+
private XxxServiceImpl xxxService;
|
|
49
|
+
|
|
50
|
+
@Mock
|
|
51
|
+
private XxxMapper xxxMapper;
|
|
52
|
+
|
|
53
|
+
// 每个方法至少 2 个测试:正常路径 + 异常路径
|
|
54
|
+
@Test
|
|
55
|
+
@DisplayName("方法名 - 场景描述")
|
|
56
|
+
void methodName_scenario() {
|
|
57
|
+
// Given
|
|
58
|
+
// When
|
|
59
|
+
// Then
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**覆盖场景类型:**
|
|
65
|
+
- 正常输入 → 预期输出
|
|
66
|
+
- null 参数 → 抛出异常或返回默认值
|
|
67
|
+
- 空集合 → 正确处理
|
|
68
|
+
- 数据库无记录 → 返回 null
|
|
69
|
+
- 业务规则违反 → 抛出 BusinessException
|
|
70
|
+
|
|
71
|
+
### 阶段 3:执行与自修
|
|
72
|
+
|
|
73
|
+
1. 运行测试:`mvn test -Dtest=XxxServiceTest`
|
|
74
|
+
2. 如果失败,分析错误原因
|
|
75
|
+
3. 修复测试代码(不修改被测代码)
|
|
76
|
+
4. 最多 3 轮,仍失败则报告问题
|
|
77
|
+
|
|
78
|
+
## 红旗
|
|
79
|
+
|
|
80
|
+
- 被测类不存在 → 先生成业务代码
|
|
81
|
+
- 项目无测试框架 → 询问用户选择测试框架
|
|
82
|
+
- 覆盖率低于 60% → 补充测试用例
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: business-ui-codegen
|
|
3
|
+
description: SpecPow business-ui-codegen skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI 代码生成
|
|
7
|
+
|
|
8
|
+
> 根据设计文档和接口定义,生成前端页面/UI 代码
|
|
9
|
+
|
|
10
|
+
## 技术栈配置
|
|
11
|
+
|
|
12
|
+
本技能的**默认**技术栈为 Vue2 + View Design,但会根据项目实际使用的框架自动适配:
|
|
13
|
+
|
|
14
|
+
- **前端框架** — 优先使用项目已有的框架(Vue2 / Vue3 / React / Angular)
|
|
15
|
+
- **UI 组件库** — 匹配项目已有组件库(View Design / Element / Ant Design / MUI)
|
|
16
|
+
- **状态管理** — 使用项目已有的状态管理(Vuex / Pinia / Redux / NgRx)
|
|
17
|
+
- **样式方案** — 沿用项目已有的 CSS 方案(CSS Modules / Scoped CSS / Tailwind / Less / SCSS)
|
|
18
|
+
|
|
19
|
+
如果项目无已有前端代码,则在阶段 1 询问用户确认技术选型。
|
|
20
|
+
|
|
21
|
+
## 触发条件
|
|
22
|
+
|
|
23
|
+
- 用户要求生成前端页面/UI 代码
|
|
24
|
+
- 执行 apply-change 时涉及前端任务
|
|
25
|
+
- 用户提到"生成页面"/"写组件"/"创建表单"
|
|
26
|
+
|
|
27
|
+
## 铁律
|
|
28
|
+
|
|
29
|
+
1. **接口先行** — 必须确认后端 API 已定义(路径、参数、返回值)
|
|
30
|
+
2. **组件复用** — 优先使用 View Design 组件,不造轮子
|
|
31
|
+
3. **样式规范** — 使用项目已有的 CSS 变量/mixin
|
|
32
|
+
4. **响应式** — 表格、表单必须适配常见分辨率
|
|
33
|
+
|
|
34
|
+
## 工作流
|
|
35
|
+
|
|
36
|
+
### 阶段 1:上下文收集
|
|
37
|
+
|
|
38
|
+
1. 读取 design.md 获取页面结构和交互设计
|
|
39
|
+
2. 确认 API 接口定义(路径、Method、参数、响应)
|
|
40
|
+
3. **扫描项目已有页面,识别技术栈**(框架、组件库、状态管理、样式方案)
|
|
41
|
+
4. 如果项目无已有前端代码,询问用户确认技术选型
|
|
42
|
+
5. 确认路由配置方式
|
|
43
|
+
|
|
44
|
+
### 阶段 2:代码生成
|
|
45
|
+
|
|
46
|
+
按以下顺序生成:
|
|
47
|
+
|
|
48
|
+
**2.1 API 接口文件**
|
|
49
|
+
```
|
|
50
|
+
文件: src/api/xxx.js
|
|
51
|
+
- 使用 axios 封装
|
|
52
|
+
- 每个接口一个导出函数
|
|
53
|
+
- 请求/响应拦截器统一处理
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**2.2 页面主文件**
|
|
57
|
+
```
|
|
58
|
+
文件: src/views/xxx/index.vue
|
|
59
|
+
- <template>: View Design 组件组合
|
|
60
|
+
- <script>: data/methods/computed/watch 标准结构
|
|
61
|
+
- <style scoped>: 局部样式
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**2.3 列表页模板**
|
|
65
|
+
```
|
|
66
|
+
- 搜索表单(Form + FormItem)
|
|
67
|
+
- 操作按钮栏(新增/导出/批量操作)
|
|
68
|
+
- 数据表格(Table + columns 配置)
|
|
69
|
+
- 分页(Page 组件)
|
|
70
|
+
- 新增/编辑弹窗(Modal + Form)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**2.4 表单页模板**
|
|
74
|
+
```
|
|
75
|
+
- 表单验证规则(rules)
|
|
76
|
+
- 提交前校验
|
|
77
|
+
- 返回/重置按钮
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**2.5 路由配置**
|
|
81
|
+
```
|
|
82
|
+
- 路由路径与菜单对应
|
|
83
|
+
- meta 包含 title、icon、权限
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 阶段 3:验证
|
|
87
|
+
|
|
88
|
+
1. 语法检查:Vue 模板无报错
|
|
89
|
+
2. 组件引用:所有使用的组件已注册
|
|
90
|
+
3. API 调用:接口路径和参数与设计一致
|
|
91
|
+
|
|
92
|
+
## 输出格式
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
文件: src/views/xxx/index.vue
|
|
96
|
+
类型: 页面组件
|
|
97
|
+
依赖: View Design, axios, 路由
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 红旗(立即停止)
|
|
101
|
+
|
|
102
|
+
- API 接口未定义 → 先完成后端
|
|
103
|
+
- 项目未使用 View Design → 确认 UI 框架
|
|
104
|
+
- 发现已有同名页面 → 报告冲突
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: execution-finish-branch
|
|
3
|
+
description: SpecPow execution-finish-branch skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 完成分支
|
|
7
|
+
|
|
8
|
+
> 分支开发完成后的合并和清理流程
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
- 变更所有任务完成 — 准备合并到主分支
|
|
13
|
+
- 用户提到"完成分支"/"合并"/"清理"
|
|
14
|
+
|
|
15
|
+
## 铁律
|
|
16
|
+
|
|
17
|
+
1. **验证先行** — 合并前必须通过所有检查
|
|
18
|
+
2. **squash 合并** — 保持主分支历史整洁
|
|
19
|
+
3. **删除分支** — 合并后删除功能分支
|
|
20
|
+
4. **更新状态** — 归档变更
|
|
21
|
+
|
|
22
|
+
## 工作流
|
|
23
|
+
|
|
24
|
+
### 1. 最终验证
|
|
25
|
+
```bash
|
|
26
|
+
# 确保测试通过
|
|
27
|
+
pnpm test
|
|
28
|
+
|
|
29
|
+
# 确保构建通过
|
|
30
|
+
pnpm build
|
|
31
|
+
|
|
32
|
+
# 确保无未提交变更
|
|
33
|
+
git status
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. 合并
|
|
37
|
+
```bash
|
|
38
|
+
git checkout main
|
|
39
|
+
git merge --squash feature-branch
|
|
40
|
+
git commit -m "feat: 变更描述"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. 清理
|
|
44
|
+
```bash
|
|
45
|
+
git branch -d feature-branch
|
|
46
|
+
git worktree remove ../project-feature # 如果使用了 worktree
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 4. 归档变更
|
|
50
|
+
```bash
|
|
51
|
+
specpow archive <change-id>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 红旗
|
|
55
|
+
|
|
56
|
+
- 测试未通过 → 不合并
|
|
57
|
+
- 有冲突未解决 → 先解决冲突
|
|
58
|
+
- 未归档变更 → 完成归档
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: execution-git-worktrees
|
|
3
|
+
description: SpecPow execution-git-worktrees skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git 工作树
|
|
7
|
+
> 使用 git worktree 管理多个并行开发分支
|
|
8
|
+
|
|
9
|
+
## 触发条件
|
|
10
|
+
|
|
11
|
+
- 需要同时处理多个变更
|
|
12
|
+
- 用户提到"工作树"/"worktree"/"并行开发"
|
|
13
|
+
|
|
14
|
+
## 铁律
|
|
15
|
+
|
|
16
|
+
1. **一树一分支** — 每个 worktree 对应独立分支
|
|
17
|
+
2. **不共享 node_modules** — 每个工作树独立安装依赖
|
|
18
|
+
3. **完成后清理** — 合并后删除 worktree
|
|
19
|
+
|
|
20
|
+
## 工作流
|
|
21
|
+
|
|
22
|
+
### 创建 worktree
|
|
23
|
+
```bash
|
|
24
|
+
git worktree add ../project-feature-a feature-a
|
|
25
|
+
cd ../project-feature-a
|
|
26
|
+
pnpm install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 列出 worktree
|
|
30
|
+
```bash
|
|
31
|
+
git worktree list
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 删除 worktree
|
|
35
|
+
```bash
|
|
36
|
+
git worktree remove ../project-feature-a
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 适用场景
|
|
40
|
+
|
|
41
|
+
- 同时开发多个需求
|
|
42
|
+
- 紧急修复需要中断当前工作
|
|
43
|
+
- 对比不同分支的实现
|
|
44
|
+
|
|
45
|
+
## 红旗
|
|
46
|
+
|
|
47
|
+
- worktree 超过 5 个 → 清理不用的
|
|
48
|
+
- 忘记切回主 worktree → 注意当前工作目录
|