- 新增 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
42 lines
1.3 KiB
Python
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"
|