新增功能
This commit is contained in:
@@ -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 []),
|
||||
|
||||
Reference in New Issue
Block a user