跳转至

阶段十四:OmniRoute 官方能力接入与搜索试点

阶段状态:进行中

计划状态:已完成

当前工作包:P14-1 OmniRoute 搜索 MCP 双监听接入与三工具验收

📌 结论摘要

P14 已从占位阶段进入实施阶段,搜索试点主链路已经可用。 102 同时监听 Tailnet 与局域网,101 默认使用 100.64.0.4:39200 接入 OmniRoute 官方 MCP;本地 local_search_registry 与 Omni omniroute_search_101 当前同时启用,Omni 客户端只暴露 omniroute_web_search、omniroute_web_fetch、omniroute_tool_search 三个工具。omniroute_x_search 已从 Codex 客户端移除,xAI 上游模型也已关闭,因此不再是待修复项。依据是 /root/.codex/config.toml、codex mcp list、本地与 Omni 各 5 项真实查询以及独立通道复核;影响是日常搜索可以继续本地优先,本地失败后再显式回退 Omni,当前无需修改 OmniRoute 包、数据库或 Provider 配置。

🧾 计划状态

项目 当前值 依据
当前阶段 P14 docs/plans/state.json
阶段状态 进行中 用户已授权并完成首轮实施
计划状态 已完成 工作包、边界、验收与回退已冻结
当前工作包 P14-1 OmniRoute 搜索 MCP 双监听接入与三工具验收 双监听、专用 Key、三工具客户端裁剪和双通道真实测试已执行
上一阶段 P13 已完成并归档 P13 完成归档
生产权威 102 官方 omniroute@3.8.51 未升级、未改源码、未替换官方包

P14 的边界不是“继续做 P13 未完成事项”,而是把官方 OmniRoute 能力安全地暴露给 101 Codex。当前只启用搜索第一阶段,不启用 Memory 自动注入、压缩自动接管、媒体生成自动路由或全局 MCP_TOOL_ALLOW。

🧱 技术栈与架构选型

方案 优点 缺点 决策
102 双监听 + 101 Tailnet 默认接入 保留局域网低延迟,Tailnet 可作为节点回退;不新增中间代理 需要按接口分别维护来源 guard 采用
只保留 Tailnet 单监听 配置最少 本机局域网链路无法直接验证,地址变化时路径单一 不采用
用 101 本地反向代理做双 URL 自动切换 表面上自动容灾 新增自建常驻层,扩大故障面和恢复复杂度 不采用
改 OmniRoute 源码或构建产物 可强行改变工具目录或会话行为 违反官方不可变包规则,升级即被覆盖 禁止
Omni 全局 MCP_TOOL_ALLOW 服务端真正缩减 tools/list 会影响所有同入口客户端,误伤面大 暂不采用
Codex 客户端 enabled_tools 按节点即时裁剪、易回退 服务端仍下发完整清单 采用

架构继续复用 Tailscale、systemd、官方 OmniRoute、Codex MCP 客户端和现有 102 服务,不新增调度器、Runtime、网关、数据库写者或平行状态源。实施只修改宿主层 edge 脚本和 101 客户端配置,OmniRoute npm 包、数据库和服务文件未改。

🎯 目标、成果与验收契约

工作包 目标 当前状态 验收依据
P14-0 确认三项决策与边界 已完成 双监听、Tailnet 默认已实施;客户端工具面最终收敛为三工具
P14-1.1 102 增加 LAN 监听且按接口 guard 已完成 192.168.50.102:39200 与 100.64.0.4:39200 同时监听
P14-1.2 101 使用专用最小范围 Key 接入 已完成 agentmeshos-search-mcp-101-20261001 与 0600 凭据文件
P14-1.3 只向模型暴露三个搜索工具 已完成 enabled_tools 仅保留 web_search、web_fetch、tool_search;x_search 已移除
P14-1.4 真实测试三个工具与两条搜索通道 已完成 本地与 Omni 各 5 项查询通过;web_fetch、tool_search 和当前独立复核通过
P14-1.5 排除功能重叠的旧 MCP 已完成 omniroute_full_boundary.enabled=false

验收规则固定为:搜索默认先调用本机 local_search_registry;本地报错、超时或无有效结果时,回退 omniroute_web_search 并显式选择 Provider。auto 不作为稳定默认,避免再次命中不稳定 Provider。

🧩 分布式底座接入声明

接入结论:P14-1 接入 102 的官方 OmniRoute MCP 和 101 Codex 客户端配置,不接入 Nomad 任务面。

使用层 执行映射 边界
Network 101 → 100.64.0.4:39200;LAN 192.168.50.102:39200 作人工测试入口 102 guard 只放行授权来源,其他来源 DROP
Compute 搜索执行发生在 102 OmniRoute 进程内 不向 Nomad 提交 Job,不改变 Runtime
Storage 继续使用 102 /root/.omniroute/storage.sqlite 未做迁移、停写、恢复或 schema 变更
Observability health、日志、systemd 和真实工具调用 不新增常驻观察服务
Credentials /root/.codex/credentials/omniroute-search-mcp-101.env 0600;Key 原文不进入项目、日志或回复
Lifecycle systemd socket/guard + 101 Codex 配置 失败可由脚本 rollback 恢复入口,客户端配置有备份

101 默认地址已从公网旧入口切换为 Tailnet 私有入口,旧 omniroute_full_boundary 保留但停用,作为明确回退材料,不并行下发工具清单。

🧪 执行与现场证据

证据 结果 说明
102 版本与服务 官方 omniroute@3.8.51 未修改包内容、未重新编译
双监听 100.64.0.4:39200、192.168.50.102:39200 ss 回读均显示 systemd-socket-proxyd
双入口 health 两地址均返回 healthy 从 101 实测
本地搜索 独立禁用 Omni 后,5/5 查询成功并各返回 3 条 第一条命中分别为 OpenAI、SearXNG、PostgreSQL、OpenAI DevDay、Tailscale 官方页面
Omni 回退 独立禁用本地后,serper-search 5/5 查询成功并各返回 3 条 首条与本地一致;单次约 1.6–2.0 秒、0.001 USD,带发布时间和 Provider 元数据
当前复核 本地 search_web 与 Omni omniroute_web_search(provider=serper-search) 均返回 https://openai.com/ Omni 本次 response_time_ms=2756、search_cost_usd=0.001;证明接口改动后两条通道仍可用
抓取 firecrawl 成功返回 OpenAI 页面 Markdown omniroute_web_fetch 通过
工具发现 omniroute_tool_search("search") 返回 8 个工具 MCP 工具搜索可用
X 搜索 omniroute_x_search 已从 Codex 客户端移除,Omni 控制台中的对应模型已关闭 不再把它列为阻塞项,也不以源码补丁绕过上游授权
客户端裁剪 三个工具可调用,omniroute_get_health 不可见 证明 enabled_tools 生效

102 edge 脚本仓库版本为 v0.2.0,SHA-256 为 22b280165773d371e0548ae52c01a266d24aefa2c23f64c392c0b60316400fe2。部署前备份位于 102 /root/.omniroute-edge-backups/agentmeshos-omniroute-edge.sh.20261001T040425Z.pre-v0.2.0。

🔁 回退方案

变更 回退方式 回退点
102 双监听与 guard 将 edge 脚本恢复到 v0.1.2 并执行 rollback,再重新 apply 102 /root/.omniroute-edge-backups/
101 搜索 MCP 恢复 config.toml 备份并重启或重新加载 Codex MCP /root/.codex/config.toml.bak.20261001T035946Z.omniroute-search-mcp-101
旧全量 MCP 可显式重新启用旧条目 当前仅停用,未删除
专用 Key 通过官方 OmniRoute 控制台撤销或停用 Key ID bb05f5ac-3458-495d-8fff-66d66de0b63e

回退不得修改 OmniRoute 包内容、数据库 schema 或其他节点服务。生产权威和唯一 SQLite 写者仍是 102。

⚠️ 风险与未决项

事项 当前事实 下一步
本地优先与 Omni 回退 两套入口当前同时启用,实测均可独立完成搜索 保留“本地优先、Omni 显式 Provider 兜底”,不增加本机代理或自动切换层
xquik-search 官方实现存在,但当前没有配置凭据 非当前必经路径;除非明确启用 xquik,否则不处理
SearXNG 瞬时超时 首次 MCP 查询返回 0,日志显示部分引擎 timeout/429,随后重试成功 保留本地优先和 Omni 显式 Provider 回退,不把单次失败升级为架构改造
桌面会话缓存 当前运行中的旧任务可能仍持有旧 MCP 清单 新任务已回读三工具清单;旧任务不强制重启,后续新任务生效
MCP 审计页时区 102 宿主为 Asia/Shanghai;官方 3.8.51 将 UTC created_at 原样返回,前端把不带时区的值按本地时间显示,因此页面仍显示 UTC 数值 页面值按 UTC 读取,或等待官方上游修复;不修改官方前端、包文件、数据库结构,也不以浏览器/VNC 时区作为该问题的修复路径

当前 P14-1 不要求再修改 OmniRoute 包、数据库或 102 服务。若后续要扩展其他 MCP 能力,应另立工作包并按实际需求分类裁剪。