aigroup-workflow 2.0.1 → 2.0.2
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/cli/utils/scaffold.mjs
CHANGED
|
@@ -335,6 +335,8 @@ export function scaffold(pkgRoot, projectRoot, options = {}) {
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
// 5. Skill 模块(manifest 驱动)
|
|
338
|
+
// Claude Code 启动自动加载位置:.claude/skills/<name>/SKILL.md
|
|
339
|
+
// Codex 端按文件路径手动加载,沿用根 skills/<name>/SKILL.md
|
|
338
340
|
const allSkillModules = getSkillModules(pkgRoot)
|
|
339
341
|
const selectedIds = modules || getDefaultSkillModuleIds(pkgRoot)
|
|
340
342
|
|
|
@@ -347,8 +349,19 @@ export function scaffold(pkgRoot, projectRoot, options = {}) {
|
|
|
347
349
|
if (!modTargets.some(t => targets.includes(t))) continue
|
|
348
350
|
|
|
349
351
|
let modCopied = 0
|
|
350
|
-
for (const
|
|
351
|
-
|
|
352
|
+
for (const skillPath of mod.paths) {
|
|
353
|
+
const src = join(pkgRoot, skillPath)
|
|
354
|
+
// skills/<name> → 根据 target 决定落盘位置
|
|
355
|
+
// Claude target:.claude/skills/<name>(Claude Code 自动加载)
|
|
356
|
+
// Codex target:skills/<name>(文件路径手动加载)
|
|
357
|
+
if (targets.includes('claude')) {
|
|
358
|
+
const claudeDest = join(projectRoot, skillPath.replace(/^skills\//, '.claude/skills/'))
|
|
359
|
+
modCopied += copyDirRecursive(src, claudeDest, { overwrite })
|
|
360
|
+
}
|
|
361
|
+
if (targets.includes('codex')) {
|
|
362
|
+
const codexDest = join(projectRoot, skillPath)
|
|
363
|
+
modCopied += copyDirRecursive(src, codexDest, { overwrite })
|
|
364
|
+
}
|
|
352
365
|
}
|
|
353
366
|
sections.push({
|
|
354
367
|
name: `skill 模块: ${modId} — ${mod.description || ''}`,
|
|
@@ -420,18 +433,21 @@ export function scaffoldUpdate(pkgRoot, projectRoot) {
|
|
|
420
433
|
totalCopied += codexCopied
|
|
421
434
|
}
|
|
422
435
|
|
|
423
|
-
// Skill
|
|
436
|
+
// Skill 模块(按 target 分流:claude → .claude/skills/,codex → skills/)
|
|
424
437
|
const allSkillModules = getSkillModules(pkgRoot)
|
|
425
438
|
for (const modId of modules) {
|
|
426
439
|
const mod = allSkillModules.find(m => m.id === modId)
|
|
427
440
|
if (!mod) continue
|
|
428
441
|
let modCopied = 0
|
|
429
|
-
for (const
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
join(projectRoot,
|
|
433
|
-
{ overwrite: true }
|
|
434
|
-
|
|
442
|
+
for (const skillPath of mod.paths) {
|
|
443
|
+
const src = join(pkgRoot, skillPath)
|
|
444
|
+
if (targets.includes('claude')) {
|
|
445
|
+
const claudeDest = join(projectRoot, skillPath.replace(/^skills\//, '.claude/skills/'))
|
|
446
|
+
modCopied += copyDirRecursive(src, claudeDest, { overwrite: true })
|
|
447
|
+
}
|
|
448
|
+
if (targets.includes('codex')) {
|
|
449
|
+
modCopied += copyDirRecursive(src, join(projectRoot, skillPath), { overwrite: true })
|
|
450
|
+
}
|
|
435
451
|
}
|
|
436
452
|
sections.push({ name: `skill 模块: ${modId}`, count: modCopied })
|
|
437
453
|
totalCopied += modCopied
|
package/package.json
CHANGED
|
@@ -5,33 +5,31 @@ description: 当有实现计划且任务相互独立时使用。使用 Agent 工
|
|
|
5
5
|
|
|
6
6
|
# 子代理驱动开发
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
按实现计划逐任务派遣独立子代理执行(实现 + 测试),每任务完成后由 `code-reviewer` 执行两阶段审查。
|
|
9
9
|
|
|
10
10
|
## 关键概念:真正的子代理 vs 角色切换
|
|
11
11
|
|
|
12
12
|
```
|
|
13
13
|
❌ 错误方式(角色切换):
|
|
14
|
-
|
|
15
|
-
→
|
|
14
|
+
主会话在当前对话里"假装变成实现 agent"然后开始写代码
|
|
15
|
+
→ 共享上下文、无隔离、协调视角被污染
|
|
16
16
|
|
|
17
17
|
✅ 正确方式(Agent 工具派遣):
|
|
18
|
-
|
|
19
|
-
→
|
|
20
|
-
→
|
|
18
|
+
主会话调用 Agent({ subagent_type: "tdd-guide", ... }) → 创建独立子代理
|
|
19
|
+
→ 子代理有自己的上下文与工具权限
|
|
20
|
+
→ 子代理完成后返回结果 → 主会话继续协调
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
**铁律:主会话不亲自写代码 / 做审查 / 跑测试。所有这些工作通过 Agent 工具委派给隔离的子代理(详见 `.claude/agents/`)。**
|
|
24
24
|
|
|
25
25
|
## 铁律
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
1. 使用 Agent 工具派遣,不是角色切换。主会话 不写代码。
|
|
27
|
+
1. 使用 Agent 工具派遣,不是角色切换
|
|
29
28
|
2. 每个任务一个全新子代理,禁止复用上下文
|
|
30
|
-
3.
|
|
31
|
-
4. 审查不通过 = 修复 +
|
|
29
|
+
3. 两阶段审查顺序不可颠倒:先规格符合性(Stage 1),再代码质量(Stage 2)
|
|
30
|
+
4. 审查不通过 = 修复 + 重审,不得跳过
|
|
32
31
|
5. 禁止并行派遣多个实现子代理(避免冲突)
|
|
33
|
-
6.
|
|
34
|
-
```
|
|
32
|
+
6. 不让子代理自己读计划文件,由主会话提取任务全文注入 prompt
|
|
35
33
|
|
|
36
34
|
## 流程
|
|
37
35
|
|
|
@@ -40,171 +38,136 @@ description: 当有实现计划且任务相互独立时使用。使用 Agent 工
|
|
|
40
38
|
|
|
41
39
|
┌──────────── 每个任务循环 ────────────┐
|
|
42
40
|
│ │
|
|
43
|
-
│ Agent
|
|
41
|
+
│ Agent 派遣实现 agent(含完整任务) │
|
|
44
42
|
│ ↓ │
|
|
45
|
-
│
|
|
43
|
+
│ 实现 agent:实现 + 测试 + 自检 │
|
|
46
44
|
│ ↓ │
|
|
47
|
-
│ Agent
|
|
48
|
-
│
|
|
49
|
-
│
|
|
50
|
-
│
|
|
51
|
-
│ ├─ 不通过 →
|
|
52
|
-
│ └─ 通过 ↓
|
|
45
|
+
│ Agent 派遣 code-reviewer │
|
|
46
|
+
│ (单次响应输出 Stage 1 + Stage 2) │
|
|
47
|
+
│ ├─ Stage 1 不通过 → 派遣实现修复 │
|
|
48
|
+
│ └─ Stage 1 通过 ↓ │
|
|
49
|
+
│ ├─ Stage 2 不通过 → 派遣实现修复 │
|
|
50
|
+
│ └─ Stage 2 通过 ↓ │
|
|
53
51
|
│ 标记任务完成 │
|
|
54
52
|
│ │
|
|
55
53
|
└───────────────────────────────────────┘
|
|
56
54
|
|
|
57
|
-
所有任务完成 →
|
|
55
|
+
所有任务完成 → 进入测试 / 文档更新 phase
|
|
58
56
|
```
|
|
59
57
|
|
|
60
|
-
##
|
|
58
|
+
## 派遣实现子代理
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
按任务类型选择 agent:
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
| 任务类型 | 派遣 |
|
|
63
|
+
|---------|------|
|
|
64
|
+
| TDD 流程(先写失败测试)| `tdd-guide` |
|
|
65
|
+
| 构建 / 类型 / 依赖错误 | `build-error-resolver` |
|
|
66
|
+
| 死代码清理 / 重构 | `refactor-cleaner` |
|
|
67
|
+
| 文档更新 | `doc-updater` |
|
|
68
|
+
| 关键浏览器路径 | `e2e-runner` |
|
|
69
|
+
| 其他实现工作 | 主对话直接做(不需要切 agent) |
|
|
65
70
|
|
|
66
|
-
|
|
71
|
+
### Prompt 模板
|
|
67
72
|
|
|
68
|
-
|
|
69
|
-
prompt 模板:
|
|
73
|
+
agent 身份 / 工具 / 输出格式已在 `.claude/agents/<name>.md` frontmatter 注入,prompt 只写**任务**和**上下文**:
|
|
70
74
|
|
|
75
|
+
```
|
|
71
76
|
## 任务
|
|
72
|
-
[
|
|
73
|
-
- 要修改的文件和路径
|
|
74
|
-
- 完整代码
|
|
75
|
-
- 测试代码
|
|
76
|
-
- 验证命令和预期输出]
|
|
77
|
+
[从实现计划中粘贴该任务全文:要改的文件 / 完整代码 / 测试 / 验证命令]
|
|
77
78
|
|
|
78
79
|
## 上下文
|
|
79
80
|
- 该任务在整体计划中的位置:第 N/M 个任务
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
## 工作规范
|
|
84
|
-
- 遵循 TDD:先写失败测试 → 确认失败 → 写最小实现 → 确认通过 → 提交
|
|
85
|
-
- 参照实现计划中的验收条件逐项确认
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 步骤 2:调用 Agent 工具
|
|
81
|
+
- session:<session 名>
|
|
82
|
+
- 设计文档路径:.orchestration/<session>/architect/handoff.md
|
|
83
|
+
- 实现计划路径:.orchestration/<session>/planner/handoff.md
|
|
89
84
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
description: "Jarvis: [任务简述]",
|
|
94
|
-
prompt: "[上面组装好的 prompt]"
|
|
95
|
-
})
|
|
85
|
+
## 验收
|
|
86
|
+
- 测试全绿(命令 + 输出)
|
|
87
|
+
- 改动文件在 handoff 中列出
|
|
96
88
|
```
|
|
97
89
|
|
|
98
|
-
###
|
|
90
|
+
### 处理返回
|
|
99
91
|
|
|
100
|
-
|
|
92
|
+
| 状态 | 主会话动作 |
|
|
93
|
+
|------|-----------|
|
|
94
|
+
| **DONE** | 派 `code-reviewer` 审查 |
|
|
95
|
+
| **DONE_WITH_CONCERNS** | 先评估疑虑再决定 |
|
|
96
|
+
| **NEEDS_CONTEXT** | 补上下文,重新派遣 |
|
|
97
|
+
| **BLOCKED** | 评估阻塞原因(见下) |
|
|
101
98
|
|
|
102
|
-
|
|
103
|
-
|------|-------------|
|
|
104
|
-
| **DONE** | 进入审查:Agent 工具派遣 Kyle |
|
|
105
|
-
| **DONE_WITH_CONCERNS** | 先评估疑虑,再决定是否审查 |
|
|
106
|
-
| **NEEDS_CONTEXT** | 补充上下文,重新 Agent 派遣 |
|
|
107
|
-
| **BLOCKED** | 评估阻塞原因(见下文) |
|
|
99
|
+
**BLOCKED 处理**:
|
|
108
100
|
|
|
109
|
-
|
|
101
|
+
1. 上下文不足 → 补 + 重派
|
|
102
|
+
2. 任务太大 → 拆小再派
|
|
103
|
+
3. 计划本身错 → 回到 `planner` 修计划
|
|
104
|
+
4. **永远不要**忽略阻塞或强推
|
|
110
105
|
|
|
111
|
-
|
|
112
|
-
2. 任务太大 → 拆分为更小的任务
|
|
113
|
-
3. 计划有问题 → 上报给用户讨论
|
|
114
|
-
4. **永远不要**忽略阻塞或强制重试
|
|
106
|
+
## 派遣审查子代理
|
|
115
107
|
|
|
116
|
-
|
|
108
|
+
### `code-reviewer`(双阶段一次完成)
|
|
117
109
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
### Stage 1:规格符合性审查
|
|
110
|
+
agent 在 `.claude/agents/code-reviewer.md` 已规定输出格式包含 Stage 1 + Stage 2,prompt 只写**审查基准**和**对象**:
|
|
121
111
|
|
|
122
112
|
```
|
|
123
113
|
Agent({
|
|
124
|
-
subagent_type: "
|
|
125
|
-
description: "
|
|
126
|
-
prompt:
|
|
127
|
-
## Stage 1
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
- 代码是否实现了计划的每条要求?
|
|
139
|
-
- 多做了什么?(未要求的功能 = 需要移除)
|
|
140
|
-
- 少做了什么?(遗漏的需求 = 需要补充)
|
|
141
|
-
|
|
142
|
-
## 输出
|
|
143
|
-
审查报告保存到 `.orchestration/<session>/code-reviewer/YYYY-MM-DD-xxx-review.md`
|
|
144
|
-
结论:通过 / 不通过(附具体问题清单)
|
|
145
|
-
"
|
|
114
|
+
subagent_type: "code-reviewer",
|
|
115
|
+
description: "Code review: [功能名]",
|
|
116
|
+
prompt: `
|
|
117
|
+
## 审查基准(Stage 1 用)
|
|
118
|
+
[粘贴实现计划中该任务的完整规格]
|
|
119
|
+
|
|
120
|
+
## 审查对象
|
|
121
|
+
- 实现 agent 报告的变更文件清单
|
|
122
|
+
- session:<session 名>
|
|
123
|
+
- 设计文档:.orchestration/<session>/architect/handoff.md
|
|
124
|
+
|
|
125
|
+
主会话会把你的响应抄进 .orchestration/<session>/code-reviewer/handoff.md。
|
|
126
|
+
按 agent frontmatter 规定的格式输出 Stage 1 + Stage 2 + Verdict。
|
|
127
|
+
`
|
|
146
128
|
})
|
|
147
129
|
```
|
|
148
130
|
|
|
149
|
-
###
|
|
131
|
+
### 安全敏感时追加 `security-reviewer`
|
|
132
|
+
|
|
133
|
+
涉及 auth / 支付 / PII / 外部输入 / 加密时,追加:
|
|
150
134
|
|
|
151
135
|
```
|
|
152
136
|
Agent({
|
|
153
|
-
subagent_type: "
|
|
154
|
-
description: "
|
|
155
|
-
prompt: "
|
|
156
|
-
## Stage 2:代码质量审查(Stage 1 已通过)
|
|
157
|
-
|
|
158
|
-
代码变更的 git diff:
|
|
159
|
-
```bash
|
|
160
|
-
git diff HEAD~1
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### 检查要求
|
|
164
|
-
- 代码是否干净、可读、可维护?
|
|
165
|
-
- 有无安全隐患?
|
|
166
|
-
- 有无性能问题?
|
|
167
|
-
- 测试是否充分?
|
|
168
|
-
- 命名是否清晰?
|
|
169
|
-
|
|
170
|
-
## 输出
|
|
171
|
-
在 `.orchestration/<session>/code-reviewer/` 的审查报告中追加 Stage 2 结论
|
|
172
|
-
结论:通过 / 不通过(附问题清单和修复建议)
|
|
173
|
-
"
|
|
137
|
+
subagent_type: "security-reviewer",
|
|
138
|
+
description: "Security review: [功能名]",
|
|
139
|
+
prompt: "[审查范围 + git diff 引用]"
|
|
174
140
|
})
|
|
175
141
|
```
|
|
176
142
|
|
|
177
143
|
## 审查不通过的修复循环
|
|
178
144
|
|
|
179
145
|
```
|
|
180
|
-
|
|
181
|
-
→
|
|
182
|
-
→ Agent
|
|
183
|
-
→ Agent
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
→
|
|
187
|
-
→ Agent 派遣新的 Jarvis 子代理修复
|
|
188
|
-
→ Agent 派遣新的 Kyle 重审 Stage 2
|
|
146
|
+
Stage 1 不通过
|
|
147
|
+
→ 主会话提取问题清单
|
|
148
|
+
→ Agent 派遣实现 agent 修复
|
|
149
|
+
→ Agent 派遣新 code-reviewer 重审
|
|
150
|
+
|
|
151
|
+
Stage 2 不通过
|
|
152
|
+
→ 同上
|
|
189
153
|
```
|
|
190
154
|
|
|
191
|
-
**每次修复和重审都是新的 Agent
|
|
155
|
+
**每次修复和重审都是新的 Agent 调用**——不复用之前的子代理。
|
|
192
156
|
|
|
193
157
|
## Red Flags — 停下来
|
|
194
158
|
|
|
195
159
|
| 信号 | 行动 |
|
|
196
160
|
|------|------|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
161
|
+
| 主会话自己开始写代码 | 停,派遣实现 agent |
|
|
162
|
+
| "在当前对话中变成 X agent" | 停,这是角色切换不是子代理 |
|
|
163
|
+
| Stage 1 通过前开始 Stage 2 | 停,按 agent 输出格式顺序 |
|
|
164
|
+
| 审查发现问题但跳过 | 停,修复后重审 |
|
|
201
165
|
| 同时派遣多个实现子代理 | 停,一次只能一个 |
|
|
202
|
-
|
|
|
203
|
-
| 没有实现计划就开始执行 |
|
|
166
|
+
| 实现 agent 报告 BLOCKED 但继续强推 | 停,评估阻塞原因 |
|
|
167
|
+
| 没有实现计划就开始执行 | 停,先 `planner` 出计划 |
|
|
204
168
|
|
|
205
|
-
##
|
|
169
|
+
## 关联
|
|
206
170
|
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
- **systematic-debugging** — Jarvis 遇到 Bug 时使用
|
|
171
|
+
- 输入:`writing-plans` / `planner` 产出的实现计划
|
|
172
|
+
- 之后:测试验证 / 文档更新 phase
|
|
173
|
+
- 横切:`verification-before-completion` / `systematic-debugging`
|
|
@@ -13,13 +13,13 @@ description: 当你有了设计方案或需求规格,在动手写代码之前
|
|
|
13
13
|
|
|
14
14
|
假设执行者是有能力的开发者,但对项目的工具链和问题域几乎一无所知,测试设计能力不强。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**上下文**:此技能在需求工程 / 方案设计完成后调用,由 `planner` agent 或主会话使用。
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
**产物**:主会话把 planner 响应写入 `.orchestration/<session>/planner/handoff.md`。
|
|
19
19
|
|
|
20
20
|
## 范围检查
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
如果设计方案覆盖了多个独立子系统,应该在需求工程阶段就拆分为子项目。
|
|
23
23
|
如果没有拆分,建议分成独立的计划——每个子系统一个。每个计划应能独立产出可工作、可测试的软件。
|
|
24
24
|
|
|
25
25
|
## 文件结构
|
|
@@ -57,7 +57,7 @@ description: 当你有了设计方案或需求规格,在动手写代码之前
|
|
|
57
57
|
|
|
58
58
|
**技术栈**:[关键技术/库]
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
**设计文档**:`.orchestration/<session>/architect/handoff.md`
|
|
61
61
|
|
|
62
62
|
---
|
|
63
63
|
```
|
|
@@ -137,21 +137,21 @@ git commit -m "feat: 添加某功能"
|
|
|
137
137
|
|
|
138
138
|
保存计划后,向用户提供执行选项:
|
|
139
139
|
|
|
140
|
-
> "计划已保存到 `.orchestration/<session>/planner
|
|
140
|
+
> "计划已保存到 `.orchestration/<session>/planner/handoff.md`。推荐执行方式:
|
|
141
141
|
>
|
|
142
|
-
> **子代理驱动(推荐)** —
|
|
142
|
+
> **子代理驱动(推荐)** — 主会话按任务派遣实现 agent(如 `tdd-guide`)执行,每任务独立上下文,`code-reviewer` 双阶段审查
|
|
143
143
|
>
|
|
144
144
|
> 确认后开始执行?"
|
|
145
145
|
|
|
146
146
|
**如果选择子代理驱动:**
|
|
147
|
-
-
|
|
148
|
-
-
|
|
147
|
+
- 加载 `subagent-driven-development` 技能
|
|
148
|
+
- 每任务派遣新的实现 agent + `code-reviewer` 双阶段审查
|
|
149
149
|
|
|
150
150
|
## Red Flags — 停下来
|
|
151
151
|
|
|
152
152
|
| 信号 | 行动 |
|
|
153
153
|
|------|------|
|
|
154
|
-
| 没有设计方案就开始写计划 |
|
|
154
|
+
| 没有设计方案就开始写计划 | 停下来,先完成需求工程 / architect 设计 |
|
|
155
155
|
| 任务步骤没有代码块 | 不合格,补上完整代码 |
|
|
156
156
|
| 出现"待定""TODO"等占位符 | 不合格,现在就确定内容 |
|
|
157
157
|
| 计划没有引用设计文档 | 在计划头补上设计文档链接 |
|
|
@@ -160,6 +160,7 @@ git commit -m "feat: 添加某功能"
|
|
|
160
160
|
|
|
161
161
|
## 关联技能
|
|
162
162
|
|
|
163
|
-
- **
|
|
163
|
+
- **requirement-engineering** — 产出需求文档(本技能的输入)
|
|
164
|
+
- **architecture-designer** — 方案 / ADR(本技能的另一输入)
|
|
164
165
|
- **subagent-driven-development** — 执行本计划(本技能的输出)
|
|
165
166
|
- **verification-before-completion** — 每个任务完成时验证
|