openmatrix 0.1.99 → 0.2.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.
Files changed (42) hide show
  1. package/dist/agents/impl/coder-agent.js +42 -42
  2. package/dist/agents/impl/executor-agent.js +75 -75
  3. package/dist/agents/impl/planner-agent.js +63 -63
  4. package/dist/agents/impl/reviewer-agent.js +66 -66
  5. package/dist/agents/impl/tester-agent.js +56 -56
  6. package/dist/cli/commands/auto.js +20 -6
  7. package/dist/cli/commands/complete.js +1 -1
  8. package/dist/cli/commands/meeting.js +0 -1
  9. package/dist/cli/commands/report.js +45 -45
  10. package/dist/cli/commands/start.js +168 -34
  11. package/dist/cli/commands/status.js +0 -1
  12. package/dist/cli/commands/step.js +62 -35
  13. package/dist/orchestrator/ai-reviewer.d.ts +30 -2
  14. package/dist/orchestrator/ai-reviewer.js +314 -209
  15. package/dist/orchestrator/answer-mapper.d.ts +1 -0
  16. package/dist/orchestrator/answer-mapper.js +5 -2
  17. package/dist/orchestrator/approval-manager.js +14 -13
  18. package/dist/orchestrator/executor.d.ts +10 -1
  19. package/dist/orchestrator/executor.js +62 -2
  20. package/dist/orchestrator/interactive-question-generator.js +4 -3
  21. package/dist/orchestrator/meeting-manager.js +32 -31
  22. package/dist/orchestrator/phase-executor.js +9 -6
  23. package/dist/orchestrator/scheduler.d.ts +8 -6
  24. package/dist/orchestrator/scheduler.js +53 -22
  25. package/dist/orchestrator/state-machine.js +2 -2
  26. package/dist/orchestrator/task-planner.d.ts +83 -4
  27. package/dist/orchestrator/task-planner.js +702 -124
  28. package/dist/storage/state-manager.d.ts +6 -0
  29. package/dist/storage/state-manager.js +28 -0
  30. package/package.json +55 -55
  31. package/scripts/build-check.js +19 -19
  32. package/scripts/install-skills.js +57 -57
  33. package/skills/approve.md +250 -250
  34. package/skills/auto.md +298 -298
  35. package/skills/meeting.md +324 -324
  36. package/skills/om.md +112 -112
  37. package/skills/openmatrix.md +112 -112
  38. package/skills/start.md +38 -6
  39. package/dist/cli/commands/upgrade.d.ts +0 -2
  40. package/dist/cli/commands/upgrade.js +0 -329
  41. package/dist/orchestrator/task-planner.old.d.ts +0 -87
  42. package/dist/orchestrator/task-planner.old.js +0 -444
@@ -16,162 +16,162 @@ class AIReviewer {
16
16
  * 生成 AI Review 提示词
17
17
  */
18
18
  buildReviewPrompt(task) {
19
- return `# AI Code Review - 验收阶段
20
-
21
- ## 任务信息
22
- - Task ID: ${task.id}
23
- - 标题: ${task.title}
24
- - 描述: ${task.description}
25
-
26
- ## 审查范围
27
-
28
- 请对本次任务的所有代码变更进行完整审查。
29
-
30
- ## 审查清单
31
-
32
- ### 1. 代码质量 (Code Quality)
33
- - [ ] 代码可读性: 命名清晰、结构合理
34
- - [ ] 函数复杂度: 单一职责、适当长度
35
- - [ ] 代码复用: 避免重复、抽取公共逻辑
36
- - [ ] 注释质量: 关键逻辑有注释、复杂代码有说明
37
- - [ ] 错误处理: 异常情况有处理、错误信息清晰
38
-
39
- ### 2. 安全性 (Security)
40
- - [ ] 输入验证: 用户输入有校验
41
- - [ ] SQL 注入: 数据库查询使用参数化
42
- - [ ] XSS 攻击: 输出有转义
43
- - [ ] 敏感数据: 密码/密钥不明文存储
44
- - [ ] 权限控制: 敏感操作有权限检查
45
-
46
- ### 3. 性能 (Performance)
47
- - [ ] 算法效率: 时间复杂度合理
48
- - [ ] 数据库查询: 避免 N+1、使用索引
49
- - [ ] 内存使用: 无内存泄漏、大对象及时释放
50
- - [ ] 缓存策略: 适当使用缓存
51
- - [ ] 异步处理: 耗时操作使用异步
52
-
53
- ### 4. 最佳实践 (Best Practices)
54
- - [ ] 设计模式: 合理使用设计模式
55
- - [ ] 依赖注入: 避免硬编码依赖
56
- - [ ] 配置管理: 配置与代码分离
57
- - [ ] 日志记录: 关键操作有日志
58
- - [ ] 测试友好: 代码易于测试
59
-
60
- ### 5. 测试覆盖 (Test Coverage)
61
- - [ ] 单元测试: 核心逻辑有测试
62
- - [ ] 边界情况: 边界值有测试
63
- - [ ] 异常路径: 错误情况有测试
64
- - [ ] 测试质量: 测试有意义、不是为测试而测试
65
-
66
- ## 输出格式
67
-
68
- 在 \`.openmatrix/tasks/${task.id}/artifacts/\` 目录下创建:
69
-
70
- ### ai-review-report.md
71
-
72
- \`\`\`markdown
73
- # AI Review 报告
74
-
75
- ## 任务信息
76
- - Task ID: ${task.id}
77
- - 审查时间: [当前时间]
78
-
79
- ## 总体评价
80
- [✅ 通过 / ⚠️ 需要修改 / ❌ 拒绝]
81
-
82
- ## 分类评估
83
-
84
- ### 1. 代码质量
85
- - 评分: [0-100]
86
- - 状态: ✅ / ⚠️ / ❌
87
- - 详情:
88
- - [具体评价1]
89
- - [具体评价2]
90
-
91
- ### 2. 安全性
92
- - 评分: [0-100]
93
- - 状态: ✅ / ⚠️ / ❌
94
- - 详情:
95
- - [具体评价1]
96
- - [具体评价2]
97
-
98
- ### 3. 性能
99
- - 评分: [0-100]
100
- - 状态: ✅ / ⚠️ / ❌
101
- - 详情:
102
- - [具体评价1]
103
- - [具体评价2]
104
-
105
- ### 4. 最佳实践
106
- - 评分: [0-100]
107
- - 状态: ✅ / ⚠️ / ❌
108
- - 详情:
109
- - [具体评价1]
110
- - [具体评价2]
111
-
112
- ### 5. 测试覆盖
113
- - 评分: [0-100]
114
- - 状态: ✅ / ⚠️ / ❌
115
- - 详情:
116
- - [具体评价1]
117
- - [具体评价2]
118
-
119
- ## 问题列表
120
-
121
- ### 严重 (Critical) - 必须修复
122
- 1. [文件:行号] 问题描述
123
- - 建议: 修复建议
124
-
125
- ### 重要 (Major) - 强烈建议修复
126
- 1. [文件:行号] 问题描述
127
- - 建议: 修复建议
128
-
129
- ### 次要 (Minor) - 可选优化
130
- 1. [文件:行号] 问题描述
131
-
132
- ### 建议 (Suggestion) - 改进建议
133
- 1. [改进建议]
134
-
135
- ## 总结
136
- [审查总结和最终建议]
137
- \`\`\`
138
-
139
- ## 最终输出
140
-
141
- 根据审查结果,输出以下之一:
142
-
143
- **通过:**
144
- \`\`\`
145
- AI_REVIEW_APPROVED
146
- \`\`\`
147
-
148
- **需要修改:**
149
- \`\`\`
150
- AI_REVIEW_NEEDS_CHANGES
151
- 需要修复的问题:
152
- 1. [Critical/Major 问题描述]
153
- \`\`\`
154
-
155
- **拒绝:**
156
- \`\`\`
157
- AI_REVIEW_REJECTED
158
- 拒绝原因:
159
- 1. [严重问题描述]
160
- \`\`\`
161
-
162
- ## 审查原则
163
-
164
- 1. **平衡** - 不要过于严苛,也不要过于宽松
165
- 2. **实用** - 关注真正重要的问题
166
- 3. **建设性** - 提供具体的改进建议
167
- 4. **上下文** - 考虑项目的实际情况和约束
168
- 5. **渐进** - 允许代码渐进式改进,不要求完美
19
+ return `# AI Code Review - 验收阶段
20
+
21
+ ## 任务信息
22
+ - Task ID: ${task.id}
23
+ - 标题: ${task.title}
24
+ - 描述: ${task.description}
25
+
26
+ ## 审查范围
27
+
28
+ 请对本次任务的所有代码变更进行完整审查。
29
+
30
+ ## 审查清单
31
+
32
+ ### 1. 代码质量 (Code Quality)
33
+ - [ ] 代码可读性: 命名清晰、结构合理
34
+ - [ ] 函数复杂度: 单一职责、适当长度
35
+ - [ ] 代码复用: 避免重复、抽取公共逻辑
36
+ - [ ] 注释质量: 关键逻辑有注释、复杂代码有说明
37
+ - [ ] 错误处理: 异常情况有处理、错误信息清晰
38
+
39
+ ### 2. 安全性 (Security)
40
+ - [ ] 输入验证: 用户输入有校验
41
+ - [ ] SQL 注入: 数据库查询使用参数化
42
+ - [ ] XSS 攻击: 输出有转义
43
+ - [ ] 敏感数据: 密码/密钥不明文存储
44
+ - [ ] 权限控制: 敏感操作有权限检查
45
+
46
+ ### 3. 性能 (Performance)
47
+ - [ ] 算法效率: 时间复杂度合理
48
+ - [ ] 数据库查询: 避免 N+1、使用索引
49
+ - [ ] 内存使用: 无内存泄漏、大对象及时释放
50
+ - [ ] 缓存策略: 适当使用缓存
51
+ - [ ] 异步处理: 耗时操作使用异步
52
+
53
+ ### 4. 最佳实践 (Best Practices)
54
+ - [ ] 设计模式: 合理使用设计模式
55
+ - [ ] 依赖注入: 避免硬编码依赖
56
+ - [ ] 配置管理: 配置与代码分离
57
+ - [ ] 日志记录: 关键操作有日志
58
+ - [ ] 测试友好: 代码易于测试
59
+
60
+ ### 5. 测试覆盖 (Test Coverage)
61
+ - [ ] 单元测试: 核心逻辑有测试
62
+ - [ ] 边界情况: 边界值有测试
63
+ - [ ] 异常路径: 错误情况有测试
64
+ - [ ] 测试质量: 测试有意义、不是为测试而测试
65
+
66
+ ## 输出格式
67
+
68
+ 在 \`.openmatrix/tasks/${task.id}/artifacts/\` 目录下创建:
69
+
70
+ ### ai-review-report.md
71
+
72
+ \`\`\`markdown
73
+ # AI Review 报告
74
+
75
+ ## 任务信息
76
+ - Task ID: ${task.id}
77
+ - 审查时间: [当前时间]
78
+
79
+ ## 总体评价
80
+ [✅ 通过 / ⚠️ 需要修改 / ❌ 拒绝]
81
+
82
+ ## 分类评估
83
+
84
+ ### 1. 代码质量
85
+ - 评分: [0-100]
86
+ - 状态: ✅ / ⚠️ / ❌
87
+ - 详情:
88
+ - [具体评价1]
89
+ - [具体评价2]
90
+
91
+ ### 2. 安全性
92
+ - 评分: [0-100]
93
+ - 状态: ✅ / ⚠️ / ❌
94
+ - 详情:
95
+ - [具体评价1]
96
+ - [具体评价2]
97
+
98
+ ### 3. 性能
99
+ - 评分: [0-100]
100
+ - 状态: ✅ / ⚠️ / ❌
101
+ - 详情:
102
+ - [具体评价1]
103
+ - [具体评价2]
104
+
105
+ ### 4. 最佳实践
106
+ - 评分: [0-100]
107
+ - 状态: ✅ / ⚠️ / ❌
108
+ - 详情:
109
+ - [具体评价1]
110
+ - [具体评价2]
111
+
112
+ ### 5. 测试覆盖
113
+ - 评分: [0-100]
114
+ - 状态: ✅ / ⚠️ / ❌
115
+ - 详情:
116
+ - [具体评价1]
117
+ - [具体评价2]
118
+
119
+ ## 问题列表
120
+
121
+ ### 严重 (Critical) - 必须修复
122
+ 1. [文件:行号] 问题描述
123
+ - 建议: 修复建议
124
+
125
+ ### 重要 (Major) - 强烈建议修复
126
+ 1. [文件:行号] 问题描述
127
+ - 建议: 修复建议
128
+
129
+ ### 次要 (Minor) - 可选优化
130
+ 1. [文件:行号] 问题描述
131
+
132
+ ### 建议 (Suggestion) - 改进建议
133
+ 1. [改进建议]
134
+
135
+ ## 总结
136
+ [审查总结和最终建议]
137
+ \`\`\`
138
+
139
+ ## 最终输出
140
+
141
+ 根据审查结果,输出以下之一:
142
+
143
+ **通过:**
144
+ \`\`\`
145
+ AI_REVIEW_APPROVED
146
+ \`\`\`
147
+
148
+ **需要修改:**
149
+ \`\`\`
150
+ AI_REVIEW_NEEDS_CHANGES
151
+ 需要修复的问题:
152
+ 1. [Critical/Major 问题描述]
153
+ \`\`\`
154
+
155
+ **拒绝:**
156
+ \`\`\`
157
+ AI_REVIEW_REJECTED
158
+ 拒绝原因:
159
+ 1. [严重问题描述]
160
+ \`\`\`
161
+
162
+ ## 审查原则
163
+
164
+ 1. **平衡** - 不要过于严苛,也不要过于宽松
165
+ 2. **实用** - 关注真正重要的问题
166
+ 3. **建设性** - 提供具体的改进建议
167
+ 4. **上下文** - 考虑项目的实际情况和约束
168
+ 5. **渐进** - 允许代码渐进式改进,不要求完美
169
169
  `;
170
170
  }
171
171
  /**
172
172
  * 解析 AI Review 结果
173
173
  */
174
- parseReviewResult(output) {
174
+ parseReviewResult(taskId, output) {
175
175
  const lines = output.split('\n');
176
176
  const issues = [];
177
177
  const categories = [];
@@ -249,7 +249,7 @@ AI_REVIEW_REJECTED
249
249
  const summaryMatch = output.match(/## 总结\s*([\s\S]*?)(?=```|$)/);
250
250
  const summary = summaryMatch ? summaryMatch[1].trim() : '';
251
251
  return {
252
- taskId: '',
252
+ taskId,
253
253
  overallStatus,
254
254
  categories,
255
255
  issues,
@@ -263,64 +263,169 @@ AI_REVIEW_REJECTED
263
263
  */
264
264
  buildAcceptPrompt(task) {
265
265
  const reviewPrompt = this.buildReviewPrompt(task);
266
- return `# 验收阶段 (Accept Phase)
267
-
268
- ## 任务信息
269
- - ID: ${task.id}
270
- - 标题: ${task.title}
271
- - 描述: ${task.description}
272
-
273
- ## 验收流程
274
-
275
- ### 1. AI Code Review
276
- 执行完整的代码审查:
277
-
278
- ${reviewPrompt}
279
-
280
- ### 2. 功能验证
281
- - 确认功能按需求实现
282
- - 检查边界情况处理
283
- - 验证错误处理
284
-
285
- ### 3. 文档检查
286
- - README 是否更新
287
- - API 文档是否完整
288
- - 注释是否充分
289
-
290
- ### 4. 最终确认
291
- - 所有测试通过
292
- - AI Review 通过
293
- - 文档已更新
294
- - 可以合并
295
-
296
- ## 输出要求
297
-
298
- 在 \`.openmatrix/tasks/${task.id}/artifacts/\` 目录下创建:
299
- - \`accept-report.md\` - 验收报告
300
- - \`ai-review-report.md\` - AI 审查报告
301
-
302
- ## 结果格式
303
-
304
- 如果验收通过,输出:
305
- \`\`\`
306
- ACCEPT_PASSED
307
- \`\`\`
308
-
309
- 如果需要修改,输出:
310
- \`\`\`
311
- ACCEPT_NEEDS_MODIFICATION
312
- 修改建议:
313
- 1. [建议]
314
- 2. [建议]
315
- \`\`\`
316
-
317
- 如果验收失败,输出:
318
- \`\`\`
319
- ACCEPT_FAILED
320
- 失败原因:
321
- 1. [原因]
322
- \`\`\`
266
+ return `# 验收阶段 (Accept Phase)
267
+
268
+ ## 任务信息
269
+ - ID: ${task.id}
270
+ - 标题: ${task.title}
271
+ - 描述: ${task.description}
272
+
273
+ ## 验收流程
274
+
275
+ ### 1. AI Code Review
276
+ 执行完整的代码审查:
277
+
278
+ ${reviewPrompt}
279
+
280
+ ### 2. 功能验证
281
+ - 确认功能按需求实现
282
+ - 检查边界情况处理
283
+ - 验证错误处理
284
+
285
+ ### 3. 文档检查
286
+ - README 是否更新
287
+ - API 文档是否完整
288
+ - 注释是否充分
289
+
290
+ ### 4. 最终确认
291
+ - 所有测试通过
292
+ - AI Review 通过
293
+ - 文档已更新
294
+ - 可以合并
295
+
296
+ ## 输出要求
297
+
298
+ 在 \`.openmatrix/tasks/${task.id}/artifacts/\` 目录下创建:
299
+ - \`accept-report.md\` - 验收报告
300
+ - \`ai-review-report.md\` - AI 审查报告
301
+
302
+ ## 结果格式
303
+
304
+ 如果验收通过,输出:
305
+ \`\`\`
306
+ ACCEPT_PASSED
307
+ \`\`\`
308
+
309
+ 如果需要修改,输出:
310
+ \`\`\`
311
+ ACCEPT_NEEDS_MODIFICATION
312
+ 修改建议:
313
+ 1. [建议]
314
+ 2. [建议]
315
+ \`\`\`
316
+
317
+ 如果验收失败,输出:
318
+ \`\`\`
319
+ ACCEPT_FAILED
320
+ 失败原因:
321
+ 1. [原因]
322
+ \`\`\`
323
323
  `;
324
324
  }
325
+ /**
326
+ * 根据 Review 报告生成修复任务
327
+ *
328
+ * 对每个 critical/major 问题生成独立的修复任务,
329
+ * 这些任务会被加入执行队列并自动执行。
330
+ *
331
+ * @param originalTask 被审查的原始任务
332
+ * @param report Review 报告
333
+ * @param reviewTaskId 审查任务本身的 ID(用于依赖)
334
+ * @returns 修复任务列表
335
+ */
336
+ generateFixTasks(originalTask, report, reviewTaskId) {
337
+ const fixTasks = [];
338
+ let counter = 0;
339
+ // 只对 critical 和 major 级别的问题生成修复任务
340
+ const actionableIssues = report.issues.filter(issue => issue.severity === 'critical' || issue.severity === 'major');
341
+ // 按文件分组,减少上下文切换
342
+ const issuesByFile = new Map();
343
+ for (const issue of actionableIssues) {
344
+ const fileKey = issue.file || 'general';
345
+ if (!issuesByFile.has(fileKey)) {
346
+ issuesByFile.set(fileKey, []);
347
+ }
348
+ issuesByFile.get(fileKey).push(issue);
349
+ }
350
+ for (const [file, issues] of issuesByFile) {
351
+ counter++;
352
+ const isCritical = issues.some(i => i.severity === 'critical');
353
+ const severityLabel = isCritical ? '紧急修复' : '修复';
354
+ // 构建修复描述
355
+ const issueDetails = issues.map((issue, i) => `${i + 1}. [${issue.severity.toUpperCase()}] ${issue.description}${issue.suggestion ? ` → 建议: ${issue.suggestion}` : ''}`).join('\n');
356
+ fixTasks.push({
357
+ taskId: `${originalTask.id}-FIX-${String(counter).padStart(2, '0')}`,
358
+ title: `${severityLabel}: ${file === 'general' ? '通用问题' : file}`,
359
+ description: `# 代码修复任务
360
+
361
+ ## 来源
362
+ 由 AI Review 自动生成 — 审查任务: ${reviewTaskId}
363
+
364
+ ## 原始任务
365
+ - ID: ${originalTask.id}
366
+ - 标题: ${originalTask.title}
367
+
368
+ ## 需要修复的问题 (${issues.length} 个)
369
+
370
+ ${issueDetails}
371
+
372
+ ## 输出要求
373
+ 1. 修复上述所有问题
374
+ 2. 确保不引入新的问题
375
+ 3. 保持代码风格一致
376
+ 4. 完成后输出修复说明
377
+
378
+ ${file !== 'general' ? `\n## 目标文件\n\`${file}\`` : ''}`,
379
+ priority: isCritical ? 'P0' : 'P1',
380
+ assignedAgent: 'coder',
381
+ dependencies: [reviewTaskId],
382
+ timeout: 120000
383
+ });
384
+ }
385
+ // 修复完成后,生成一个重新验证任务
386
+ if (fixTasks.length > 0) {
387
+ fixTasks.push({
388
+ taskId: `${originalTask.id}-REVERIFY`,
389
+ title: `重新验证: ${originalTask.title}`,
390
+ description: `# 重新验证任务
391
+
392
+ ## 背景
393
+ 原始任务 ${originalTask.id} 经过 Review 后发现 ${actionableIssues.length} 个问题,已创建 ${fixTasks.length} 个修复任务。
394
+ 现在需要验证所有修复是否正确应用。
395
+
396
+ ## 验证清单
397
+ - [ ] 所有修复任务已执行
398
+ - [ ] 原 Review 报告中的 critical/major 问题已解决
399
+ - [ ] 修复没有引入新的问题
400
+ - [ ] 代码可以编译/运行
401
+ - [ ] 测试仍然通过
402
+
403
+ ## 输出
404
+ 如果验证通过,输出:
405
+ \`\`\`
406
+ REVERIFY_PASSED
407
+ 所有 ${actionableIssues.length} 个问题已修复
408
+ \`\`\`
409
+
410
+ 如果验证失败,输出:
411
+ \`\`\`
412
+ REVERIFY_FAILED
413
+ 遗留问题:
414
+ 1. [问题描述]
415
+ \`\`\``,
416
+ priority: 'P1',
417
+ assignedAgent: 'reviewer',
418
+ dependencies: [reviewTaskId, ...fixTasks.map(f => f.taskId)],
419
+ timeout: 60000
420
+ });
421
+ }
422
+ return fixTasks;
423
+ }
424
+ /**
425
+ * 判断 Review 报告是否需要自动修复
426
+ */
427
+ needsAutoFix(report) {
428
+ return report.issues.some(issue => issue.severity === 'critical' || issue.severity === 'major');
429
+ }
325
430
  }
326
431
  exports.AIReviewer = AIReviewer;
@@ -21,4 +21,5 @@ export declare function extractTasksInputFields(answers: Record<string, string |
21
21
  quality?: string;
22
22
  mode?: string;
23
23
  e2eTests?: boolean;
24
+ e2eType?: string;
24
25
  };
@@ -98,11 +98,14 @@ function extractTasksInputFields(answers) {
98
98
  if (typeof mode === 'string') {
99
99
  result.mode = mode;
100
100
  }
101
- // e2e_tests → e2eTests 布尔字段
101
+ // e2e_tests → e2eTests 布尔字段 + e2eType
102
102
  const e2e = answers['e2e_tests'] || answers['e2eTests'] || answers['E2E测试'];
103
103
  if (e2e !== undefined) {
104
104
  const e2eStr = Array.isArray(e2e) ? e2e[0] : e2e;
105
- result.e2eTests = e2eStr === 'true' || e2eStr === '启用 E2E 测试' || e2eStr === '是';
105
+ result.e2eTests = e2eStr === 'functional' || e2eStr === 'visual' || e2eStr === 'true' || e2eStr === '启用 E2E 测试' || e2eStr === '是';
106
+ if (result.e2eTests && e2eStr === 'visual') {
107
+ result.e2eType = 'visual';
108
+ }
106
109
  }
107
110
  return result;
108
111
  }
@@ -62,9 +62,10 @@ class ApprovalManager {
62
62
  };
63
63
  await this.stateManager.updateApproval(updatedApproval);
64
64
  // 如果是 meeting 类型且被批准,解除任务阻塞
65
+ // 恢复到 pending 让调度器重新调度,而非直接 in_progress
65
66
  if (approval.type === 'meeting' && decision.decision === 'approve') {
66
67
  await this.stateManager.updateTask(approval.taskId, {
67
- status: 'in_progress',
68
+ status: 'pending',
68
69
  error: null
69
70
  });
70
71
  }
@@ -79,18 +80,18 @@ class ApprovalManager {
79
80
  taskId,
80
81
  title: `🔴 阻塞问题需要解决`,
81
82
  description: `任务 ${taskId} 遇到阻塞问题`,
82
- content: `
83
- ## 阻塞原因
84
-
85
- ${blockingReason}
86
-
87
- ## 影响范围
88
-
89
- ${impactScope.map(t => `- ${t}`).join('\n')}
90
-
91
- ## 需要决策
92
-
93
- 请选择解决方案或提供自定义方案:
83
+ content: `
84
+ ## 阻塞原因
85
+
86
+ ${blockingReason}
87
+
88
+ ## 影响范围
89
+
90
+ ${impactScope.map(t => `- ${t}`).join('\n')}
91
+
92
+ ## 需要决策
93
+
94
+ 请选择解决方案或提供自定义方案:
94
95
  `.trim(),
95
96
  options: [
96
97
  { key: 'approve', label: '✅ 问题已解决,继续执行' },
@@ -40,6 +40,7 @@ export declare class OrchestratorExecutor {
40
40
  private stateMachine;
41
41
  private phaseExecutor;
42
42
  private retryManager;
43
+ private aiReviewer;
43
44
  private config;
44
45
  private taskTimers;
45
46
  constructor(stateManager: StateManager, approvalManager: ApprovalManager, config?: Partial<ExecutorConfig>);
@@ -92,12 +93,20 @@ export declare class OrchestratorExecutor {
92
93
  private handleBlockedTasks;
93
94
  /**
94
95
  * 标记任务完成
96
+ *
97
+ * 增强:对于 reviewer 任务,自动解析 Review 报告并生成修复任务
95
98
  */
96
99
  completeTask(taskId: string, result: {
97
100
  success: boolean;
98
101
  output?: string;
99
102
  error?: string;
100
- }): Promise<void>;
103
+ }): Promise<{
104
+ createdFixTasks?: string[];
105
+ }>;
106
+ /**
107
+ * 处理 Review 结果:解析报告,如有 critical/major 问题则自动创建修复任务
108
+ */
109
+ private processReviewResult;
101
110
  /**
102
111
  * 获取当前阶段
103
112
  */