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:
@@ -251,7 +251,7 @@
|
||||
|
||||
| Phase | Status | Plans | Summaries |
|
||||
|-------|--------|-------|-----------|
|
||||
| 1 | Not Started | 0/1 | 0/1 |
|
||||
| 1 | ✓ Completed | 1/1 | 1/1 |
|
||||
| 2 | Not Started | 0/1 | 0/1 |
|
||||
| 3 | Not Started | 0/1 | 0/1 |
|
||||
| 4 | Not Started | 0/1 | 0/1 |
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
---
|
||||
phase: 0
|
||||
stage: initialized
|
||||
phase: 1
|
||||
stage: completed
|
||||
milestone: v1.0
|
||||
started: 2026-03-09T18:52:00+08:00
|
||||
updated: 2026-03-09T18:52:00+08:00
|
||||
updated: 2026-03-09T18:58:00+08:00
|
||||
retry_count: 0
|
||||
---
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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. "有什么风险?"
|
||||
→ [列出风险和应对]
|
||||
```
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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. 跳过测试 - 继续下一阶段(不推荐)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
Reference in New Issue
Block a user