Coverage for aceflow_mcp_server/resources.py: 92%

64 statements  

« prev     ^ index     » next       coverage.py v7.10.1, created at 2025-08-02 16:56 +0800

1"""AceFlow MCP Resources implementation.""" 

2 

3try: 

4 from fastmcp.resources import resource 

5except ImportError: 

6 # Mock implementation for testing 

7 def resource(uri): 

8 def decorator(func): 

9 return func 

10 return decorator 

11from typing import Dict, Any 

12import json 

13from pathlib import Path 

14import os 

15 

16 

17class AceFlowResources: 

18 """AceFlow MCP Resources collection.""" 

19 

20 def __init__(self): 

21 """Initialize resources.""" 

22 pass 

23 

24 def _get_current_directory(self) -> Path: 

25 """Get current working directory.""" 

26 return Path.cwd() 

27 

28 def _find_aceflow_project_root(self, start_path: Path = None) -> Path: 

29 """Find the AceFlow project root directory.""" 

30 if start_path is None: 

31 start_path = self._get_current_directory() 

32 

33 current = start_path.resolve() 

34 

35 # Look for AceFlow indicators 

36 while current != current.parent: 

37 if (current / ".aceflow").exists() or (current / ".clinerules").exists(): 

38 return current 

39 current = current.parent 

40 

41 # If not found, return current directory 

42 return start_path 

43 

44 @resource("aceflow://project/state") 

45 def project_state(self) -> str: 

46 """Get current project state.""" 

47 try: 

48 project_root = self._find_aceflow_project_root() 

49 state_file = project_root / ".aceflow" / "current_state.json" 

50 

51 if state_file.exists(): 

52 with open(state_file, 'r', encoding='utf-8') as f: 

53 state = json.load(f) 

54 return json.dumps(state, indent=2, ensure_ascii=False) 

55 else: 

56 # Return default state if no project found 

57 default_state = { 

58 "project": { 

59 "name": "unknown", 

60 "mode": "UNKNOWN", 

61 "status": "not_initialized" 

62 }, 

63 "flow": { 

64 "current_stage": "unknown", 

65 "completed_stages": [], 

66 "progress_percentage": 0 

67 }, 

68 "metadata": { 

69 "message": "No AceFlow project found in current directory", 

70 "suggestion": "Use aceflow_init tool to initialize a project" 

71 } 

72 } 

73 return json.dumps(default_state, indent=2, ensure_ascii=False) 

74 

75 except Exception as e: 

76 error_state = { 

77 "error": str(e), 

78 "message": "Failed to get project state", 

79 "suggestion": "Check if you're in an AceFlow project directory" 

80 } 

81 return json.dumps(error_state, indent=2, ensure_ascii=False) 

82 

83 @resource("aceflow://workflow/config") 

84 def workflow_config(self) -> str: 

85 """Get workflow configuration.""" 

86 try: 

87 project_root = self._find_aceflow_project_root() 

88 template_file = project_root / ".aceflow" / "template.yaml" 

89 

90 if template_file.exists(): 

91 with open(template_file, 'r', encoding='utf-8') as f: 

92 config_content = f.read() 

93 

94 # Also include some parsed information 

95 config_info = { 

96 "template_file": str(template_file), 

97 "project_root": str(project_root), 

98 "template_content": config_content, 

99 "status": "found" 

100 } 

101 return json.dumps(config_info, indent=2, ensure_ascii=False) 

102 else: 

103 default_config = { 

104 "message": "No workflow configuration found", 

105 "template_file": str(project_root / ".aceflow" / "template.yaml"), 

106 "status": "not_found", 

107 "suggestion": "Initialize project with aceflow_init tool" 

108 } 

109 return json.dumps(default_config, indent=2, ensure_ascii=False) 

110 

111 except Exception as e: 

112 error_config = { 

113 "error": str(e), 

114 "message": "Failed to get workflow config", 

115 "suggestion": "Check if you're in an AceFlow project directory" 

116 } 

117 return json.dumps(error_config, indent=2, ensure_ascii=False) 

118 

119 @resource("aceflow://stage/guide/{stage}") 

120 def stage_guide(self, stage: str) -> str: 

121 """Get stage-specific guidance.""" 

122 try: 

123 # Stage guides based on common AceFlow stages 

124 stage_guides = { 

125 "user_stories": """# 用户故事分析阶段指南 

126 

127## 目标 

128分析和定义用户需求,创建清晰的用户故事。 

129 

130## 主要任务 

1311. **用户角色识别** 

132 - 确定主要用户群体 

133 - 分析用户特征和需求 

134 - 创建用户画像 

135 

1362. **用户故事编写** 

137 - 使用标准格式:作为[用户角色],我希望[功能],以便[价值] 

138 - 确保故事具体、可测试、有价值 

139 - 添加验收标准 

140 

1413. **优先级排序** 

142 - 评估商业价值 

143 - 考虑技术实现难度 

144 - 确定开发顺序 

145 

146## 输出要求 

147- 用户故事列表 (aceflow_result/user_stories.md) 

148- 用户画像文档 (aceflow_result/user_personas.md) 

149- 需求优先级矩阵 (aceflow_result/priority_matrix.md) 

150 

151## 质量标准 

152- 每个用户故事包含明确的验收标准 

153- 故事之间逻辑清晰,无重叠 

154- 覆盖主要业务场景 

155 

156## 下一阶段 

157完成后进入"任务分解"阶段,将用户故事转化为具体开发任务。""", 

158 

159 "task_breakdown": """# 任务分解阶段指南 

160 

161## 目标 

162将用户故事分解为可执行的开发任务。 

163 

164## 主要任务 

1651. **技术分析** 

166 - 确定技术实现方案 

167 - 识别技术依赖和风险 

168 - 评估开发工作量 

169 

1702. **任务创建** 

171 - 将用户故事分解为具体任务 

172 - 确保任务颗粒度适中(1-3天完成) 

173 - 定义任务之间的依赖关系 

174 

1753. **资源规划** 

176 - 评估所需技能和人力 

177 - 安排开发时间线 

178 - 识别潜在瓶颈 

179 

180## 输出要求 

181- 任务分解文档 (aceflow_result/task_breakdown.md) 

182- 技术实现方案 (aceflow_result/technical_approach.md) 

183- 开发计划 (aceflow_result/development_plan.md) 

184 

185## 质量标准 

186- 任务定义明确,可量化完成 

187- 工作量估算合理 

188- 依赖关系清晰 

189 

190## 下一阶段 

191完成后进入"测试用例设计"阶段。""", 

192 

193 "test_design": """# 测试用例设计阶段指南 

194 

195## 目标 

196设计全面的测试用例,确保质量保证。 

197 

198## 主要任务 

1991. **测试策略制定** 

200 - 确定测试类型和范围 

201 - 制定测试环境要求 

202 - 定义通过标准 

203 

2042. **测试用例编写** 

205 - 基于用户故事创建功能测试用例 

206 - 设计边界条件和异常场景测试 

207 - 编写自动化测试脚本 

208 

2093. **测试数据准备** 

210 - 准备测试数据集 

211 - 设计数据验证方案 

212 - 确保数据安全性 

213 

214## 输出要求 

215- 测试计划 (aceflow_result/test_plan.md) 

216- 测试用例文档 (aceflow_result/test_cases.md) 

217- 自动化测试脚本 (aceflow_result/automated_tests/) 

218 

219## 质量标准 

220- 测试覆盖率达到设计要求 

221- 测试用例具体可执行 

222- 自动化程度符合项目需求 

223 

224## 下一阶段 

225完成后进入"功能实现"阶段。""", 

226 

227 "implementation": """# 功能实现阶段指南 

228 

229## 目标 

230根据设计和任务分解实现核心功能。 

231 

232## 主要任务 

2331. **代码开发** 

234 - 按照任务分解进行编码 

235 - 遵循代码规范和最佳实践 

236 - 实现核心业务逻辑 

237 

2382. **代码质量** 

239 - 编写清晰的注释和文档 

240 - 进行代码自检和重构 

241 - 确保代码可维护性 

242 

2433. **集成开发** 

244 - 模块间接口对接 

245 - 处理系统集成问题 

246 - 确保整体功能一致性 

247 

248## 输出要求 

249- 源代码 (aceflow_result/src/) 

250- 技术文档 (aceflow_result/technical_docs/) 

251- API文档 (aceflow_result/api_docs/) 

252 

253## 质量标准 

254- 代码符合规范,注释完整 

255- 核心功能正常工作 

256- 模块间接口稳定 

257 

258## 下一阶段 

259完成后进入"单元测试"阶段。""", 

260 

261 "unit_test": """# 单元测试阶段指南 

262 

263## 目标 

264对实现的功能进行单元测试验证。 

265 

266## 主要任务 

2671. **测试执行** 

268 - 运行设计的测试用例 

269 - 执行自动化测试脚本 

270 - 验证功能正确性 

271 

2722. **问题修复** 

273 - 记录和分析测试失败 

274 - 修复发现的缺陷 

275 - 重新测试验证修复 

276 

2773. **覆盖率分析** 

278 - 统计测试覆盖率 

279 - 补充遗漏的测试场景 

280 - 确保质量标准达成 

281 

282## 输出要求 

283- 测试执行报告 (aceflow_result/test_report.md) 

284- 缺陷修复记录 (aceflow_result/bug_fixes.md) 

285- 测试覆盖率报告 (aceflow_result/coverage_report.md) 

286 

287## 质量标准 

288- 主要功能测试通过 

289- 测试覆盖率达到要求 

290- 关键缺陷已修复 

291 

292## 下一阶段 

293完成后进入"集成测试"阶段。""", 

294 

295 "integration_test": """# 集成测试阶段指南 

296 

297## 目标 

298验证系统各部分的集成和整体功能。 

299 

300## 主要任务 

3011. **系统集成** 

302 - 验证模块间集成 

303 - 测试端到端流程 

304 - 检查数据流转 

305 

3062. **环境测试** 

307 - 在目标环境中测试 

308 - 验证部署配置 

309 - 检查性能表现 

310 

3113. **用户验收** 

312 - 基于用户故事验收 

313 - 收集用户反馈 

314 - 确认业务价值实现 

315 

316## 输出要求 

317- 集成测试报告 (aceflow_result/integration_report.md) 

318- 性能测试结果 (aceflow_result/performance_report.md) 

319- 用户验收记录 (aceflow_result/acceptance_record.md) 

320 

321## 质量标准 

322- 集成功能正常工作 

323- 性能指标达到要求 

324- 用户验收通过 

325 

326## 下一阶段 

327完成后进入"代码审查"阶段。""", 

328 

329 "code_review": """# 代码审查阶段指南 

330 

331## 目标 

332全面审查代码质量和设计合理性。 

333 

334## 主要任务 

3351. **代码质量审查** 

336 - 检查代码规范遵循 

337 - 评估代码可读性 

338 - 验证最佳实践应用 

339 

3402. **架构设计审查** 

341 - 评估设计合理性 

342 - 检查扩展性和维护性 

343 - 确认安全性考虑 

344 

3453. **文档完整性** 

346 - 检查技术文档完整性 

347 - 验证API文档准确性 

348 - 确保注释清晰有用 

349 

350## 输出要求 

351- 代码审查报告 (aceflow_result/code_review.md) 

352- 改进建议 (aceflow_result/improvement_suggestions.md) 

353- 最终代码版本 (aceflow_result/final_code/) 

354 

355## 质量标准 

356- 代码质量达到团队标准 

357- 设计问题已解决 

358- 文档完整准确 

359 

360## 下一阶段 

361完成后进入"功能演示"阶段。""", 

362 

363 "demo": """# 功能演示阶段指南 

364 

365## 目标 

366准备和执行项目功能演示。 

367 

368## 主要任务 

3691. **演示准备** 

370 - 准备演示脚本和数据 

371 - 设置演示环境 

372 - 预演和优化流程 

373 

3742. **功能展示** 

375 - 演示核心功能 

376 - 突出项目价值 

377 - 收集反馈意见 

378 

3793. **项目总结** 

380 - 整理项目成果 

381 - 总结经验教训 

382 - 制定后续计划 

383 

384## 输出要求 

385- 演示脚本 (aceflow_result/demo_script.md) 

386- 演示录制/截图 (aceflow_result/demo_materials/) 

387- 项目总结报告 (aceflow_result/project_summary.md) 

388 

389## 质量标准 

390- 演示流程顺畅 

391- 功能展示完整 

392- 项目价值清晰 

393 

394## 项目完成 

395这是标准工作流的最后阶段,项目完成!""" 

396 } 

397 

398 guide = stage_guides.get(stage.lower()) 

399 if guide: 

400 return guide 

401 else: 

402 return f"""# {stage.title()} 阶段指南 

403 

404## 说明 

405暂未找到阶段 '{stage}' 的详细指南。 

406 

407## 可用阶段指南 

408- user_stories (用户故事分析) 

409- task_breakdown (任务分解) 

410- test_design (测试用例设计) 

411- implementation (功能实现) 

412- unit_test (单元测试) 

413- integration_test (集成测试) 

414- code_review (代码审查) 

415- demo (功能演示) 

416 

417## 建议 

418请使用正确的阶段名称,或联系管理员添加新的阶段指南。""" 

419 

420 except Exception as e: 

421 return f"""# 错误 

422 

423获取阶段 '{stage}' 指南时发生错误: {str(e)} 

424 

425请检查阶段名称是否正确,或重试操作。"""