Coverage for aceflow_mcp_server\resources.py: 92%
59 statements
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-03 13:42 +0800
« prev ^ index » next coverage.py v7.10.1, created at 2025-08-03 13:42 +0800
1"""AceFlow MCP Resources implementation."""
3from typing import Dict, Any
4import json
5from pathlib import Path
6import os
9class AceFlowResources:
10 """AceFlow MCP Resources collection."""
12 def __init__(self):
13 """Initialize resources."""
14 pass
16 @staticmethod
17 def _get_current_directory() -> Path:
18 """Get current working directory."""
19 return Path.cwd()
21 @staticmethod
22 def _find_aceflow_project_root(start_path: Path = None) -> Path:
23 """Find the AceFlow project root directory."""
24 if start_path is None:
25 start_path = AceFlowResources._get_current_directory()
27 current = start_path.resolve()
29 # Look for AceFlow indicators
30 while current != current.parent:
31 if (current / ".aceflow").exists() or (current / ".clinerules").exists():
32 return current
33 current = current.parent
35 # If not found, return current directory
36 return start_path
38 @staticmethod
39 def project_state(project_id: str = "current") -> str:
40 """Get current project state."""
41 try:
42 project_root = AceFlowResources._find_aceflow_project_root()
43 state_file = project_root / ".aceflow" / "current_state.json"
45 if state_file.exists():
46 with open(state_file, 'r', encoding='utf-8') as f:
47 state = json.load(f)
48 return json.dumps(state, indent=2, ensure_ascii=False)
49 else:
50 # Return default state if no project found
51 default_state = {
52 "project": {
53 "name": "unknown",
54 "mode": "UNKNOWN",
55 "status": "not_initialized"
56 },
57 "flow": {
58 "current_stage": "unknown",
59 "completed_stages": [],
60 "progress_percentage": 0
61 },
62 "metadata": {
63 "message": "No AceFlow project found in current directory",
64 "suggestion": "Use aceflow_init tool to initialize a project"
65 }
66 }
67 return json.dumps(default_state, indent=2, ensure_ascii=False)
69 except Exception as e:
70 error_state = {
71 "error": str(e),
72 "message": "Failed to get project state",
73 "suggestion": "Check if you're in an AceFlow project directory"
74 }
75 return json.dumps(error_state, indent=2, ensure_ascii=False)
77 @staticmethod
78 def workflow_config(config_id: str = "default") -> str:
79 """Get workflow configuration."""
80 try:
81 project_root = AceFlowResources._find_aceflow_project_root()
82 template_file = project_root / ".aceflow" / "template.yaml"
84 if template_file.exists():
85 with open(template_file, 'r', encoding='utf-8') as f:
86 config_content = f.read()
88 # Also include some parsed information
89 config_info = {
90 "template_file": str(template_file),
91 "project_root": str(project_root),
92 "template_content": config_content,
93 "status": "found"
94 }
95 return json.dumps(config_info, indent=2, ensure_ascii=False)
96 else:
97 default_config = {
98 "message": "No workflow configuration found",
99 "template_file": str(project_root / ".aceflow" / "template.yaml"),
100 "status": "not_found",
101 "suggestion": "Initialize project with aceflow_init tool"
102 }
103 return json.dumps(default_config, indent=2, ensure_ascii=False)
105 except Exception as e:
106 error_config = {
107 "error": str(e),
108 "message": "Failed to get workflow config",
109 "suggestion": "Check if you're in an AceFlow project directory"
110 }
111 return json.dumps(error_config, indent=2, ensure_ascii=False)
113 @staticmethod
114 def stage_guide(stage: str) -> str:
115 """Get stage-specific guidance."""
116 try:
117 # Stage guides based on common AceFlow stages
118 stage_guides = {
119 "user_stories": """# 用户故事分析阶段指南
121## 目标
122分析和定义用户需求,创建清晰的用户故事。
124## 主要任务
1251. **用户角色识别**
126 - 确定主要用户群体
127 - 分析用户特征和需求
128 - 创建用户画像
1302. **用户故事编写**
131 - 使用标准格式:作为[用户角色],我希望[功能],以便[价值]
132 - 确保故事具体、可测试、有价值
133 - 添加验收标准
1353. **优先级排序**
136 - 评估商业价值
137 - 考虑技术实现难度
138 - 确定开发顺序
140## 输出要求
141- 用户故事列表 (aceflow_result/user_stories.md)
142- 用户画像文档 (aceflow_result/user_personas.md)
143- 需求优先级矩阵 (aceflow_result/priority_matrix.md)
145## 质量标准
146- 每个用户故事包含明确的验收标准
147- 故事之间逻辑清晰,无重叠
148- 覆盖主要业务场景
150## 下一阶段
151完成后进入"任务分解"阶段,将用户故事转化为具体开发任务。""",
153 "task_breakdown": """# 任务分解阶段指南
155## 目标
156将用户故事分解为可执行的开发任务。
158## 主要任务
1591. **技术分析**
160 - 确定技术实现方案
161 - 识别技术依赖和风险
162 - 评估开发工作量
1642. **任务创建**
165 - 将用户故事分解为具体任务
166 - 确保任务颗粒度适中(1-3天完成)
167 - 定义任务之间的依赖关系
1693. **资源规划**
170 - 评估所需技能和人力
171 - 安排开发时间线
172 - 识别潜在瓶颈
174## 输出要求
175- 任务分解文档 (aceflow_result/task_breakdown.md)
176- 技术实现方案 (aceflow_result/technical_approach.md)
177- 开发计划 (aceflow_result/development_plan.md)
179## 质量标准
180- 任务定义明确,可量化完成
181- 工作量估算合理
182- 依赖关系清晰
184## 下一阶段
185完成后进入"测试用例设计"阶段。""",
187 "test_design": """# 测试用例设计阶段指南
189## 目标
190设计全面的测试用例,确保质量保证。
192## 主要任务
1931. **测试策略制定**
194 - 确定测试类型和范围
195 - 制定测试环境要求
196 - 定义通过标准
1982. **测试用例编写**
199 - 基于用户故事创建功能测试用例
200 - 设计边界条件和异常场景测试
201 - 编写自动化测试脚本
2033. **测试数据准备**
204 - 准备测试数据集
205 - 设计数据验证方案
206 - 确保数据安全性
208## 输出要求
209- 测试计划 (aceflow_result/test_plan.md)
210- 测试用例文档 (aceflow_result/test_cases.md)
211- 自动化测试脚本 (aceflow_result/automated_tests/)
213## 质量标准
214- 测试覆盖率达到设计要求
215- 测试用例具体可执行
216- 自动化程度符合项目需求
218## 下一阶段
219完成后进入"功能实现"阶段。""",
221 "implementation": """# 功能实现阶段指南
223## 目标
224根据设计和任务分解实现核心功能。
226## 主要任务
2271. **代码开发**
228 - 按照任务分解进行编码
229 - 遵循代码规范和最佳实践
230 - 实现核心业务逻辑
2322. **代码质量**
233 - 编写清晰的注释和文档
234 - 进行代码自检和重构
235 - 确保代码可维护性
2373. **集成开发**
238 - 模块间接口对接
239 - 处理系统集成问题
240 - 确保整体功能一致性
242## 输出要求
243- 源代码 (aceflow_result/src/)
244- 技术文档 (aceflow_result/technical_docs/)
245- API文档 (aceflow_result/api_docs/)
247## 质量标准
248- 代码符合规范,注释完整
249- 核心功能正常工作
250- 模块间接口稳定
252## 下一阶段
253完成后进入"单元测试"阶段。""",
255 "unit_test": """# 单元测试阶段指南
257## 目标
258对实现的功能进行单元测试验证。
260## 主要任务
2611. **测试执行**
262 - 运行设计的测试用例
263 - 执行自动化测试脚本
264 - 验证功能正确性
2662. **问题修复**
267 - 记录和分析测试失败
268 - 修复发现的缺陷
269 - 重新测试验证修复
2713. **覆盖率分析**
272 - 统计测试覆盖率
273 - 补充遗漏的测试场景
274 - 确保质量标准达成
276## 输出要求
277- 测试执行报告 (aceflow_result/test_report.md)
278- 缺陷修复记录 (aceflow_result/bug_fixes.md)
279- 测试覆盖率报告 (aceflow_result/coverage_report.md)
281## 质量标准
282- 主要功能测试通过
283- 测试覆盖率达到要求
284- 关键缺陷已修复
286## 下一阶段
287完成后进入"集成测试"阶段。""",
289 "integration_test": """# 集成测试阶段指南
291## 目标
292验证系统各部分的集成和整体功能。
294## 主要任务
2951. **系统集成**
296 - 验证模块间集成
297 - 测试端到端流程
298 - 检查数据流转
3002. **环境测试**
301 - 在目标环境中测试
302 - 验证部署配置
303 - 检查性能表现
3053. **用户验收**
306 - 基于用户故事验收
307 - 收集用户反馈
308 - 确认业务价值实现
310## 输出要求
311- 集成测试报告 (aceflow_result/integration_report.md)
312- 性能测试结果 (aceflow_result/performance_report.md)
313- 用户验收记录 (aceflow_result/acceptance_record.md)
315## 质量标准
316- 集成功能正常工作
317- 性能指标达到要求
318- 用户验收通过
320## 下一阶段
321完成后进入"代码审查"阶段。""",
323 "code_review": """# 代码审查阶段指南
325## 目标
326全面审查代码质量和设计合理性。
328## 主要任务
3291. **代码质量审查**
330 - 检查代码规范遵循
331 - 评估代码可读性
332 - 验证最佳实践应用
3342. **架构设计审查**
335 - 评估设计合理性
336 - 检查扩展性和维护性
337 - 确认安全性考虑
3393. **文档完整性**
340 - 检查技术文档完整性
341 - 验证API文档准确性
342 - 确保注释清晰有用
344## 输出要求
345- 代码审查报告 (aceflow_result/code_review.md)
346- 改进建议 (aceflow_result/improvement_suggestions.md)
347- 最终代码版本 (aceflow_result/final_code/)
349## 质量标准
350- 代码质量达到团队标准
351- 设计问题已解决
352- 文档完整准确
354## 下一阶段
355完成后进入"功能演示"阶段。""",
357 "demo": """# 功能演示阶段指南
359## 目标
360准备和执行项目功能演示。
362## 主要任务
3631. **演示准备**
364 - 准备演示脚本和数据
365 - 设置演示环境
366 - 预演和优化流程
3682. **功能展示**
369 - 演示核心功能
370 - 突出项目价值
371 - 收集反馈意见
3733. **项目总结**
374 - 整理项目成果
375 - 总结经验教训
376 - 制定后续计划
378## 输出要求
379- 演示脚本 (aceflow_result/demo_script.md)
380- 演示录制/截图 (aceflow_result/demo_materials/)
381- 项目总结报告 (aceflow_result/project_summary.md)
383## 质量标准
384- 演示流程顺畅
385- 功能展示完整
386- 项目价值清晰
388## 项目完成
389这是标准工作流的最后阶段,项目完成!"""
390 }
392 guide = stage_guides.get(stage.lower())
393 if guide:
394 return guide
395 else:
396 return f"""# {stage.title()} 阶段指南
398## 说明
399暂未找到阶段 '{stage}' 的详细指南。
401## 可用阶段指南
402- user_stories (用户故事分析)
403- task_breakdown (任务分解)
404- test_design (测试用例设计)
405- implementation (功能实现)
406- unit_test (单元测试)
407- integration_test (集成测试)
408- code_review (代码审查)
409- demo (功能演示)
411## 建议
412请使用正确的阶段名称,或联系管理员添加新的阶段指南。"""
414 except Exception as e:
415 return f"""# 错误
417获取阶段 '{stage}' 指南时发生错误: {str(e)}
419请检查阶段名称是否正确,或重试操作。"""