@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,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ecc-agents-md-router
|
|
3
|
+
description: "Parse AGENTS.md / CLAUDE.md workflow routing rules and route tasks to the correct SDS workflow phase. Auto-loads at session start."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ecc:agents-md-router — AGENTS.md 工作流路由
|
|
7
|
+
|
|
8
|
+
解析项目中 AGENTS.md 或 CLAUDE.md 定义的工作流路由规则,将任务路由到正确的 SDS 工作流阶段。
|
|
9
|
+
|
|
10
|
+
## 重要:不主动拦截用户消息
|
|
11
|
+
|
|
12
|
+
此技能为基础设施,**在后台运行**,不主动响应任何用户消息。
|
|
13
|
+
用户消息由 AI 根据内容判断是否需要路由,此技能仅提供路由表供参考。
|
|
14
|
+
|
|
15
|
+
## 用途
|
|
16
|
+
|
|
17
|
+
每次会话开始时自动加载。根据 AGENTS.md/CLAUDE.md 中的路由配置,决定新任务应该走哪条工作流路径。
|
|
18
|
+
|
|
19
|
+
## 输入
|
|
20
|
+
|
|
21
|
+
- `AGENTS.md`(opencode)或 `CLAUDE.md`(claudecode):项目级工作流配置文件
|
|
22
|
+
|
|
23
|
+
## 输出
|
|
24
|
+
|
|
25
|
+
- `workflow_routes`:解析后的路由规则
|
|
26
|
+
|
|
27
|
+
## 路由逻辑
|
|
28
|
+
|
|
29
|
+
### 1. 配置读取
|
|
30
|
+
|
|
31
|
+
读取 AGENTS.md/CLAUDE.md 中 `<!-- trench-craft:begin -->` 和 `<!-- trench-craft:end -->` 之间的配置。
|
|
32
|
+
|
|
33
|
+
### 2. 路由示例
|
|
34
|
+
|
|
35
|
+
配置文件中的阶段定义决定了任务的路由:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
<!-- trench-craft:begin -->
|
|
39
|
+
## 阶段路由
|
|
40
|
+
- Phase 0: existing-code-caveman + opsx:explore
|
|
41
|
+
- Phase 1: brainstorming
|
|
42
|
+
- Phase 2: opsx:propose
|
|
43
|
+
- Phase 3: writing-plans
|
|
44
|
+
- Phase 4: opsx:apply
|
|
45
|
+
- Phase 5: opsx:verify
|
|
46
|
+
- Phase 6: opsx:archive
|
|
47
|
+
<!-- trench-craft:end -->
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3. 任务路由
|
|
51
|
+
|
|
52
|
+
当接收到新任务时,根据任务内容判断阶段:
|
|
53
|
+
|
|
54
|
+
| 任务类型 | 路由到 | 阶段 |
|
|
55
|
+
|----------|--------|------|
|
|
56
|
+
| **简单对话、问候、提问** | **不路由 — 直接回答** | **—** |
|
|
57
|
+
| **项目为空时的新功能开发** | **跳过 Phase 0,直接 brainstorming** | **Phase 1** |
|
|
58
|
+
| 探索代码库、了解项目 | `existing-code-caveman` / `opsx:explore` | Phase 0 |
|
|
59
|
+
| 实现新功能、创建变更 | `brainstorming` | Phase 1 |
|
|
60
|
+
| 设计方案、技术决策 | `opsx:propose` | Phase 2 |
|
|
61
|
+
| 编写实现计划 | `writing-plans` | Phase 3 |
|
|
62
|
+
| 执行代码变更 | `opsx:apply` | Phase 4 |
|
|
63
|
+
| 验证代码质量 | `opsx:verify` | Phase 5 |
|
|
64
|
+
| 归档已完成变更 | `opsx:archive` | Phase 6 |
|
|
65
|
+
|
|
66
|
+
**第一行最重要:** 问候、闲聊、简单知识问答 — 不路由任何技能,直接让大模型回答。
|
|
67
|
+
|
|
68
|
+
### 4. 判断原则
|
|
69
|
+
|
|
70
|
+
路由与否的核心判断标准:
|
|
71
|
+
|
|
72
|
+
- **触发技能** — 用户请求涉及编码、设计、变更、规划等开发活动
|
|
73
|
+
- **不触发** — 仅限对话、问候、概念解释、简单问答、非开发话题
|
|
74
|
+
|
|
75
|
+
### 4. 多模型路由(可选)
|
|
76
|
+
|
|
77
|
+
如果配置了 multi-model,根据复杂度选择模型:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
复杂度 ≤ 0.3 → quick(快速模型)
|
|
81
|
+
复杂度 ≤ 0.7 → deep(标准模型)
|
|
82
|
+
复杂度 > 0.7 → ultrabrain(强模型)
|
|
83
|
+
UI 任务 → visual-engineering
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 要素
|
|
87
|
+
|
|
88
|
+
- **自动加载** — 每次会话启动时执行
|
|
89
|
+
- **无人工干预** — 路由决策完全自动
|
|
90
|
+
- **优雅降级** — 如果 AGENTS.md 不存在,使用默认路由
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "ecc:agents-md-router"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "agents-md-router"
|
|
4
|
+
description: "解析 AGENTS.md / CLAUDE.md 中的工作流路由规则"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "always"
|
|
7
|
+
source: "everything-claude-code"
|
|
8
|
+
dependencies: []
|
|
9
|
+
inputs: ["AGENTS.md"]
|
|
10
|
+
outputs: ["workflow_routes"]
|
|
11
|
+
size: "small"
|
|
12
|
+
cache_ttl: "30d"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ecc-context-injector
|
|
3
|
+
description: "Inject spec context from openspec/changes/<name>/ into subagent prompts. Ensures subagents have complete context for implementation."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ecc:context-injector — 规格上下文注入
|
|
7
|
+
|
|
8
|
+
将在调度子代理时,将规格文档内容注入子代理的 prompt,确保子代理拥有完整的上下文信息,无需自行读取文件。
|
|
9
|
+
|
|
10
|
+
## 重要:不主动拦截用户消息
|
|
11
|
+
|
|
12
|
+
此技能为基础设施,**仅在调度子代理时自动触发**,不主动响应任何用户消息。
|
|
13
|
+
日常对话中不产生任何作用。
|
|
14
|
+
|
|
15
|
+
## 用途
|
|
16
|
+
|
|
17
|
+
每次调度子代理时自动触发。从 `openspec/changes/<name>/` 读取相关工件并注入到子代理 prompt 中。
|
|
18
|
+
|
|
19
|
+
## 输入
|
|
20
|
+
|
|
21
|
+
- `openspec/changes/<name>/` 目录下的工件
|
|
22
|
+
|
|
23
|
+
## 输出
|
|
24
|
+
|
|
25
|
+
- `injected_prompt`:注入了规格上下文的子代理 prompt
|
|
26
|
+
|
|
27
|
+
## 注入内容
|
|
28
|
+
|
|
29
|
+
根据子代理的任务类型,注入不同的上下文:
|
|
30
|
+
|
|
31
|
+
| 任务类型 | 注入内容 | 来源 |
|
|
32
|
+
|----------|----------|------|
|
|
33
|
+
| 实现任务 | specs.md + tasks.md 任务描述 + design.md 相关设计 | Subagent Development |
|
|
34
|
+
| 代码审查 | specs.md 验收标准 + design.md 设计决策 | Spec Reviewer |
|
|
35
|
+
| 质量审查 | specs.md + project coding standards | Code Quality Reviewer |
|
|
36
|
+
|
|
37
|
+
## 注入格式
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
## 规格上下文(自动注入)
|
|
41
|
+
|
|
42
|
+
### 项目
|
|
43
|
+
- 名称: <name>
|
|
44
|
+
|
|
45
|
+
### 规格
|
|
46
|
+
<specs.md 中与当前任务相关的内容>
|
|
47
|
+
|
|
48
|
+
### 设计决策(相关部分)
|
|
49
|
+
<design.md 中与当前任务相关的技术决策>
|
|
50
|
+
|
|
51
|
+
### 任务描述
|
|
52
|
+
<tasks.md 中当前任务的完整描述>
|
|
53
|
+
|
|
54
|
+
### 验收标准
|
|
55
|
+
<specs.md 中定义的验收标准>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 上下文大小管理
|
|
59
|
+
|
|
60
|
+
- 注入内容限制在子代理可用 token 的 30% 以内
|
|
61
|
+
- 优先注入与当前任务直接相关的内容
|
|
62
|
+
- 超出限制时截断优先级:验收标准 > 任务描述 > 设计决策 > 规格
|
|
63
|
+
- 截断处标注 `[上下文已截断,完整内容请参考 openspec/changes/<name>/speces.md]`
|
|
64
|
+
|
|
65
|
+
## 要点
|
|
66
|
+
|
|
67
|
+
- **自动注入** — 调度子代理时自动执行,无需手动操作
|
|
68
|
+
- **精准裁剪** — 只注入与当前任务相关的部分,避免 token 浪费
|
|
69
|
+
- **优先级保留** — 关键信息(验收标准)优先注入
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "ecc:context-injector"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "context-injector"
|
|
4
|
+
description: "将规格文档内容注入子代理 prompt"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "always"
|
|
7
|
+
source: "everything-claude-code"
|
|
8
|
+
dependencies: ["claude-code:subagent"]
|
|
9
|
+
inputs: ["specs/*.md"]
|
|
10
|
+
outputs: ["injected_prompt"]
|
|
11
|
+
size: "small"
|
|
12
|
+
cache_ttl: "30d"
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: existing-code-caveman
|
|
3
|
+
description: "项目认知中枢。通过结构索引(CodeGraph)+ 语义增强(Understand Anything)生成项目的完整认知图谱,并输出为 AI 助手引导文件(CLAUDE.md / AGENTS.md)。"
|
|
4
|
+
version: 3.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Existing Code Caveman — Project Cognition Hub
|
|
8
|
+
|
|
9
|
+
你是一名代码库考古学家,现在升级为**项目认知中枢**。当需要了解现有代码库、CLAUDE.md/AGENTS.md 缺失或过时、或在陌生代码库上开始新功能时,遵循以下四级流水线。
|
|
10
|
+
|
|
11
|
+
## 触发条件
|
|
12
|
+
|
|
13
|
+
- 项目首次初始化
|
|
14
|
+
- 代码库发生重大变更(用户主动触发或 Git Hook 检测)
|
|
15
|
+
- 子代理需要深入理解陌生模块时
|
|
16
|
+
- CLAUDE.md/AGENTS.md 不存在或过时
|
|
17
|
+
- **项目非空**(存在源码文件)
|
|
18
|
+
|
|
19
|
+
**空项目处理**:检测到项目为空 → 跳过此技能,直接进入 Phase 1 brainstorming。
|
|
20
|
+
通知用户:"项目为空,跳过代码探索,直接进行需求分析。"
|
|
21
|
+
|
|
22
|
+
## 依赖
|
|
23
|
+
|
|
24
|
+
- **工具**: `sds graph` CLI(内置于 @trench-craft/sds)
|
|
25
|
+
- **可选服务**: CodeGraph 引擎(本地 Tree-sitter)
|
|
26
|
+
- **可选服务**: Understand Anything LLM 流水线
|
|
27
|
+
- 模式 1:CLI 增强(需设置 `OPENAI_API_KEY` 或 `ANTHROPIC_API_KEY`)
|
|
28
|
+
- 模式 2:AI 助手增强(推荐,使用 AI 助手自身的模型能力,无需 API Key)
|
|
29
|
+
|
|
30
|
+
## 输入
|
|
31
|
+
|
|
32
|
+
- 项目源码树
|
|
33
|
+
- `.sds/graph.config.yaml`(如存在则复用,否则自动生成)
|
|
34
|
+
|
|
35
|
+
## 输出
|
|
36
|
+
|
|
37
|
+
- `.sds/codegraph.db` — 结构化代码图谱(SQLite)
|
|
38
|
+
- `.sds/semantic-graph.json` — 语义增强图谱(JSON)
|
|
39
|
+
- `.claude/CLAUDE.md` 或 `.opencode/AGENTS.md` — AI 助手引导文件
|
|
40
|
+
- `.sds/cognition-report.json` — 认知覆盖率报告
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Phase 1: 结构感知(Structure Indexing)
|
|
45
|
+
|
|
46
|
+
**目标**: 在 5 秒内建立项目骨架认知,零 LLM Token 消耗。
|
|
47
|
+
|
|
48
|
+
**自动执行规则(强制)**:
|
|
49
|
+
- 本技能会自动执行所有必要的 CLI 命令,用户无需手动执行
|
|
50
|
+
- 使用 `bash` 工具执行命令,使用 `workdir` 参数指定工作目录
|
|
51
|
+
- 每个命令执行后检查输出,确保成功完成
|
|
52
|
+
|
|
53
|
+
### 步骤
|
|
54
|
+
|
|
55
|
+
1. **初始化图谱配置**
|
|
56
|
+
- 检查 `.sds/graph.config.yaml` 是否存在
|
|
57
|
+
- 不存在 → 自动执行 `sds graph init`
|
|
58
|
+
- 存在 → 读取配置,复用现有设置
|
|
59
|
+
|
|
60
|
+
2. **执行结构索引**
|
|
61
|
+
- 检查 `.sds/codegraph.db` 是否存在且未过期(< 24h)
|
|
62
|
+
- 存在且新鲜 → 跳至步骤 3
|
|
63
|
+
- 不存在或过期 → 自动执行 `sds graph index --incremental --verbose`
|
|
64
|
+
- 索引完成后,输出统计信息
|
|
65
|
+
|
|
66
|
+
3. **导出引导文件(自动检测平台)**
|
|
67
|
+
- 检测当前平台:
|
|
68
|
+
- 存在 `.opencode/` 目录 → OpenCode 平台
|
|
69
|
+
- 存在 `CLAUDE.md` 或 `.claude/` 目录 → Claude Code 平台
|
|
70
|
+
- 两者都存在 → 同时生成两种格式
|
|
71
|
+
- OpenCode: 自动执行 `sds graph export --format agents-md`
|
|
72
|
+
- Claude Code: 自动执行 `sds graph export --format claude-md`
|
|
73
|
+
|
|
74
|
+
4. **读取结构元数据**
|
|
75
|
+
- 自动执行 `sds graph status` 获取索引状态
|
|
76
|
+
- 自动执行 `sds graph query --template entry-points` 获取入口文件
|
|
77
|
+
- 自动执行 `sds graph query --template circular-deps` 检查循环依赖
|
|
78
|
+
- 记录:文件总数、语言分布、模块边界、入口文件列表、核心枢纽模块
|
|
79
|
+
|
|
80
|
+
5. **传统探索(补充)**
|
|
81
|
+
- 现有文档:README.md、CONTRIBUTING.md、ARCHITECTURE.md、docs/
|
|
82
|
+
- 技术栈检测:package.json、pyproject.toml、go.mod、Cargo.toml
|
|
83
|
+
- 构建与部署:Dockerfile、docker-compose.yml、.github/workflows/
|
|
84
|
+
- Git 上下文:`git log --oneline -20`、`git branch -a`
|
|
85
|
+
|
|
86
|
+
6. **生成结构摘要**
|
|
87
|
+
- 写入临时上下文,供后续阶段使用
|
|
88
|
+
- 包含:项目概览、技术栈清单、架构图(文本描述)、关键文件列表、已知约束
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Phase 2: 语义增强(Semantic Enhancement)
|
|
93
|
+
|
|
94
|
+
**目标**: 对关键模块生成业务语义解释,按需触发,可控成本。
|
|
95
|
+
|
|
96
|
+
### 语义增强模式
|
|
97
|
+
|
|
98
|
+
支持两种模式:
|
|
99
|
+
|
|
100
|
+
**模式 1:CLI 增强(需要 API Key)**
|
|
101
|
+
- 设置环境变量 `OPENAI_API_KEY` 或 `ANTHROPIC_API_KEY`
|
|
102
|
+
- 执行 `sds graph enhance`
|
|
103
|
+
|
|
104
|
+
**模式 2:AI 助手增强(推荐,无需 API Key)**
|
|
105
|
+
- 使用 AI 助手自身的模型能力进行语义分析
|
|
106
|
+
- 读取 `sds graph query` 输出,由 AI 助手生成语义摘要
|
|
107
|
+
- 将结果写入 `.sds/semantic-graph.json`
|
|
108
|
+
|
|
109
|
+
### 触发条件(满足任一即执行)
|
|
110
|
+
|
|
111
|
+
- `graph.config.yaml` 中 `enhance.enabled: true`
|
|
112
|
+
- 或 `enhance.enabled: auto` 且满足:
|
|
113
|
+
- 项目文件数 < 500(控制成本)
|
|
114
|
+
- 上次语义增强距今 > 7 天
|
|
115
|
+
|
|
116
|
+
### 步骤
|
|
117
|
+
|
|
118
|
+
1. **检查触发条件**
|
|
119
|
+
- 读取 `.sds/graph.config.yaml` 中的 `enhance.enabled` 配置
|
|
120
|
+
- 如果为 `false` → 跳过此阶段,直接进入 Phase 3
|
|
121
|
+
- 如果为 `true` 或 `auto` → 继续执行
|
|
122
|
+
|
|
123
|
+
2. **选择增强模式**
|
|
124
|
+
- 检查环境变量 `OPENAI_API_KEY` 或 `ANTHROPIC_API_KEY` 是否存在
|
|
125
|
+
- 存在 → 使用模式 1(CLI 增强)
|
|
126
|
+
- 不存在 → 使用模式 2(AI 助手增强)
|
|
127
|
+
|
|
128
|
+
3. **模式 1:CLI 增强**
|
|
129
|
+
- 执行 `sds graph enhance --dry-run` 预览采样文件
|
|
130
|
+
- 向用户报告预览结果:"将分析 N 个核心文件,预计消耗 Xk Token,是否继续?"
|
|
131
|
+
- 等待用户确认后执行 `sds graph enhance`
|
|
132
|
+
|
|
133
|
+
4. **模式 2:AI 助手增强**
|
|
134
|
+
- 执行 `sds graph query --sql "SELECT path, name, type FROM symbols LIMIT 100"` 获取代码结构
|
|
135
|
+
- 执行 `sds graph query --template entry-points` 获取入口文件
|
|
136
|
+
- AI 助手根据代码结构生成语义摘要:
|
|
137
|
+
- 项目摘要(description, techStack, architecturePattern)
|
|
138
|
+
- 文件级语义(summary, responsibility, inputs, outputs)
|
|
139
|
+
- 模块级语义(description, files, publicApi)
|
|
140
|
+
- 将结果写入 `.sds/semantic-graph.json`
|
|
141
|
+
|
|
142
|
+
5. **读取语义图谱**
|
|
143
|
+
- 读取生成的 `.sds/semantic-graph.json`
|
|
144
|
+
- 提取:项目摘要、模块描述、数据流、学习路径
|
|
145
|
+
|
|
146
|
+
### 成本控制策略
|
|
147
|
+
|
|
148
|
+
- 自动采样仅覆盖核心模块(入口 + 枢纽 + 领域代表)
|
|
149
|
+
- 单次 enhance 默认 Token 预算 100k,超预算时自动降级为 `lite` 模式
|
|
150
|
+
- 支持 `--files` 参数指定仅分析用户关心的模块
|
|
151
|
+
|
|
152
|
+
### 查询示例
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# 查询项目概览
|
|
156
|
+
sds graph query --sql "SELECT * FROM files LIMIT 10"
|
|
157
|
+
|
|
158
|
+
# 查询所有函数
|
|
159
|
+
sds graph query --sql "SELECT name, type FROM symbols WHERE type = 'function' LIMIT 20"
|
|
160
|
+
|
|
161
|
+
# 查询调用关系
|
|
162
|
+
sds graph query --sql "
|
|
163
|
+
SELECT f1.path as caller_file, s1.name as caller, f2.path as callee_file, s2.name as callee
|
|
164
|
+
FROM call_graph cg
|
|
165
|
+
JOIN files f1 ON cg.caller_file_id = f1.id
|
|
166
|
+
JOIN symbols s1 ON cg.caller_symbol_id = s1.id
|
|
167
|
+
JOIN files f2 ON cg.callee_file_id = f2.id
|
|
168
|
+
JOIN symbols s2 ON cg.callee_symbol_id = s2.id
|
|
169
|
+
WHERE cg.relation_type = 'call'
|
|
170
|
+
LIMIT 20
|
|
171
|
+
"
|
|
172
|
+
|
|
173
|
+
# 查询入口文件
|
|
174
|
+
sds graph query --template entry-points
|
|
175
|
+
|
|
176
|
+
# 查询循环依赖
|
|
177
|
+
sds graph query --template circular-deps
|
|
178
|
+
|
|
179
|
+
# 查询死代码
|
|
180
|
+
sds graph query --template dead-code
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Phase 3: 融合渲染(Fusion Rendering)
|
|
186
|
+
|
|
187
|
+
**目标**: 将结构数据与语义数据融合为平台特定的引导文件。
|
|
188
|
+
|
|
189
|
+
### 步骤
|
|
190
|
+
|
|
191
|
+
1. **导出图谱(自动检测平台)**
|
|
192
|
+
- 检测当前平台:
|
|
193
|
+
- 存在 `.opencode/` 目录 → OpenCode 平台
|
|
194
|
+
- 存在 `CLAUDE.md` 或 `.claude/` 目录 → Claude Code 平台
|
|
195
|
+
- 两者都存在 → 同时生成两种格式
|
|
196
|
+
- OpenCode: 自动执行 `sds graph export --format agents-md`
|
|
197
|
+
- Claude Code: 自动执行 `sds graph export --format claude-md`
|
|
198
|
+
- 平台适配:
|
|
199
|
+
- **Claude Code**: 导出到 `.claude/CLAUDE.md`
|
|
200
|
+
- **OpenCode**: 导出到 `.opencode/AGENTS.md`
|
|
201
|
+
|
|
202
|
+
2. **增强引导文件**
|
|
203
|
+
- 在引导文件中植入'图谱查询接口'说明
|
|
204
|
+
- 确保后续会话中 AI 知道如何查询图谱
|
|
205
|
+
|
|
206
|
+
3. **保留传统章节**
|
|
207
|
+
- 确保生成的引导文件包含所有必要章节:
|
|
208
|
+
- Tech Stack
|
|
209
|
+
- Directory Structure
|
|
210
|
+
- Feature Overview(必须填写至少 1 行)
|
|
211
|
+
- Core User Flows(必须填写至少 1 条)
|
|
212
|
+
- Core Modules
|
|
213
|
+
- Data Flow
|
|
214
|
+
- External Integrations
|
|
215
|
+
- Configuration & Environment(必须填写至少 1 个变量)
|
|
216
|
+
- Build & Deploy(必须填写至少 1 条记录)
|
|
217
|
+
- Risk Areas / Tech Debt(必须填写至少 1 条风险)
|
|
218
|
+
- Test Coverage
|
|
219
|
+
- Development Constraints(必须填写至少 1 条约束)
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Phase 4: 认知验证(Cognition Verification)
|
|
224
|
+
|
|
225
|
+
**目标**: 确保生成的引导文件质量达标。
|
|
226
|
+
|
|
227
|
+
### 检查项
|
|
228
|
+
|
|
229
|
+
- [ ] 结构覆盖率 > 80%(文件级)
|
|
230
|
+
- [ ] 语义覆盖率 > 60%(核心模块有摘要)
|
|
231
|
+
- [ ] 引导文件 Token 数 < 8000(防止上下文膨胀)
|
|
232
|
+
- [ ] 关键调用链无断裂(CodeGraph 边完整性检查)
|
|
233
|
+
- [ ] 语义摘要无自相矛盾(LLM 轻量校验)
|
|
234
|
+
|
|
235
|
+
### 传统验证清单
|
|
236
|
+
|
|
237
|
+
- [ ] `Feature Overview` 表格是否已填写?(至少 1 行有效数据)
|
|
238
|
+
- [ ] `Core User Flows` 是否包含至少 1 条流程描述?
|
|
239
|
+
- [ ] `Configuration & Environment` 是否包含至少 1 个环境变量?
|
|
240
|
+
- [ ] `Build & Deploy` 是否包含至少 1 条构建或部署记录?
|
|
241
|
+
- [ ] `Risk Areas` 是否包含至少 1 条风险?
|
|
242
|
+
- [ ] `Development Constraints` 是否包含至少 1 条约束?
|
|
243
|
+
- [ ] 若某项检查未通过,是否在对应章节标注了 `[INCOMPLETE: 原因]`?
|
|
244
|
+
|
|
245
|
+
### 失败处理
|
|
246
|
+
|
|
247
|
+
- 结构覆盖率不足 → 扩大 index 的 include 范围,重新执行 Phase 1
|
|
248
|
+
- 语义摘要矛盾 → 对冲突文件重新执行 `sds graph enhance --files <conflict>`
|
|
249
|
+
- 引导文件过大 → 启用'按需懒加载模式'
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Phase 5: Handoff to Superpowers
|
|
254
|
+
|
|
255
|
+
引导文件就绪后,通知用户:
|
|
256
|
+
|
|
257
|
+
"Codebase archaeology complete. CLAUDE.md/AGENTS.md is ready. You can now proceed with the Superpowers workflow: explore → brainstorming → propose → plan → apply → verify → archive."
|
|
258
|
+
|
|
259
|
+
同时提供图谱查询接口:
|
|
260
|
+
- **结构查询**: `sds graph query --sql "..."`
|
|
261
|
+
- **语义查询**: `sds graph query --nl "..."`
|
|
262
|
+
- **增量更新**: `sds graph diff`
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 与后续技能的衔接
|
|
267
|
+
|
|
268
|
+
### 对 brainstorming 的输出
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"project_context": {
|
|
273
|
+
"architecture": "Clean Architecture + CQRS",
|
|
274
|
+
"modules": ["order", "payment", "inventory"],
|
|
275
|
+
"tech_stack": ["NestJS", "PostgreSQL"],
|
|
276
|
+
"entry_points": ["src/main.ts", "src/api/*.controller.ts"],
|
|
277
|
+
"data_flows": {
|
|
278
|
+
"order_creation": ["cart", "order", "payment", "inventory"]
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"graph_query_interface": {
|
|
282
|
+
"structure": "sds graph query --sql '...'",
|
|
283
|
+
"semantic": "sds graph query --nl '...'"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### 对 systematic-debugging 的输出
|
|
289
|
+
|
|
290
|
+
- 提供 `sds graph query --template "call-chain" --from <error_file>` 快速定位调用链
|
|
291
|
+
- 提供变更影响面分析:`sds graph query --sql "SELECT * FROM call_graph WHERE caller = '<file>'"`
|
|
292
|
+
|
|
293
|
+
### 对 refactoring-assistant 的输出
|
|
294
|
+
|
|
295
|
+
- 提供模块依赖图,评估重构影响范围
|
|
296
|
+
- 提供循环依赖清单,识别优先解耦目标
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 错误处理
|
|
301
|
+
|
|
302
|
+
| 错误场景 | 处理策略 |
|
|
303
|
+
|---------|---------|
|
|
304
|
+
| CodeGraph 解析失败(不支持的语法) | 跳过该文件,记录到 `.sds/graph-errors.log`,不影响整体索引 |
|
|
305
|
+
| LLM API 限流/失败 | 降级为纯结构模式,引导文件中标注'语义分析未完成',提示用户稍后重试 |
|
|
306
|
+
| 项目过大(> 10k 文件) | 自动切换为'分层索引':只索引 src/ 目录,忽略测试和构建产物 |
|
|
307
|
+
| 循环依赖导致 enhance 递归溢出 | 设置调用链深度上限(10 层),超出部分标记为 'deep-circular' |
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## 配置示例
|
|
312
|
+
|
|
313
|
+
### 最小配置(纯结构模式,零成本)
|
|
314
|
+
|
|
315
|
+
```yaml
|
|
316
|
+
# .sds/graph.config.yaml
|
|
317
|
+
enhance:
|
|
318
|
+
enabled: false
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### 标准配置(结构+语义,平衡成本)
|
|
322
|
+
|
|
323
|
+
```yaml
|
|
324
|
+
enhance:
|
|
325
|
+
enabled: auto
|
|
326
|
+
depth: standard
|
|
327
|
+
max_files: 50
|
|
328
|
+
budget_tokens: 100000
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### 深度配置(完整语义,高成本)
|
|
332
|
+
|
|
333
|
+
```yaml
|
|
334
|
+
enhance:
|
|
335
|
+
enabled: true
|
|
336
|
+
depth: deep
|
|
337
|
+
max_files: 200
|
|
338
|
+
budget_tokens: 500000
|
|
339
|
+
model: "claude-opus-4"
|
|
340
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "existing-code-caveman"
|
|
2
|
+
version: "3.0.0"
|
|
3
|
+
name: "project-cognition-hub"
|
|
4
|
+
description: "项目认知中枢。通过结构索引(CodeGraph)+ 语义增强(Understand Anything)生成项目的完整认知图谱"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-0"
|
|
7
|
+
source: "superpowers"
|
|
8
|
+
dependencies: ["sds graph"]
|
|
9
|
+
inputs: ["项目源码树", ".sds/graph.config.yaml"]
|
|
10
|
+
outputs: [".sds/codegraph.db", ".sds/semantic-graph.json", "AGENTS.md / CLAUDE.md", ".sds/cognition-report.json"]
|
|
11
|
+
size: "large"
|
|
12
|
+
cache_ttl: "7d"
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-apply
|
|
3
|
+
description: "Execute code changes from tasks.md. Follow TDD, one task at a time. Phase 4 of the SDS workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# opsx:apply — 执行变更
|
|
7
|
+
|
|
8
|
+
## 触发条件
|
|
9
|
+
|
|
10
|
+
**触发**:
|
|
11
|
+
- writing-plans 已完成,plan.md 或 plan/ 目录已就绪
|
|
12
|
+
- 用户说"开始实现"、"执行"、"开始编码"
|
|
13
|
+
|
|
14
|
+
**不触发**:
|
|
15
|
+
- ❌ 任何非开发类对话
|
|
16
|
+
- ❌ 计划尚未生成
|
|
17
|
+
- ❌ 用户还在讨论计划
|
|
18
|
+
|
|
19
|
+
根据计划中的任务列表,逐步执行代码变更。
|
|
20
|
+
|
|
21
|
+
## SDS Workflow 位置
|
|
22
|
+
|
|
23
|
+
**Phase 4** — 智能开发阶段
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Phase 3 Phase 4 Phase 5
|
|
27
|
+
writing-plans → opsx:apply → opsx:verify
|
|
28
|
+
│
|
|
29
|
+
├── subagent-driven-development(推荐)
|
|
30
|
+
└── 手动执行
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 输入
|
|
34
|
+
|
|
35
|
+
支持两种计划格式(自动检测):
|
|
36
|
+
|
|
37
|
+
### 模式 A: 目录化计划(计划较大时)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
openspec/changes/<name>/
|
|
41
|
+
├── plan/
|
|
42
|
+
│ ├── index.md ← 入口:执行顺序和状态
|
|
43
|
+
│ ├── auth.md ← 自包含:含接口契约 + 任务步骤
|
|
44
|
+
│ └── user.md ← 自包含:内联依赖接口
|
|
45
|
+
├── specs.md
|
|
46
|
+
└── tasks.md
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 模式 B: 单文件计划(默认)
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
openspec/changes/<name>/
|
|
53
|
+
├── plan.md ← 自包含:接口契约 + 所有任务
|
|
54
|
+
├── specs.md
|
|
55
|
+
└── tasks.md
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 检测逻辑
|
|
59
|
+
|
|
60
|
+
1. 存在 `plan/` 目录 → 模式 A
|
|
61
|
+
2. 否则 → 模式 B
|
|
62
|
+
|
|
63
|
+
**两种模式对协调器的唯一区别:**
|
|
64
|
+
- 模式 A:按 index.md 顺序逐 chunk 读取,每个 chunk 独立完整
|
|
65
|
+
- 模式 B:直接读 plan.md 全文
|
|
66
|
+
|
|
67
|
+
**不需要跨文件拼接上下文。**
|
|
68
|
+
|
|
69
|
+
## 输出
|
|
70
|
+
|
|
71
|
+
代码变更直接应用到项目中。
|
|
72
|
+
|
|
73
|
+
## 执行方式
|
|
74
|
+
|
|
75
|
+
### 方式 1: subagent-driven-development(推荐)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
检测计划格式 → 读取计划
|
|
79
|
+
↓
|
|
80
|
+
模式 A: 按 index.md 顺序逐 chunk 处理
|
|
81
|
+
对每个 chunk:
|
|
82
|
+
读取该 chunk 文件(自包含,无需其他文件)
|
|
83
|
+
对 chunk 内每个任务:
|
|
84
|
+
提取任务文本 → 分派子代理 → 审查 → 标记完成
|
|
85
|
+
chunk 完成 → 更新 index.md 状态
|
|
86
|
+
↓
|
|
87
|
+
模式 B: 读取 plan.md 全文
|
|
88
|
+
对每个任务:
|
|
89
|
+
提取任务文本 → 分派子代理 → 审查 → 标记完成
|
|
90
|
+
↓
|
|
91
|
+
全部完成 → opsx:verify
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 方式 2: 手动执行
|
|
95
|
+
|
|
96
|
+
在当前会话中按计划中列出的步骤逐一执行。
|
|
97
|
+
|
|
98
|
+
## 流程
|
|
99
|
+
|
|
100
|
+
1. **检测计划格式** — plan/ 目录 or plan.md
|
|
101
|
+
2. **读取计划** — 自包含,一次读取即可
|
|
102
|
+
3. **理解依赖关系** — 任务间依赖(在接口契约中声明)
|
|
103
|
+
4. **按依赖顺序执行**
|
|
104
|
+
- 先执行无依赖的任务
|
|
105
|
+
- 每个任务遵循 TDD(红 → 绿 → 重构)
|
|
106
|
+
5. **每个任务后验证**
|
|
107
|
+
- 运行测试确认通过
|
|
108
|
+
- 确保不破坏已有功能
|
|
109
|
+
- Commit
|
|
110
|
+
6. **更新状态** — 任务的 `- [ ]` → `- [x]`
|
|
111
|
+
7. **处理偏差**
|
|
112
|
+
- 计划有误 → 更新对应文件
|
|
113
|
+
- specs 不完整 → 更新 specs.md
|
|
114
|
+
|
|
115
|
+
## 要点
|
|
116
|
+
|
|
117
|
+
- **TDD 强制** — 先写测试再写实现
|
|
118
|
+
- **小步提交** — 每个任务独立 commit
|
|
119
|
+
- **不跳过审查** — 子代理模式必须做审查
|
|
120
|
+
- **不并行实现** — 一次一个任务
|
|
121
|
+
- **不需要跨文件拼接** — 每个 chunk / plan.md 自包含
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: "opsx:apply"
|
|
2
|
+
version: "2.0.0"
|
|
3
|
+
name: "apply-changes"
|
|
4
|
+
description: "根据 tasks.md 执行变更"
|
|
5
|
+
category: "core"
|
|
6
|
+
phase: "phase-4"
|
|
7
|
+
source: "openspec"
|
|
8
|
+
dependencies: ["opsx:propose", "writing-plans"]
|
|
9
|
+
inputs: ["openspec/changes/{name}/tasks.md"]
|
|
10
|
+
outputs: []
|
|
11
|
+
size: "large"
|
|
12
|
+
cache_ttl: "7d"
|