openmatrix 0.2.25 → 0.2.27
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.md +155 -595
- package/dist/agents/agent-runner.d.ts +5 -1
- package/dist/agents/agent-runner.js +53 -3
- package/dist/cli/commands/complete.js +13 -1
- package/dist/cli/commands/start.js +28 -14
- package/dist/cli/commands/status.js +13 -1
- package/dist/storage/file-store.d.ts +8 -0
- package/dist/storage/file-store.js +30 -0
- package/dist/storage/state-manager.d.ts +115 -0
- package/dist/storage/state-manager.js +269 -46
- package/package.json +1 -1
- package/skills/approve.md +1 -1
- package/skills/auto.md +39 -14
- package/skills/brainstorm.md +1 -5
- package/skills/check.md +1 -1
- package/skills/debug.md +692 -765
- package/skills/deploy.md +1 -1
- package/skills/feature.md +17 -14
- package/skills/meeting.md +1 -1
- package/skills/om.md +74 -8
- package/skills/openmatrix.md +5 -14
- package/skills/plan.md +54 -19
- package/skills/report.md +1 -1
- package/skills/research.md +16 -1
- package/skills/resume.md +3 -5
- package/skills/retry.md +1 -1
- package/skills/start.md +193 -54
- package/skills/status.md +1 -1
- package/skills/test.md +105 -8
package/skills/start.md
CHANGED
|
@@ -37,14 +37,9 @@ description: "Use when starting a new development task cycle with interactive qu
|
|
|
37
37
|
</INTENT-JUDGMENT>
|
|
38
38
|
|
|
39
39
|
<NO-OTHER-SKILLS>
|
|
40
|
-
|
|
41
|
-
- gsd-executor、gsd:* 等 GSD 相关技能
|
|
42
|
-
- superpowers:* 等 superpowers 相关技能
|
|
43
|
-
- 任何其他任务编排相关的 Agent 或工具
|
|
40
|
+
本 skill 与其他任务编排技能功能重叠,请勿同时使用。
|
|
44
41
|
|
|
45
|
-
**Step 9
|
|
46
|
-
|
|
47
|
-
违规调用将导致执行失败。
|
|
42
|
+
**Step 9 使用 Agent 工具执行子任务。**
|
|
48
43
|
|
|
49
44
|
**相关技能**: `/om:brainstorm` (需求探索) | `/om:plan` (方案生成) | `/om:auto` (全自动) | `/om:meeting` (阻塞处理) | `/om:status` (状态查看) | `/om:report` (报告)
|
|
50
45
|
</NO-OTHER-SKILLS>
|
|
@@ -57,7 +52,7 @@ Step 1: 初始化 .openmatrix 目录
|
|
|
57
52
|
Step 2: 验证前置条件(plan.md + tasks-input.json 必须已存在)
|
|
58
53
|
Step 3: 智能分析任务类型(开发/非开发)
|
|
59
54
|
Step 4: 提交文档(git add docs/ + 所有 .md 文件, commit)
|
|
60
|
-
Step 5:
|
|
55
|
+
Step 5: 必选问题(开发任务:质量等级; 严格模式可选E2E; 非开发:跳过)<- 不可跳过
|
|
61
56
|
Step 6: 可选问题(仅复杂开发任务)+ 展示执行计划
|
|
62
57
|
Step 7: 调用 openmatrix start --tasks-json <- 必须完成,不可跳过
|
|
63
58
|
Step 8: 从 CLI 返回结果中读取 subagentTasks 列表 <- 必须完成
|
|
@@ -67,25 +62,51 @@ Step 9: 逐个执行 subagentTasks(调用 Agent 工具) <- 只有
|
|
|
67
62
|
**违反以下任一规则将导致任务执行失败:**
|
|
68
63
|
|
|
69
64
|
- **禁止在 Step 9 之前写任何业务代码** — 所有代码必须在 Step 9 通过 Agent 执行
|
|
70
|
-
- **禁止跳过 Step 5 必选问题** —
|
|
65
|
+
- **禁止跳过 Step 5 必选问题** — 开发任务必须选质量等级,非开发任务无需问答
|
|
71
66
|
- **禁止跳过 Step 7** — 必须调用 CLI,不能用其他方式代替
|
|
72
67
|
- **禁止自行规划 Phase** — 任务由 CLI 的 TaskPlanner 拆分,AI 只提取 goals
|
|
73
68
|
- **禁止用 Bash/npm/write 直接写业务代码** — 业务代码只能通过 Step 9 的 Agent 执行
|
|
74
|
-
- **禁止调用 gsd-executor 或其他编排技能** — 必须用原生 Agent 工具
|
|
75
69
|
- **禁止在 start 中生成 plan** — plan 由 /om:plan 生成,start 只负责执行
|
|
70
|
+
- **使用 Agent 工具执行子任务** — 不通过其他编排系统
|
|
76
71
|
</MANDATORY-EXECUTION-ORDER>
|
|
77
72
|
|
|
73
|
+
<IRON-LAW>
|
|
74
|
+
|
|
75
|
+
**NO PRODUCTION CODE WITHOUT QUALITY GATES FIRST**
|
|
76
|
+
|
|
77
|
+
跳过了必选问题?停止。重新开始。
|
|
78
|
+
写了代码但没跑测试?删除。重新开始。
|
|
79
|
+
这不是建议。这是铁律。
|
|
80
|
+
|
|
81
|
+
</IRON-LAW>
|
|
82
|
+
|
|
83
|
+
<RED-FLAGS>
|
|
84
|
+
|
|
85
|
+
这些想法意味着停止:
|
|
86
|
+
|
|
87
|
+
| 想法 | 真相 |
|
|
88
|
+
|-----|------|
|
|
89
|
+
| "先写代码,测试稍后" | 跳过铁律 = 质量无保证 |
|
|
90
|
+
| "这个任务很简单" | 简单任务也要质量门禁 |
|
|
91
|
+
| "手动验证就够了" | 手动验证不可重复 |
|
|
92
|
+
| "质量级别不重要" | 质量级别决定代码可信度 |
|
|
93
|
+
| "跳过问答更快" | 跳过问答 = 跳过铁律 |
|
|
94
|
+
| "我知道该选什么" | 必选问题不可跳过 |
|
|
95
|
+
| "执行模式无所谓" | 执行模式决定审批节点 |
|
|
96
|
+
|
|
97
|
+
</RED-FLAGS>
|
|
98
|
+
|
|
78
99
|
<objective>
|
|
79
100
|
读取已有的 plan.md + tasks-input.json,通过必选问答确定执行配置(开发任务还需确定质量等级、E2E测试),确认后通过 CLI 拆分任务并执行。
|
|
80
101
|
|
|
81
102
|
本 Skill 只做执行,不做方案生成。如果 plan.md 或 tasks-input.json 不存在,引导用户先执行 /om:plan。
|
|
82
103
|
|
|
83
|
-
**Step 5
|
|
84
|
-
1.
|
|
85
|
-
2. E2E
|
|
86
|
-
3.
|
|
104
|
+
**Step 5 必选问题(开发任务):**
|
|
105
|
+
1. 质量等级(严格模式/平衡模式/快速模式)
|
|
106
|
+
2. E2E 测试(仅严格模式可选,其他模式自动跳过)
|
|
107
|
+
3. 执行模式根据质量等级自动推断(无需问答)
|
|
87
108
|
|
|
88
|
-
|
|
109
|
+
**非开发任务**(文档、配置等)无需问答,直接使用全自动执行。
|
|
89
110
|
</objective>
|
|
90
111
|
|
|
91
112
|
<process>
|
|
@@ -131,13 +152,27 @@ git init
|
|
|
131
152
|
|
|
132
153
|
### Step 2: 验证前置条件
|
|
133
154
|
|
|
134
|
-
|
|
155
|
+
**先获取当前 runId:**
|
|
156
|
+
```bash
|
|
157
|
+
cat .openmatrix/current.json 2>/dev/null || echo '{"runId":"run-default"}'
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
从返回结果提取 `runId`,后续文件检测和读取都使用 `.openmatrix/{runId}/` 目录。
|
|
161
|
+
|
|
162
|
+
**检查 plan.md 和 tasks-input.json 是否已存在(使用 runId):**
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
cat .openmatrix/${runId}/tasks-input.json 2>/dev/null || echo "NOT_FOUND"
|
|
166
|
+
cat .openmatrix/${runId}/plan.md 2>/dev/null || echo "NOT_FOUND"
|
|
167
|
+
```
|
|
135
168
|
|
|
169
|
+
**或通过 CLI 检查(推荐):**
|
|
136
170
|
```bash
|
|
137
|
-
|
|
138
|
-
cat .openmatrix/plan.md 2>/dev/null || echo "NOT_FOUND"
|
|
171
|
+
openmatrix status --json | jq '.files'
|
|
139
172
|
```
|
|
140
173
|
|
|
174
|
+
返回 `{hasPlan: true, hasTasksInput: true, hasResearchContext: false}` 等。
|
|
175
|
+
|
|
141
176
|
| 情况 | 处理方式 |
|
|
142
177
|
|------|---------|
|
|
143
178
|
| 两个都存在 | 读取内容,继续 Step 3 |
|
|
@@ -149,7 +184,7 @@ cat .openmatrix/plan.md 2>/dev/null || echo "NOT_FOUND"
|
|
|
149
184
|
**如果都存在,读取 tasks-input.json:**
|
|
150
185
|
|
|
151
186
|
```bash
|
|
152
|
-
cat .openmatrix/tasks-input.json
|
|
187
|
+
cat .openmatrix/${runId}/tasks-input.json
|
|
153
188
|
```
|
|
154
189
|
|
|
155
190
|
提取关键字段:`title`、`goals`、`goalTypes`、`goalComplexity`。
|
|
@@ -157,7 +192,7 @@ cat .openmatrix/tasks-input.json
|
|
|
157
192
|
**检测研究上下文:**
|
|
158
193
|
|
|
159
194
|
```bash
|
|
160
|
-
cat .openmatrix/research/context.json 2>/dev/null || echo "NO_RESEARCH"
|
|
195
|
+
cat .openmatrix/${runId}/research/context.json 2>/dev/null || echo "NO_RESEARCH"
|
|
161
196
|
```
|
|
162
197
|
|
|
163
198
|
如果检测到研究上下文,告知用户并将 `--research-context` 参数传递给 CLI。
|
|
@@ -191,7 +226,8 @@ git ls-files --others --exclude-standard | grep -E '\.md$|^docs/' 2>/dev/null
|
|
|
191
226
|
如果有文档变更(未追踪或未提交),执行提交:
|
|
192
227
|
|
|
193
228
|
```bash
|
|
194
|
-
git add docs/
|
|
229
|
+
git add docs/ CLAUDE.md README.md README_EN.md
|
|
230
|
+
# 注意:plan.md 和 tasks-input.json 在 .openmatrix/{runId}/ 目录,被 gitignore,不提交
|
|
195
231
|
git commit -m "$(cat <<'EOF'
|
|
196
232
|
docs: 更新项目文档
|
|
197
233
|
|
|
@@ -212,9 +248,9 @@ EOF
|
|
|
212
248
|
|
|
213
249
|
| goalTypes | 需要询问 |
|
|
214
250
|
|-----------|---------|
|
|
215
|
-
| `development` | 5.1 质量等级 -> 5.2 E2E
|
|
216
|
-
| `testing` |
|
|
217
|
-
| `documentation` / `other` |
|
|
251
|
+
| `development` | 5.1 质量等级 -> 5.2 E2E(仅严格模式可选) |
|
|
252
|
+
| `testing` | 无需问答,直接进入 Step 7 |
|
|
253
|
+
| `documentation` / `other` | 无需问答,直接进入 Step 7 |
|
|
218
254
|
|
|
219
255
|
#### 5.1 质量等级(仅 `goalTypes: development`)
|
|
220
256
|
|
|
@@ -224,11 +260,21 @@ AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
|
|
|
224
260
|
|
|
225
261
|
| label | description |
|
|
226
262
|
|-------|-------------|
|
|
227
|
-
|
|
|
228
|
-
|
|
|
229
|
-
|
|
|
263
|
+
| `严格模式` | TDD + >80%覆盖率 + 严格Lint + 安全扫描 — 生产级代码 |
|
|
264
|
+
| `平衡模式 (推荐)` | >60%覆盖率 + Lint + 安全扫描 — 日常开发 |
|
|
265
|
+
| `快速模式` | 无质量门禁 — 快速原型/验证 |
|
|
266
|
+
|
|
267
|
+
**质量等级选择后的自动推断规则:**
|
|
268
|
+
|
|
269
|
+
| 模式 | E2E | AI 验收 | 执行方式 |
|
|
270
|
+
|-----|-----|---------|---------|
|
|
271
|
+
| 严格模式 | 可选问一句(Step 5.2) | 必须 | TDD(先测试后开发) |
|
|
272
|
+
| 平衡模式 | 不需要(自动跳过) | 必须 | 先开发后测试 |
|
|
273
|
+
| 快速模式 | 不需要(自动跳过) | 不需要 | 直接开发 |
|
|
230
274
|
|
|
231
|
-
#### 5.2 E2E 测试(仅
|
|
275
|
+
#### 5.2 E2E 测试(仅 `严格模式` 可选,其他模式自动跳过)
|
|
276
|
+
|
|
277
|
+
**只有选择「严格模式」时才询问此问题,平衡模式和快速模式自动推断为「不需要」。**
|
|
232
278
|
|
|
233
279
|
AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
|
|
234
280
|
|
|
@@ -240,17 +286,25 @@ AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
|
|
|
240
286
|
| `视觉验证` | 需要浏览器可视化验证,可检查页面样式和布局 |
|
|
241
287
|
| `不需要` | 仅进行单元测试和集成测试,节省时间 |
|
|
242
288
|
|
|
243
|
-
####
|
|
289
|
+
#### 执行模式自动推断
|
|
244
290
|
|
|
245
|
-
|
|
291
|
+
**执行模式不再通过问答选择,而是根据质量等级自动推断:**
|
|
246
292
|
|
|
247
|
-
|
|
293
|
+
- **严格模式** → 全自动执行 + TDD 流程
|
|
294
|
+
- **平衡模式** → 全自动执行 + 先开发后测试
|
|
295
|
+
- **快速模式** → 全自动执行 + 直接开发
|
|
248
296
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
|
297
|
+
**非开发任务**(testing/documentation/other)默认使用「全自动执行」。
|
|
298
|
+
|
|
299
|
+
#### 常见借口
|
|
300
|
+
|
|
301
|
+
| 借口 | 真相 |
|
|
302
|
+
|-----|------|
|
|
303
|
+
| "只是个小功能,不用问这么多" | 小功能也要质量门禁 |
|
|
304
|
+
| "我知道该选什么级别" | 必选问题不可跳过 |
|
|
305
|
+
| "E2E测试浪费时间" | E2E测试由你决定,不是默认跳过 |
|
|
306
|
+
| "我会手动检查代码" | AI验收比手动检查更系统 |
|
|
307
|
+
| "这太复杂了,简化流程" | 流程设计有目的,简化=降低质量 |
|
|
254
308
|
|
|
255
309
|
### Step 6: 可选问题(仅复杂任务)
|
|
256
310
|
|
|
@@ -275,43 +329,71 @@ Goals:
|
|
|
275
329
|
Goals: N 个(将生成 N个开发 + N个测试 + 审查)
|
|
276
330
|
质量级别: xxx
|
|
277
331
|
E2E 测试: 功能测试 / 视觉验证 / 不启用
|
|
278
|
-
技术方案: .openmatrix/plan.md
|
|
332
|
+
技术方案: .openmatrix/{runId}/plan.md
|
|
279
333
|
```
|
|
280
334
|
|
|
281
335
|
### Step 7: 调用 CLI 创建任务(不可跳过)
|
|
282
336
|
|
|
283
|
-
|
|
337
|
+
**CLI 自动从当前 runId 目录读取 tasks-input.json 和 plan.md。**
|
|
338
|
+
|
|
339
|
+
**根据质量等级自动设置执行参数:**
|
|
340
|
+
|
|
341
|
+
| 质量等级 | CLI 参数 | 执行方式 |
|
|
342
|
+
|---------|---------|---------|
|
|
343
|
+
| 严格模式 | `--quality strict --mode auto` | TDD 流程 |
|
|
344
|
+
| 平衡模式 | `--quality balanced --mode auto` | 先开发后测试 |
|
|
345
|
+
| 快速模式 | `--quality fast --mode auto` | 直接开发 |
|
|
284
346
|
|
|
285
347
|
**开发任务**(有质量等级选择):
|
|
286
348
|
```bash
|
|
287
|
-
openmatrix start --tasks-json
|
|
349
|
+
openmatrix start --tasks-json @tasks-input.json --quality <质量等级> --mode auto --json
|
|
288
350
|
```
|
|
289
351
|
|
|
290
|
-
|
|
352
|
+
如果存在研究上下文(`.openmatrix/{runId}/research/context.json`),增加 `--research-context` 参数:
|
|
291
353
|
```bash
|
|
292
|
-
openmatrix start --tasks-json
|
|
354
|
+
openmatrix start --tasks-json @tasks-input.json --research-context @research/context.json --quality <质量等级> --mode auto --json
|
|
293
355
|
```
|
|
294
356
|
|
|
295
357
|
如果启用了 E2E 测试(功能测试),加上 `--e2e-tests`:
|
|
296
358
|
```bash
|
|
297
|
-
openmatrix start --tasks-json
|
|
359
|
+
openmatrix start --tasks-json @tasks-input.json --quality strict --mode auto --e2e-tests --json
|
|
298
360
|
```
|
|
299
361
|
|
|
300
362
|
如果选择了视觉验证,加上 `--e2e-tests --e2e-type visual`:
|
|
301
363
|
```bash
|
|
302
|
-
openmatrix start --tasks-json
|
|
364
|
+
openmatrix start --tasks-json @tasks-input.json --quality strict --mode auto --e2e-tests --e2e-type visual --json
|
|
303
365
|
```
|
|
304
366
|
|
|
305
|
-
|
|
367
|
+
**非开发任务**(无质量等级,默认全自动执行):
|
|
306
368
|
```bash
|
|
307
|
-
openmatrix start --tasks-json
|
|
369
|
+
openmatrix start --tasks-json @tasks-input.json --mode auto --json
|
|
308
370
|
```
|
|
309
371
|
|
|
372
|
+
**注意**: `@tasks-input.json` 表示 CLI 自动从当前 runId 目录读取。CLI 会自动检测 `current.json` 定位 runId。
|
|
373
|
+
|
|
310
374
|
此命令返回 JSON 包含 `subagentTasks` 列表。
|
|
311
375
|
|
|
312
376
|
### Step 8: 读取 subagentTasks
|
|
313
377
|
|
|
314
|
-
CLI 返回 JSON 中 `subagentTasks`
|
|
378
|
+
CLI 返回 JSON 中 `subagentTasks` 数组包含待执行任务:
|
|
379
|
+
|
|
380
|
+
```json
|
|
381
|
+
{
|
|
382
|
+
"status": "tasks_ready",
|
|
383
|
+
"subagentTasks": [
|
|
384
|
+
{
|
|
385
|
+
"taskId": "TASK-001",
|
|
386
|
+
"agentType": "coder",
|
|
387
|
+
"title": "实现登录功能",
|
|
388
|
+
"description": "...",
|
|
389
|
+
"prompt": "完整任务提示词...",
|
|
390
|
+
"timeout": 300000
|
|
391
|
+
}
|
|
392
|
+
]
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
提取每个任务的 `taskId`、`agentType`、`title`、`prompt`,供 Step 9 执行。
|
|
315
397
|
|
|
316
398
|
## === 执行阶段(只有此阶段才能写业务代码)===
|
|
317
399
|
|
|
@@ -390,6 +472,53 @@ AskUserQuestion: `header: "歧义确认"`, `multiSelect: false`
|
|
|
390
472
|
|
|
391
473
|
#### 9.3 执行 Agent 任务
|
|
392
474
|
|
|
475
|
+
**Skill 感知执行:**
|
|
476
|
+
|
|
477
|
+
执行每个任务前,AI 应根据任务内容判断是否需要调用相关 skill 来增强执行质量。
|
|
478
|
+
|
|
479
|
+
可用 skill 列表(AI 自行判断是否适用):
|
|
480
|
+
- `om:test` — 测试生成与验证循环
|
|
481
|
+
- `frontend-design` — 前端/UI 设计与实现
|
|
482
|
+
- `om:research` — 领域研究
|
|
483
|
+
- 其他已安装的 skill
|
|
484
|
+
|
|
485
|
+
**判断流程:**
|
|
486
|
+
1. 读取任务的 `agentType`、`title`、`description`
|
|
487
|
+
2. AI 自行判断该任务是否匹配某个 skill 的触发条件
|
|
488
|
+
3. 如果匹配,在 Agent prompt 中注入该 skill 的核心指令或先调用对应 CLI 获取上下文数据
|
|
489
|
+
4. 如果不匹配任何 skill,直接执行
|
|
490
|
+
|
|
491
|
+
**tester 任务验证循环(om:test 逻辑):**
|
|
492
|
+
|
|
493
|
+
当 AI 判断任务需要 om:test 流程时:
|
|
494
|
+
|
|
495
|
+
1. 先调用 CLI 获取项目测试配置:
|
|
496
|
+
```bash
|
|
497
|
+
openmatrix test --json
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
2. 调用 Agent 生成测试(prompt 中已包含原始扫描数据):
|
|
501
|
+
```typescript
|
|
502
|
+
Agent({
|
|
503
|
+
subagent_type: task.subagent_type,
|
|
504
|
+
description: task.description,
|
|
505
|
+
prompt: task.prompt + "\n\n⚠️ 完成后请输出简短摘要(不超过3行):\n1. 关键决策\n2. 创建/修改的文件\n3. 对后续任务的建议\n\n🚫 **禁止执行以下 Git 命令**:\n- ❌ git commit\n- ❌ git checkout/merge/pull/push/rebase/branch\n\n✅ 允许:git status, git diff, git log",
|
|
506
|
+
run_in_background: true
|
|
507
|
+
})
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
3. Agent 完成后,自动验证测试:
|
|
511
|
+
```bash
|
|
512
|
+
npm test -- --run 2>&1
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
4. 验证失败时自动重试(最多 3 次):
|
|
516
|
+
- 将失败输出传给新 Agent 修复测试
|
|
517
|
+
- 重新验证
|
|
518
|
+
- 3 次失败后标记为 blocked,创建 Meeting
|
|
519
|
+
|
|
520
|
+
**默认执行方式(无特殊 skill 匹配时):**
|
|
521
|
+
|
|
393
522
|
```typescript
|
|
394
523
|
Agent({
|
|
395
524
|
subagent_type: task.subagent_type,
|
|
@@ -406,7 +535,7 @@ Agent({
|
|
|
406
535
|
openmatrix complete TASK-XXX --success --summary "关键决策: xxx; 创建文件: xxx"
|
|
407
536
|
```
|
|
408
537
|
|
|
409
|
-
2. **全局上下文文件** — 所有任务的上下文累积在 `.openmatrix/context.md`:
|
|
538
|
+
2. **全局上下文文件** — 所有任务的上下文累积在 `.openmatrix/{runId}/context.md`:
|
|
410
539
|
- 每次任务完成后,通过 `--summary` 参数追加写入
|
|
411
540
|
- 后续 Agent 可读取此文件了解前序任务的决策和发现
|
|
412
541
|
|
|
@@ -516,18 +645,20 @@ $ARGUMENTS
|
|
|
516
645
|
```
|
|
517
646
|
|
|
518
647
|
start 和 auto 在同一位置,区别在于 start 有交互审批,auto 零交互。前置条件:
|
|
519
|
-
- `.openmatrix/plan.md` — 技术方案(由 /om:plan 生成)
|
|
520
|
-
- `.openmatrix/tasks-input.json` — 结构化元数据(由 /om:plan 生成)
|
|
648
|
+
- `.openmatrix/{runId}/plan.md` — 技术方案(由 /om:plan 生成)
|
|
649
|
+
- `.openmatrix/{runId}/tasks-input.json` — 结构化元数据(由 /om:plan 生成)
|
|
650
|
+
|
|
651
|
+
CLI 自动通过 `current.json` 定位当前 runId。
|
|
521
652
|
|
|
522
653
|
如果前置条件不满足,引导用户执行 `/om:plan`。
|
|
523
654
|
|
|
524
655
|
## 质量级别
|
|
525
656
|
|
|
526
|
-
| 级别 | TDD | 覆盖率 | Lint | 安全 |
|
|
527
|
-
|
|
528
|
-
|
|
|
529
|
-
|
|
|
530
|
-
|
|
|
657
|
+
| 级别 | TDD | 覆盖率 | Lint | 安全 | 执行方式 |
|
|
658
|
+
|------|:---:|:------:|:----:|:----:|:--------:|
|
|
659
|
+
| 严格模式 | Y | >80% | Y | Y | TDD |
|
|
660
|
+
| 平衡模式 | N | >60% | Y | Y | 先开发后测试 |
|
|
661
|
+
| 快速模式 | N | 无 | N | N | 直接开发 |
|
|
531
662
|
|
|
532
663
|
## 执行流程
|
|
533
664
|
|
|
@@ -537,6 +668,14 @@ Step 1-2: 初始化 + 验证前置条件 -> Step 3-4: 分析类型 + 提交文
|
|
|
537
668
|
-> Step 9: Agent 逐个执行 (只有这里写代码)
|
|
538
669
|
```
|
|
539
670
|
|
|
671
|
+
## 自动推断规则
|
|
672
|
+
|
|
673
|
+
| 质量等级 | E2E 问题 | AI 验收 | 执行模式 |
|
|
674
|
+
|---------|---------|---------|---------|
|
|
675
|
+
| 严格模式 | 可选问一句 | 必须 | 全自动 + TDD |
|
|
676
|
+
| 平衡模式 | 不需要 | 必须 | 全自动 + 先开发后测试 |
|
|
677
|
+
| 快速模式 | 不需要 | 不需要 | 全自动 + 直接开发 |
|
|
678
|
+
|
|
540
679
|
## Git 提交格式
|
|
541
680
|
|
|
542
681
|
```
|
package/skills/status.md
CHANGED
|
@@ -35,7 +35,7 @@ description: "Use when checking task execution progress, run status, completion
|
|
|
35
35
|
</INTENT-JUDGMENT>
|
|
36
36
|
|
|
37
37
|
<NO-OTHER-SKILLS>
|
|
38
|
-
|
|
38
|
+
本 skill 与其他任务编排技能功能重叠,请勿同时使用。
|
|
39
39
|
</NO-OTHER-SKILLS>
|
|
40
40
|
|
|
41
41
|
<objective>
|
package/skills/test.md
CHANGED
|
@@ -36,13 +36,9 @@ priority: high
|
|
|
36
36
|
</INTENT-JUDGMENT>
|
|
37
37
|
|
|
38
38
|
<NO-OTHER-SKILLS>
|
|
39
|
-
|
|
40
|
-
- ❌ superpowers:test-driven-development → 你已经在 om:test 中了
|
|
41
|
-
- ❌ superpowers:* → 全部被 OpenMatrix 替代
|
|
42
|
-
- ❌ gsd:* → 全部被 OpenMatrix 替代
|
|
43
|
-
- ❌ 任何其他任务编排相关的技能
|
|
39
|
+
本 skill 与其他任务编排技能功能重叠,请勿同时使用。
|
|
44
40
|
|
|
45
|
-
|
|
41
|
+
**测试生成阶段使用 Agent 工具执行。**
|
|
46
42
|
</NO-OTHER-SKILLS>
|
|
47
43
|
|
|
48
44
|
<MANDATORY-EXECUTION-ORDER>
|
|
@@ -67,6 +63,95 @@ Step 8: 输出测试报告
|
|
|
67
63
|
**铁律:验证失败自动循环,最多 3 次,超过必须暂停**
|
|
68
64
|
</MANDATORY-EXECUTION-ORDER>
|
|
69
65
|
|
|
66
|
+
<IRON-LAW>
|
|
67
|
+
## 铁律:没有失败的测试,不许写生产代码
|
|
68
|
+
|
|
69
|
+
**NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST**
|
|
70
|
+
|
|
71
|
+
在测试前写了代码?删除。重新开始。
|
|
72
|
+
|
|
73
|
+
没有例外:
|
|
74
|
+
- 不要保留作为"参考"
|
|
75
|
+
- 不要"写测试时适应它"
|
|
76
|
+
- 不要看它
|
|
77
|
+
|
|
78
|
+
删除意味着删除。
|
|
79
|
+
|
|
80
|
+
## Why Order Matters
|
|
81
|
+
|
|
82
|
+
### "我会在实现后写测试来验证工作"
|
|
83
|
+
|
|
84
|
+
实现后写的测试立即通过。立即通过什么也证明不了:
|
|
85
|
+
- 可能测试错误的东西
|
|
86
|
+
- 可能测试实现,不是行为
|
|
87
|
+
- 可能遗漏你忘记的边界情况
|
|
88
|
+
- 你从未看到它捕获 bug
|
|
89
|
+
|
|
90
|
+
测试优先强制你看到测试失败,证明它确实测试某些东西。
|
|
91
|
+
|
|
92
|
+
### "我手动测试了所有边界情况"
|
|
93
|
+
|
|
94
|
+
手动测试是临时的。你以为测试了所有东西但:
|
|
95
|
+
- 没有测试记录
|
|
96
|
+
- 代码变化时无法重跑
|
|
97
|
+
- 压力下容易忘记情况
|
|
98
|
+
- "我试过了" ≠ 全面
|
|
99
|
+
|
|
100
|
+
自动化测试是系统的。每次运行相同方式。
|
|
101
|
+
|
|
102
|
+
### "删除 X 小时工作是浪费"
|
|
103
|
+
|
|
104
|
+
沉没成本谬误。时间已经没了。现在选择:
|
|
105
|
+
- 删除并用 TDD 重写(X+小时,高信心)
|
|
106
|
+
- 保留并在后加测试(30分钟,低信心,可能 bug)
|
|
107
|
+
|
|
108
|
+
"浪费"是保留不能信任的代码。无真实测试的工作代码是技术债务。
|
|
109
|
+
|
|
110
|
+
## Good vs Bad Tests
|
|
111
|
+
|
|
112
|
+
| 质量 | Good | Bad |
|
|
113
|
+
|-----|------|-----|
|
|
114
|
+
| **最小化** | 一件事。名字有"and"?拆分。 | `test('validates email and domain and whitespace')` |
|
|
115
|
+
| **清晰** | 名字描述行为 | `test('test1')` |
|
|
116
|
+
| **展示意图** | 展示期望 API | 模糊代码该做什么 |
|
|
117
|
+
| **真实代码** | 无 mock(除非不可避免) | Mock 一切 |
|
|
118
|
+
|
|
119
|
+
### Good Example
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
test('重试失败操作 3 次', async () => {
|
|
123
|
+
let attempts = 0;
|
|
124
|
+
const operation = () => {
|
|
125
|
+
attempts++;
|
|
126
|
+
if (attempts < 3) throw new Error('fail');
|
|
127
|
+
return 'success';
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const result = await retryOperation(operation);
|
|
131
|
+
|
|
132
|
+
expect(result).toBe('success');
|
|
133
|
+
expect(attempts).toBe(3);
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
一件事,测试真实行为,清晰名字。
|
|
138
|
+
|
|
139
|
+
### Bad Example
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
test('retry works', async () => {
|
|
143
|
+
const mock = jest.fn()
|
|
144
|
+
.mockRejectedValueOnce(new Error())
|
|
145
|
+
.mockRejectedValueOnce(new Error())
|
|
146
|
+
.mockResolvedValueOnce('success');
|
|
147
|
+
await retryOperation(mock);
|
|
148
|
+
expect(mock).toHaveBeenCalledTimes(3);
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
模糊名字,测试 mock 不是代码。
|
|
153
|
+
</IRON-LAW>
|
|
154
|
+
|
|
70
155
|
<objective>
|
|
71
156
|
智能测试生成 - 从业务角度分析代码逻辑,发现测试缺失,自动生成并验证测试。遵循 OpenMatrix 分层原则:CLI 收集原始数据,AI 分析并生成测试。
|
|
72
157
|
</objective>
|
|
@@ -682,6 +767,8 @@ Step 8: 输出测试报告
|
|
|
682
767
|
|
|
683
768
|
**最大重试 3 次,超过必须暂停检查配置**
|
|
684
769
|
|
|
770
|
+
**没有失败的测试,不许写生产代码(参见 IRON-LAW 区块)**
|
|
771
|
+
|
|
685
772
|
## 红线
|
|
686
773
|
|
|
687
774
|
- 3 次生成失败 → 暂停,检查测试框架配置
|
|
@@ -703,8 +790,18 @@ Step 8: 输出测试报告
|
|
|
703
790
|
- "跳过自动验证"
|
|
704
791
|
- 只测试函数调用而不是业务场景
|
|
705
792
|
- 生成的测试与项目风格不一致
|
|
706
|
-
|
|
707
|
-
|
|
793
|
+
- "我先写实现,再补测试"
|
|
794
|
+
- "这个测试一次就能过,不用看失败"
|
|
795
|
+
- "测试代码不重要,能过就行"
|
|
796
|
+
- "边界情况太多了,只测主流程"
|
|
797
|
+
- "删除这个失败的测试用例算了"
|
|
798
|
+
- "Mock 返回什么都行,只要测试通过"
|
|
799
|
+
- 测试名字描述实现细节而非业务行为
|
|
800
|
+
- 一个测试验证多个不相关的事情
|
|
801
|
+
- 测试依赖执行顺序或共享状态
|
|
802
|
+
- 使用 `any` 类型绕过类型检查
|
|
803
|
+
|
|
804
|
+
**这些都意味着:停止。回到 Step 2 或执行自动验证循环。**
|
|
708
805
|
|
|
709
806
|
## 测试生成原则
|
|
710
807
|
|