""" 测试重构后的 Goal 工具功能 测试内容: 1. 添加目标(add) 2. 切换焦点(focus) 3. 完成目标(done) 4. 放弃目标(abandon) 5. 位置控制(after, under) """ import asyncio import sys from pathlib import Path # 添加项目根目录到 Python 路径 sys.path.insert(0, str(Path(__file__).parent.parent)) from agent.models.goal import GoalTree, Goal from agent.tools.builtin.goal import goal, set_goal_tree async def test_goal_basic_operations(): """测试 Goal 工具的基本操作""" print("=" * 80) print("测试 1: Goal 工具基本操作") print("=" * 80) print() # 创建 GoalTree tree = GoalTree(mission="实现用户认证系统") set_goal_tree(tree) # 1. 添加顶层目标 print("1. 添加顶层目标") result = await goal( add="分析需求, 设计架构, 实现功能, 编写测试", reason="了解需求, 规划结构, 完成开发, 确保质量" ) print(result) print() # 2. 切换焦点到第一个目标 print("2. 切换焦点到目标 1") result = await goal(focus="1") print(result) print() # 3. 为当前目标添加子目标 print("3. 为目标 1 添加子目标") result = await goal( add="阅读文档, 分析用例, 整理需求", reason="理解系统, 明确场景, 形成文档" ) print(result) print() # 4. 使用 under 参数添加子目标 print("4. 使用 under 为目标 2 添加子目标") result = await goal( add="设计数据模型, 设计API接口", under="2" ) print(result) print() # 5. 使用 after 参数添加同级目标 print("5. 使用 after 在目标 2 后添加同级目标") result = await goal( add="技术选型", after="2" ) print(result) print() # 6. 完成当前目标 print("6. 完成当前目标(1)") result = await goal(done="已完成需求分析,整理了用户认证的核心需求") print(result) print() # 7. 切换焦点并完成 print("7. 切换到目标 2.1 并完成") result = await goal(focus="2.1") result = await goal(done="完成数据模型设计:User, Session, Token") print(result) print() # 8. 放弃一个目标 print("8. 切换到目标 3 并放弃") result = await goal(focus="3") result = await goal(abandon="技术选型已在架构设计中完成,无需单独进行") print(result) print() print("=" * 80) print("✅ Goal 工具基本操作测试完成") print("=" * 80) async def test_goal_advanced_operations(): """测试 Goal 工具的高级操作""" print("\n" + "=" * 80) print("测试 2: Goal 工具高级操作") print("=" * 80) print() # 创建新的 GoalTree tree = GoalTree(mission="开发博客系统") set_goal_tree(tree) # 1. 同时完成和切换焦点 print("1. 添加目标并测试 done + focus 组合") await goal(add="前端开发, 后端开发, 部署上线") await goal(focus="1") await goal(add="设计UI, 实现组件", under="1") print("\n完成目标 1.1 并切换到 1.2") result = await goal(done="UI设计完成", focus="1.2") print(result) print() # 2. 测试自动焦点切换 print("2. 测试自动焦点切换(无焦点时添加目标)") tree2 = GoalTree(mission="测试自动焦点") set_goal_tree(tree2) result = await goal(add="第一个目标") print(result) print() # 3. 测试级联完成 print("3. 测试级联完成(完成所有子目标后自动完成父目标)") tree3 = GoalTree(mission="测试级联完成") set_goal_tree(tree3) await goal(add="父目标") await goal(focus="1") await goal(add="子目标1, 子目标2") print("\n完成子目标 1.1") await goal(focus="1.1") await goal(done="子目标1完成") print("\n完成子目标 1.2(应该自动完成父目标)") await goal(focus="1.2") result = await goal(done="子目标2完成") print(result) print() print("=" * 80) print("✅ Goal 工具高级操作测试完成") print("=" * 80) async def test_goal_error_handling(): """测试 Goal 工具的错误处理""" print("\n" + "=" * 80) print("测试 3: Goal 工具错误处理") print("=" * 80) print() tree = GoalTree(mission="测试错误处理") set_goal_tree(tree) # 1. 无焦点时尝试完成 print("1. 无焦点时尝试完成目标") result = await goal(done="测试") print(result) print() # 2. 无焦点时尝试放弃 print("2. 无焦点时尝试放弃目标") result = await goal(abandon="测试") print(result) print() # 3. 切换到不存在的目标 print("3. 切换到不存在的目标") result = await goal(focus="999") print(result) print() # 4. after 和 under 同时指定 print("4. 同时指定 after 和 under") await goal(add="目标1") result = await goal(add="目标2", after="1", under="1") print(result) print() # 5. after 指定不存在的目标 print("5. after 指定不存在的目标") result = await goal(add="目标3", after="999") print(result) print() print("=" * 80) print("✅ Goal 工具错误处理测试完成") print("=" * 80) async def main(): """运行所有测试""" print("\n" + "🧪" * 40) print("Goal 工具功能测试") print("🧪" * 40 + "\n") try: await test_goal_basic_operations() await test_goal_advanced_operations() await test_goal_error_handling() print("\n" + "=" * 80) print("🎉 所有测试完成!") print("=" * 80) except Exception as e: print(f"\n❌ 测试失败: {e}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(main())