feat(dev-workflow): Phase 2-9 prompt templates + orchestrator

Phase 2 头脑风暴:
- prompts/brainstorming.md - 问答策略和需求收集模板

Phase 3 方案设计:
- prompts/solution-design.md - 3个子代理启动配置

Phase 4 方案审核:
- prompts/solution-review.md - 交叉审核和综合方案生成

Phase 5 方案汇报:
- prompts/solution-report.md - 用户决策处理

Phase 6 Spec编排:
- prompts/spec-planning.md - 依赖分析和分波计划

Phase 7 并行开发:
- prompts/parallel-development.md - 波次执行逻辑

Phase 8 测试:
- prompts/testing.md - 测试框架检测和重试逻辑

Phase 9 代码审查:
- prompts/code-review.md - 3个子代理独立审查

Phase 10 修复验证:
- prompts/fix-verification.md - 修复循环和最终汇报

主编排器:
- orchestrator.py - 9阶段协调逻辑
- 状态管理和恢复机制
This commit is contained in:
2026-03-09 19:04:22 +08:00
parent d19062fc1e
commit 8cc6fa2354
12 changed files with 2176 additions and 4 deletions
+305
View File
@@ -0,0 +1,305 @@
#!/usr/bin/env python3
"""
dev-workflow 主编排器
负责协调整个9阶段开发流程。
Usage:
python3 orchestrator.py --init "开始开发一个用户登录功能"
python3 orchestrator.py --resume
python3 orchestrator.py --status
"""
import argparse
import json
import subprocess
import sys
from datetime import datetime
from pathlib import Path
from typing import Any, Optional
# 添加 prompts 目录到路径
sys.path.insert(0, str(Path(__file__).parent))
from state_manager import (
load_state,
save_state,
init_state,
get_status,
set_phase,
complete_phase,
update_phase_data,
increment_retry,
reset_retry
)
class DevWorkflowOrchestrator:
"""dev-workflow 主编排器"""
def __init__(self, project_root: Path = None):
self.project_root = project_root or Path.cwd()
self.planning_dir = self.project_root / ".planning" / "dev-workflow"
self.state = None
def initialize(self, trigger_message: str, project_name: str = None):
"""初始化工作流"""
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► 初始化")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
# 创建目录结构
self.planning_dir.mkdir(parents=True, exist_ok=True)
(self.planning_dir / "solutions").mkdir(exist_ok=True)
(self.planning_dir / "reviews").mkdir(exist_ok=True)
(self.planning_dir / "development").mkdir(exist_ok=True)
(self.planning_dir / "code-review").mkdir(exist_ok=True)
# 初始化状态
self.state = init_state(project_name, trigger_message)
print(f"✅ 工作流已初始化")
print(f" 触发消息: {trigger_message}")
print(f" 工作目录: {self.planning_dir}")
return self.state
def load_state(self) -> dict:
"""加载当前状态"""
self.state = load_state()
return self.state
def run_phase_1(self):
"""阶段1: 头脑风暴"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 1: 头脑风暴")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(1)
print("\n开始需求收集问答...")
print("提示: 您可以随时说'够了'结束问答\n")
# 这里应该启动交互式问答
# 由于这是编排器,实际问答由主Agent执行
# 这里只记录状态
questions = [
"请描述您想要开发什么?",
"这个项目解决什么问题?",
"核心功能有哪些?",
"技术栈偏好?",
"有什么约束条件?"
]
requirements = {
"questions_asked": questions,
"collected": False
}
update_phase_data(1, requirements)
print("\n等待主Agent完成问答...")
return {"phase": 1, "status": "waiting_for_input"}
def run_phase_2(self, requirements_summary: str):
"""阶段2: 方案设计"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 2: 方案设计")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(2)
print("\n◆ 启动3个方案设计子代理...")
agents = [
{"id": "A", "type": "general", "focus": "完整通用方案"},
{"id": "B", "type": "practical", "focus": "实用快速方案"},
{"id": "C", "type": "creative", "focus": "创新探索方案"}
]
# 这里应该实际启动子代理
# 由于编排器只负责协调,实际子代理由主Agent启动
results = {
"agents": agents,
"output_files": [
"solutions/solution-A.md",
"solutions/solution-B.md",
"solutions/solution-C.md"
],
"status": "waiting_for_agents"
}
update_phase_data(2, results)
print(" → Agent A: 通用型方案")
print(" → Agent B: 实用型方案")
print(" → Agent C: 创新型方案")
return {"phase": 2, "status": "waiting_for_agents", "agents": agents}
def run_phase_3(self):
"""阶段3: 方案审核"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 3: 方案审核")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(3)
print("\n◆ 启动交叉审核...")
print(" → Agent A 审核 B, C 的方案")
print(" → Agent B 审核 A, C 的方案")
print(" → Agent C 审核 A, B 的方案")
results = {
"review_files": [
"reviews/review-A.md",
"reviews/review-B.md",
"reviews/review-C.md"
],
"final_solution": "final-solution.md",
"status": "waiting_for_agents"
}
update_phase_data(3, results)
return {"phase": 3, "status": "waiting_for_agents"}
def run_phase_4(self):
"""阶段4: 方案汇报"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 4: 方案汇报")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(4)
print("\n等待用户决策...")
print(" A. 批准方案 - 进入开发阶段")
print(" B. 需要修改 - 调整方案")
print(" C. 重新设计 - 重新方案")
return {"phase": 4, "status": "waiting_for_user_decision"}
def run_phase_5(self):
"""阶段5: Spec编排"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 5: Spec编排")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(5)
print("\n◆ 生成开发规格...")
print("◆ 分析任务依赖...")
print("◆ 生成分波计划...")
return {"phase": 5, "status": "processing"}
def run_phase_6(self):
"""阶段6: 并行开发"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 6: 并行开发")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(6)
print("\n◆ 按波次启动开发子代理...")
return {"phase": 6, "status": "waiting_for_agents"}
def run_phase_7(self):
"""阶段7: 测试"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 7: 测试")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(7)
print("\n◆ 运行测试...")
return {"phase": 7, "status": "running_tests"}
def run_phase_8(self):
"""阶段8: 代码审查"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 8: 代码审查")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(8)
print("\n◆ 启动3个代码审查子代理...")
return {"phase": 8, "status": "waiting_for_agents"}
def run_phase_9(self):
"""阶段9: 修复验证"""
print("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(" DEV-WORKFLOW ► Phase 9: 修复验证")
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
set_phase(9)
print("\n◆ 汇总问题...")
print("◆ 安排修复...")
print("◆ 验证完成...")
return {"phase": 9, "status": "processing"}
def get_status(self) -> str:
"""获取当前状态"""
return get_status()
def resume(self):
"""从当前状态恢复"""
state = self.load_state()
phase = state.get("current_phase", 1)
print(f"\n恢复到阶段 {phase}: {state.get('current_stage', '未知')}")
# 根据当前阶段调用对应方法
method_name = f"run_phase_{phase}"
if hasattr(self, method_name):
return getattr(self, method_name)()
else:
print(f"❌ 未知阶段: {phase}")
return None
def main():
parser = argparse.ArgumentParser(description="dev-workflow 主编排器")
parser.add_argument("--init", type=str, metavar="MESSAGE",
help="初始化工作流,提供触发消息")
parser.add_argument("--resume", action="store_true",
help="从上次状态恢复")
parser.add_argument("--status", action="store_true",
help="显示当前状态")
parser.add_argument("--project-name", type=str,
help="项目名称")
parser.add_argument("--phase", type=int, metavar="N",
help="执行指定阶段")
args = parser.parse_args()
orchestrator = DevWorkflowOrchestrator()
if args.init:
orchestrator.initialize(args.init, args.project_name)
orchestrator.run_phase_1()
elif args.resume:
orchestrator.resume()
elif args.status:
print(orchestrator.get_status())
elif args.phase:
method_name = f"run_phase_{args.phase}"
if hasattr(orchestrator, method_name):
getattr(orchestrator, method_name)()
else:
print(f"❌ 无效的阶段: {args.phase}")
else:
parser.print_help()
if __name__ == "__main__":
main()
+175
View File
@@ -0,0 +1,175 @@
# 头脑风暴阶段 Prompt 模板
## 问答策略
主Agent作为问答引导者,通过系统性提问收集足够开发的信息。
### 问答维度
1. **项目定位** - 这是什么项目?解决什么问题?
2. **目标用户** - 谁会使用?使用场景是什么?
3. **功能需求** - 核心功能有哪些?优先级如何?
4. **技术约束** - 技术栈?平台?依赖?
5. **非功能需求** - 性能?安全?可扩展性?
6. **边界条件** - 不做什么?已知限制?
7. **验收标准** - 怎样算完成?如何测试?
### 问答流程
```
┌─────────────────────────────────────────────────────────────┐
│ 头脑风暴问答循环 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 开放式启动 │
│ "请描述您想要开发什么?" │
│ ↓ │
│ 2. 跟进深挖 │
│ 根据回答,选择下一个维度深入提问 │
│ - 功能细节 → "具体来说,[功能]应该如何工作?" │
│ - 技术选择 → "为什么选择[技术]?有其他选项吗?" │
│ - 边界条件 → "如果[场景],应该如何处理?" │
│ ↓ │
│ 3. 确认理解 │
│ "我理解是...,对吗?" │
│ ↓ │
│ 4. 继续或结束 │
│ - 有遗漏 → 回到步骤2 │
│ - 足够完整 → "我认为信息足够了,准备生成需求摘要" │
│ - 用户说"够了" → 生成需求摘要 │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 问题模板
#### 项目定位
```
- "请描述您想要开发什么?"
- "这个项目解决什么问题?"
- "为什么现在要做这个?"
- "成功后是什么样子?"
```
#### 目标用户
```
- "谁会使用这个产品?"
- "他们的主要使用场景是什么?"
- "他们目前是如何解决这个问题的?"
- "这个产品对他们最大的价值是什么?"
```
#### 功能需求
```
- "核心功能有哪些?请按重要性排序"
- "[功能]具体应该做什么?"
- "用户如何使用[功能]?请描述完整流程"
- "[功能]有什么特殊情况需要处理?"
- "有没有可选功能或未来扩展?"
```
#### 技术约束
```
- "您希望使用什么技术栈?"
- "有什么必须使用的库或框架?"
- "需要支持哪些平台?"
- "有什么性能要求?"
- "有现有的代码库需要集成吗?"
```
#### 非功能需求
```
- "对性能有什么要求?响应时间?并发量?"
- "有什么安全要求?"
- "需要支持多大规模的数据/用户?"
- "对可维护性有什么期望?"
```
#### 边界条件
```
- "有什么是明确不做的?"
- "有没有已知的限制?"
- "有什么技术难点或风险?"
- "有没有时间或资源限制?"
```
#### 验收标准
```
- "怎样算开发完成?"
- "如何验证功能正确?"
- "需要什么样的测试?"
- "交付物应该包含什么?"
```
### 需求摘要模板
问答结束后,生成需求摘要并保存:
```markdown
# 需求摘要
## 项目概述
- **名称**: [项目名]
- **描述**: [一句话描述]
- **核心价值**: [最重要的价值]
## 功能需求
### 核心功能 (Must Have)
1. [功能1] - [描述]
2. [功能2] - [描述]
### 可选功能 (Nice to Have)
1. [功能1] - [描述]
## 技术要求
- **语言**: [编程语言]
- **框架**: [框架]
- **依赖**: [依赖库]
## 非功能需求
- **性能**: [要求]
- **安全**: [要求]
- **其他**: [要求]
## 约束条件
- [约束1]
- [约束2]
## 验收标准
- [ ] [标准1]
- [ ] [标准2]
## 不在范围内
- [排除1] - [原因]
```
### 结束条件
满足以下条件时可以结束头脑风暴:
1. **功能清晰** - 核心功能明确,每个功能有具体描述
2. **技术确定** - 技术栈已确定或有明确选择方向
3. **边界清晰** - 做什么和不做什么已明确
4. **可验收** - 有明确的验收标准
### 保存结果
将需求摘要保存到:
- `.planning/dev-workflow/requirements.json` (结构化数据)
- `.planning/dev-workflow/requirements.md` (可读文档)
更新状态:
```json
{
"phases": {
"1": {
"status": "completed",
"data": {
"questions_asked": 10,
"requirements_collected": true
}
}
}
}
```
+246
View File
@@ -0,0 +1,246 @@
# 代码审查阶段 Prompt 模板
## 目标
启动3个子代理独立完整审查代码,发现问题并提出改进建议。
## 审查子代理 Prompt
```
你是一个资深代码审查专家。请对以下代码变更进行完整审查。
## 项目信息
- 项目名称: {project_name}
- 审查范围: 本次开发的所有变更
## 变更文件列表
{changed_files_list}
## 变更详情
{changes_diff}
## 审查要求
请进行**完整、独立**的代码审查,覆盖以下所有维度:
### 1. 代码质量
- 命名是否清晰、一致
- 代码结构是否合理
- 是否有重复代码
- 是否有过度复杂的设计
### 2. 功能正确性
- 代码是否实现了预期功能
- 边界条件是否处理
- 错误处理是否完善
### 3. 性能
- 是否有性能问题
- 是否有不必要的计算
- 是否有内存泄漏风险
### 4. 安全性
- 是否有安全漏洞
- 敏感数据处理是否安全
- 输入验证是否完善
### 5. 可维护性
- 代码是否易于理解
- 是否有足够的注释
- 是否符合项目规范
### 6. 测试覆盖
- 测试是否充分
- 是否有遗漏的测试场景
## 输出格式
```markdown
# 代码审查报告
## 审查信息
- 审查者: Agent {A/B/C}
- 审查时间: {timestamp}
- 审查文件数: {file_count}
## 发现的问题
### 严重问题 (必须修复)
#### ISSUE-001: {issue_title}
- **文件**: {file_path}
- **行号**: {line_number}
- **问题**: {description}
- **影响**: {impact}
- **建议修复**: {suggestion}
#### ISSUE-002: ...
---
### 一般问题 (建议修复)
#### ISSUE-003: {issue_title}
- **文件**: {file_path}
- **问题描述**: {description}
- **建议**: {suggestion}
---
### 改进建议 (可选)
#### SUGGEST-001: {suggestion_title}
- **当前实现**: {current}
- **建议改进**: {improvement}
- **收益**: {benefit}
---
## 代码亮点
1. {highlight_1}
2. {highlight_2}
## 总结
- 严重问题: {critical_count}
- 一般问题: {major_count}
- 改进建议: {suggestion_count}
**整体评价**: 优秀/良好/需改进/不合格
## 审查结论
- [ ] 可以合并
- [ ] 需要修复后合并
- [ ] 需要重大修改
```
请仔细审查每一行代码,不要遗漏任何潜在问题。
```
## 三个审查子代理
```python
def spawn_review_agents(changes: dict) -> list:
"""启动3个代码审查子代理"""
agents = [
{"id": "X", "focus": "全面审查"},
{"id": "Y", "focus": "全面审查"},
{"id": "Z", "focus": "全面审查"}
]
results = []
for agent in agents:
prompt = build_review_prompt(changes, agent)
result = spawn_subagent(
task=f"代码审查 - Agent {agent['id']}",
prompt=prompt,
output_file=f".planning/dev-workflow/code-review/review-{agent['id']}.md"
)
results.append(result)
return results
```
## 问题汇总
主代理收集三个审查结果后,汇总问题:
```python
def consolidate_issues(reviews: list) -> dict:
"""汇总三个审查的问题"""
all_issues = {
"critical": [],
"major": [],
"suggestion": []
}
for review in reviews:
for issue in review.get("issues", []):
# 检查是否已存在相同问题
existing = find_similar_issue(issue, all_issues[issue["severity"]])
if existing:
# 多个审查者发现同一问题,增加权重
existing["found_by"].append(review["agent_id"])
existing["confidence"] += 1
else:
issue["found_by"] = [review["agent_id"]]
issue["confidence"] = 1
all_issues[issue["severity"]].append(issue)
# 按置信度排序
for severity in all_issues:
all_issues[severity].sort(key=lambda x: x["confidence"], reverse=True)
return all_issues
```
## 问题汇总报告
```markdown
# 代码审查汇总
## 统计
| 审查者 | 严重 | 一般 | 建议 |
|--------|------|------|------|
| Agent X | 2 | 3 | 5 |
| Agent Y | 1 | 4 | 3 |
| Agent Z | 2 | 2 | 6 |
## 严重问题 (3个,多人确认)
### ISSUE-CRIT-001: SQL注入风险 (X, Y, Z 都发现)
- **文件**: src/db/queries.py:45
- **问题**: 用户输入未转义直接拼接到SQL
- **建议**: 使用参数化查询
### ISSUE-CRIT-002: 空指针异常 (X, Z 发现)
- **文件**: src/services/user.py:120
- **问题**: 未检查返回值是否为None
- **建议**: 添加空值检查
---
## 一般问题 (5个)
### ISSUE-MAJ-001: 命名不规范 (Y 发现)
...
---
## 改进建议 (8个)
### SUGGEST-001: 可以提取公共函数 (X, Z 发现)
...
---
## 下一步
需要修复 **3个严重问题** 和 **5个一般问题**
```
## 状态更新
```json
{
"phases": {
"8": {
"status": "completed",
"issues": {
"critical": 3,
"major": 5,
"suggestion": 8
},
"reviews": ["review-X.md", "review-Y.md", "review-Z.md"]
}
}
}
```
+284
View File
@@ -0,0 +1,284 @@
# 修复验证阶段 Prompt 模板
## 目标
汇总审查问题,安排修复,验证完成,最终汇报。
## 流程
```
┌─────────────────────────────────────────────────────────────┐
│ 修复验证流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 汇总问题 │
│ └→ 按优先级排序 │
│ ↓ │
│ 2. 分配修复任务 │
│ └→ 启动修复子代理 │
│ ↓ │
│ 3. 修复执行 │
│ └→ 子代理修复问题 │
│ ↓ │
│ 4. 验证修复 │
│ └→ 启动验证子代理 │
│ ↓ │
│ ┌───────────────────────────────────────┐ │
│ │ 验证结果 │ │
│ ├───────────────────────────────────────┤ │
│ │ 通过 → 生成最终报告 │ │
│ │ 失败 → 重试修复(最多3次) │ │
│ └───────────────────────────────────────┘ │
│ ↓ │
│ 5. 最终汇报 │
│ └→ 向用户展示完整结果 │
│ │
└─────────────────────────────────────────────────────────────┘
```
## 修复子代理 Prompt
```
你是一个代码修复专家。请修复以下问题。
## 问题列表
### 必须修复 (严重问题)
{critical_issues}
### 建议修复 (一般问题)
{major_issues}
## 项目上下文
{project_context}
## 修复要求
1. **保持代码风格一致**
2. **不引入新问题**
3. **添加必要的测试**
4. **更新相关文档**
## 输出格式
```markdown
# 修复报告
## 修复的问题
### ISSUE-CRIT-001: {issue_title}
- **修复方式**: {fix_description}
- **修改文件**: {files_changed}
- **新增测试**: {new_tests}
### ISSUE-CRIT-002: ...
## 修改的文件
- {file_1}: [修改说明]
- {file_2}: [修改说明]
## 验证
- 运行测试: {test_result}
- 手动验证: {manual_verification}
## 遗留问题
- [如有未能修复的问题]
```
请修复所有严重问题,尽量修复一般问题。
```
## 验证子代理 Prompt
```
你是一个质量保证专家。请验证以下问题是否已正确修复。
## 原始问题
{original_issues}
## 修复内容
{fix_reports}
## 验证任务
1. **检查代码** - 确认修复代码存在且正确
2. **运行测试** - 确认测试通过
3. **验证功能** - 确认问题不再出现
4. **检查副作用** - 确认没有引入新问题
## 输出格式
```markdown
# 验证报告
## 验证结果
| 问题ID | 原问题 | 验证结果 | 说明 |
|--------|--------|----------|------|
| ISSUE-CRIT-001 | SQL注入 | ✅ 已修复 | 使用参数化查询 |
| ISSUE-CRIT-002 | 空指针 | ✅ 已修复 | 添加空值检查 |
| ISSUE-MAJ-001 | 命名 | ✅ 已修复 | 重命名变量 |
## 测试结果
- 运行测试: {total} 个
- 通过: {passed} 个
- 失败: {failed} 个
## 回归检查
- [ ] 原有功能正常
- [ ] 新功能正常
- [ ] 无新引入问题
## 结论
- [ ] 所有严重问题已修复
- [ ] 测试全部通过
- [ ] 代码质量达标
**验证结果**: 通过 / 不通过
## 遗留问题
- [如有未通过的问题]
```
请严格验证每个修复。
```
## 修复循环逻辑
```python
def fix_and_verify(issues: dict, max_retries: int = 3) -> dict:
"""修复并验证问题"""
for attempt in range(1, max_retries + 1):
print(f"\n修复尝试 {attempt}/{max_retries}")
# 1. 启动修复子代理
fix_result = spawn_fix_agent(issues)
if fix_result["status"] != "success":
print("修复子代理执行失败")
continue
# 2. 启动验证子代理
verify_result = spawn_verify_agent(issues, fix_result)
if verify_result["passed"]:
print("✅ 验证通过")
return {
"status": "success",
"fixes": fix_result,
"verification": verify_result
}
print(f"⚠️ 验证失败: {verify_result['remaining_issues']}")
# 更新剩余问题
issues = verify_result["remaining_issues"]
print(f"❌ 已达到最大重试次数 ({max_retries})")
return {
"status": "failed",
"remaining_issues": issues
}
```
## 最终汇报模板
```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DEV-WORKFLOW ► 开发完成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## 项目: {project_name}
### 完成摘要
| 阶段 | 状态 | 耗时 |
|------|------|------|
| 1. 头脑风暴 | ✓ 完成 | 5min |
| 2. 方案设计 | ✓ 完成 | 10min |
| 3. 方案审核 | ✓ 完成 | 8min |
| 4. 方案汇报 | ✓ 完成 | 2min |
| 5. Spec编排 | ✓ 完成 | 5min |
| 6. 并行开发 | ✓ 完成 | 30min |
| 7. 测试 | ✓ 完成 | 5min |
| 8. 代码审查 | ✓ 完成 | 10min |
| 9. 修复验证 | ✓ 完成 | 8min |
**总耗时**: {total_time}
### 交付物
**文件变更**:
- 新建: {new_files_count} 个文件
- 修改: {modified_files_count} 个文件
- 删除: {deleted_files_count} 个文件
**测试覆盖**:
- 单元测试: {unit_tests} 个
- 集成测试: {integration_tests} 个
- 覆盖率: {coverage}%
**代码质量**:
- 严重问题: 0 (已全部修复)
- 一般问题: 0 (已全部修复)
- 代码审查: 通过
### 遗留事项
{remaining_items}
### 后续建议
{recommendations}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎉 开发任务已完成!
详细文档: `.planning/dev-workflow/`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## 状态更新
```json
{
"current_phase": 9,
"current_stage": "completed",
"phases": {
"9": {
"status": "completed",
"fixes": {
"critical_fixed": 3,
"major_fixed": 5,
"retry_count": 1
},
"verification": {
"passed": true,
"timestamp": "2026-03-09T20:00:00+08:00"
}
}
},
"completed_at": "2026-03-09T20:00:00+08:00"
}
```
## 文档归档
完成后,将所有文档归档:
```
.planning/dev-workflow/
├── state.json # 最终状态
├── requirements.json # 需求文档
├── final-solution.md # 最终方案
├── spec.md # 开发规格
├── execution-plan.json # 执行计划
├── test-results.json # 测试结果
├── code-review/ # 代码审查
│ ├── review-X.md
│ ├── review-Y.md
│ └── review-Z.md
└── final-report.md # 最终报告
```
@@ -0,0 +1,222 @@
# 并行开发阶段 Prompt 模板
## 目标
按波次启动子代理执行开发任务,同波内并行执行,波间串行。
## 开发子代理 Prompt
```
你是一个专业的开发者。请实现以下任务。
## 任务信息
**任务ID**: {task_id}
**任务名称**: {task_name}
## 任务描述
{task_description}
## 输入
{task_inputs}
## 输出要求
{task_outputs}
## 实现要点
{implementation_points}
## 验收标准
{acceptance_criteria}
## 项目上下文
### 技术栈
{tech_stack}
### 文件结构
{file_structure}
### 相关文件
{related_files}
## 开发要求
1. **代码质量**
- 遵循项目代码规范
- 添加必要的注释
- 编写清晰的函数/变量命名
2. **测试**
- 为新代码编写单元测试
- 测试文件放在 tests/ 目录
3. **文档**
- 更新相关文档
- 添加必要的 docstring
4. **提交**
- 完成后说明修改了哪些文件
- 列出主要改动点
## 输出格式
完成后请输出:
```markdown
# 任务完成报告
## 任务: {task_id} - {task_name}
## 修改的文件
- {file_1}: [改动说明]
- {file_2}: [改动说明]
## 主要实现
1. [实现点1]
2. [实现点2]
## 测试
- 新增测试: {test_files}
- 测试通过: 是/否
## 注意事项
- [需要注意的点]
## 遗留问题
- [如有未完成的部分]
```
请开始开发。
```
## 波次执行逻辑
```python
import subprocess
import json
from concurrent.futures import ThreadPoolExecutor, as_completed
def execute_wave(wave_num: int, tasks: list, spec: dict):
"""执行一个波次的开发任务"""
print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
print(f" WAVE {wave_num} - 并行执行 {len(tasks)} 个任务")
print(f"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
results = []
with ThreadPoolExecutor(max_workers=len(tasks)) as executor:
futures = {}
for task_id in tasks:
task = spec["tasks"][task_id]
# 构建子代理 prompt
prompt = build_developer_prompt(task, spec)
# 提交子代理任务
future = executor.submit(
spawn_developer_agent,
task_id=task_id,
prompt=prompt
)
futures[future] = task_id
# 收集结果
for future in as_completed(futures):
task_id = futures[future]
try:
result = future.result()
results.append({
"task_id": task_id,
"status": "success",
"output": result
})
print(f" ✓ {task_id} 完成")
except Exception as e:
results.append({
"task_id": task_id,
"status": "failed",
"error": str(e)
})
print(f" ✗ {task_id} 失败: {e}")
return results
def execute_all_waves(execution_plan: dict, spec: dict):
"""执行所有波次"""
all_results = {}
for wave_num in sorted(execution_plan.keys()):
wave_key = f"wave_{wave_num}"
tasks = execution_plan[wave_key]
wave_results = execute_wave(wave_num, tasks, spec)
all_results[wave_key] = wave_results
# 检查是否有失败
failed = [r for r in wave_results if r["status"] == "failed"]
if failed:
print(f"\n⚠️ Wave {wave_num} 有 {len(failed)} 个任务失败")
# 可以选择重试或停止
return all_results
```
## 子代理启动
```python
def spawn_developer_agent(task_id: str, prompt: str) -> str:
"""启动开发子代理"""
# 使用 sessions_spawn 启动子代理
result = subprocess.run([
"openclaw", "agent", "spawn",
"--task", prompt,
"--cwd", get_project_root(),
"--timeout", "1800", # 30分钟超时
"--output", f".planning/dev-workflow/development/{task_id}.json"
], capture_output=True, text=True)
if result.returncode != 0:
raise Exception(f"子代理启动失败: {result.stderr}")
return result.stdout
```
## 进度监控
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DEV-WORKFLOW ► 开发进度
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Wave 1: ✓✓✓ (3/3 完成)
Wave 2: ✓→○ (1/3 进行中)
Wave 3: ○○ (0/2 等待中)
总进度: 4/8 任务 (50%)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## 状态更新
```json
{
"phases": {
"6": {
"status": "completed",
"waves": {
"wave_1": {"status": "completed", "tasks": ["TASK-001", "TASK-002", "TASK-003"]},
"wave_2": {"status": "completed", "tasks": ["TASK-004", "TASK-005"]},
"wave_3": {"status": "completed", "tasks": ["TASK-006", "TASK-007", "TASK-008"]}
},
"total_tasks": 8,
"completed_tasks": 8
}
}
}
```
+215
View File
@@ -0,0 +1,215 @@
# 方案设计阶段 Prompt 模板
## 目标
启动3个子代理并行设计方案,每个子代理独立思考,探索不同的实现路径。
## 子代理启动配置
### 子代理 A - 通用型方案
```
你是一个方案设计专家。请基于以下需求,设计一个实现方案。
## 项目背景
{requirements_summary}
## 设计要求
1. 提供完整的技术方案
2. 包含架构设计、数据流、关键算法
3. 考虑可扩展性和可维护性
4. 列出需要创建的文件和目录结构
5. 估算开发复杂度
## 输出格式
```markdown
# 方案设计 - [方案名称]
## 概述
[一句话描述方案特点]
## 技术选型
- 语言:
- 框架:
- 关键依赖:
## 架构设计
[架构图或描述]
## 核心模块
1. [模块1]
- 职责:
- 接口:
- 依赖:
2. [模块2]
...
## 数据流
[数据如何在模块间流动]
## 关键算法/逻辑
[核心算法或业务逻辑]
## 文件结构
```
项目根目录/
├── 文件1
├── 目录/
│ └── 文件2
```
## 开发步骤
1. [步骤1]
2. [步骤2]
## 风险和挑战
- [风险1]: [应对策略]
## 复杂度评估
- 预计文件数:
- 预计代码行数:
- 开发难度: 低/中/高
```
请自由发挥,不必拘泥于常规方案。
```
### 子代理 B - 实用型方案
```
你是一个务实的工程师。请基于以下需求,设计一个**最实用、最快速实现**的方案。
## 项目背景
{requirements_summary}
## 设计原则
1. 优先选择成熟、稳定的技术
2. 尽量复用现有库,减少自研
3. 代码简洁,易于理解和维护
4. 快速交付,迭代优化
## 输出格式
[同上]
请专注于**实用性**,避免过度设计。
```
### 子代理 C - 创新型方案
```
你是一个创新探索者。请基于以下需求,设计一个**有创意、有突破**的方案。
## 项目背景
{requirements_summary}
## 设计原则
1. 可以尝试新技术、新架构
2. 不必拘泥于传统实现方式
3. 考虑未来的可扩展性
4. 允许有一定风险,但需说明
## 输出格式
[同上]
请大胆探索,提供**与众不同的思路**。
```
## 子代理启动命令
```python
# 主代理执行
import subprocess
import json
def spawn_design_agents(requirements_summary: str):
"""启动3个方案设计子代理"""
agents = [
{"id": "A", "type": "general", "focus": "完整通用方案"},
{"id": "B", "type": "practical", "focus": "实用快速方案"},
{"id": "C", "type": "creative", "focus": "创新探索方案"}
]
results = []
for agent in agents:
prompt = get_prompt_template(agent["type"]).format(
requirements_summary=requirements_summary
)
# 使用 sessions_spawn 启动子代理
result = subprocess.run([
"openclaw", "agent", "spawn",
"--prompt", prompt,
"--model", "g5", # 使用高质量模型
"--output", f".planning/dev-workflow/solutions/solution-{agent['id']}.md"
], capture_output=True, text=True)
results.append({
"agent_id": agent["id"],
"output_file": f"solution-{agent['id']}.md",
"status": "success" if result.returncode == 0 else "failed"
})
return results
```
## 输出文件
每个子代理输出保存到:
- `.planning/dev-workflow/solutions/solution-A.md`
- `.planning/dev-workflow/solutions/solution-B.md`
- `.planning/dev-workflow/solutions/solution-C.md`
## 主代理汇总
所有子代理完成后,主代理生成方案对比:
```markdown
# 方案对比摘要
## 方案概览
| 维度 | 方案A (通用型) | 方案B (实用型) | 方案C (创新型) |
|------|---------------|---------------|---------------|
| 特点 | 完整、规范 | 快速、实用 | 创新、突破 |
| 复杂度 | 中 | 低 | 高 |
| 风险 | 低 | 低 | 中 |
| 开发周期 | 中 | 短 | 长 |
## 各方案亮点
### 方案A
- [亮点1]
- [亮点2]
### 方案B
- [亮点1]
- [亮点2]
### 方案C
- [亮点1]
- [亮点2]
## 推荐
[主代理的初步推荐,供审核阶段参考]
```
## 状态更新
```json
{
"phases": {
"2": {
"status": "completed",
"agents": ["A", "B", "C"],
"data": {
"solutions": ["solution-A.md", "solution-B.md", "solution-C.md"],
"comparison": "comparison.md"
}
}
}
}
```
+136
View File
@@ -0,0 +1,136 @@
# 方案汇报阶段 Prompt 模板
## 目标
向用户展示综合方案,获取用户决策:批准 / 修改 / 重新设计。
## 汇报格式
```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DEV-WORKFLOW ► 方案汇报
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## 项目: {project_name}
### 需求摘要
{requirements_summary_brief}
### 综合方案概述
{final_solution_summary}
### 关键技术决策
| 决策点 | 选择 | 理由 |
|--------|------|------|
| {decision_1} | {choice_1} | {reason_1} |
| {decision_2} | {choice_2} | {reason_2} |
### 架构概览
{architecture_brief}
### 开发计划
{development_plan_brief}
### 预计工作量
- 文件数: {file_count}
- 预计开发时间: {estimated_time}
- 复杂度: {complexity}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## 请选择:
**A. 批准方案** - 进入开发阶段
**B. 需要修改** - 请告诉我需要调整的地方
**C. 重新设计** - 对方案不满意,重新设计方案
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## 用户决策处理
### 批准 (A)
```json
{
"phases": {
"4": {
"status": "completed",
"user_decision": "approved",
"approved_at": "2026-03-09T19:00:00+08:00"
}
}
}
```
进入 Phase 5: Spec编排
### 需要修改 (B)
1. 收集用户修改意见
2. 更新需求文件
3. 回到 Phase 2 或 Phase 3(根据修改范围)
4. 重新生成方案
```json
{
"phases": {
"4": {
"status": "revision_requested",
"user_feedback": "用户的具体修改意见",
"revision_count": 1
}
}
}
```
### 重新设计 (C)
1. 记录用户不满意的原因
2. 回到 Phase 2 重新收集需求
3. 或回到 Phase 3 重新设计方案
```json
{
"phases": {
"4": {
"status": "redesign_requested",
"user_feedback": "用户不满意的原因",
"redesign_count": 1
}
}
}
```
## 汇报要点
向用户汇报时,重点展示:
1. **核心决策** - 最关键的技术选择
2. **架构图** - 系统结构可视化
3. **文件清单** - 将要创建的文件
4. **开发步骤** - 如何一步步实现
5. **风险评估** - 可能的问题和应对
## 决策引导
如果用户犹豫,可以引导:
```
您可能关心的问题:
1. "为什么选择这个技术栈?"
→ [解释选择理由]
2. "有没有更简单的方案?"
→ [对比方案复杂度]
3. "开发周期大概多久?"
→ [估算工作量]
4. "有什么风险?"
→ [列出风险和应对]
```
+200
View File
@@ -0,0 +1,200 @@
# 方案审核阶段 Prompt 模板
## 目标
每个子代理审核其他两个方案,发现问题、提出改进建议,最终达成综合方案。
## 交叉审核矩阵
```
┌─────────────┬───────────────┬───────────────┬───────────────┐
│ 审核者 │ 审核方案A │ 审核方案B │ 审核方案C │
├─────────────┼───────────────┼───────────────┼───────────────┤
│ Agent A │ — │ ✓ │ ✓ │
│ Agent B │ ✓ │ — │ ✓ │
│ Agent C │ ✓ │ ✓ │ — │
└─────────────┴───────────────┴───────────────┴───────────────┘
```
## 审核子代理 Prompt
```
你是一个代码审核专家。请审核以下两个技术方案,并提供专业的评审意见。
## 原始需求
{requirements_summary}
## 待审核方案
### 方案 1
{solution_1_content}
### 方案 2
{solution_2_content}
## 审核维度
请从以下维度进行审核:
### 1. 完整性
- 是否覆盖了所有需求?
- 有没有遗漏的功能点?
- 边界条件是否考虑周全?
### 2. 可行性
- 技术方案是否可行?
- 有没有技术风险?
- 依赖是否稳定可靠?
### 3. 可维护性
- 代码结构是否清晰?
- 是否易于理解和修改?
- 是否有足够的文档?
### 4. 性能
- 是否满足性能要求?
- 有没有性能瓶颈?
- 是否有优化空间?
### 5. 安全性
- 是否有安全风险?
- 敏感数据如何处理?
- 权限控制是否完善?
## 输出格式
```markdown
# 方案审核报告
## 审核: [方案1名称] vs [方案2名称]
### 方案1 评审
#### 优点
1. [优点1]
2. [优点2]
#### 缺点
1. [缺点1]
2. [缺点2]
#### 改进建议
1. [建议1]
2. [建议2]
#### 评分 (1-10)
- 完整性:
- 可行性:
- 可维护性:
- 性能:
- 安全性:
- **总分**:
---
### 方案2 评审
[同上结构]
---
## 对比结论
### 更推荐哪个方案?
[选择] 及原因
### 两个方案可以融合的点
1. [融合点1]
2. [融合点2]
### 需要额外关注的风险
1. [风险1]
```
请客观、专业地进行审核。
```
## 审核结果收集
每个审核子代理输出保存到:
- `.planning/dev-workflow/reviews/review-A.md` (A审核BC)
- `.planning/dev-workflow/reviews/review-B.md` (B审核AC)
- `.planning/dev-workflow/reviews/review-C.md` (C审核AB)
## 综合方案生成
主代理收集所有审核意见后,生成综合方案:
```
你是一个技术决策者。请基于以下信息,生成一个综合最佳方案。
## 原始需求
{requirements_summary}
## 三个初始方案
{all_solutions}
## 三份审核意见
{all_reviews}
## 任务
1. 分析每个方案的优缺点
2. 提取各方案的亮点
3. 融合成一个综合方案
4. 确保综合方案覆盖所有需求
5. 说明融合决策的理由
## 输出格式
```markdown
# 综合技术方案
## 方案概述
[综合方案的核心思路]
## 融合决策
| 决策点 | 选择来源 | 理由 |
|--------|---------|------|
| [决策1] | 方案A | [为什么选A] |
| [决策2] | 方案B | [为什么选B] |
## 技术选型
[最终确定的技术栈]
## 架构设计
[综合后的架构]
## 核心模块
[综合后的模块设计]
## 文件结构
[最终的文件结构]
## 开发计划
[开发步骤]
## 风险与应对
[识别的风险和应对策略]
## 为什么这个方案最好
[总结综合方案的优势]
```
请做出明智的决策,生成最优方案。
```
## 状态更新
```json
{
"phases": {
"3": {
"status": "completed",
"data": {
"reviews": ["review-A.md", "review-B.md", "review-C.md"],
"final_solution": "final-solution.md"
}
}
}
}
```
+178
View File
@@ -0,0 +1,178 @@
# Spec编排阶段 Prompt 模板
## 目标
基于确认的综合方案,生成开发规格(Spec),分析任务依赖,生成分波执行计划。
## Spec 生成 Prompt
```
你是一个开发规划专家。请基于以下技术方案,生成详细的开发规格。
## 技术方案
{final_solution}
## 任务
1. 将方案拆分为独立的开发任务
2. 每个任务要有明确的输入、输出、验收标准
3. 分析任务之间的依赖关系
4. 生成可并行执行的分波计划
## 输出格式
```markdown
# 开发规格 (Development Spec)
## 项目概述
{project_summary}
## 任务列表
### TASK-001: {task_name}
**描述**: {description}
**输入**:
- {input_1}
- {input_2}
**输出**:
- {output_file_1}
- {output_file_2}
**实现要点**:
1. {point_1}
2. {point_2}
**验收标准**:
- [ ] {criteria_1}
- [ ] {criteria_2}
**依赖**: TASK-XXX (如果有)
**预计时间**: {estimated_time}
**复杂度**: 低/中/高
---
### TASK-002: ...
[重复结构]
---
## 依赖关系图
```
TASK-001 (无依赖)
↓
TASK-002 (依赖 001)
TASK-003 (依赖 001) ← 可并行
↓ ↓
TASK-004 (依赖 002, 003)
```
## 分波执行计划
### Wave 1 (并行执行)
- TASK-001
### Wave 2 (并行执行)
- TASK-002
- TASK-003
### Wave 3 (并行执行)
- TASK-004
## 文件变更清单
| 文件路径 | 操作 | 关联任务 |
|----------|------|----------|
| src/main.py | 新建 | TASK-001 |
| src/utils.py | 新建 | TASK-002 |
## 测试策略
### 单元测试
- {test_plan}
### 集成测试
- {integration_test_plan}
## 注意事项
- {note_1}
- {note_2}
```
请确保每个任务足够独立,可以由不同的开发者并行完成。
```
## 依赖分析规则
### 无依赖任务
- 创建新文件
- 定义数据结构
- 编写工具函数
### 有依赖任务
- 调用其他任务的输出
- 需要其他任务创建的模块
- 依赖其他任务的接口
### 分波原则
1. **Wave 1**: 所有无依赖的任务
2. **Wave 2**: 只依赖 Wave 1 的任务
3. **Wave N**: 只依赖 Wave 1..N-1 的任务
```python
def analyze_dependencies(tasks: list) -> dict:
"""分析任务依赖,生成分波计划"""
waves = {}
assigned = set()
wave_num = 1
while len(assigned) < len(tasks):
# 找出所有依赖已满足的任务
wave_tasks = []
for task in tasks:
if task["id"] in assigned:
continue
deps = task.get("dependencies", [])
if all(d in assigned for d in deps):
wave_tasks.append(task["id"])
if not wave_tasks:
raise Exception("检测到循环依赖")
waves[f"wave_{wave_num}"] = wave_tasks
assigned.update(wave_tasks)
wave_num += 1
return waves
```
## 输出文件
- `.planning/dev-workflow/spec.md` - 开发规格
- `.planning/dev-workflow/execution-plan.json` - 执行计划(机器可读)
## 状态更新
```json
{
"phases": {
"5": {
"status": "completed",
"data": {
"spec_file": "spec.md",
"total_tasks": 10,
"total_waves": 4,
"execution_plan": "execution-plan.json"
}
}
}
}
```
+211
View File
@@ -0,0 +1,211 @@
# 测试阶段 Prompt 模板
## 目标
运行项目现有测试 + 开发生成的新测试,确保代码质量。
## 测试流程
```
┌─────────────────────────────────────────────────────────────┐
│ 测试阶段流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 检测测试框架 │
│ └→ pytest / jest / go test / ... │
│ ↓ │
│ 2. 运行现有测试 │
│ └→ 记录结果 │
│ ↓ │
│ 3. 运行新增测试 │
│ └→ 记录结果 │
│ ↓ │
│ ┌───────────────────────────────────────┐ │
│ │ 测试结果 │ │
│ ├───────────────────────────────────────┤ │
│ │ 全部通过 → 进入下一阶段 │ │
│ │ 有失败 → 重试(最多3次) │ │
│ │ 超过重试 → 汇报用户 │ │
│ └───────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
## 测试框架检测
```python
def detect_test_framework(project_root: str) -> dict:
"""检测项目的测试框架"""
frameworks = []
# Python
if (Path(project_root) / "pytest.ini").exists():
frameworks.append({"name": "pytest", "command": "pytest -v", "type": "python"})
if (Path(project_root) / "setup.py").exists():
frameworks.append({"name": "unittest", "command": "python -m unittest", "type": "python"})
# JavaScript/TypeScript
if (Path(project_root) / "jest.config.js").exists():
frameworks.append({"name": "jest", "command": "npm test", "type": "javascript"})
if (Path(project_root) / "vitest.config.ts").exists():
frameworks.append({"name": "vitest", "command": "npx vitest run", "type": "javascript"})
# Go
if (Path(project_root) / "go.mod").exists():
frameworks.append({"name": "go test", "command": "go test ./...", "type": "go"})
return frameworks
```
## 测试执行 Prompt
```
你是一个测试工程师。请执行以下测试任务。
## 项目信息
- 项目路径: {project_root}
- 测试框架: {test_framework}
## 任务
1. 运行所有现有测试
2. 运行本次开发新增的测试
3. 记录测试结果
4. 分析失败原因(如果有)
## 输出格式
```markdown
# 测试报告
## 测试环境
- 框架: {framework}
- 命令: {command}
- 执行时间: {timestamp}
## 测试结果摘要
| 类型 | 总数 | 通过 | 失败 | 跳过 |
|------|------|------|------|------|
| 现有测试 | {total} | {passed} | {failed} | {skipped} |
| 新增测试 | {total} | {passed} | {failed} | {skipped} |
## 失败详情
### 失败测试 1: {test_name}
```
{error_message}
```
**可能原因**: {analysis}
## 结论
- [ ] 全部通过
- [ ] 有失败需要修复
## 建议
{recommendations}
```
请执行测试并生成报告。
```
## 测试结果解析
```python
def parse_test_results(output: str, framework: str) -> dict:
"""解析测试结果"""
if framework == "pytest":
# 解析 pytest 输出
import re
match = re.search(r"(\d+) passed, (\d+) failed", output)
if match:
return {
"passed": int(match.group(1)),
"failed": int(match.group(2))
}
elif framework == "jest":
# 解析 jest 输出
import re
match = re.search(r"(\d+) passed, (\d+) failed", output)
if match:
return {
"passed": int(match.group(1)),
"failed": int(match.group(2))
}
return {"passed": 0, "failed": 0, "raw_output": output}
```
## 重试逻辑
```python
def run_tests_with_retry(max_retries: int = 3) -> dict:
"""带重试的测试执行"""
for attempt in range(1, max_retries + 1):
print(f"\n尝试 {attempt}/{max_retries}...")
result = run_tests()
if result["failed"] == 0:
print("✅ 测试全部通过")
return result
print(f"⚠️ 有 {result['failed']} 个测试失败")
if attempt < max_retries:
print("准备重试...")
# 可以在这里添加自动修复逻辑
print(f"❌ 已达到最大重试次数 ({max_retries})")
return result
```
## 测试报告保存
```json
{
"phases": {
"7": {
"status": "completed",
"test_results": {
"framework": "pytest",
"existing_tests": {"total": 20, "passed": 20, "failed": 0},
"new_tests": {"total": 5, "passed": 5, "failed": 0},
"all_passed": true,
"retry_count": 0
}
}
}
}
```
## 失败处理
如果测试失败且超过重试次数:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 测试失败
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
已重试 3 次,仍有 {failed_count} 个测试失败:
## 失败的测试
1. {test_1}
2. {test_2}
## 可能的原因
{analysis}
## 请选择:
A. 自动修复 - 安排子代理修复问题
B. 手动处理 - 我来查看和修复
C. 跳过测试 - 继续下一阶段(不推荐)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```