agent_deply/tests/test_mcp_client.py
dark 1e74ae3cd6 feat: 增加 PAM 部署 Agent 交互式 CLI 与真实 LLM 配置
- 新增 OpenAI-compatible LLM client,支持 base_url、api_key、model 配置
- 固化意图识别、参数抽取、部署计划生成的结构化 JSON 提示词
- 增加 MCP client 配置读取和真实 session 接入说明
- 实现 checkpoint 自动保存、resume 断点续跑和已完成步骤跳过
- 实现人工确认流程,支持失败 IP 回滚 approve/reject
- 新增 chat 常驻式 CLI 对话框,支持自然语言分析、参数设置、执行确认、状态查看、回滚确认和续跑
- 同步 README,补充 LLM、MCP、checkpoint、confirm/resume、chat 使用方式
- 增加相关单元测试,覆盖 LLM client、MCP 配置、确认/续跑和交互式 CLI
2026-06-01 10:26:40 +08:00

42 lines
1.3 KiB
Python

from pam_deploy_graph.mcp_client import (
FunctionMcpToolClient,
load_mcp_client_config,
SessionMcpToolClient,
normalize_mcp_sdk_result,
)
def test_function_mcp_client_wraps_callable():
client = FunctionMcpToolClient(lambda name, args: {"tool": name, "args": args})
assert client.call_tool("pam_get_online_ips", {"airportCode": "HET"})["tool"] == "pam_get_online_ips"
def test_normalize_mcp_sdk_result_structured_content():
result = type("Result", (), {"structuredContent": {"ok": True}})()
assert normalize_mcp_sdk_result(result) == {"ok": True}
def test_session_mcp_client_normalizes_text_json_content():
content = [type("Text", (), {"text": '{"ok": true}'})()]
result = type("Result", (), {"content": content})()
class Session:
def call_tool(self, tool_name, arguments):
return result
client = SessionMcpToolClient(Session())
assert client.call_tool("tool", {}) == {"ok": True}
def test_load_mcp_client_config(tmp_path):
path = tmp_path / "mcp.json"
path.write_text(
'{"server_name": "pam-node-prod", "tool_names": {"get-online-ips": "custom_ips"}}',
encoding="utf-8",
)
config = load_mcp_client_config(path)
assert config.server_name == "pam-node-prod"
assert config.tool_names["get-online-ips"] == "custom_ips"