openmatrix 0.2.30 → 0.2.33

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.
Files changed (49) hide show
  1. package/README.md +154 -154
  2. package/dist/cli/commands/approve.js +35 -1
  3. package/dist/cli/commands/auto.js +2 -2
  4. package/dist/cli/commands/check-gitignore.js +34 -30
  5. package/dist/cli/commands/check.js +1 -1
  6. package/dist/cli/commands/complete.js +35 -7
  7. package/dist/cli/commands/debug.js +2 -1
  8. package/dist/cli/commands/deploy.js +1 -1
  9. package/dist/cli/commands/install-skills.js +3 -0
  10. package/dist/cli/commands/meeting.js +37 -1
  11. package/dist/cli/commands/report.js +1 -1
  12. package/dist/cli/commands/resume.js +35 -1
  13. package/dist/cli/commands/retry.js +130 -56
  14. package/dist/cli/commands/start.js +14 -3
  15. package/dist/cli/commands/status.js +32 -29
  16. package/dist/cli/commands/step.js +4 -1
  17. package/dist/orchestrator/ai-reviewer.d.ts +5 -0
  18. package/dist/orchestrator/ai-reviewer.js +9 -2
  19. package/dist/orchestrator/context-collector.js +17 -5
  20. package/dist/orchestrator/executor.d.ts +8 -0
  21. package/dist/orchestrator/executor.js +38 -8
  22. package/dist/orchestrator/phase-executor.d.ts +4 -0
  23. package/dist/orchestrator/phase-executor.js +21 -4
  24. package/dist/storage/file-store.js +8 -0
  25. package/dist/storage/state-manager.js +52 -19
  26. package/dist/test/generator.js +113 -113
  27. package/dist/types/index.d.ts +2 -0
  28. package/dist/utils/error-handler.d.ts +18 -0
  29. package/dist/utils/error-handler.js +32 -0
  30. package/dist/utils/worktree-sync.js +24 -3
  31. package/package.json +61 -61
  32. package/skills/SKILL.md +53 -53
  33. package/skills/auto.md +410 -413
  34. package/skills/brainstorm.md +19 -12
  35. package/skills/debug.md +694 -691
  36. package/skills/deploy.md +658 -658
  37. package/skills/feature.md +713 -686
  38. package/skills/plan.md +298 -296
  39. package/skills/report.md +9 -5
  40. package/skills/resume.md +292 -287
  41. package/skills/start.md +117 -27
  42. package/skills/status.md +5 -4
  43. package/skills/test.md +875 -875
  44. package/dist/agents/base-agent.d.ts +0 -46
  45. package/dist/agents/base-agent.js +0 -17
  46. package/dist/cli/commands/analyze.d.ts +0 -2
  47. package/dist/cli/commands/analyze.js +0 -50
  48. package/dist/orchestrator/smart-question-analyzer.d.ts +0 -90
  49. package/dist/orchestrator/smart-question-analyzer.js +0 -512
package/skills/feature.md CHANGED
@@ -1,687 +1,714 @@
1
- ---
2
- name: om:feature
3
- description: "Use for small feature requests needing quick iteration without full task file management. Triggers on MINOR-CHANGE intent: user wants small, quick changes with clear scope - single component, few files, straightforward implementation. DO NOT trigger on: complex multi-module tasks, unclear requirements, or investigation tasks. Intent signals: user explicitly says 'small/quick/simple', describes a focused change, or task is clearly localized."
4
- priority: high
5
- ---
6
-
7
- <INTENT-JUDGMENT>
8
- ## 意图判断指南
9
-
10
- **AI 应根据用户语义判断意图:**
11
-
12
- ### 触发信号(小需求意图)
13
-
14
- - 用户表达"小改动"、"快速"、"简单"
15
- - 任务范围明确且单一
16
- - 改动点集中在少数文件
17
- - 实现路径显而易见
18
-
19
- ### 不触发信号
20
-
21
- | 用户意图 | 应调用 |
22
- |---------|--------|
23
- | 多模块复杂任务 | /om:start 或 /om:brainstorm |
24
- | 需求不明确 | /om:brainstorm |
25
- | 状态检查 | /om:status |
26
-
27
- ### 示例判断
28
-
29
- | 用户消息 | 判断 | 结果 |
30
- |---------|------|------|
31
- | "给列表加搜索按钮" | 小改动意图 | 触发 ✓ |
32
- | "调整按钮颜色" | 简单修改意图 | 触发 ✓ |
33
- | "加个字段到表单" | 小需求意图 | 触发 ✓ |
34
- | "重构认证模块" | 复杂任务 | /om:start |
35
- | "从零搭建系统" | 需要设计 | /om:brainstorm |
36
- </INTENT-JUDGMENT>
37
-
38
- <NO-OTHER-SKILLS>
39
- 本 skill 与其他任务编排技能功能重叠,请勿同时使用。
40
-
41
- 本 skill 是轻量版,不调用 /om:start 或 /om:auto 完整流程。
42
-
43
- **任务执行阶段使用 Agent 工具。**
44
-
45
- **相关技能**: `/om` (主入口) | `/om:start` (标准任务) | `/om:brainstorm` (复杂任务)
46
- </NO-OTHER-SKILLS>
47
-
48
- <MANDATORY-EXECUTION-ORDER>
49
- ## 执行顺序 - 必须严格按此顺序,不得跳过
50
-
51
- ```
52
- Step 0: Git 前置检查与持久化初始化(必须执行)
53
- Step 1: 接收任务输入(参数、文件、或询问用户)
54
- Step 2: AI 自动判断任务边界(不符合条件才询问切换)
55
- Step 3: 收集项目上下文(技术栈、目录结构、CLAUDE.md)
56
- Step 4: AI 拆分为 2-5 个小任务块
57
- Step 5: 用 TodoWrite 管理任务状态
58
- Step 6: 问答确认(质量等级、E2E测试、执行计划)
59
- Step 7: 逐个执行小任务(含跨 Agent 上下文传递)
60
- Step 8: 验证(按质量等级)
61
- Step 9: 分步 Git 提交
62
- Step 10: 全部任务完成后整体验证
63
- Step 11: 输出执行摘要并清理
64
- ```
65
-
66
- **铁律:不验证不得提交,验证失败必须停止**
67
- **铁律:每次只改一个任务块,不得并行修改多个文件**
68
- **铁律:验证通过后立即提交,不得积累多个任务块再提交**
69
- </MANDATORY-EXECUTION-ORDER>
70
-
71
- <objective>
72
- 轻量级小需求开发流程:拆分为 2-5 个小任务块,内存状态管理,保留质量门禁验证,支持分步 Git 提交。
73
- 不产生 `.openmatrix/tasks/` 文件。
74
- </objective>
75
-
76
- <process>
77
-
78
- ## Step 0: Git 前置检查与持久化初始化(必须执行)
79
-
80
- **检查 Git 仓库:**
81
-
82
- ```bash
83
- ls -la .git 2>/dev/null || echo "NOT_INITIALIZED"
84
- git status --porcelain
85
- ```
86
-
87
- | 检查结果 | 处理 |
88
- |---------|------|
89
- | `NOT_INITIALIZED` | AskUserQuestion 是否初始化 git |
90
- | 有未提交文件 | AskUserQuestion 处理方式(暂存/忽略/取消) |
91
- | 干净 | 继续执行 |
92
-
93
- **初始化持久化状态:**
94
-
95
- ```bash
96
- mkdir -p .openmatrix
97
- cat > .openmatrix/feature-session.json << 'EOF'
98
- {
99
- "sessionId": "FEATURE-$(date +%Y%m%d%H%M%S)",
100
- "status": "running",
101
- "tasks": [],
102
- "currentTaskIndex": 0,
103
- "quality": null,
104
- "failureCount": {}
105
- }
106
- EOF
107
- echo '' > .openmatrix/feature-context.md
108
- echo '' > .openmatrix/feature-progress.md
109
- ```
110
-
111
- ## Step 1: 接收任务输入
112
-
113
- **检查 `$ARGUMENTS`:**
114
-
115
- | 参数 | 处理方式 |
116
- |------|---------|
117
- | `<任务描述>` | 直接使用描述 |
118
- | `<文件路径>` | Read 工具读取内容 |
119
- | 空 | AskUserQuestion 询问 |
120
-
121
- **如果是空参数,询问:**
122
-
123
- AskUserQuestion: `header: "任务描述"`, `multiSelect: false`
124
- **question:** 请描述你的小需求
125
-
126
- | label | description |
127
- |-------|-------------|
128
- | 描述需求 | 输入自由文本描述 |
129
- | 从文件读取 | 指定任务文件路径 |
130
- | 取消 | 退出 |
131
-
132
- ## Step 2: AI 判断任务边界
133
-
134
- **AI 自动判断任务是否适合本 skill:**
135
-
136
- 检查以下条件(全部满足才继续,否则建议切换):
137
-
138
- | 条件 | 检查方式 |
139
- |------|---------|
140
- | 描述长度 ≤ 100 字 | 字数统计 |
141
- | 单一功能点 | 无"和"、"同时"、"另外"等连接词 |
142
- | 无架构设计 | 无"架构"、"设计"、"从零"、"重构"关键词 |
143
- | 无多子系统 | 无多个独立模块描述 |
144
-
145
- **判断结果处理:**
146
-
147
- | 结果 | 处理 |
148
- |------|------|
149
- | ✅ 全部满足 | 继续执行 Step 3 收集上下文 |
150
- | ❌ 不满足 | 输出建议并询问是否切换到 `/om:start` |
151
-
152
- **如果需要切换,询问:**
153
-
154
- AskUserQuestion: `header: "任务复杂度"`, `multiSelect: false`
155
- **question:** 任务可能需要完整追踪,建议使用 `/om:start`。是否切换?
156
-
157
- | label | description |
158
- |-------|-------------|
159
- | 切换到 /om:start | 使用完整流程 |
160
- | 继续用 /om:feature | 强制使用轻量流程(可能无法完整追踪) |
161
-
162
- ## Step 3: 收集项目上下文并写入文件
163
-
164
- **收集并写入上下文文件:**
165
-
166
- ```bash
167
- mkdir -p .openmatrix
168
-
169
- # 写入上下文文件头
170
- echo "# 项目上下文" > .openmatrix/feature-context.md
171
- echo "" >> .openmatrix/feature-context.md
172
-
173
- # 收集技术栈并写入文件
174
- echo "## 技术栈" >> .openmatrix/feature-context.md
175
- cat package.json 2>/dev/null | grep -E '"(react|vue|angular|next|express|fastify|koa|typeorm|prisma|sequelize|mongoose|jest|vitest|playwright|cypress)"' >> .openmatrix/feature-context.md || echo "未检测到常见框架" >> .openmatrix/feature-context.md
176
- echo "" >> .openmatrix/feature-context.md
177
-
178
- # 收集目录结构并写入文件
179
- echo "## 目录结构" >> .openmatrix/feature-context.md
180
- find . -maxdepth 2 -type d -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.openmatrix/*' 2>/dev/null | head -30 >> .openmatrix/feature-context.md
181
- echo "" >> .openmatrix/feature-context.md
182
-
183
- # 读取 CLAUDE.md 并写入文件
184
- echo "## 项目规范(来自 CLAUDE.md)" >> .openmatrix/feature-context.md
185
- cat CLAUDE.md 2>/dev/null | head -50 >> .openmatrix/feature-context.md || echo "无 CLAUDE.md" >> .openmatrix/feature-context.md
186
- ```
187
-
188
- 上下文已写入 `.openmatrix/feature-context.md`,后续 Agent 会读取此文件。
189
-
190
- ## Step 4: AI 拆分为 2-5 个小任务块
191
-
192
- **调用 Agent 进行任务拆分:**
193
-
194
- ```typescript
195
- Agent({
196
- subagent_type: "general-purpose",
197
- description: "任务拆分分析",
198
- prompt: `你是任务拆分专家。将用户需求拆分为 2-5 个小任务块。
199
-
200
- ## 用户需求
201
- ${taskDescription}
202
-
203
- ${projectContext}
204
-
205
- ## 拆分原则
206
- 1. 拆分粒度:每个小块 ≤ 30 分钟工作量
207
- 2. 拆分方向:数据层 → API层 → UI层 / 核心逻辑 → 边界处理
208
- 3. 依赖关系:确保后续任务可依赖前面的成果
209
- 4. 文件预估:基于项目目录结构,预估每个任务涉及的文件路径
210
- 5. 技术栈对齐:使用项目已有的框架和库,不引入新依赖
211
-
212
- ## 输出格式
213
- 请按以下格式输出:
214
-
215
- \`\`\`
216
- 📋 任务拆分计划
217
-
218
- 原始需求:${taskDescription}
219
-
220
- 拆分为 N 个小任务:
221
- 1. [任务名称]
222
- 描述:[简要描述]
223
- 预估文件:[基于项目结构的文件路径列表]
224
- 预估时间:[分钟]
225
-
226
- 2. [任务名称]
227
- ...
228
-
229
- 📋 依赖关系图
230
- 任务1 → 任务2 → 任务3
231
- \`\`\`
232
-
233
- ## 注意事项
234
- - 如果任务过于复杂无法拆分,明确说明并建议使用完整流程
235
- - 保持任务块独立性,便于验证和提交
236
- - 文件路径必须基于实际项目结构`,
237
- run_in_background: false
238
- })
239
- ```
240
-
241
- ## Step 5: 用 TodoWrite 管理任务状态
242
-
243
- **将拆分的任务写入 TodoWrite:**
244
-
245
- ```typescript
246
- TodoWrite({
247
- todos: [
248
- { activeForm: "正在实现数据层", content: "数据层:添加搜索参数", status: "pending" },
249
- { activeForm: "正在实现 API 层", content: "API 层:实现搜索端点", status: "pending" },
250
- { activeForm: "正在实现 UI 层", content: "UI 层:添加搜索框", status: "pending" }
251
- ]
252
- })
253
- ```
254
-
255
- 状态同时在会话和 `.openmatrix/feature-session.json` 中管理。
256
-
257
- ## Step 6: 问答确认
258
-
259
- **⛔ 执行前必须确认所有配置**
260
-
261
- **6.1 质量等级(必选)**
262
-
263
- 根据任务描述,Claude 直接推断推荐的质量等级,并在问题中标注推荐项:
264
-
265
- - Bug 修复 / 重构 → 推荐 `balanced`
266
- - 原型 / demo / 快速验证 → 推荐 `fast`
267
- - 新功能 / 生产代码 / 涉及测试 → 推荐 `strict`
268
- - 文档 / skill 文件 → 推荐 `fast`
269
-
270
- AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
271
-
272
- **question:** 选择质量等级(Claude 推荐:${inferredQuality},原因:${inferReason})
273
-
274
- | label | description |
275
- |-------|-------------|
276
- | `strict` | TDD + >80%覆盖率 + 严格Lint + 安全扫描 — 生产级代码 |
277
- | `balanced` | >60%覆盖率 + Lint + 安全扫描 — 日常开发 |
278
- | `fast` | 无质量门禁 — 快速原型/验证 |
279
-
280
- **6.2 E2E 测试(仅 strict/balanced)**
281
-
282
- 根据任务描述推断:若任务涉及前端页面/UI/Web,询问;否则默认跳过(不需要)。
283
-
284
- 如需询问:
285
-
286
- AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
287
-
288
- **question:** 是否需要端到端 (E2E) 测试?(适用于 Web/Mobile/GUI 项目)
289
-
290
- | label | description |
291
- |-------|-------------|
292
- | `功能测试` | 验证业务流程正确性,速度快 |
293
- | `视觉验证` | 需要浏览器可视化验证 UI 样式 |
294
- | `不需要 (推荐)` | 仅单元测试和集成测试 |
295
-
296
- **6.3 确认拆分计划**
297
-
298
- AskUserQuestion: `header: "确认计划"`, `multiSelect: false`
299
-
300
- **question:** 任务拆分计划已展示,确认开始执行?
301
-
302
- | label | description |
303
- |-------|-------------|
304
- | `开始执行 (推荐)` | 按计划逐个执行 |
305
- | `调整计划` | 重新拆分任务 |
306
-
307
- ## Step 7: 逐个执行小任务
308
-
309
- **对 TodoWrite 中的每个任务(按顺序):**
310
-
311
- **7.1 更新状态为 in_progress**
312
- ```typescript
313
- TodoWrite({ todos: [...] }) // 当前任务标记 in_progress
314
- ```
315
-
316
- **7.2 歧义检测与处理**
317
-
318
- Agent 输出中可能包含歧义报告:
319
-
320
- Agent 输出包含以下标记时,表示检测到歧义:
321
- ```
322
- <AMBIGUITY_REPORT>
323
- {
324
- "ambiguities": [
325
- {
326
- "type": "missing_info" | "conflicting_req" | "unclear_scope" | "tech_choice" | "edge_case",
327
- "severity": "critical" | "high" | "medium" | "low",
328
- "description": "歧义描述",
329
- "suggestions": ["建议1", "建议2"]
330
- }
331
- ],
332
- "overallSeverity": "critical" | "high" | "medium" | "low"
333
- }
334
- </AMBIGUITY_REPORT>
335
- ```
336
-
337
- **5 种歧义类型说明:**
338
-
339
- | 类型 | 说明 | 示例 |
340
- |------|------|------|
341
- | `missing_info` | 缺失关键信息 | "未指定数据库类型" |
342
- | `conflicting_req` | 需求冲突 | "既要高性能又要低成本" |
343
- | `unclear_scope` | 范围不清晰 | "是否包含历史数据处理?" |
344
- | `tech_choice` | 技术选型歧义 | " REST 还是 GraphQL?" |
345
- | `edge_case` | 边界情况未定义 | "超过限制时如何处理?" |
346
-
347
- **歧义处理策略(轻量模式):**
348
-
349
- | 严重程度 | 处理方式 |
350
- |---------|---------|
351
- | **Critical/High** | AskUserQuestion 立即确认 |
352
- | **Medium/Low** | 写入进度文件,继续执行 |
353
-
354
- **AskUserQuestion 处理(仅 Critical/High):**
355
-
356
- AskUserQuestion: `header: "歧义确认"`, `multiSelect: false`
357
- **question:** 检测到 ${severity} 级歧义:${description}。请确认处理方式
358
-
359
- | label | description |
360
- |-------|-------------|
361
- | 提供信息 | 回答歧义相关问题,继续执行 |
362
- | 跳过任务块 | 标记当前任务块为可选,继续执行下一个 |
363
- | 修改方案 | 根据歧义调整方案后继续 |
364
-
365
- **7.3 调用 Agent 执行**
366
-
367
- ```typescript
368
- Agent({
369
- subagent_type: "general-purpose",
370
- description: task.content,
371
- prompt: `你是实现专家。执行以下任务块。
372
-
373
- ## 项目上下文(请读取文件)
374
- 请先读取 .openmatrix/feature-context.md 了解项目上下文。
375
-
376
- ## 前序任务结果(请读取文件)
377
- 请读取 .openmatrix/feature-progress.md 了解前序 Agent 的决策和发现。
378
-
379
- ## 整体任务
380
- ${taskDescription}
381
-
382
- ## 当前任务
383
- - 任务名称:${task.content}
384
- - 预估文件:${task.files}
385
- - 质量等级:${quality}
386
- - 前置任务完成状态:${previousTasksStatus}
387
-
388
- ## 质量要求
389
- ${quality === 'strict' ? `
390
- - 必须使用 TDD:先写测试,再写实现
391
- - 测试覆盖率要求:>80%
392
- - 必须通过严格 Lint
393
- - 必须通过安全扫描
394
- ` : quality === 'balanced' ? `
395
- - 测试覆盖率要求:>60%
396
- - 必须通过 Lint
397
- - 必须通过安全扫描
398
- ` : `
399
- - 无质量门禁要求
400
- - 快速实现功能
401
- `}
402
-
403
- ## 实施原则
404
- 1. 先阅读预估文件中的现有代码,理解上下文后再动手
405
- 2. 只修改当前任务相关的文件
406
- 3. 不做"顺便"的重构或优化
407
- 4. 确保代码风格与项目现有代码一致
408
- 5. 完成后运行相关测试验证
409
-
410
- ## 完成后输出
411
- 请按以下格式输出(不超过3行):
412
- 1. 关键决策:[做了什么决策及原因]
413
- 2. 创建/修改的文件列表
414
- 3. 对后续任务的建议或注意事项
415
-
416
- ## 禁止行为
417
- 执行 git commit(由主流程处理)
418
- ❌ 执行 git checkout — 不要切换分支
419
- ❌ 执行 git merge — 不要合并其他分支
420
- 执行 git pull — 不要拉取远程更新
421
- 执行 git push — 不要推送代码
422
- 执行 git rebase — 不要变基
423
- 执行 git branch — 不要创建/删除分支
424
- 修改与当前任务无关的文件
425
- 进行额外的重构
426
-
427
- 允许:git status, git diff, git log`,
428
- run_in_background: true
429
- })
430
- ```
431
-
432
- **7.3 等待 Agent 完成,写入进度文件**
433
-
434
- Agent 完成后,将输出中的关键决策和建议写入 `.openmatrix/feature-progress.md` 文件:
435
-
436
- ```bash
437
- # Agent 完成后,追加写入进度文件
438
- echo "" >> .openmatrix/feature-progress.md
439
- echo "## 任务 N: ${task.content}" >> .openmatrix/feature-progress.md
440
- echo "${agentOutput}" >> .openmatrix/feature-progress.md
441
- echo "" >> .openmatrix/feature-progress.md
442
- ```
443
-
444
- 这样后续 Agent 能通过读取文件获取前序 Agent 的决策和发现。
445
-
446
- ## Step 8: 验证(按质量等级)
447
-
448
- **⛔ 验证不通过不得提交,必须停止等待修复**
449
-
450
- 每个任务完成后,根据质量等级执行验证:
451
-
452
- **8.1 执行验证命令**
453
-
454
- | 质量等级 | 验证命令 |
455
- |---------|---------|
456
- | `strict` | `npm test -- --run && npm run lint && npm run test:coverage && npm audit --audit-level=moderate` |
457
- | `balanced` | `npm test -- --run && npm run lint && npm audit --audit-level=moderate` |
458
- | `fast` | 跳过验证 |
459
-
460
- **覆盖率阈值检查说明:**
461
- - strict 模式要求 >80% 覆盖率,`npm run test:coverage` 命令应输出覆盖率报告
462
- - balanced 模式要求 >60% 覆盖率,建议定期检查覆盖率报告
463
-
464
- **8.2 E2E 验证(如果用户选择)**
465
- - 功能测试:`npm run test:e2e`
466
- - 视觉验证:启动 Playwright 截图对比
467
-
468
- **8.3 验证结果自动判断**
469
-
470
- 验证命令执行后,根据退出码自动判断结果:
471
-
472
- ```bash
473
- # 执行验证命令并捕获结果
474
- if npm test -- --run && npm run lint; then
475
- # 验证成功
476
- echo "✅ 验证通过"
477
- else
478
- # 验证失败
479
- echo "❌ 验证失败"
480
- npm test -- --run 2>&1 | tail -30 # 展示失败详情
481
- exit 1
482
- fi
483
- ```
484
-
485
- **验证失败处理:**
486
- - 自动展示验证失败详情(最后 30 行输出)
487
- - 停止执行流程
488
- - 提示用户修复后使用 `/om:resume` 继续
489
-
490
- **验证成功处理:**
491
- - 继续执行 Step 9 Git 提交
492
-
493
- ## Step 9: 分步 Git 提交
494
-
495
- **⛔ 验证通过后必须立即提交,不得积累多个任务块**
496
-
497
- **只提交本次任务修改的文件(而非 `git add -A`):**
498
-
499
- ```bash
500
- # 获取本次任务修改的文件列表(从 Agent 输出中提取)
501
- git status --porcelain
502
-
503
- # 只提交任务涉及的文件
504
- git add ${modifiedFiles}
505
- git commit -m "$(cat <<'EOF'
506
- feat(feature): ${originalTask} - ${currentChunk}
507
-
508
- 改动详情:
509
- - ${changesSummary}
510
-
511
- Co-Authored-By: OpenMatrix https://github.com/bigfish1913/openmatrix
512
- EOF
513
- )"
514
- ```
515
-
516
- 提交成功后:
517
- 1. **更新 TodoWrite 状态为 completed**
518
- 2. **继续下一个任务**
519
-
520
- ## Step 10: 全部任务完成后
521
-
522
- **检查 TodoWrite 所有任务状态为 `completed`:**
523
-
524
- **10.1 运行最终整体验证**
525
- ```bash
526
- npm test -- --run
527
- ```
528
-
529
- **10.2 收集所有任务的执行摘要**
530
-
531
- ## Step 11: 输出执行摘要并清理
532
-
533
- **展示执行摘要:**
534
-
535
- ```
536
- 任务完成:${originalTask}
537
-
538
- 📊 执行统计:
539
- - 任务块数:${chunkCount}
540
- - 质量等级:${quality}
541
- - 总耗时:约 ${totalTime} 分钟
542
- - Git 提交:${commitCount} 次
543
-
544
- 📝 创建/修改的文件:
545
- ${fileList}
546
-
547
- 🔧 关键决策:
548
- ${decisions}
549
-
550
- 📈 测试覆盖率:${coverageResult}
551
-
552
- 所有任务已完成,会话状态已清理
553
- ```
554
-
555
- **清理操作:**
556
- - TodoWrite 所有任务保持 completed 状态
557
- - 持久化文件可选择保留或手动清理
558
- - 任务完成后状态标记为 `completed`
559
-
560
- </process>
561
-
562
- <arguments>
563
- $ARGUMENTS
564
- </arguments>
565
-
566
- <examples>
567
- /om:feature 给用户列表页添加搜索功能
568
- /om:feature 添加一个导出按钮
569
- /om:feature docs/small-task.md
570
- </examples>
571
-
572
- <notes>
573
- ## 铁律
574
-
575
- **不验证不得提交,验证失败必须停止**
576
- **每次只改一个任务块,不得并行修改多个文件**
577
- **验证通过后立即提交,不得积累多个任务块再提交**
578
-
579
- ## 红线
580
-
581
- - 验证失败不得继续执行,必须停止等待修复
582
- - 不得跳过质量等级确认
583
- - 不得跳过任务边界确认
584
- - 不得在 Agent 内部执行任何 Git 操作(commit/checkout/merge/pull/push/rebase/branch)
585
-
586
- <RED-FLAGS>
587
- ## 红旗警告 - 停止并回归流程
588
-
589
- 这些想法意味着你在找借口:
590
-
591
- | 想法 | 真相 |
592
- |-----|------|
593
- | "验证麻烦,先提交再说" | 未验证的提交会污染仓库 |
594
- | "任务块小,一次改两个吧" | 无法隔离哪个改动有问题 |
595
- | "顺便重构下这个代码" | "顺便"是 bug 的温床 |
596
- | "跳过质量确认,直接开始" | 3秒选择防止后续数小时排查 |
597
- | "测试失败没关系,手动验证就行" | 手动验证不可重复 |
598
- | "这个小改动不会影响其他" | 小改动也有根因 |
599
- | "我知道该怎么做" | 知道概念 ≠ 正确执行 |
600
-
601
- </RED-FLAGS>
602
-
603
- ## 常见借口 vs 真实情况
604
-
605
- | 借口 | 真实情况 |
606
- |------|---------|
607
- | "验证太慢,先提交" | 未验证的提交会污染仓库,回头排查更慢。 |
608
- | "一次改两个任务块效率高" | 无法隔离哪个改动有问题。引入新 bug。 |
609
- | "顺便重构没问题" | "顺便"是 bug 的温床。任务聚焦。 |
610
- | "质量确认麻烦" | 3 秒的选择防止后续数小时排查。 |
611
- | "手动验证就行" | 手动验证不可重复。自动化测试才可靠。 |
612
- | "小改动不会出错" | 小改动也有根因。系统性验证。 |
613
-
614
- ## 与其他指令的区别
615
-
616
- | 指令 | 适用场景 | 任务文件 | 问答 | 验证 | 持久化 |
617
- |-----|---------|:-------:|:----:|:----:|:-----:|
618
- | `/om:feature` | 小需求(≤100字,单一功能) | ❌ | 质量+E2E | 按等级 | 必须 |
619
- | `/om:start` | 标准任务 | ✅ | 质量+E2E+模式 | 按等级 | 必须 |
620
- | `/om:brainstorm` | 复杂任务 | ✅ | 设计问答 | 按等级 | 必须 |
621
- | `/om:auto` | 全自动执行 | ✅ | 无 | 按等级 | 必须 |
622
-
623
- ## 路由触发条件
624
-
625
- `/om` 主入口自动路由到此 skill 的条件:
626
- - 任务描述 100
627
- - 单一功能点(无多个独立子系统)
628
- - 不涉及架构设计/技术选型
629
- - 关键词匹配:小需求、小功能、小改动、minor、quick、快速、添加按钮
630
-
631
- ## 错误处理流程
632
-
633
- ```
634
- 验证失败 停止执行 展示错误详情 → 提示用户修复 → 使用 /om:resume 恢复
635
- ```
636
-
637
- | 错误 | 处理 |
638
- |-----|-----|
639
- | 测试失败 | 停止,提示用户修复 |
640
- | Lint 错误 | 停止,提示用户修复 |
641
- | 安全扫描失败 | 停止,提示用户修复 |
642
- | Agent 超时 | 询问重试或跳过 |
643
- | Git 失败 | 提示手动处理 |
644
-
645
- ## 3+ 次验证失败:质疑任务拆分
646
-
647
- **如果同一任务块验证失败 3 次以上:**
648
-
649
- **指示拆分问题的模式:**
650
- - 每次修复产生新的测试失败
651
- - 任务块范围模糊,边界不清
652
- - 修改影响多个不相关文件
653
-
654
- **停止并质疑拆分方案:**
655
- - 任务块是否过于复杂?
656
- - 是否需要重新拆分?
657
- - 是否应该切换到 `/om:start` 使用完整流程?
658
-
659
- **在继续执行之前与用户讨论拆分方案。**
660
-
661
- 这不是执行失败 这是拆分策略问题。
662
-
663
- ## Git 提交格式
664
-
665
- ```
666
- <type>(feature): <任务描述> - <任务块名称>
667
-
668
- 改动详情
669
-
670
- Co-Authored-By: OpenMatrix
671
- ```
672
-
673
- type: feat/fix/test/refactor/docs
674
-
675
- ## 恢复执行
676
-
677
- 如果验证失败需要修复:
678
-
679
- 使用 `/om:resume` 继续执行(自动检测 `.openmatrix/feature-session.json` 或 `state.json`)
680
-
681
- ## 挡久化文件说明
682
-
683
- 执行过程中产生以下文件:
684
- - `.openmatrix/feature-session.json` - 会话状态(任务列表、当前索引、质量等级)
685
- - `.openmatrix/feature-context.md` - 项目上下文
686
- - `.openmatrix/feature-progress.md` - Agent 执行进度
1
+ ---
2
+ name: om:feature
3
+ description: "Use for small feature requests needing quick iteration without full task file management. Triggers on MINOR-CHANGE intent: user wants small, quick changes with clear scope - single component, few files, straightforward implementation. DO NOT trigger on: complex multi-module tasks, unclear requirements, or investigation tasks. Intent signals: user explicitly says 'small/quick/simple', describes a focused change, or task is clearly localized."
4
+ priority: high
5
+ ---
6
+
7
+ <INTENT-JUDGMENT>
8
+ ## 意图判断指南
9
+
10
+ **AI 应根据用户语义判断意图:**
11
+
12
+ ### 触发信号(小需求意图)
13
+
14
+ - 用户表达"小改动"、"快速"、"简单"
15
+ - 任务范围明确且单一
16
+ - 改动点集中在少数文件
17
+ - 实现路径显而易见
18
+
19
+ ### 不触发信号
20
+
21
+ | 用户意图 | 应调用 |
22
+ |---------|--------|
23
+ | 多模块复杂任务 | /om:start 或 /om:brainstorm |
24
+ | 需求不明确 | /om:brainstorm |
25
+ | 状态检查 | /om:status |
26
+
27
+ ### 示例判断
28
+
29
+ | 用户消息 | 判断 | 结果 |
30
+ |---------|------|------|
31
+ | "给列表加搜索按钮" | 小改动意图 | 触发 ✓ |
32
+ | "调整按钮颜色" | 简单修改意图 | 触发 ✓ |
33
+ | "加个字段到表单" | 小需求意图 | 触发 ✓ |
34
+ | "重构认证模块" | 复杂任务 | /om:start |
35
+ | "从零搭建系统" | 需要设计 | /om:brainstorm |
36
+ </INTENT-JUDGMENT>
37
+
38
+ <NO-OTHER-SKILLS>
39
+ 本 skill 与其他任务编排技能功能重叠,请勿同时使用。
40
+
41
+ 本 skill 是轻量版,不调用 /om:start 或 /om:auto 完整流程。
42
+
43
+ **任务执行阶段使用 Agent 工具。**
44
+
45
+ **相关技能**: `/om` (主入口) | `/om:start` (标准任务) | `/om:brainstorm` (复杂任务)
46
+ </NO-OTHER-SKILLS>
47
+
48
+ <MANDATORY-EXECUTION-ORDER>
49
+ ## 执行顺序 - 必须严格按此顺序,不得跳过
50
+
51
+ ```
52
+ Step 0: Git 前置检查与持久化初始化(必须执行)
53
+ Step 1: 接收任务输入(参数、文件、或询问用户)
54
+ Step 2: AI 自动判断任务边界(不符合条件才询问切换)
55
+ Step 3: 收集项目上下文(技术栈、目录结构、CLAUDE.md)
56
+ Step 4: AI 拆分为 2-5 个小任务块
57
+ Step 5: 用 TodoWrite 管理任务状态
58
+ Step 6: 问答确认(质量等级、E2E测试、执行计划)
59
+ Step 7: 逐个执行小任务(含跨 Agent 上下文传递)
60
+ Step 8: 验证(按质量等级)
61
+ Step 9: 分步 Git 提交
62
+ Step 10: 全部任务完成后整体验证
63
+ Step 11: 输出执行摘要并清理
64
+ ```
65
+
66
+ **铁律:不验证不得提交,验证失败必须停止**
67
+ **铁律:每次只改一个任务块,不得并行修改多个文件**
68
+ **铁律:验证通过后立即提交,不得积累多个任务块再提交**
69
+ </MANDATORY-EXECUTION-ORDER>
70
+
71
+ <objective>
72
+ 轻量级小需求开发流程:拆分为 2-5 个小任务块,内存状态管理,保留质量门禁验证,支持分步 Git 提交。
73
+ 不产生 `.openmatrix/tasks/` 文件。
74
+ </objective>
75
+
76
+ <process>
77
+
78
+ ## Step 0: Git 前置检查与持久化初始化(必须执行)
79
+
80
+ **检查 Git 仓库:**
81
+
82
+ ```bash
83
+ ls -la .git 2>/dev/null || echo "NOT_INITIALIZED"
84
+ git status --porcelain
85
+ ```
86
+
87
+ | 检查结果 | 处理 |
88
+ |---------|------|
89
+ | `NOT_INITIALIZED` | AskUserQuestion 是否初始化 git |
90
+ | 有未提交文件 | AskUserQuestion 处理方式(暂存/忽略/取消) |
91
+ | 干净 | 继续执行 |
92
+
93
+ **初始化持久化状态:**
94
+
95
+ ```bash
96
+ mkdir -p .openmatrix
97
+ cat > .openmatrix/feature-session.json << EOF
98
+ {
99
+ "sessionId": "FEATURE-$(date +%Y%m%d%H%M%S)",
100
+ "status": "running",
101
+ "tasks": [],
102
+ "currentTaskIndex": 0,
103
+ "quality": null,
104
+ "failureCount": {}
105
+ }
106
+ EOF
107
+ echo '' > .openmatrix/feature-context.md
108
+ echo '' > .openmatrix/feature-progress.md
109
+ ```
110
+
111
+ ## Step 1: 接收任务输入
112
+
113
+ **检查 `$ARGUMENTS`:**
114
+
115
+ | 参数 | 处理方式 |
116
+ |------|---------|
117
+ | `<任务描述>` | 直接使用描述 |
118
+ | `<文件路径>` | Read 工具读取内容 |
119
+ | 空 | AskUserQuestion 询问 |
120
+
121
+ **如果是空参数,询问:**
122
+
123
+ AskUserQuestion: `header: "任务描述"`, `multiSelect: false`
124
+ **question:** 请描述你的小需求
125
+
126
+ | label | description |
127
+ |-------|-------------|
128
+ | 描述需求 | 输入自由文本描述 |
129
+ | 从文件读取 | 指定任务文件路径 |
130
+ | 取消 | 退出 |
131
+
132
+ ## Step 2: AI 判断任务边界
133
+
134
+ **AI 自动判断任务是否适合本 skill:**
135
+
136
+ 检查以下条件(全部满足才继续,否则建议切换):
137
+
138
+ | 条件 | 检查方式 |
139
+ |------|---------|
140
+ | 描述长度 ≤ 100 字 | 字数统计 |
141
+ | 单一功能点 | 无"和"、"同时"、"另外"等连接词 |
142
+ | 无架构设计 | 无"架构"、"设计"、"从零"、"重构"关键词 |
143
+ | 无多子系统 | 无多个独立模块描述 |
144
+
145
+ **判断结果处理:**
146
+
147
+ | 结果 | 处理 |
148
+ |------|------|
149
+ | ✅ 全部满足 | 继续执行 Step 3 收集上下文 |
150
+ | ❌ 不满足 | 输出建议并询问是否切换到 `/om:start` |
151
+
152
+ **如果需要切换,询问:**
153
+
154
+ AskUserQuestion: `header: "任务复杂度"`, `multiSelect: false`
155
+ **question:** 任务可能需要完整追踪,建议使用 `/om:start`。是否切换?
156
+
157
+ | label | description |
158
+ |-------|-------------|
159
+ | 切换到 /om:start | 使用完整流程 |
160
+ | 继续用 /om:feature | 强制使用轻量流程(可能无法完整追踪) |
161
+
162
+ ## Step 3: 收集项目上下文并写入文件
163
+
164
+ **收集并写入上下文文件:**
165
+
166
+ ```bash
167
+ mkdir -p .openmatrix
168
+
169
+ # 写入上下文文件头
170
+ echo "# 项目上下文" > .openmatrix/feature-context.md
171
+ echo "" >> .openmatrix/feature-context.md
172
+
173
+ # 收集技术栈并写入文件
174
+ echo "## 技术栈" >> .openmatrix/feature-context.md
175
+ cat package.json 2>/dev/null | grep -E '"(react|vue|angular|next|express|fastify|koa|typeorm|prisma|sequelize|mongoose|jest|vitest|playwright|cypress)"' >> .openmatrix/feature-context.md || echo "未检测到常见框架" >> .openmatrix/feature-context.md
176
+ echo "" >> .openmatrix/feature-context.md
177
+
178
+ # 收集目录结构并写入文件
179
+ echo "## 目录结构" >> .openmatrix/feature-context.md
180
+ find . -maxdepth 2 -type d -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.openmatrix/*' 2>/dev/null | head -30 >> .openmatrix/feature-context.md
181
+ echo "" >> .openmatrix/feature-context.md
182
+
183
+ # 读取 CLAUDE.md 并写入文件
184
+ echo "## 项目规范(来自 CLAUDE.md)" >> .openmatrix/feature-context.md
185
+ cat CLAUDE.md 2>/dev/null | head -50 >> .openmatrix/feature-context.md || echo "无 CLAUDE.md" >> .openmatrix/feature-context.md
186
+ ```
187
+
188
+ 上下文已写入 `.openmatrix/feature-context.md`,后续 Agent 会读取此文件。
189
+
190
+ ## Step 4: AI 拆分为 2-5 个小任务块
191
+
192
+ **调用 Agent 进行任务拆分:**
193
+
194
+ ```typescript
195
+ Agent({
196
+ subagent_type: "general-purpose",
197
+ description: "任务拆分分析",
198
+ prompt: `你是任务拆分专家。将用户需求拆分为 2-5 个小任务块。
199
+
200
+ ## 用户需求
201
+ ${taskDescription}
202
+
203
+ ${projectContext}
204
+
205
+ ## 拆分原则
206
+ 1. 拆分粒度:每个小块 ≤ 30 分钟工作量
207
+ 2. 拆分方向:数据层 → API层 → UI层 / 核心逻辑 → 边界处理
208
+ 3. 依赖关系:确保后续任务可依赖前面的成果
209
+ 4. 文件预估:基于项目目录结构,预估每个任务涉及的文件路径
210
+ 5. 技术栈对齐:使用项目已有的框架和库,不引入新依赖
211
+
212
+ ## 输出格式
213
+ 请按以下格式输出:
214
+
215
+ \`\`\`
216
+ 📋 任务拆分计划
217
+
218
+ 原始需求:${taskDescription}
219
+
220
+ 拆分为 N 个小任务:
221
+ 1. [任务名称]
222
+ 描述:[简要描述]
223
+ 预估文件:[基于项目结构的文件路径列表]
224
+ 预估时间:[分钟]
225
+
226
+ 2. [任务名称]
227
+ ...
228
+
229
+ 📋 依赖关系图
230
+ 任务1 → 任务2 → 任务3
231
+ \`\`\`
232
+
233
+ ## 注意事项
234
+ - 如果任务过于复杂无法拆分,明确说明并建议使用完整流程
235
+ - 保持任务块独立性,便于验证和提交
236
+ - 文件路径必须基于实际项目结构`,
237
+ run_in_background: false
238
+ })
239
+ ```
240
+
241
+ ## Step 5: 用 TodoWrite 管理任务状态
242
+
243
+ **将拆分的任务写入 TodoWrite:**
244
+
245
+ ```typescript
246
+ TodoWrite({
247
+ todos: [
248
+ { activeForm: "正在实现数据层", content: "数据层:添加搜索参数", status: "pending" },
249
+ { activeForm: "正在实现 API 层", content: "API 层:实现搜索端点", status: "pending" },
250
+ { activeForm: "正在实现 UI 层", content: "UI 层:添加搜索框", status: "pending" }
251
+ ]
252
+ })
253
+ ```
254
+
255
+ **同时更新 feature-session.json(AI 将 tasks 写入文件):**
256
+
257
+ ```bash
258
+ # 使用 AI 写入 JSON(而非 bash heredoc,因为 tasks 是 JS 数组)
259
+ # AI 执行:Write 文件 .openmatrix/feature-session.json
260
+ # 内容:{ sessionId, status, tasks: [...从 Step 4 获取的数组], currentTaskIndex: 0, quality: null, failureCount: {} }
261
+ ```
262
+
263
+ 状态同时在会话和 `.openmatrix/feature-session.json` 中管理。
264
+
265
+ ## Step 6: 问答确认
266
+
267
+ **⛔ 执行前必须确认所有配置**
268
+
269
+ **6.1 质量等级(必选)**
270
+
271
+ 根据任务描述,Claude 直接推断推荐的质量等级,并在问题中标注推荐项:
272
+
273
+ - Bug 修复 / 重构 → 推荐 `balanced`
274
+ - 原型 / demo / 快速验证 → 推荐 `fast`
275
+ - 新功能 / 生产代码 / 涉及测试 → 推荐 `strict`
276
+ - 文档 / skill 文件 推荐 `fast`
277
+
278
+ AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
279
+
280
+ **question:** 选择质量等级(Claude 推荐:${inferredQuality},原因:${inferReason})
281
+
282
+ | label | description |
283
+ |-------|-------------|
284
+ | `strict` | TDD + >80%覆盖率 + 严格Lint + 安全扫描 — 生产级代码 |
285
+ | `balanced` | >60%覆盖率 + Lint + 安全扫描 — 日常开发 |
286
+ | `fast` | 无质量门禁 快速原型/验证 |
287
+
288
+ **6.2 E2E 测试(仅 strict/balanced)**
289
+
290
+ 根据任务描述推断:若任务涉及前端页面/UI/Web,询问;否则默认跳过(不需要)。
291
+
292
+ 如需询问:
293
+
294
+ AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
295
+
296
+ **question:** 是否需要端到端 (E2E) 测试?(适用于 Web/Mobile/GUI 项目)
297
+
298
+ | label | description |
299
+ |-------|-------------|
300
+ | `功能测试` | 验证业务流程正确性,速度快 |
301
+ | `视觉验证` | 需要浏览器可视化验证 UI 样式 |
302
+ | `不需要 (推荐)` | 仅单元测试和集成测试 |
303
+
304
+ **6.3 确认拆分计划**
305
+
306
+ AskUserQuestion: `header: "确认计划"`, `multiSelect: false`
307
+
308
+ **question:** 任务拆分计划已展示,确认开始执行?
309
+
310
+ | label | description |
311
+ |-------|-------------|
312
+ | `开始执行 (推荐)` | 按计划逐个执行 |
313
+ | `调整计划` | 重新拆分任务 |
314
+
315
+ **6.4 更新 quality 到 feature-session.json**
316
+
317
+ 问答完成后,更新会话状态:
318
+
319
+ ```bash
320
+ # AI 使用 Write 工具更新 .openmatrix/feature-session.json
321
+ # 内容:{ ...原有内容, quality: "${用户选择的质量等级}", e2eTests: ${e2eChoice} }
322
+ ```
323
+
324
+ ## Step 7: 逐个执行小任务
325
+
326
+ **对 TodoWrite 中的每个任务(按顺序):**
327
+
328
+ **7.1 更新状态为 in_progress**
329
+ ```typescript
330
+ TodoWrite({ todos: [...] }) // 当前任务标记 in_progress
331
+ ```
332
+
333
+ **7.2 歧义检测与处理**
334
+
335
+ Agent 输出中可能包含歧义报告:
336
+
337
+ Agent 输出包含以下标记时,表示检测到歧义:
338
+ ```
339
+ <AMBIGUITY_REPORT>
340
+ {
341
+ "ambiguities": [
342
+ {
343
+ "type": "missing_info" | "conflicting_req" | "unclear_scope" | "tech_choice" | "edge_case",
344
+ "severity": "critical" | "high" | "medium" | "low",
345
+ "description": "歧义描述",
346
+ "suggestions": ["建议1", "建议2"]
347
+ }
348
+ ],
349
+ "overallSeverity": "critical" | "high" | "medium" | "low"
350
+ }
351
+ </AMBIGUITY_REPORT>
352
+ ```
353
+
354
+ **5 种歧义类型说明:**
355
+
356
+ | 类型 | 说明 | 示例 |
357
+ |------|------|------|
358
+ | `missing_info` | 缺失关键信息 | "未指定数据库类型" |
359
+ | `conflicting_req` | 需求冲突 | "既要高性能又要低成本" |
360
+ | `unclear_scope` | 范围不清晰 | "是否包含历史数据处理?" |
361
+ | `tech_choice` | 技术选型歧义 | "用 REST 还是 GraphQL?" |
362
+ | `edge_case` | 边界情况未定义 | "超过限制时如何处理?" |
363
+
364
+ **歧义处理策略(轻量模式):**
365
+
366
+ | 严重程度 | 处理方式 |
367
+ |---------|---------|
368
+ | **Critical/High** | AskUserQuestion 立即确认 |
369
+ | **Medium/Low** | 写入进度文件,继续执行 |
370
+
371
+ **AskUserQuestion 处理(仅 Critical/High):**
372
+
373
+ AskUserQuestion: `header: "歧义确认"`, `multiSelect: false`
374
+ **question:** 检测到 ${severity} 级歧义:${description}。请确认处理方式
375
+
376
+ | label | description |
377
+ |-------|-------------|
378
+ | 提供信息 | 回答歧义相关问题,继续执行 |
379
+ | 跳过任务块 | 标记当前任务块为可选,继续执行下一个 |
380
+ | 修改方案 | 根据歧义调整方案后继续 |
381
+
382
+ **7.3 调用 Agent 执行**
383
+
384
+ ```typescript
385
+ Agent({
386
+ subagent_type: "general-purpose",
387
+ description: task.content,
388
+ prompt: `你是实现专家。执行以下任务块。
389
+
390
+ ## 项目上下文(请读取文件)
391
+ 请先读取 .openmatrix/feature-context.md 了解项目上下文。
392
+
393
+ ## 前序任务结果(请读取文件)
394
+ 请读取 .openmatrix/feature-progress.md 了解前序 Agent 的决策和发现。
395
+
396
+ ## 整体任务
397
+ ${taskDescription}
398
+
399
+ ## 当前任务
400
+ - 任务名称:${task.content}
401
+ - 预估文件:${task.files}
402
+ - 质量等级:${quality}
403
+ - 前置任务完成状态:${previousTasksStatus}
404
+
405
+ ## 质量要求
406
+ ${quality === 'strict' ? `
407
+ - 必须使用 TDD:先写测试,再写实现
408
+ - 测试覆盖率要求:>80%
409
+ - 必须通过严格 Lint
410
+ - 必须通过安全扫描
411
+ ` : quality === 'balanced' ? `
412
+ - 测试覆盖率要求:>60%
413
+ - 必须通过 Lint
414
+ - 必须通过安全扫描
415
+ ` : `
416
+ - 无质量门禁要求
417
+ - 快速实现功能
418
+ `}
419
+
420
+ ## 实施原则
421
+ 1. 先阅读预估文件中的现有代码,理解上下文后再动手
422
+ 2. 只修改当前任务相关的文件
423
+ 3. 不做"顺便"的重构或优化
424
+ 4. 确保代码风格与项目现有代码一致
425
+ 5. 完成后运行相关测试验证
426
+
427
+ ## 完成后输出
428
+ 请按以下格式输出(不超过3行):
429
+ 1. 关键决策:[做了什么决策及原因]
430
+ 2. 创建/修改的文件列表
431
+ 3. 对后续任务的建议或注意事项
432
+
433
+ ## 禁止行为
434
+ 执行 git commit(由主流程处理)
435
+ ❌ 执行 git checkout — 不要切换分支
436
+ ❌ 执行 git merge — 不要合并其他分支
437
+ 执行 git pull — 不要拉取远程更新
438
+ 执行 git push — 不要推送代码
439
+ 执行 git rebase 不要变基
440
+ 执行 git branch — 不要创建/删除分支
441
+ 修改与当前任务无关的文件
442
+ ❌ 进行额外的重构
443
+
444
+ 允许:git status, git diff, git log`,
445
+ run_in_background: true
446
+ })
447
+ ```
448
+
449
+ **7.4 等待 Agent 完成,写入进度文件**
450
+
451
+ Agent 完成后,将输出中的关键决策和建议写入 `.openmatrix/feature-progress.md` 文件:
452
+
453
+ **注意:以下命令中的变量需要在执行前由 AI 替换为实际值。**
454
+
455
+ ```bash
456
+ # Agent 完成后,追加写入进度文件
457
+ echo "" >> .openmatrix/feature-progress.md
458
+ echo "## 任务 N: ${taskContent}" >> .openmatrix/feature-progress.md
459
+ echo "${agentOutput}" >> .openmatrix/feature-progress.md
460
+ echo "" >> .openmatrix/feature-progress.md
461
+ ```
462
+
463
+ 这样后续 Agent 能通过读取文件获取前序 Agent 的决策和发现。
464
+
465
+ ## Step 8: 验证(按质量等级)
466
+
467
+ **⛔ 验证不通过不得提交,必须停止等待修复**
468
+
469
+ 每个任务完成后,根据质量等级执行验证:
470
+
471
+ **8.1 执行验证命令**
472
+
473
+ | 质量等级 | 验证命令 |
474
+ |---------|---------|
475
+ | `strict` | `npm test -- --run && npm run lint && npm run test:coverage && npm audit --audit-level=moderate` |
476
+ | `balanced` | `npm test -- --run && npm run lint && npm audit --audit-level=moderate` |
477
+ | `fast` | 跳过验证 |
478
+
479
+ **覆盖率阈值检查说明:**
480
+ - strict 模式要求 >80% 覆盖率,`npm run test:coverage` 命令应输出覆盖率报告
481
+ - balanced 模式要求 >60% 覆盖率,建议定期检查覆盖率报告
482
+
483
+ **8.2 E2E 验证(如果用户选择)**
484
+ - 功能测试:`npm run test:e2e`
485
+ - 视觉验证:启动 Playwright 截图对比
486
+
487
+ **8.3 验证结果自动判断**
488
+
489
+ 验证命令执行后,根据退出码自动判断结果:
490
+
491
+ ```bash
492
+ # 执行验证命令并捕获结果
493
+ if npm test -- --run && npm run lint; then
494
+ # 验证成功
495
+ echo "✅ 验证通过"
496
+ else
497
+ # 验证失败
498
+ echo "❌ 验证失败"
499
+ npm test -- --run 2>&1 | tail -30 # 展示失败详情
500
+ exit 1
501
+ fi
502
+ ```
503
+
504
+ **验证失败处理:**
505
+ - 自动展示验证失败详情(最后 30 行输出)
506
+ - 停止执行流程
507
+ - 提示用户修复后使用 `/om:resume` 继续
508
+
509
+ **验证成功处理:**
510
+ - 继续执行 Step 9 Git 提交
511
+
512
+ ## Step 9: 分步 Git 提交
513
+
514
+ **⛔ 验证通过后必须立即提交,不得积累多个任务块**
515
+
516
+ **只提交本次任务修改的文件(而非 `git add -A`):**
517
+
518
+ **注意:以下命令中的变量需要在执行前由 AI 替换为实际值。**
519
+
520
+ ```bash
521
+ # 获取本次任务修改的文件列表(从 Agent 输出中提取)
522
+ git status --porcelain
523
+
524
+ # 只提交任务涉及的文件(AI 从 Agent 输出中提取文件列表)
525
+ git add ${modifiedFiles}
526
+ git commit -m "feat(feature): ${originalTask} - ${currentChunk}
527
+
528
+ 改动详情:
529
+ - ${changesSummary}
530
+
531
+ Co-Authored-By: OpenMatrix https://github.com/bigfish1913/openmatrix"
532
+ ```
533
+
534
+ 提交成功后:
535
+ 1. **更新 TodoWrite 状态为 completed**
536
+ 2. **更新 feature-session.json 的 currentTaskIndex**
537
+ ```bash
538
+ # AI 使用 Write 工具更新 .openmatrix/feature-session.json
539
+ # 内容:{ ...原有内容, currentTaskIndex: ${newIndex} }
540
+ ```
541
+ 3. **继续下一个任务**
542
+
543
+ ## Step 10: 全部任务完成后
544
+
545
+ **检查 TodoWrite 所有任务状态为 `completed`:**
546
+
547
+ **10.1 运行最终整体验证**
548
+ ```bash
549
+ npm test -- --run
550
+ ```
551
+
552
+ **10.2 收集所有任务的执行摘要**
553
+
554
+ ## Step 11: 输出执行摘要并清理
555
+
556
+ **展示执行摘要:**
557
+
558
+ ```
559
+ ✅ 任务完成:${originalTask}
560
+
561
+ 📊 执行统计:
562
+ - 任务块数:${chunkCount}
563
+ - 质量等级:${quality}
564
+ - 总耗时:约 ${totalTime} 分钟
565
+ - Git 提交:${commitCount} 次
566
+
567
+ 📝 创建/修改的文件:
568
+ ${fileList}
569
+
570
+ 🔧 关键决策:
571
+ ${decisions}
572
+
573
+ 📈 测试覆盖率:${coverageResult}
574
+
575
+ ✨ 所有任务已完成,会话状态已清理
576
+ ```
577
+
578
+ **清理操作:**
579
+ - TodoWrite 所有任务保持 completed 状态
580
+ - 更新 feature-session.json status 为 `completed`
581
+ ```bash
582
+ # AI 使用 Write 工具更新 .openmatrix/feature-session.json
583
+ # 内容:{ ...原有内容, status: "completed" }
584
+ ```
585
+ - 持久化文件可选择保留或手动清理
586
+
587
+ </process>
588
+
589
+ <arguments>
590
+ $ARGUMENTS
591
+ </arguments>
592
+
593
+ <examples>
594
+ /om:feature 给用户列表页添加搜索功能
595
+ /om:feature 添加一个导出按钮
596
+ /om:feature docs/small-task.md
597
+ </examples>
598
+
599
+ <notes>
600
+ ## 铁律
601
+
602
+ **不验证不得提交,验证失败必须停止**
603
+ **每次只改一个任务块,不得并行修改多个文件**
604
+ **验证通过后立即提交,不得积累多个任务块再提交**
605
+
606
+ ## 红线
607
+
608
+ - 验证失败不得继续执行,必须停止等待修复
609
+ - 不得跳过质量等级确认
610
+ - 不得跳过任务边界确认
611
+ - 不得在 Agent 内部执行任何 Git 操作(commit/checkout/merge/pull/push/rebase/branch)
612
+
613
+ <RED-FLAGS>
614
+ ## 红旗警告 - 停止并回归流程
615
+
616
+ 这些想法意味着你在找借口:
617
+
618
+ | 想法 | 真相 |
619
+ |-----|------|
620
+ | "验证麻烦,先提交再说" | 未验证的提交会污染仓库 |
621
+ | "任务块小,一次改两个吧" | 无法隔离哪个改动有问题 |
622
+ | "顺便重构下这个代码" | "顺便"是 bug 的温床 |
623
+ | "跳过质量确认,直接开始" | 3秒选择防止后续数小时排查 |
624
+ | "测试失败没关系,手动验证就行" | 手动验证不可重复 |
625
+ | "这个小改动不会影响其他" | 小改动也有根因 |
626
+ | "我知道该怎么做" | 知道概念 ≠ 正确执行 |
627
+
628
+ </RED-FLAGS>
629
+
630
+ ## 常见借口 vs 真实情况
631
+
632
+ | 借口 | 真实情况 |
633
+ |------|---------|
634
+ | "验证太慢,先提交" | 未验证的提交会污染仓库,回头排查更慢。 |
635
+ | "一次改两个任务块效率高" | 无法隔离哪个改动有问题。引入新 bug。 |
636
+ | "顺便重构没问题" | "顺便"是 bug 的温床。任务聚焦。 |
637
+ | "质量确认麻烦" | 3 秒的选择防止后续数小时排查。 |
638
+ | "手动验证就行" | 手动验证不可重复。自动化测试才可靠。 |
639
+ | "小改动不会出错" | 小改动也有根因。系统性验证。 |
640
+
641
+ ## 与其他指令的区别
642
+
643
+ | 指令 | 适用场景 | 任务文件 | 问答 | 验证 | 持久化 |
644
+ |-----|---------|:-------:|:----:|:----:|:-----:|
645
+ | `/om:feature` | 小需求(≤100字,单一功能) | ❌ | 质量+E2E | 按等级 | 必须 |
646
+ | `/om:start` | 标准任务 | ✅ | 质量+E2E+模式 | 按等级 | 必须 |
647
+ | `/om:brainstorm` | 复杂任务 | ✅ | 设计问答 | 按等级 | 必须 |
648
+ | `/om:auto` | 全自动执行 | ✅ | 无 | 按等级 | 必须 |
649
+
650
+ ## 路由触发条件
651
+
652
+ `/om` 主入口自动路由到此 skill 的条件:
653
+ - 任务描述 ≤ 100 字
654
+ - 单一功能点(无多个独立子系统)
655
+ - 不涉及架构设计/技术选型
656
+ - 关键词匹配:小需求、小功能、小改动、minor、quick、快速、添加按钮
657
+
658
+ ## 错误处理流程
659
+
660
+ ```
661
+ 验证失败 停止执行 → 展示错误详情 → 提示用户修复 → 使用 /om:resume 恢复
662
+ ```
663
+
664
+ | 错误 | 处理 |
665
+ |-----|-----|
666
+ | 测试失败 | 停止,提示用户修复 |
667
+ | Lint 错误 | 停止,提示用户修复 |
668
+ | 安全扫描失败 | 停止,提示用户修复 |
669
+ | Agent 超时 | 询问重试或跳过 |
670
+ | Git 失败 | 提示手动处理 |
671
+
672
+ ## 3+ 次验证失败:质疑任务拆分
673
+
674
+ **如果同一任务块验证失败 3 次以上:**
675
+
676
+ **指示拆分问题的模式:**
677
+ - 每次修复产生新的测试失败
678
+ - 任务块范围模糊,边界不清
679
+ - 修改影响多个不相关文件
680
+
681
+ **停止并质疑拆分方案:**
682
+ - 任务块是否过于复杂?
683
+ - 是否需要重新拆分?
684
+ - 是否应该切换到 `/om:start` 使用完整流程?
685
+
686
+ **在继续执行之前与用户讨论拆分方案。**
687
+
688
+ 这不是执行失败 — 这是拆分策略问题。
689
+
690
+ ## Git 提交格式
691
+
692
+ ```
693
+ <type>(feature): <任务描述> - <任务块名称>
694
+
695
+ 改动详情
696
+
697
+ Co-Authored-By: OpenMatrix
698
+ ```
699
+
700
+ type: feat/fix/test/refactor/docs
701
+
702
+ ## 恢复执行
703
+
704
+ 如果验证失败需要修复:
705
+
706
+ 使用 `/om:resume` 继续执行(自动检测 `.openmatrix/feature-session.json` 或 `state.json`)
707
+
708
+ ## 持久化文件说明
709
+
710
+ 执行过程中产生以下文件:
711
+ - `.openmatrix/feature-session.json` - 会话状态(任务列表、当前索引、质量等级)
712
+ - `.openmatrix/feature-context.md` - 项目上下文
713
+ - `.openmatrix/feature-progress.md` - Agent 执行进度
687
714
  </notes>