dark d3f5c82d98 feat: 补充 Agent 运行日志并增加 LLM 测试命令
- 新增统一日志工具,支持日志文件路径和级别配置
- 记录 CLI/chat、Agent、LLM、action、MCP、LangGraph、checkpoint 等关键流程
- 对日志中的 token、secret、api_key、Authorization 等敏感信息做脱敏
- chat 新增 llm test 命令,用于验证当前 LLM client 是否正常加载
- 同步 README、打包文档和 run.sh 帮助说明
- 补充日志脱敏和 llm test 相关测试
2026-06-04 10:51:59 +08:00

71 lines
2.3 KiB
Python

"""根据配置文件构造 MCP runner。"""
from __future__ import annotations
import logging
from pathlib import Path
from .logging_utils import json_for_log
from .mcp_client import (
HttpMcpToolClient,
McpClientConfig,
OAuthTokenProvider,
StdioMcpToolClient,
load_mcp_client_config,
)
from .mcp_runner import McpActionRunner
logger = logging.getLogger(__name__)
def build_mcp_runner_from_config(path: str | Path) -> McpActionRunner:
"""读取 MCP 配置文件,并构造可直接给 Agent 使用的 runner。"""
logger.info("开始构建 MCP runner config_path=%s", path)
config = load_mcp_client_config(path)
client = build_mcp_client(config)
runner = McpActionRunner(client=client, tool_names=config.tool_names or None)
logger.info(
"MCP runner 构建完成 config_path=%s transport=%s server_url=%s client=%s tool_names=%s",
path,
config.transport,
config.server_url,
type(client).__name__,
json_for_log(config.tool_names),
)
return runner
def build_mcp_client(config: McpClientConfig):
"""根据 transport 类型创建 MCP client。"""
logger.info(
"开始构建 MCP client transport=%s server_url=%s command=%s has_auth=%s headers=%s",
config.transport,
config.server_url,
config.command,
config.auth is not None,
json_for_log(config.headers),
)
if config.transport == "stdio":
return StdioMcpToolClient(
command=config.command,
args=config.args,
env=config.env,
cwd=config.cwd or None,
timeout_seconds=config.timeout_seconds,
)
if config.transport in ("streamable_http", "sse"):
auth_provider = (
OAuthTokenProvider(config.auth, timeout_seconds=config.timeout_seconds)
if config.auth is not None
else None
)
return HttpMcpToolClient(
url=config.server_url,
transport=config.transport,
headers=config.headers,
auth_provider=auth_provider,
timeout_seconds=config.timeout_seconds,
sse_read_timeout_seconds=config.sse_read_timeout_seconds,
)
raise ValueError(f"不支持的 MCP transport: {config.transport}")