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.
- package/dist/orchestrator/task-planner.js +1 -1
- package/package.json +1 -1
- package/skills/debug.md +1 -1
- package/skills/feature.md +110 -46
|
@@ -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
package/skills/debug.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: om:debug
|
|
3
|
-
description:
|
|
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:
|
|
26
|
-
Step 4:
|
|
27
|
-
Step 5:
|
|
28
|
-
Step 6:
|
|
29
|
-
Step 7:
|
|
30
|
-
Step 8:
|
|
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:
|
|
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
|
|
180
|
+
## Step 5: 用 TodoWrite 管理任务状态
|
|
146
181
|
|
|
147
182
|
**将拆分的任务写入 TodoWrite:**
|
|
148
183
|
|
|
@@ -158,11 +193,11 @@ TodoWrite({
|
|
|
158
193
|
|
|
159
194
|
状态仅在当前会话有效,不产生持久化文件。
|
|
160
195
|
|
|
161
|
-
## Step
|
|
196
|
+
## Step 6: 问答确认
|
|
162
197
|
|
|
163
198
|
**⛔ 执行前必须确认所有配置**
|
|
164
199
|
|
|
165
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
|
235
|
+
## Step 7: 逐个执行小任务
|
|
201
236
|
|
|
202
237
|
**对 TodoWrite 中的每个任务(按顺序):**
|
|
203
238
|
|
|
204
|
-
**
|
|
239
|
+
**7.1 更新状态为 in_progress**
|
|
205
240
|
```typescript
|
|
206
241
|
TodoWrite({ todos: [...] }) // 当前任务标记 in_progress
|
|
207
242
|
```
|
|
208
243
|
|
|
209
|
-
**
|
|
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
|
-
**
|
|
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
|
|
322
|
+
## Step 8: 验证(按质量等级)
|
|
269
323
|
|
|
270
324
|
**⛔ 验证不通过不得提交,必须停止等待修复**
|
|
271
325
|
|
|
272
326
|
每个任务完成后,根据质量等级执行验证:
|
|
273
327
|
|
|
274
|
-
**
|
|
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
|
-
**
|
|
336
|
+
**8.2 E2E 验证(如果用户选择)**
|
|
283
337
|
- 功能测试:`npm run test:e2e`
|
|
284
338
|
- 视觉验证:启动 Playwright 截图对比
|
|
285
339
|
|
|
286
|
-
**
|
|
340
|
+
**8.3 验证结果自动判断**
|
|
287
341
|
|
|
288
|
-
|
|
289
|
-
**question:** 任务验证通过了吗?
|
|
342
|
+
验证命令执行后,根据退出码自动判断结果:
|
|
290
343
|
|
|
291
|
-
|
|
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
|
-
|
|
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
|
|
386
|
+
## Step 10: 全部任务完成后
|
|
323
387
|
|
|
324
388
|
**检查 TodoWrite 所有任务状态为 `completed`:**
|
|
325
389
|
|
|
326
|
-
**
|
|
390
|
+
**10.1 运行最终整体验证**
|
|
327
391
|
```bash
|
|
328
392
|
npm test -- --run
|
|
329
393
|
```
|
|
330
394
|
|
|
331
|
-
**
|
|
395
|
+
**10.2 收集所有任务的执行摘要**
|
|
332
396
|
|
|
333
|
-
## Step
|
|
397
|
+
## Step 11: 输出执行摘要并清理
|
|
334
398
|
|
|
335
399
|
**展示执行摘要:**
|
|
336
400
|
|