@trench-craft/sds 1.0.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/README.en.md +522 -0
- package/README.md +566 -0
- package/dist/bin/sds.d.ts +3 -0
- package/dist/bin/sds.d.ts.map +1 -0
- package/dist/bin/sds.js +50 -0
- package/dist/bin/sds.js.map +1 -0
- package/dist/src/__tests__/cli.test.d.ts +2 -0
- package/dist/src/__tests__/cli.test.d.ts.map +1 -0
- package/dist/src/__tests__/cli.test.js +37 -0
- package/dist/src/__tests__/cli.test.js.map +1 -0
- package/dist/src/__tests__/e2e.test.d.ts +5 -0
- package/dist/src/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/src/__tests__/e2e.test.js +143 -0
- package/dist/src/__tests__/e2e.test.js.map +1 -0
- package/dist/src/__tests__/graph.test.d.ts +5 -0
- package/dist/src/__tests__/graph.test.d.ts.map +1 -0
- package/dist/src/__tests__/graph.test.js +423 -0
- package/dist/src/__tests__/graph.test.js.map +1 -0
- package/dist/src/__tests__/openspec.test.d.ts +5 -0
- package/dist/src/__tests__/openspec.test.d.ts.map +1 -0
- package/dist/src/__tests__/openspec.test.js +172 -0
- package/dist/src/__tests__/openspec.test.js.map +1 -0
- package/dist/src/commands/apply.d.ts +4 -0
- package/dist/src/commands/apply.d.ts.map +1 -0
- package/dist/src/commands/apply.js +14 -0
- package/dist/src/commands/apply.js.map +1 -0
- package/dist/src/commands/archive.d.ts +4 -0
- package/dist/src/commands/archive.d.ts.map +1 -0
- package/dist/src/commands/archive.js +20 -0
- package/dist/src/commands/archive.js.map +1 -0
- package/dist/src/commands/cache.d.ts +4 -0
- package/dist/src/commands/cache.d.ts.map +1 -0
- package/dist/src/commands/cache.js +31 -0
- package/dist/src/commands/cache.js.map +1 -0
- package/dist/src/commands/config.d.ts +4 -0
- package/dist/src/commands/config.d.ts.map +1 -0
- package/dist/src/commands/config.js +29 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/e2e.d.ts +4 -0
- package/dist/src/commands/e2e.d.ts.map +1 -0
- package/dist/src/commands/e2e.js +65 -0
- package/dist/src/commands/e2e.js.map +1 -0
- package/dist/src/commands/graph.d.ts +4 -0
- package/dist/src/commands/graph.d.ts.map +1 -0
- package/dist/src/commands/graph.js +783 -0
- package/dist/src/commands/graph.js.map +1 -0
- package/dist/src/commands/init.d.ts +4 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +15 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/project.d.ts +4 -0
- package/dist/src/commands/project.d.ts.map +1 -0
- package/dist/src/commands/project.js +6 -0
- package/dist/src/commands/project.js.map +1 -0
- package/dist/src/commands/propose.d.ts +4 -0
- package/dist/src/commands/propose.d.ts.map +1 -0
- package/dist/src/commands/propose.js +26 -0
- package/dist/src/commands/propose.js.map +1 -0
- package/dist/src/commands/registry.d.ts +4 -0
- package/dist/src/commands/registry.d.ts.map +1 -0
- package/dist/src/commands/registry.js +6 -0
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/skills-install.d.ts +4 -0
- package/dist/src/commands/skills-install.d.ts.map +1 -0
- package/dist/src/commands/skills-install.js +158 -0
- package/dist/src/commands/skills-install.js.map +1 -0
- package/dist/src/commands/skills.d.ts +4 -0
- package/dist/src/commands/skills.d.ts.map +1 -0
- package/dist/src/commands/skills.js +19 -0
- package/dist/src/commands/skills.js.map +1 -0
- package/dist/src/commands/verify.d.ts +4 -0
- package/dist/src/commands/verify.d.ts.map +1 -0
- package/dist/src/commands/verify.js +31 -0
- package/dist/src/commands/verify.js.map +1 -0
- package/dist/src/core/engine.d.ts +33 -0
- package/dist/src/core/engine.d.ts.map +1 -0
- package/dist/src/core/engine.js +87 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/engine.test.d.ts +2 -0
- package/dist/src/core/engine.test.d.ts.map +1 -0
- package/dist/src/core/engine.test.js +13 -0
- package/dist/src/core/engine.test.js.map +1 -0
- package/dist/src/core/session-state.d.ts +18 -0
- package/dist/src/core/session-state.d.ts.map +1 -0
- package/dist/src/core/session-state.js +55 -0
- package/dist/src/core/session-state.js.map +1 -0
- package/dist/src/core/session-state.test.d.ts +2 -0
- package/dist/src/core/session-state.test.d.ts.map +1 -0
- package/dist/src/core/session-state.test.js +90 -0
- package/dist/src/core/session-state.test.js.map +1 -0
- package/dist/src/core/subagent-timeout.d.ts +18 -0
- package/dist/src/core/subagent-timeout.d.ts.map +1 -0
- package/dist/src/core/subagent-timeout.js +61 -0
- package/dist/src/core/subagent-timeout.js.map +1 -0
- package/dist/src/core/subagent-timeout.test.d.ts +2 -0
- package/dist/src/core/subagent-timeout.test.d.ts.map +1 -0
- package/dist/src/core/subagent-timeout.test.js +57 -0
- package/dist/src/core/subagent-timeout.test.js.map +1 -0
- package/dist/src/core/task-sync.d.ts +19 -0
- package/dist/src/core/task-sync.d.ts.map +1 -0
- package/dist/src/core/task-sync.js +62 -0
- package/dist/src/core/task-sync.js.map +1 -0
- package/dist/src/core/task-sync.test.d.ts +2 -0
- package/dist/src/core/task-sync.test.d.ts.map +1 -0
- package/dist/src/core/task-sync.test.js +84 -0
- package/dist/src/core/task-sync.test.js.map +1 -0
- package/dist/src/graph/advanced-performance.d.ts +137 -0
- package/dist/src/graph/advanced-performance.d.ts.map +1 -0
- package/dist/src/graph/advanced-performance.js +375 -0
- package/dist/src/graph/advanced-performance.js.map +1 -0
- package/dist/src/graph/database.d.ts +79 -0
- package/dist/src/graph/database.d.ts.map +1 -0
- package/dist/src/graph/database.js +305 -0
- package/dist/src/graph/database.js.map +1 -0
- package/dist/src/graph/engine.d.ts +43 -0
- package/dist/src/graph/engine.d.ts.map +1 -0
- package/dist/src/graph/engine.js +334 -0
- package/dist/src/graph/engine.js.map +1 -0
- package/dist/src/graph/exporter.d.ts +56 -0
- package/dist/src/graph/exporter.d.ts.map +1 -0
- package/dist/src/graph/exporter.js +273 -0
- package/dist/src/graph/exporter.js.map +1 -0
- package/dist/src/graph/index.d.ts +21 -0
- package/dist/src/graph/index.d.ts.map +1 -0
- package/dist/src/graph/index.js +14 -0
- package/dist/src/graph/index.js.map +1 -0
- package/dist/src/graph/layouts.d.ts +77 -0
- package/dist/src/graph/layouts.d.ts.map +1 -0
- package/dist/src/graph/layouts.js +368 -0
- package/dist/src/graph/layouts.js.map +1 -0
- package/dist/src/graph/parser.d.ts +47 -0
- package/dist/src/graph/parser.d.ts.map +1 -0
- package/dist/src/graph/parser.js +228 -0
- package/dist/src/graph/parser.js.map +1 -0
- package/dist/src/graph/performance.d.ts +90 -0
- package/dist/src/graph/performance.d.ts.map +1 -0
- package/dist/src/graph/performance.js +275 -0
- package/dist/src/graph/performance.js.map +1 -0
- package/dist/src/graph/semantic.d.ts +151 -0
- package/dist/src/graph/semantic.d.ts.map +1 -0
- package/dist/src/graph/semantic.js +402 -0
- package/dist/src/graph/semantic.js.map +1 -0
- package/dist/src/graph/types.d.ts +114 -0
- package/dist/src/graph/types.d.ts.map +1 -0
- package/dist/src/graph/types.js +5 -0
- package/dist/src/graph/types.js.map +1 -0
- package/dist/src/graph/visualizer.d.ts +50 -0
- package/dist/src/graph/visualizer.d.ts.map +1 -0
- package/dist/src/graph/visualizer.js +869 -0
- package/dist/src/graph/visualizer.js.map +1 -0
- package/dist/src/openspec/apply.d.ts +16 -0
- package/dist/src/openspec/apply.d.ts.map +1 -0
- package/dist/src/openspec/apply.js +140 -0
- package/dist/src/openspec/apply.js.map +1 -0
- package/dist/src/openspec/archive.d.ts +3 -0
- package/dist/src/openspec/archive.d.ts.map +1 -0
- package/dist/src/openspec/archive.js +17 -0
- package/dist/src/openspec/archive.js.map +1 -0
- package/dist/src/openspec/e2e-generate.d.ts +39 -0
- package/dist/src/openspec/e2e-generate.d.ts.map +1 -0
- package/dist/src/openspec/e2e-generate.js +315 -0
- package/dist/src/openspec/e2e-generate.js.map +1 -0
- package/dist/src/openspec/e2e-runner.d.ts +32 -0
- package/dist/src/openspec/e2e-runner.d.ts.map +1 -0
- package/dist/src/openspec/e2e-runner.js +208 -0
- package/dist/src/openspec/e2e-runner.js.map +1 -0
- package/dist/src/openspec/explore.d.ts +3 -0
- package/dist/src/openspec/explore.d.ts.map +1 -0
- package/dist/src/openspec/explore.js +20 -0
- package/dist/src/openspec/explore.js.map +1 -0
- package/dist/src/openspec/propose.d.ts +8 -0
- package/dist/src/openspec/propose.d.ts.map +1 -0
- package/dist/src/openspec/propose.js +124 -0
- package/dist/src/openspec/propose.js.map +1 -0
- package/dist/src/openspec/verify.d.ts +13 -0
- package/dist/src/openspec/verify.d.ts.map +1 -0
- package/dist/src/openspec/verify.js +156 -0
- package/dist/src/openspec/verify.js.map +1 -0
- package/dist/src/platform/claudecode.d.ts +2 -0
- package/dist/src/platform/claudecode.d.ts.map +1 -0
- package/dist/src/platform/claudecode.js +7 -0
- package/dist/src/platform/claudecode.js.map +1 -0
- package/dist/src/platform/codex.d.ts +2 -0
- package/dist/src/platform/codex.d.ts.map +1 -0
- package/dist/src/platform/codex.js +7 -0
- package/dist/src/platform/codex.js.map +1 -0
- package/dist/src/platform/opencode.d.ts +2 -0
- package/dist/src/platform/opencode.d.ts.map +1 -0
- package/dist/src/platform/opencode.js +7 -0
- package/dist/src/platform/opencode.js.map +1 -0
- package/dist/src/platform/router.d.ts +13 -0
- package/dist/src/platform/router.d.ts.map +1 -0
- package/dist/src/platform/router.js +57 -0
- package/dist/src/platform/router.js.map +1 -0
- package/dist/src/skills/cache.d.ts +16 -0
- package/dist/src/skills/cache.d.ts.map +1 -0
- package/dist/src/skills/cache.js +53 -0
- package/dist/src/skills/cache.js.map +1 -0
- package/dist/src/skills/discovery.d.ts +12 -0
- package/dist/src/skills/discovery.d.ts.map +1 -0
- package/dist/src/skills/discovery.js +61 -0
- package/dist/src/skills/discovery.js.map +1 -0
- package/dist/src/skills/loader.d.ts +12 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +69 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/registry.d.ts +23 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +68 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/utils/fs.d.ts +5 -0
- package/dist/src/utils/fs.d.ts.map +1 -0
- package/dist/src/utils/fs.js +23 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/logger.d.ts +7 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +8 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/yaml.d.ts +3 -0
- package/dist/src/utils/yaml.d.ts.map +1 -0
- package/dist/src/utils/yaml.js +8 -0
- package/dist/src/utils/yaml.js.map +1 -0
- package/package.json +62 -0
- package/registry/skills-registry.yaml +218 -0
- package/skills/core/brainstorming/SKILL.md +259 -0
- package/skills/core/brainstorming/scripts/frame-template.html +214 -0
- package/skills/core/brainstorming/scripts/helper.js +88 -0
- package/skills/core/brainstorming/scripts/server.cjs +338 -0
- package/skills/core/brainstorming/scripts/start-server.sh +153 -0
- package/skills/core/brainstorming/scripts/stop-server.sh +55 -0
- package/skills/core/brainstorming/skill.yaml +12 -0
- package/skills/core/brainstorming/spec-document-reviewer-prompt.md +48 -0
- package/skills/core/brainstorming/visual-companion.md +286 -0
- package/skills/core/claude-code-core/SKILL.md +164 -0
- package/skills/core/claude-code-core/skill.yaml +14 -0
- package/skills/core/claude-code-prompt/SKILL.md +283 -0
- package/skills/core/claude-code-prompt/skill.yaml +14 -0
- package/skills/core/claude-code-subagent/SKILL.md +168 -0
- package/skills/core/claude-code-subagent/skill.yaml +14 -0
- package/skills/core/e2e-generate/SKILL.md +147 -0
- package/skills/core/e2e-generate/skill.yaml +12 -0
- package/skills/core/ecc-agents-md-router/SKILL.md +90 -0
- package/skills/core/ecc-agents-md-router/skill.yaml +12 -0
- package/skills/core/ecc-context-injector/SKILL.md +69 -0
- package/skills/core/ecc-context-injector/skill.yaml +12 -0
- package/skills/core/existing-code-caveman/SKILL.md +340 -0
- package/skills/core/existing-code-caveman/skill.yaml +12 -0
- package/skills/core/opsx-apply/SKILL.md +121 -0
- package/skills/core/opsx-apply/skill.yaml +12 -0
- package/skills/core/opsx-archive/SKILL.md +83 -0
- package/skills/core/opsx-archive/skill.yaml +12 -0
- package/skills/core/opsx-explore/SKILL.md +101 -0
- package/skills/core/opsx-explore/skill.yaml +12 -0
- package/skills/core/opsx-propose/SKILL.md +131 -0
- package/skills/core/opsx-propose/skill.yaml +16 -0
- package/skills/core/opsx-verify/SKILL.md +109 -0
- package/skills/core/opsx-verify/skill.yaml +12 -0
- package/skills/core/subagent-driven-development/SKILL.md +157 -0
- package/skills/core/subagent-driven-development/code-quality-reviewer-prompt.md +64 -0
- package/skills/core/subagent-driven-development/implementer-prompt.md +122 -0
- package/skills/core/subagent-driven-development/skill.yaml +12 -0
- package/skills/core/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/core/writing-plans/SKILL.md +268 -0
- package/skills/core/writing-plans/plan-document-reviewer-prompt.md +63 -0
- package/skills/core/writing-plans/skill.yaml +12 -0
- package/skills/locale/chinese-code-review/SKILL.md +17 -0
- package/skills/locale/chinese-code-review/skill.yaml +16 -0
- package/skills/locale/chinese-commit-conventions/SKILL.md +17 -0
- package/skills/locale/chinese-commit-conventions/skill.yaml +16 -0
- package/skills/locale/chinese-documentation/SKILL.md +17 -0
- package/skills/locale/chinese-documentation/skill.yaml +16 -0
- package/skills/locale/chinese-git-workflow/SKILL.md +17 -0
- package/skills/locale/chinese-git-workflow/skill.yaml +16 -0
- package/templates/agents-md.md +42 -0
- package/templates/claude-md.md +44 -0
- package/templates/codex-md.md +49 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-archive
|
|
3
|
+
description: "Archive completed changes from changes/ to archive/. Final phase of the SDS workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opsx:archive — 归档变更
|
|
7
|
+
|
|
8
|
+
## 触发条件
|
|
9
|
+
|
|
10
|
+
**触发**:
|
|
11
|
+
- opsx:verify 已通过,变更已验证完成
|
|
12
|
+
- 用户说"归档"、"完成"、"收尾"
|
|
13
|
+
|
|
14
|
+
**不触发**:
|
|
15
|
+
- ❌ 任何非开发类对话
|
|
16
|
+
- ❌ verify 尚未通过
|
|
17
|
+
|
|
18
|
+
将已完成的变更从 `openspec/changes/<name>/` 移动到 `openspec/archive/`,保留历史记录。
|
|
19
|
+
|
|
20
|
+
## SDS Workflow 位置
|
|
21
|
+
|
|
22
|
+
**Phase 6** — 归档交付(最终阶段)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Phase 5 Phase 6
|
|
26
|
+
opsx:verify → opsx:archive
|
|
27
|
+
│
|
|
28
|
+
└── openspec/archive/{date}-{name}/
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 输入
|
|
32
|
+
|
|
33
|
+
- `openspec/changes/<name>/`:已完成验证的变更目录(含所有工件)
|
|
34
|
+
|
|
35
|
+
## 输出
|
|
36
|
+
|
|
37
|
+
- `openspec/archive/{date}-{name}/`:归档后的变更目录
|
|
38
|
+
|
|
39
|
+
## 流程
|
|
40
|
+
|
|
41
|
+
### 1. 前置检查
|
|
42
|
+
|
|
43
|
+
- [ ] verify.md 是否存在?
|
|
44
|
+
- [ ] verify.md 中所有 7 项检查是否通过?
|
|
45
|
+
- [ ] 所有代码是否已 commit?
|
|
46
|
+
|
|
47
|
+
如果 verify 未通过 → **退回 opsx:verify 修复**,不能归档未通过的变更。
|
|
48
|
+
|
|
49
|
+
### 2. 执行归档
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 创建归档目录
|
|
53
|
+
mkdir -p openspec/archive/{date}-{name}/
|
|
54
|
+
|
|
55
|
+
# 复制变更工件
|
|
56
|
+
cp -r openspec/changes/{name}/* openspec/archive/{date}-{name}/
|
|
57
|
+
|
|
58
|
+
# 移除原变更
|
|
59
|
+
rm -rf openspec/changes/{name}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 3. 更新归档索引
|
|
63
|
+
|
|
64
|
+
更新 `openspec/archive/INDEX.md`(如存在):
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
| 日期 | 名称 | 描述 | 验证状态 |
|
|
68
|
+
|------|------|------|----------|
|
|
69
|
+
| 2026-05-13 | login-feature | 用户登录功能 | ✅ 通过 |
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. 通知用户
|
|
73
|
+
|
|
74
|
+
归档完成通知,包含:
|
|
75
|
+
- 变更摘要
|
|
76
|
+
- 归档路径
|
|
77
|
+
- 可用的清理选项(如删除分支)
|
|
78
|
+
|
|
79
|
+
## 要点
|
|
80
|
+
|
|
81
|
+
- **仅归档已验证的变更** — verify 通过是前置条件
|
|
82
|
+
- **保留完整历史** — 所有工件(含 verify.md)一同归档
|
|
83
|
+
- **不删除代码** — 归档仅移动文档工件,不删除业务代码
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "opsx:archive"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "archive-changes"
|
|
4
|
+
description: "将变更归档到 archive 目录"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-6"
|
|
7
|
+
source: "openspec"
|
|
8
|
+
dependencies: ["opsx:verify"]
|
|
9
|
+
inputs: ["openspec/changes/{name}/"]
|
|
10
|
+
outputs: ["openspec/archive/{date}-{name}/"]
|
|
11
|
+
size: "small"
|
|
12
|
+
cache_ttl: "30d"
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-explore
|
|
3
|
+
description: "Deep codebase exploration — investigate problems, map architecture, gather context before making changes. Phase 0 of the SDS workflow. Use when entering a new project or exploring unfamiliar code."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opsx:explore — 深度探索
|
|
7
|
+
|
|
8
|
+
Deep codebase exploration mode. Investigate problems, map architecture, gather context.
|
|
9
|
+
|
|
10
|
+
## SDS Workflow 位置
|
|
11
|
+
|
|
12
|
+
**Phase 0** — 上下文感知阶段
|
|
13
|
+
- 输入: 用户的问题或探索方向
|
|
14
|
+
- 输出: 探索报告(可用作 brainstorming 的输入)
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Phase 0 Phase 1 Phase 2 Phase 3
|
|
18
|
+
opsx:explore → brainstorming → opsx:propose → writing-plans
|
|
19
|
+
↓
|
|
20
|
+
探索报告
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 触发条件
|
|
24
|
+
|
|
25
|
+
**触发**:
|
|
26
|
+
- 用户说"帮我看看..."、"分析一下..."、"这个项目是做什么的"
|
|
27
|
+
- 需要了解现有代码库特定模块时
|
|
28
|
+
- **项目非空**(存在 package.json、源码目录等)
|
|
29
|
+
|
|
30
|
+
**不触发**:
|
|
31
|
+
- ❌ 项目为空(无任何代码文件)→ 直接跳转到 Phase 1 brainstorming
|
|
32
|
+
- ❌ 问候、闲聊、概念问答
|
|
33
|
+
|
|
34
|
+
## 空项目检测
|
|
35
|
+
|
|
36
|
+
开始探索前,先检查项目是否为空:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 检测是否有源码文件
|
|
40
|
+
dir /s /b *.js *.ts *.py *.go *.rs *.java 2>nul | find /c /v ""
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
如果项目为空(或仅含配置文件):
|
|
44
|
+
1. **跳过 Phase 0 探索**
|
|
45
|
+
2. **直接进入 Phase 1 brainstorming**
|
|
46
|
+
3. 通知用户:"项目为空,跳过代码探索阶段,直接进行需求分析"
|
|
47
|
+
|
|
48
|
+
## 流程
|
|
49
|
+
|
|
50
|
+
### 1. 理解探索目标
|
|
51
|
+
|
|
52
|
+
明确用户想了解什么:现有代码库、技术方案评估、问题诊断?
|
|
53
|
+
|
|
54
|
+
### 2. 并行探索
|
|
55
|
+
|
|
56
|
+
对 2+ 个独立方向,必须使用 explore agent + `run_in_background=true`:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
task(subagent_type="explore", run_in_background=true, description="...", prompt="...")
|
|
60
|
+
task(subagent_type="explore", run_in_background=true, description="...", prompt="...")
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**后台任务验证规则**:
|
|
64
|
+
- `<system-reminder>` 通知完成 → 调用 `background_output(task_id="...")`
|
|
65
|
+
- 输出含 `not found`、`IO error` 等 → 任务失败,重试
|
|
66
|
+
- 输出含实际数据 → 真正完成
|
|
67
|
+
|
|
68
|
+
### 3. 结构化输出
|
|
69
|
+
|
|
70
|
+
探索结果至少包含:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
## 探索结果: <主题>
|
|
74
|
+
|
|
75
|
+
### 架构概览
|
|
76
|
+
ASCII 图表展示模块关系、数据流
|
|
77
|
+
|
|
78
|
+
### 文件映射
|
|
79
|
+
| 功能 | 文件 | 行号 |
|
|
80
|
+
|------|------|------|
|
|
81
|
+
| xxx | path/to/file.js | 10-30 |
|
|
82
|
+
|
|
83
|
+
### 关键发现
|
|
84
|
+
- 技术栈: React 18 + Express 4 + PostgreSQL
|
|
85
|
+
- 模块数: 6 个核心模块
|
|
86
|
+
- 风险: <发现的任何问题>
|
|
87
|
+
|
|
88
|
+
### 建议
|
|
89
|
+
- <对接下来的 brainstorming/设计阶段的建议>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 输出格式
|
|
93
|
+
|
|
94
|
+
探索结果直接展示给用户,同时可保存到 `openspec/explore-output.md`(可选)供后续阶段使用。
|
|
95
|
+
|
|
96
|
+
## 要点
|
|
97
|
+
|
|
98
|
+
- **只读** — 探索阶段不修改任何文件
|
|
99
|
+
- **可视化** — 多用 ASCII 图表,帮助理解
|
|
100
|
+
- **不急于结论** — 探索是思考时间,不是任务时间
|
|
101
|
+
- **并行** — 独立方向必须并行搜索
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "opsx:explore"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "deep-explore"
|
|
4
|
+
description: "扫描项目结构和依赖关系"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-0"
|
|
7
|
+
source: "openspec"
|
|
8
|
+
dependencies: []
|
|
9
|
+
inputs: []
|
|
10
|
+
outputs: ["openspec/explore-output.md"]
|
|
11
|
+
size: "medium"
|
|
12
|
+
cache_ttl: "30d"
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-propose
|
|
3
|
+
description: "Generate all four OpenSpec artifacts (proposal, design, specs, tasks) from user requirements. Phase 2 of the SDS workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opsx:propose — 生成 4 份工件
|
|
7
|
+
|
|
8
|
+
从用户需求生成 proposal、design、specs、tasks 四份标准化工件。
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
**触发**:
|
|
13
|
+
- 用户已批准设计方案(来自 brainstorming 阶段的用户确认,或直接调用)
|
|
14
|
+
- 用户主动调用 `opsx:propose` 或 `generate-artifacts`
|
|
15
|
+
|
|
16
|
+
**不触发**:
|
|
17
|
+
- ❌ 任何非开发类对话
|
|
18
|
+
- ❌ 用户尚未明确需求或设计方案时
|
|
19
|
+
- ❌ 用户还在澄清需求阶段
|
|
20
|
+
|
|
21
|
+
> ⚠️ **这 4 份工件均为强制性产出。** 必须全部生成,缺一不可,不可跳过。
|
|
22
|
+
|
|
23
|
+
## SDS Workflow 位置
|
|
24
|
+
|
|
25
|
+
**Phase 2** — 规范建档阶段
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Phase 1 Phase 2 Phase 3
|
|
29
|
+
brainstorming → opsx:propose → writing-plans
|
|
30
|
+
├── proposal.md
|
|
31
|
+
├── design.md
|
|
32
|
+
├── specs.md
|
|
33
|
+
└── tasks.md
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 输入
|
|
37
|
+
|
|
38
|
+
- `user_request`:经过 brainstorming 收敛的用户需求
|
|
39
|
+
- `brainstorming.md`(可选):brainstorming 阶段的输出
|
|
40
|
+
|
|
41
|
+
## 输出(4 份工件)
|
|
42
|
+
|
|
43
|
+
所有工件写入 `openspec/changes/<name>/` 目录:
|
|
44
|
+
|
|
45
|
+
| 工件 | 内容 | 用途 |
|
|
46
|
+
|------|------|------|
|
|
47
|
+
| `proposal.md` | 背景、目标、范围、技术选型 | 明确做什么、为什么做 |
|
|
48
|
+
| `design.md` | 架构图、接口定义、数据模型、安全设计 | 技术方案决策 |
|
|
49
|
+
| `specs.md` | 功能规格、非功能规格、验收标准 | 定义"做成什么样" |
|
|
50
|
+
| `tasks.md` | 任务列表、依赖关系、预估时间 | 可执行的开发计划 |
|
|
51
|
+
|
|
52
|
+
## 流程
|
|
53
|
+
|
|
54
|
+
### 1. 创建变更目录
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
mkdir -p openspec/changes/<name>/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 2. 生成 proposal.md
|
|
61
|
+
|
|
62
|
+
包含:背景、目标、范围(包含/不包含)、技术选型表、交付物清单
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
## 背景
|
|
66
|
+
[为什么要做这个变更]
|
|
67
|
+
|
|
68
|
+
## 目标
|
|
69
|
+
- [具体目标 1]
|
|
70
|
+
- [具体目标 2]
|
|
71
|
+
|
|
72
|
+
## 范围
|
|
73
|
+
### 包含
|
|
74
|
+
- [功能 1]
|
|
75
|
+
### 不包含
|
|
76
|
+
- [功能 2]
|
|
77
|
+
|
|
78
|
+
## 技术选型
|
|
79
|
+
| 层级 | 技术 | 理由 |
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. 生成 design.md
|
|
83
|
+
|
|
84
|
+
包含:架构概览(ASCII 图)、数据模型、接口定义、安全设计
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
## 架构概览
|
|
88
|
+
```
|
|
89
|
+
请求 → Router → Middleware → Controller → Service → DB
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## API 接口
|
|
93
|
+
### POST /api/login
|
|
94
|
+
- Request: `{ username, password }`
|
|
95
|
+
- Response 200: `{ token, user }`
|
|
96
|
+
- Response 401: `{ message }`
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 4. 生成 specs.md
|
|
100
|
+
|
|
101
|
+
包含:功能规格(用户场景)、非功能规格、验收标准
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
## F1: 用户登录
|
|
105
|
+
- 输入: 用户名、密码
|
|
106
|
+
- 行为: 验证凭据 → 签发 Token → 返回用户信息
|
|
107
|
+
- 验证: 用户名密码不能为空
|
|
108
|
+
- 错误: 凭据错误时提示"用户名或密码错误"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 5. 生成 tasks.md
|
|
112
|
+
|
|
113
|
+
包含:任务列表、依赖关系图、验收契约
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
## 依赖关系
|
|
117
|
+
T1 (初始化) → T2 (后端 API) + T3 (前端模块) → T4 (页面) → T5 (测试)
|
|
118
|
+
|
|
119
|
+
## 任务
|
|
120
|
+
### T1: 项目初始化
|
|
121
|
+
- [ ] 初始化 Express 项目
|
|
122
|
+
- [ ] 安装依赖
|
|
123
|
+
- 预估: 15min
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 要点
|
|
127
|
+
|
|
128
|
+
- ⚠️ **缺一不可** — proposal、design、specs、tasks 4 份必须全部生成,每份都必须有实质内容
|
|
129
|
+
- **依赖 brainstorming** — 不要在需求不明确时生成工件
|
|
130
|
+
- **验收标准必须可测试** — 每个功能要有明确的通过/不通过标准
|
|
131
|
+
- **任务粒度** — 每个任务独立可执行,2-5 分钟一个步骤
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
id: "opsx:propose"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "generate-artifacts"
|
|
4
|
+
description: "从 user_request 生成 proposal/design/specs/tasks 四份标准化工件"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-2"
|
|
7
|
+
source: "openspec"
|
|
8
|
+
dependencies: ["brainstorming"]
|
|
9
|
+
inputs: ["user_request"]
|
|
10
|
+
outputs:
|
|
11
|
+
- "openspec/changes/{name}/proposal.md"
|
|
12
|
+
- "openspec/changes/{name}/design.md"
|
|
13
|
+
- "openspec/changes/{name}/specs.md"
|
|
14
|
+
- "openspec/changes/{name}/tasks.md"
|
|
15
|
+
size: "medium"
|
|
16
|
+
cache_ttl: "30d"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-verify
|
|
3
|
+
description: "Run 7 quality checks on completed changes: compile, tests, spec alignment, completeness, code quality, docs, breaking changes. Phase 5 of the SDS workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opsx:verify — 验证变更
|
|
7
|
+
|
|
8
|
+
## 触发条件
|
|
9
|
+
|
|
10
|
+
**触发**:
|
|
11
|
+
- opsx:apply 已完成,代码变更已就绪
|
|
12
|
+
- 用户说"验证"、"检查"、"测试"
|
|
13
|
+
|
|
14
|
+
**不触发**:
|
|
15
|
+
- ❌ 任何非开发类对话
|
|
16
|
+
- ❌ 实现尚未完成
|
|
17
|
+
|
|
18
|
+
通过 7 项检查验证变更质量,确保变更符合预期。
|
|
19
|
+
|
|
20
|
+
## SDS Workflow 位置
|
|
21
|
+
|
|
22
|
+
**Phase 5** — 质量门阶段
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Phase 4 Phase 5 Phase 6
|
|
26
|
+
opsx:apply → opsx:verify → opsx:archive
|
|
27
|
+
│
|
|
28
|
+
└── verify.md(验证报告)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 输入
|
|
32
|
+
|
|
33
|
+
- `openspec/changes/<name>/` 下的所有工件
|
|
34
|
+
- 变更代码
|
|
35
|
+
|
|
36
|
+
## 输出
|
|
37
|
+
|
|
38
|
+
- `openspec/changes/<name>/verify.md`:验证报告
|
|
39
|
+
|
|
40
|
+
## 7 项检查清单
|
|
41
|
+
|
|
42
|
+
### 1. 编译检查
|
|
43
|
+
```bash
|
|
44
|
+
# TypeScript
|
|
45
|
+
npx tsc --noEmit
|
|
46
|
+
|
|
47
|
+
# 或其它语言
|
|
48
|
+
go build ./...
|
|
49
|
+
npm run build
|
|
50
|
+
```
|
|
51
|
+
✅ 通过 / ❌ 失败
|
|
52
|
+
|
|
53
|
+
### 2. 测试检查
|
|
54
|
+
```bash
|
|
55
|
+
npm test
|
|
56
|
+
# 或 pytest / go test ./... / cargo test
|
|
57
|
+
```
|
|
58
|
+
✅ 全部通过 / ❌ 有失败测试
|
|
59
|
+
|
|
60
|
+
### 3. 规格符合性
|
|
61
|
+
- [ ] 所有 specs.md 中的功能需求是否已实现?
|
|
62
|
+
- [ ] 验收标准是否全部满足?
|
|
63
|
+
- [ ] 是否有多余的未在规格中定义的代码?(过度构建)
|
|
64
|
+
|
|
65
|
+
### 4. 任务完整性
|
|
66
|
+
- [ ] tasks.md 中的所有任务是否已完成?
|
|
67
|
+
- [ ] 是否有未标记为完成的任务?
|
|
68
|
+
|
|
69
|
+
### 5. 代码质量
|
|
70
|
+
- [ ] LSP diagnostics 无错误
|
|
71
|
+
- [ ] 无死代码、TODO、FIXME
|
|
72
|
+
- [ ] 命名一致、遵循项目规范
|
|
73
|
+
|
|
74
|
+
### 6. 文档同步
|
|
75
|
+
- [ ] README 是否需要更新?
|
|
76
|
+
- [ ] API 文档是否同步?
|
|
77
|
+
- [ ] 环境变量是否已记录?
|
|
78
|
+
|
|
79
|
+
### 7. Breaking Changes
|
|
80
|
+
- [ ] API 向后兼容?
|
|
81
|
+
- [ ] 配置格式有变?
|
|
82
|
+
- [ ] 数据库迁移需要?
|
|
83
|
+
|
|
84
|
+
## 验证报告格式
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
# 验证报告: <name>
|
|
88
|
+
|
|
89
|
+
## 结果: ✅ 通过 / ❌ 未通过
|
|
90
|
+
|
|
91
|
+
| # | 检查项 | 状态 | 说明 |
|
|
92
|
+
|---|--------|------|------|
|
|
93
|
+
| 1 | 编译检查 | ✅ | tsc --noEmit 通过 |
|
|
94
|
+
| 2 | 测试检查 | ✅ | 15/15 通过 |
|
|
95
|
+
| 3 | 规格符合性 | ✅ | 全部实现 |
|
|
96
|
+
| ... | ... | ... | ... |
|
|
97
|
+
|
|
98
|
+
## 问题(如有)
|
|
99
|
+
- [ ] <问题描述>
|
|
100
|
+
|
|
101
|
+
## 备注
|
|
102
|
+
<任何需要记录的额外信息>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 要点
|
|
106
|
+
|
|
107
|
+
- **全量检查** — 7 项都必须检查,不可跳过
|
|
108
|
+
- **发现问题必须修复** — 修复后重新运行 verify
|
|
109
|
+
- **规格偏离必须记录** — 如果实现偏离了规格,需说明原因
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "opsx:verify"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "verify-changes"
|
|
4
|
+
description: "7 项检查验证变更质量"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-5"
|
|
7
|
+
source: "openspec"
|
|
8
|
+
dependencies: ["opsx:apply"]
|
|
9
|
+
inputs: ["openspec/changes/{name}/"]
|
|
10
|
+
outputs: ["openspec/changes/{name}/verify.md"]
|
|
11
|
+
size: "medium"
|
|
12
|
+
cache_ttl: "7d"
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subagent-driven-development
|
|
3
|
+
description: "通过为每个任务分派独立的子代理来执行实现计划,每个任务完成后进行两阶段审查。当 plan.md 就绪且任务可独立执行时使用。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Subagent-Driven Development
|
|
7
|
+
|
|
8
|
+
## 触发条件
|
|
9
|
+
|
|
10
|
+
**触发**:
|
|
11
|
+
- opsx:apply 阶段选择了子代理执行方式
|
|
12
|
+
- plan.md 或 plan/ 目录已就绪,任务可独立执行
|
|
13
|
+
- 用户明确要求"用子代理执行"
|
|
14
|
+
|
|
15
|
+
**不触发**:
|
|
16
|
+
- ❌ 任何非开发类对话
|
|
17
|
+
- ❌ 计划尚未生成
|
|
18
|
+
- ❌ 不需要并行执行的任务
|
|
19
|
+
|
|
20
|
+
通过为每个任务分派一个全新的子代理来执行计划,每个任务完成后进行两阶段审查:先审查规格合规性,再审查代码质量。
|
|
21
|
+
|
|
22
|
+
**为什么用子代理:** 你将任务委派给具有隔离上下文的专用代理。通过精心设计它们的指令和上下文,确保它们专注并成功完成任务。它们不应继承你的会话上下文或历史记录——你要精确构造它们所需的一切。这样也能为你自己保留用于协调工作的上下文。
|
|
23
|
+
|
|
24
|
+
**核心原则:** 每个任务一个全新子代理 + 两阶段审查(先规格后质量)= 高质量、快速迭代
|
|
25
|
+
|
|
26
|
+
## OpenSpec 工作流中的位置
|
|
27
|
+
|
|
28
|
+
此技能在 OpenSpec worktree 中运行。在开始之前,worktree 已创建并包含了完整的规格上下文。
|
|
29
|
+
|
|
30
|
+
支持两种计划格式:
|
|
31
|
+
|
|
32
|
+
### 目录化计划(计划较大时)
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
openspec/changes/<name>/
|
|
36
|
+
├── brainstorming.md (Phase 1 产出)
|
|
37
|
+
├── proposal.md (Phase 2 产出)
|
|
38
|
+
├── design.md (Phase 2 产出)
|
|
39
|
+
├── specs.md (Phase 2 产出)
|
|
40
|
+
├── tasks.md (Phase 2 产出)
|
|
41
|
+
└── plan/ (Phase 3 产出) ← 你在这里
|
|
42
|
+
├── index.md (执行顺序 + 状态)
|
|
43
|
+
├── auth.md (自包含:接口契约 + 任务)
|
|
44
|
+
└── user.md (自包含:内联依赖接口)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 单文件计划(默认)
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
openspec/changes/<name>/
|
|
51
|
+
├── ...
|
|
52
|
+
├── plan.md (Phase 3 产出) ← 你在这里
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 何时使用
|
|
56
|
+
|
|
57
|
+
- 有实现计划且任务基本独立时
|
|
58
|
+
- 希望在当前会话中执行(无上下文切换)
|
|
59
|
+
- 每个任务后需要两阶段审查
|
|
60
|
+
|
|
61
|
+
## 流程
|
|
62
|
+
|
|
63
|
+
### 单文件模式
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
读取 plan.md(全文自包含)
|
|
67
|
+
↓
|
|
68
|
+
记录项目上下文(specs、现有代码结构、命名约定)
|
|
69
|
+
↓
|
|
70
|
+
对每个任务:
|
|
71
|
+
提取任务文本(含接口契约 + 步骤 + 代码)
|
|
72
|
+
↓
|
|
73
|
+
┌─────────────────────────────────────────────┐
|
|
74
|
+
│ 分派实现子代理 (./implementer-prompt.md) │
|
|
75
|
+
│ → 实现 → 测试 → TDD → 自审 → 提交 │
|
|
76
|
+
└─────────────────────────────────────────────┘
|
|
77
|
+
↓ DONE
|
|
78
|
+
┌───────────────────────────────────────────┐
|
|
79
|
+
│ 分派规格审查子代理 (./spec-reviewer-prompt.md) │
|
|
80
|
+
└───────────────────────────────────────────┘
|
|
81
|
+
↓ 通过
|
|
82
|
+
┌──────────────────────────────────────────────┐
|
|
83
|
+
│ 分派代码质量审查子代理 (./code-quality-reviewer)│
|
|
84
|
+
└──────────────────────────────────────────────┘
|
|
85
|
+
↓ 通过
|
|
86
|
+
更新 plan.md 标记任务完成
|
|
87
|
+
↓
|
|
88
|
+
全部完成 → finishing-a-development-branch
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 目录化模式
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
读取 plan/index.md → 获取 chunk 执行顺序
|
|
95
|
+
↓
|
|
96
|
+
按顺序逐 chunk:
|
|
97
|
+
读取 plan/<chunk>.md(自包含,无需读其他 chunk)
|
|
98
|
+
↓
|
|
99
|
+
对 chunk 内每个任务:
|
|
100
|
+
提取任务文本(含接口契约 + 步骤 + 代码)
|
|
101
|
+
↓
|
|
102
|
+
[同单文件模式的子代理 → 审查 → 标记流程]
|
|
103
|
+
↓
|
|
104
|
+
chunk 全部完成 → 更新 plan/index.md 状态
|
|
105
|
+
↓
|
|
106
|
+
全部完成 → finishing-a-development-branch
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**关键:协调器处理每个 chunk 时,只读该 chunk 文件。不从其他 chunk 或 index.md 提取信息。每个 chunk 自包含所有执行所需信息。**
|
|
110
|
+
|
|
111
|
+
## 处理实现者状态
|
|
112
|
+
|
|
113
|
+
实现子代理报告四种状态之一:
|
|
114
|
+
|
|
115
|
+
**DONE:** 进入规格合规性审查。
|
|
116
|
+
|
|
117
|
+
**DONE_WITH_CONCERNS:** 实现者完成了工作但标记了疑虑。在继续之前阅读这些疑虑。如果涉及正确性或范围,在审查前解决。如果只是观察性说明,记录下来并继续审查。
|
|
118
|
+
|
|
119
|
+
**NEEDS_CONTEXT:** 实现者需要未提供的信息。提供缺失的上下文并重新分派。
|
|
120
|
+
|
|
121
|
+
**BLOCKED:** 实现者无法完成任务。评估阻塞原因:
|
|
122
|
+
1. 如果是上下文问题,提供更多上下文并重新分派
|
|
123
|
+
2. 如果任务需要更强的推理能力,用更强的模型重新分派
|
|
124
|
+
3. 如果任务太大,拆分为更小的部分
|
|
125
|
+
4. 如果计划本身有问题,上报给人类
|
|
126
|
+
|
|
127
|
+
**绝不** 忽略上报或在不做任何更改的情况下让同一模型重试。
|
|
128
|
+
|
|
129
|
+
## 提示词模板
|
|
130
|
+
|
|
131
|
+
- `./implementer-prompt.md` — 分派实现子代理
|
|
132
|
+
- `./spec-reviewer-prompt.md` — 分派规格合规审查子代理
|
|
133
|
+
- `./code-quality-reviewer-prompt.md` — 分派代码质量审查子代理
|
|
134
|
+
|
|
135
|
+
## 红线
|
|
136
|
+
|
|
137
|
+
**绝不:**
|
|
138
|
+
- 未经用户明确同意就在 main/master 分支上开始实现
|
|
139
|
+
- 跳过审查(规格合规性或代码质量)
|
|
140
|
+
- 带着未修复的问题继续
|
|
141
|
+
- 并行分派多个实现子代理(会冲突)
|
|
142
|
+
- 让子代理读取计划文件(应提供完整文本)
|
|
143
|
+
- 忽视子代理的问题(在让它们继续之前先回答)
|
|
144
|
+
- 在规格合规性审查通过之前开始代码质量审查(顺序错误)
|
|
145
|
+
- 在任一审查有未解决问题时就进入下一个任务
|
|
146
|
+
|
|
147
|
+
**如果审查者发现问题:**
|
|
148
|
+
- 实现者(同一子代理)修复
|
|
149
|
+
- 审查者再次审查
|
|
150
|
+
- 重复直到通过
|
|
151
|
+
|
|
152
|
+
## 依赖技能
|
|
153
|
+
|
|
154
|
+
- **using-git-worktrees** — 必需:在开始前建立隔离 worktree
|
|
155
|
+
- **writing-plans** — 创建本技能执行的计划
|
|
156
|
+
- **finishing-a-development-branch** — 所有任务完成后收尾
|
|
157
|
+
- **test-driven-development** — 子代理对每个任务遵循 TDD
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 代码质量审查者提示词模板
|
|
2
|
+
|
|
3
|
+
分派代码质量审查子智能体时使用此模板。
|
|
4
|
+
|
|
5
|
+
**目的:** 验证实现是否构建良好(整洁、有测试、可维护)
|
|
6
|
+
|
|
7
|
+
**仅在规格合规性审查通过后才分派。**
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
spawn_agent:
|
|
11
|
+
description: "审查任务 N 的代码质量"
|
|
12
|
+
message: |
|
|
13
|
+
你正在审查一个实现的代码质量。
|
|
14
|
+
|
|
15
|
+
## 实现者声称构建了什么
|
|
16
|
+
|
|
17
|
+
[来自实现者的报告]
|
|
18
|
+
|
|
19
|
+
## 计划中的要求
|
|
20
|
+
|
|
21
|
+
[plan-file] 中的任务 N
|
|
22
|
+
|
|
23
|
+
## 审查清单
|
|
24
|
+
|
|
25
|
+
### 代码质量
|
|
26
|
+
- 命名是否清晰准确(匹配事物做什么,而非怎么做)?
|
|
27
|
+
- 代码是否整洁且可维护?
|
|
28
|
+
- 是否有死代码、未使用的导入、冗余逻辑?
|
|
29
|
+
|
|
30
|
+
### 测试质量
|
|
31
|
+
- 测试是否真正验证了行为(而非只是 mock 行为)?
|
|
32
|
+
- 测试是否覆盖了正向+反向+边界情况?
|
|
33
|
+
- 测试命名是否清晰描述了被测行为?
|
|
34
|
+
|
|
35
|
+
### 架构
|
|
36
|
+
- 每个文件是否有单一明确的职责和定义清晰的接口?
|
|
37
|
+
- 各单元是否拆分得足以独立理解和测试?
|
|
38
|
+
- 实现是否遵循了计划中的文件结构?
|
|
39
|
+
- 本次实现是否创建了已经很大的新文件,或显著增大了现有文件?
|
|
40
|
+
|
|
41
|
+
### 安全与健壮性
|
|
42
|
+
- 是否有未处理的错误或异常?
|
|
43
|
+
- 是否有硬编码的敏感信息?
|
|
44
|
+
- 是否有潜在的竞态条件或资源泄漏?
|
|
45
|
+
|
|
46
|
+
**报告格式:**
|
|
47
|
+
|
|
48
|
+
## 代码质量审查
|
|
49
|
+
|
|
50
|
+
**状态:** 通过 | 发现问题
|
|
51
|
+
|
|
52
|
+
**优点:**
|
|
53
|
+
- [实现中做得好的方面]
|
|
54
|
+
|
|
55
|
+
**问题(如有):**
|
|
56
|
+
- [严重] [file:line] [问题描述]
|
|
57
|
+
- [重要] [file:line] [问题描述]
|
|
58
|
+
- [次要] [file:line] [问题描述]
|
|
59
|
+
|
|
60
|
+
**建议(仅供参考,不阻止通过):**
|
|
61
|
+
- [改进建议]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**审查者返回:** 优点、问题(严重/重要/次要)、评估结论
|