openmatrix 0.2.13 → 0.2.15

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.
@@ -1035,7 +1035,7 @@ ${userContext.documentationLevel}
1035
1035
  const e2eAnswer = str(merged['E2E测试'] || merged['e2eTests'] || merged['e2e']);
1036
1036
  const e2eTypeAnswer = str(merged['E2E类型'] || merged['e2eType']);
1037
1037
  const isE2EEnabled = e2eAnswer === 'true' || e2eAnswer === 'functional' || e2eAnswer === 'visual' || e2eAnswer === '✅ 启用 E2E 测试' || e2eAnswer === '是';
1038
- let e2eTypeValue = e2eAnswer === 'visual' ? 'visual' : e2eTypeAnswer === 'mobile' ? 'mobile' : e2eTypeAnswer === 'gui' ? 'gui' : 'web';
1038
+ let e2eTypeValue = e2eAnswer === 'visual' ? 'visual' : e2eTypeAnswer === 'visual' ? 'visual' : e2eTypeAnswer === 'mobile' ? 'mobile' : e2eTypeAnswer === 'gui' ? 'gui' : 'web';
1039
1039
  return {
1040
1040
  objective: str(merged['目标'] || merged['objective']),
1041
1041
  techStack: this.parseArrayAnswer(str(merged['技术栈'] || merged['techStack']) || ''),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmatrix",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "AI Agent task orchestration system with Claude Code Skills integration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/skills/debug.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: om:debug
3
- description: 系统化调试 - 遇到任何 bug、测试失败或异常行为时使用,在提出修复方案之前执行
3
+ description: "Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes. Use for ANY technical issue: 测试失败, bug, 异常行为, 构建失败, 集成问题, 没触发, 没执行, 不工作, 原因, 为什么. Use ESPECIALLY when: under time pressure, 'just one quick fix' seems obvious, previous fix didn't work, you don't fully understand the issue. Don't skip when: issue seems simple (simple bugs have root causes too), you're in a hurry (systematic is faster than guessing)."
4
4
  priority: high
5
5
  ---
6
6
 
package/skills/feature.md CHANGED
@@ -22,14 +22,15 @@ priority: high
22
22
  ```
23
23
  Step 1: 接收任务输入(参数、文件、或询问用户)
24
24
  Step 2: AI 自动判断任务边界(不符合条件才询问切换)
25
- Step 3: AI 拆分为 2-5 个小任务块
26
- Step 4: TodoWrite 管理任务状态
27
- Step 5: 问答确认(质量等级、E2E测试、执行计划)
28
- Step 6: 逐个执行小任务
29
- Step 7: 验证(按质量等级)
30
- Step 8: 分步 Git 提交
31
- Step 9: 全部任务完成后整体验证
32
- Step 10: 输出执行摘要并清理
25
+ Step 3: 收集项目上下文(技术栈、目录结构、CLAUDE.md)
26
+ Step 4: AI 拆分为 2-5 个小任务块
27
+ Step 5: 用 TodoWrite 管理任务状态
28
+ Step 6: 问答确认(质量等级、E2E测试、执行计划)
29
+ Step 7: 逐个执行小任务(含跨 Agent 上下文传递)
30
+ Step 8: 验证(按质量等级)
31
+ Step 9: 分步 Git 提交
32
+ Step 10: 全部任务完成后整体验证
33
+ Step 11: 输出执行摘要并清理
33
34
  ```
34
35
 
35
36
  **铁律:不验证不得提交,验证失败必须停止**
@@ -82,7 +83,7 @@ AskUserQuestion: `header: "任务描述"`, `multiSelect: false`
82
83
 
83
84
  | 结果 | 处理 |
84
85
  |------|------|
85
- | ✅ 全部满足 | 继续执行 Step 3 |
86
+ | ✅ 全部满足 | 继续执行 Step 3 收集上下文 |
86
87
  | ❌ 不满足 | 输出建议并询问是否切换到 `/om:start` |
87
88
 
88
89
  **如果需要切换,询问:**
@@ -95,7 +96,37 @@ AskUserQuestion: `header: "任务复杂度"`, `multiSelect: false`
95
96
  | 切换到 /om:start | 使用完整流程 |
96
97
  | 继续用 /om:feature | 强制使用轻量流程(可能无法完整追踪) |
97
98
 
98
- ## Step 3: AI 拆分为 2-5 个小任务块
99
+ ## Step 3: 收集项目上下文
100
+
101
+ **在拆分任务前,收集必要的项目上下文信息,存入 `${projectContext}` 变量供后续步骤使用。**
102
+
103
+ ```bash
104
+ # 收集技术栈(从 package.json 提取关键依赖)
105
+ cat package.json | grep -E '"(react|vue|angular|next|express|fastify|koa|typeorm|prisma|sequelize|mongoose|jest|vitest|playwright|cypress)"' || echo "未检测到常见框架"
106
+
107
+ # 收集项目目录结构(仅顶层,避免输出过长)
108
+ find . -maxdepth 2 -type d -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.openmatrix/*' | head -30
109
+
110
+ # 读取 CLAUDE.md 项目规范(如果存在)
111
+ cat CLAUDE.md 2>/dev/null | head -50 || echo "无 CLAUDE.md"
112
+ ```
113
+
114
+ **将收集结果存入 `${projectContext}`:**
115
+
116
+ ```
117
+ ## 项目上下文
118
+
119
+ ### 技术栈
120
+ ${从 package.json 提取的关键依赖}
121
+
122
+ ### 目录结构
123
+ ${顶层目录结构}
124
+
125
+ ### 项目规范(来自 CLAUDE.md)
126
+ ${CLAUDE.md 前 50 行,包含构建/测试命令、架构概述、开发约定}
127
+ ```
128
+
129
+ ## Step 4: AI 拆分为 2-5 个小任务块
99
130
 
100
131
  **调用 Agent 进行任务拆分:**
101
132
 
@@ -108,11 +139,14 @@ Agent({
108
139
  ## 用户需求
109
140
  ${taskDescription}
110
141
 
142
+ ${projectContext}
143
+
111
144
  ## 拆分原则
112
145
  1. 拆分粒度:每个小块 ≤ 30 分钟工作量
113
146
  2. 拆分方向:数据层 → API层 → UI层 / 核心逻辑 → 边界处理
114
147
  3. 依赖关系:确保后续任务可依赖前面的成果
115
- 4. 文件预估:每个任务预估涉及的文件
148
+ 4. 文件预估:基于项目目录结构,预估每个任务涉及的文件路径
149
+ 5. 技术栈对齐:使用项目已有的框架和库,不引入新依赖
116
150
 
117
151
  ## 输出格式
118
152
  请按以下格式输出:
@@ -125,7 +159,7 @@ ${taskDescription}
125
159
  拆分为 N 个小任务:
126
160
  1. [任务名称]
127
161
  描述:[简要描述]
128
- 预估文件:[文件列表]
162
+ 预估文件:[基于项目结构的文件路径列表]
129
163
  预估时间:[分钟]
130
164
 
131
165
  2. [任务名称]
@@ -137,12 +171,13 @@ ${taskDescription}
137
171
 
138
172
  ## 注意事项
139
173
  - 如果任务过于复杂无法拆分,明确说明并建议使用完整流程
140
- - 保持任务块独立性,便于验证和提交`,
174
+ - 保持任务块独立性,便于验证和提交
175
+ - 文件路径必须基于实际项目结构`,
141
176
  run_in_background: false
142
177
  })
143
178
  ```
144
179
 
145
- ## Step 4: 用 TodoWrite 管理任务状态
180
+ ## Step 5: 用 TodoWrite 管理任务状态
146
181
 
147
182
  **将拆分的任务写入 TodoWrite:**
148
183
 
@@ -158,11 +193,11 @@ TodoWrite({
158
193
 
159
194
  状态仅在当前会话有效,不产生持久化文件。
160
195
 
161
- ## Step 5: 问答确认
196
+ ## Step 6: 问答确认
162
197
 
163
198
  **⛔ 执行前必须确认所有配置**
164
199
 
165
- **5.1 质量等级(必选)**
200
+ **6.1 质量等级(必选)**
166
201
 
167
202
  AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
168
203
 
@@ -174,7 +209,7 @@ AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
174
209
  | `balanced (推荐)` | >60%覆盖率 + Lint + 安全扫描 — 日常开发 |
175
210
  | `fast` | 无质量门禁 — 快速原型/验证 |
176
211
 
177
- **5.2 E2E 测试(仅 strict/balanced)**
212
+ **6.2 E2E 测试(仅 strict/balanced)**
178
213
 
179
214
  AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
180
215
 
@@ -186,7 +221,7 @@ AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
186
221
  | `视觉验证` | 需要浏览器可视化验证 UI 样式 |
187
222
  | `不需要 (推荐)` | 仅单元测试和集成测试 |
188
223
 
189
- **5.3 确认拆分计划**
224
+ **6.3 确认拆分计划**
190
225
 
191
226
  AskUserQuestion: `header: "确认计划"`, `multiSelect: false`
192
227
 
@@ -197,16 +232,16 @@ AskUserQuestion: `header: "确认计划"`, `multiSelect: false`
197
232
  | `开始执行 (推荐)` | 按计划逐个执行 |
198
233
  | `调整计划` | 重新拆分任务 |
199
234
 
200
- ## Step 6: 逐个执行小任务
235
+ ## Step 7: 逐个执行小任务
201
236
 
202
237
  **对 TodoWrite 中的每个任务(按顺序):**
203
238
 
204
- **6.1 更新状态为 in_progress**
239
+ **7.1 更新状态为 in_progress**
205
240
  ```typescript
206
241
  TodoWrite({ todos: [...] }) // 当前任务标记 in_progress
207
242
  ```
208
243
 
209
- **6.2 调用 Agent 执行**
244
+ **7.2 调用 Agent 执行**
210
245
 
211
246
  ```typescript
212
247
  Agent({
@@ -214,12 +249,20 @@ Agent({
214
249
  description: task.content,
215
250
  prompt: `你是实现专家。执行以下任务块。
216
251
 
217
- ## 任务信息
252
+ ## 整体任务
253
+ ${taskDescription}
254
+
255
+ ## 当前任务
218
256
  - 任务名称:${task.content}
219
257
  - 预估文件:${task.files}
220
258
  - 质量等级:${quality}
221
259
  - 前置任务完成状态:${previousTasksStatus}
222
260
 
261
+ ${projectContext}
262
+
263
+ ${agentMemory ? `## 前序任务结果(跨 Agent 上下文)
264
+ ${agentMemory}` : ''}
265
+
223
266
  ## 质量要求
224
267
  ${quality === 'strict' ? `
225
268
  - 必须使用 TDD:先写测试,再写实现
@@ -236,16 +279,17 @@ ${quality === 'strict' ? `
236
279
  `}
237
280
 
238
281
  ## 实施原则
239
- 1. 只修改当前任务相关的文件
240
- 2. 不做"顺便"的重构或优化
241
- 3. 确保代码风格与项目一致
242
- 4. 完成后运行相关测试验证
282
+ 1. 先阅读预估文件中的现有代码,理解上下文后再动手
283
+ 2. 只修改当前任务相关的文件
284
+ 3. 不做"顺便"的重构或优化
285
+ 4. 确保代码风格与项目现有代码一致
286
+ 5. 完成后运行相关测试验证
243
287
 
244
288
  ## 完成后输出
245
289
  请按以下格式输出(不超过3行):
246
- 1. 关键决策
290
+ 1. 关键决策:[做了什么决策及原因]
247
291
  2. 创建/修改的文件列表
248
- 3. 对后续任务的建议
292
+ 3. 对后续任务的建议或注意事项
249
293
 
250
294
  ## 禁止行为
251
295
  ❌ 执行 git commit(由主流程处理)
@@ -263,15 +307,25 @@ ${quality === 'strict' ? `
263
307
  })
264
308
  ```
265
309
 
266
- **6.3 等待 Agent 完成,接收通知**
310
+ **7.3 等待 Agent 完成,收集上下文**
311
+
312
+ Agent 完成后,将输出中的关键决策和建议追加到 `${agentMemory}` 变量中:
313
+ ```
314
+ ${agentMemory}
315
+ ---
316
+ ## 任务 N: ${task.content}
317
+ ${agentOutput}
318
+ ```
319
+
320
+ 这样后续 Agent 能获取前序 Agent 的决策和发现。
267
321
 
268
- ## Step 7: 验证(按质量等级)
322
+ ## Step 8: 验证(按质量等级)
269
323
 
270
324
  **⛔ 验证不通过不得提交,必须停止等待修复**
271
325
 
272
326
  每个任务完成后,根据质量等级执行验证:
273
327
 
274
- **7.1 执行验证命令**
328
+ **8.1 执行验证命令**
275
329
 
276
330
  | 质量等级 | 验证命令 |
277
331
  |---------|---------|
@@ -279,26 +333,36 @@ ${quality === 'strict' ? `
279
333
  | `balanced` | `npm test -- --run && npm run lint` |
280
334
  | `fast` | 跳过验证 |
281
335
 
282
- **7.2 E2E 验证(如果用户选择)**
336
+ **8.2 E2E 验证(如果用户选择)**
283
337
  - 功能测试:`npm run test:e2e`
284
338
  - 视觉验证:启动 Playwright 截图对比
285
339
 
286
- **7.3 验证结果判断**
340
+ **8.3 验证结果自动判断**
287
341
 
288
- AskUserQuestion: `header: "验证结果"`, `multiSelect: false`
289
- **question:** 任务验证通过了吗?
342
+ 验证命令执行后,根据退出码自动判断结果:
290
343
 
291
- | label | description |
292
- |-------|-------------|
293
- | 通过 | 验证成功,继续提交 |
294
- | 未通过 | 验证失败,停止执行 |
344
+ ```bash
345
+ # 执行验证命令并捕获结果
346
+ if npm test -- --run && npm run lint; then
347
+ # 验证成功
348
+ echo "✅ 验证通过"
349
+ else
350
+ # 验证失败
351
+ echo "❌ 验证失败"
352
+ npm test -- --run 2>&1 | tail -30 # 展示失败详情
353
+ exit 1
354
+ fi
355
+ ```
295
356
 
296
- **如果验证未通过:**
297
- - 展示验证失败详情
357
+ **验证失败处理:**
358
+ - 自动展示验证失败详情(最后 30 行输出)
298
359
  - 停止执行流程
299
360
  - 提示用户修复后使用 `/om:resume` 继续
300
361
 
301
- ## Step 8: 分步 Git 提交
362
+ **验证成功处理:**
363
+ - 继续执行 Step 9 Git 提交
364
+
365
+ ## Step 9: 分步 Git 提交
302
366
 
303
367
  **⛔ 验证通过后必须立即提交,不得积累多个任务块**
304
368
 
@@ -319,18 +383,18 @@ EOF
319
383
  1. **更新 TodoWrite 状态为 completed**
320
384
  2. **继续下一个任务**
321
385
 
322
- ## Step 9: 全部任务完成后
386
+ ## Step 10: 全部任务完成后
323
387
 
324
388
  **检查 TodoWrite 所有任务状态为 `completed`:**
325
389
 
326
- **9.1 运行最终整体验证**
390
+ **10.1 运行最终整体验证**
327
391
  ```bash
328
392
  npm test -- --run
329
393
  ```
330
394
 
331
- **9.2 收集所有任务的执行摘要**
395
+ **10.2 收集所有任务的执行摘要**
332
396
 
333
- ## Step 10: 输出执行摘要并清理
397
+ ## Step 11: 输出执行摘要并清理
334
398
 
335
399
  **展示执行摘要:**
336
400