websearch: MCP env 写进租户 config,不只靠 docker -e

2026-10-30 实测:Codex bash 里有 SEARXNG_URL + proxy,
MCP 链却只有 duckduckgo、DNS 瞬间失败——Codex 的 MCP
子进程不继承 Codex 进程 env;给租户 config 加
[mcp_servers.websearch.env] 后同一任务立刻返回真实
SearXNG 结果。修法:worker 在 _docker_task_context
算出网关后、容器启动前,用 ensure_websearch_mcp_env
把 proxy + 搜索 env 写进租户 config(网关此时才已知,
播种时写不死;写失败只记日志不阻塞)。
测试:新增 test_websearch_mcp_env 4 项,相关共 33 项全过。
This commit is contained in:
host committed 2026-10-30 01:16:49 +08:00
1 parent 08d56b15ce
commit 71e31b22a0
3 files changed
+164

No files matched your search

+17
View File
@@ -166,6 +166,7 @@ from cloud.peer_messages import peer_message_prefix as _peer_prefix
from cloud.peer_messages import row_get as _row_get
from cloud.sub2api import ensure_user_gateway_key as _ensure_sub2api_key
from cloud.websearch import ensure_codex_home_websearch as _ensure_websearch_mcp
from cloud.websearch import ensure_websearch_mcp_env as _ensure_websearch_mcp_env
from cloud.skill_seed import ensure_codex_home_skills as _ensure_skills
from cloud.sub2api import gateway_name as _gateway_name
from cloud.sub2api import gateway_origin as _gateway_origin
@@ -2823,6 +2824,22 @@ class Worker:
}
if search_env:
proxy_env = _merge_env(proxy_env, search_env)
# MCP env must live in config.toml, not just docker -e:
# Codex's MCP subprocess does not inherit the Codex
# process env (2026-10-30实测:Codex bash 里有
# SEARXNG_URL + proxy,MCP 链却只有 duckduckgo,
# DNS 瞬间失败;给 config 加 [mcp_servers.websearch.env]
# 后同一任务立刻返回真实 SearXNG 结果)。网关在此时
# 才已知,所以这里、容器启动前写租户 config,绝不
# 在播种时写死一个网关。写失败只记日志,不阻塞任务。
if self.tenant_isolation and proxy_env:
try:
home = self._tenant_dirs(
task.get("project_id"))["codex_home"]
_ensure_websearch_mcp_env(home, proxy_env)
except Exception as exc:
self.logger.warning(
"websearch MCP env write failed: %s" % exc)
return (True, tenant_mounts, tenant_network, proxy_env, None)
def _run_fork(self, task, quota_check=None):