新增功能

This commit is contained in:
Your Name
2026-07-28 09:46:53 +08:00
parent 45b3bc0852
commit 980795b4da
57 changed files with 18421 additions and 1051 deletions
+32 -3
View File
@@ -32,6 +32,23 @@ import ai_config
# OpenAI / DeepSeek function name 只允许 [a-zA-Z0-9_-]
_SAFE = re.compile(r"[^a-zA-Z0-9_-]+")
_SAFE_SUBPROCESS_ENV = {
"APPDATA",
"COMSPEC",
"HOME",
"LANG",
"LC_ALL",
"LOCALAPPDATA",
"PATH",
"PATHEXT",
"SYSTEMDRIVE",
"SYSTEMROOT",
"TEMP",
"TMP",
"TMPDIR",
"USERPROFILE",
"WINDIR",
}
def _safe_name(server: str, tool: str) -> str:
@@ -97,6 +114,20 @@ def _tool_result_to_text(result: Any) -> str:
return f"[tool result parse error] {e}"
def _minimal_subprocess_env(extra: dict | None = None) -> dict[str, str]:
"""Build a runnable environment without leaking unrelated parent secrets."""
env = {
key: value
for key, value in os.environ.items()
if key.upper() in _SAFE_SUBPROCESS_ENV
}
env.setdefault("PYTHONUTF8", "1")
env.setdefault("PYTHONIOENCODING", "utf-8")
if isinstance(extra, dict):
env.update({str(key): str(value) for key, value in extra.items()})
return env
class McpHub:
"""
一次回复周期内的 MCP 连接池。
@@ -150,9 +181,7 @@ class McpHub:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
env = os.environ.copy()
extra = cfg.get("env") or {}
env.update({str(k): str(v) for k, v in extra.items()})
env = _minimal_subprocess_env(cfg.get("env"))
params = StdioServerParameters(
command=cfg["command"],
args=list(cfg.get("args") or []),