跳转至

阶段十三:OmniRoute latest stable 原生迁移

状态:已完成并归档

计划 ID:phase-13-omniroute-latest-stable-migration

📌 结论摘要

P13 已完成并归档,102 是唯一生产 OmniRoute 权威。 本阶段从官方 npm latest 一次性安装 omniroute@3.8.51 到 102,完成 RR 官方备份与一致性快照恢复、受控生产切换、Boss/Worker Combo、Codex Responses、管理 API、SQLite、负向鉴权、真实回退和再次切换验收。P13-B 将 MM 公网入口改为直连 100.64.0.4:39200;P13-C 按用户决定删除 RR 上全部 omni 数据、全局包、service、cutover 备份和网关 vhost。依据是 2026-10-01 最新只读观察 pass/critical=0/warnings=0、102/ RR / MM 现场回读和 GitHub Actions 成功记录;影响是 RR 不再保留 omni 回退点,恢复改由 Cloudreve P13-4 快照或 102 原生重装承担。

🗂️ 目录

✅ 最终结果

项目 最终状态 关键证据
生产权威 102 omniroute@3.8.51,Node v22.23.0 102 CLI、systemd 与 2026-10-01 观察记录
数据写者 仅 102 /root/.omniroute/storage.sqlite 为唯一生产写者
公网入口 MM 直连 102 面板 JSON 与渲染 nginx conf 均为 100.64.0.4:39200
RR 状态 omni 数据、包、service、cutover 备份、omni vhost 全部退役 data_presence=absent、package_presence=absent、service_unit_presence=absent、cutover_backup_presence=absent、origin_omni_blocks=0
RR Runtime 入口 保留本机私有代理 172.30.70.1:39181 → 100.64.0.4:39200,active/running、NRestarts=0
健康观察 101 timer 每 15 分钟只读运行 最新实时复核状态 pass,critical 与 warnings 均为 0

P13 的完成不等于把 discovery、媒体、语义缓存或日志正文导出一并启用。这些能力继续默认关闭,若要使用必须另行评估收益、隐私、资源和回退条件。

🧹 保留与删除决策

用户要求对 RR 上的保留项和删除项给出明确判断,并在资料中记录理由。因此本次归档固定以下决策,后续审计不再依赖聊天记忆。

对象 决策 理由与后续边界
RR agentmeshos-omniroute-runtime-proxy.service/.socket 保留 RR 本机 agentmeshos-ai-runtime 容器的 AI_RUNTIME_OMNIROUTE_BASE_URL 正使用 172.30.70.1:39181。它让容器通过 Docker 网络网关访问 102,不硬编码 Tailnet 或后端地址;容器经代理返回 200。它是 RR 本机容器出口,不是公网 omni 运行残留
RR origin gateway 的 omni 死配置 删除 该 vhost 不再承接 MM 公网流量,默认上游还曾在无人使用时指向 RR 本机旧端口。保留会让后续重新运行生成脚本时写回死路由,因此从生成脚本彻底移除
RR agentmeshos-main-origin-gateway.sh 更新为 v0.6.2 删除 omni server 块及 OMNIROUTE_UPSTREAM、OMNIROUTE_DISCOVERY_UPSTREAM 变量;其余 7 个业务域名继续正常生成,RR nginx -T 中 server_name omni.yohan.fun; 计数为 0
RR agentmeshos-omniroute-cutover.sh 删除 它假设“RR 本地 OmniRoute + RR 网关”仍存在,已与 P13-B/P13-C 的现实不符。保留会形成第二套已经失真的切换路径;未来公网回退只在 MM 两处反代配置中显式处理
RR /root/.omniroute、旧全局包、service、cutover 备份、历史 omni 备份、omni vhost 删除 102 已通过最终快照恢复和全链路验收;用户明确取消固定等待期并接受从此不在 RR 保留运行回退点
RR /var/lib/agentmeshos/swap/omniroute-install.swap 保留 文件名含 omniroute 但实际是 active swap,不是 omni 业务数据;RR 内存余量需要它,删除会降低故障承受能力
RR Codex MCP 凭据 保留 RR 本机 Codex 通过 https://omni.yohan.fun/api/mcp/stream 调用当前 102 生产,凭据用途仍然有效且保持 root-only

保留 Runtime 私有代理的依据是“减少容器与具体后端地址的耦合”,不是保留 RR 生产 OmniRoute。该代理的连接目标已固定到 102,且健康观察器会检查它不得重新依赖 RR 本机 agentmeshos-omniroute.service。删除 origin gateway 死配置的依据是“死路由会在下一次脚本重跑时复活”,因此它与 cutover 脚本必须作为一个整体退役,避免再次出现“文档说已直连、生成器却写回 RR”的撕裂状态。

🧪 验收证据

验收面 结果 现场证据
102 服务 通过 active/running/enabled、NRestarts=0、failed_units=0、health HTTP 200
102 数据 通过 SQLite quick_check=ok;70 个 Provider 连接、19 个 Combo、4 个 API Key
Boss Combo 通过 命中 deepseek-ai/DeepSeek-V3 并精确返回 P13_4_BOSS_OK
Worker Combo 通过 首次空内容后重试命中 command-a-reasoning-08-2025 并返回 P13_4_WORKER_RETRY_OK
Codex Responses 通过 SSE 出现 response.completed 和真实 get_status function call
管理 API 通过 19 个 Combo、4 个 API Key,Boss/Worker 路由策略可回读
负向鉴权 通过 未授权 401、错误 Token 403、路径穿越 400/403、错误模型 400
公网入口 通过 https://omni.yohan.fun/api/monitoring/health 返回 200/healthy
102 edge 代理 通过 FD 软上限 65536、最大连接 4096、guard active
RR 退役边界 通过 omni 数据/包/unit/cutover 备份/网关 vhost 均不存在,failed unit 为 0
Runtime 私有代理 通过 active/running、NRestarts=0、无本机 omni 依赖、目标为 100.64.0.4:39200
最新只读复核 通过 2026-10-01T02:45:00Z 观察状态 pass、critical 0、warnings 0

真实回退和再次切换已在删除 RR 回退点之前完成:102 清洁快照 snapshot_20260930T232400Z_p13-4-rollback-clean 的 SHA-256 为 63bc1deeefa5efba14316a3e099b5faf494f1a2d0074d3ff5d1d9bb35a0c7b60;RR 恢复并 rollback 后真实调用返回 P13_4_ROLLBACK_OK;RR 再生成回流快照 snapshot_20260930T233238Z_p13-4-return-to-102,SHA-256 为 4f9553f84560205bc81417f14c5381cd311f95c74bb3a8356b97ce8a8fc97655,102 恢复后重新承接。该演练证明删除 RR 回退点之前迁移路径确实可逆。

提交 64d291d 已推送 GitHub,post-push-verify.sh 通过,必需工作流 Build Docs Site、Docker Image、Repository Guardrails 全部成功。P13 最终归档提交还会再次执行同一完整门禁,不能只引用上一次成功。

🔄 版本变化与后续使用

上一生产版本为 RR 3.8.50,P13 直接安装执行时的官方 npm latest 3.8.51,没有先装旧版本再升级。两版的主要变化和使用优先级如下。

变化方向 3.8.51 的主要变化 AgentMeshOS 后续用法
路由与稳定性 分层并发准入、自适应推理强度、Provider 断路器、冷却与 429 判断修正 继续用于 Boss/Worker 和长 Responses;观察真实错误率与空响应
Provider 与模型目录 模型 allowlist/denylist、实时账号目录、模型别名扩充 保留现有正式目录,不因升级自动开放所有模型
Free tier 与 Radar 免费资格、isFree、限速展示和训练提示 继续受零成本优先与隐私规则约束
可观测性 编排图、历史对比、Repeat、首包耗时、MCP 时间线 只读能力可在需要时采用;日志正文导出保持关闭
安全加固 请求钩子隔离、IP allow/deny、内网端点拒绝、OAuth 路由保护和路径穿越防护 已做未授权、错误 Token、路径穿越负向回归
媒体与上下文压缩 Video/Audio Bridge、STT、线程池与可选语义缓存 不默认启用,按收益、资源、隐私和回退逐项评审
数据与迁移 schema 收敛、懒建表、迁移数量和运行目录变化 升级或重装必须先完整备份、隔离恢复、核对迁移计数和 quick_check

后续使用顺序固定为:现有 Boss/Worker Combo 与 Chat Completions 第一优先;Codex Responses SSE/tools 第一优先并持续真实回归;管理 API 和只读可观测性第二优先;媒体、语义缓存、日志正文导出和训练相关能力第三优先且默认关闭。

🔁 回退与恢复

场景 恢复路径 边界
102 服务故障 先保留日志和数据库证据,再修复 systemd、edge guard 或官方包运行环境 不得在 RR 重新启动第二套 OmniRoute 写者
102 数据损坏 从 Cloudreve P13-4 一致性快照恢复到 102,核对 SHA-256、quick_check、迁移计数和日志 恢复期间必须停止 102 写入
102 主机需要重建 使用 agentmeshos-omniroute-native-deploy.sh 安装执行版本,再从长期快照恢复数据 新版本必须重新查询并固定,不得照抄历史版本
公网入口故障 在 MM 面板 JSON 与渲染 nginx conf 两处同时修正 omni.yohan.fun 上游 只改渲染文件会被面板下一次保存覆盖
RR Runtime 容器访问失败 检查 172.30.70.1:39181 代理、UFW 和 102 39200;不得恢复 RR 本地 OmniRoute 代理是宿主出口,不是生产数据副本
旧 RR 回退需求 不再存在;只能从 Cloudreve 快照恢复或在 102 重装 这是用户明确接受的恢复边界

⚠️ 残余风险与未决项

事项 当前事实 下一步
长期健康观察 101 timer active/enabled,最新实时复核 pass 异常按独立运维事件处理,不重新打开 P13
Worker 空响应 首测一次空正文,重试成功 持续统计;若稳定复现,另立 Provider/Combo 运维问题
discovery RR controlled-discovery 无后端且已停用 保持关闭,或另立 102 discovery 部署评估
新版本可选能力 媒体、语义缓存、日志正文导出未启用 按收益、隐私、资源和回退逐项评审
RR 数据删除 用户已明确不需要等待期,RR 回退点已删除 不再需要用户决策;恢复以 P13-4 快照和 102 重装为准
P14 范围 已进入“OmniRoute 官方能力接入与搜索试点”,首轮双监听和四工具接入已完成 先完成 x-search 外部凭据,再决定后续能力扩展

P13 没有阻塞关闭的未决项。后续发现的状态漂移属于新的运维事件,不得重新打开已经完成的 P13 工作包。

🧾 归档后状态更正(2026-10-01)

P13 关闭后,状态机切换到 P14“OmniRoute 官方能力接入与搜索试点”,随后用户授权并锁定双监听、Tailnet 默认和四工具客户端裁剪。P14 不把 P13 的可选能力自动升级为新任务。P13 的部署事实、RR 退役边界和恢复路径继续以本页为准。