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:
1 parent
08d56b15ce
commit
71e31b22a0
3 files changed
+164
No files matched your search
@@ -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):
|
||||
|
||||
Reference in new issue
Block a user