Codex 多供应商多ip会话一致性解决方案
2026/8/8 6:31:26 网站建设 项目流程

Codex 会话一致性解决方案

一句话结论

同一台服务器上,只要使用同一 Linux 用户、同一 Codex 入口和同一个CODEX_HOME,无论通过127.0.0.1192.168.x.x或其他网卡 IP 登录,也无论启动默认codex还是任意 profile,/resume都应读取同一份跨 provider 会话列表。

问题现象

修复前,不同入口看到的/resume列表不一致:

  • 默认codex主要显示 xiaosi provider 的会话;

  • codex3060主要显示 3060 Ollama provider 的会话;

  • 从不同目录或不同环境进入时,还可能受到cwd、会话类型或CODEX_HOME的影响;

  • 结果是会话文件仍然存在,但目标会话没有出现在列表中,无法从当前 profile 切入。

完整逻辑链

这条逻辑包含两个缺一不可的层次:

  1. 存储层一致:所有入口必须读取同一个CODEX_HOME和同一个sessions目录。

  2. 列表层一致:恢复选择器必须取消 provider、cwd和会话来源造成的过滤。

只统一会话目录而不取消过滤,会出现“文件在,但列表看不到”;只取消过滤而使用不同CODEX_HOME,会出现“列表逻辑相同,但读取的是不同数据”。

根因

根因一:会话根目录可能分叉

Codex 根据CODEX_HOME确定配置、状态和会话目录。如果两个终端使用不同用户或不同CODEX_HOME,它们读取的会话数据天然不同。

本机统一后的会话目录是:

/home/zhuyq/.codex/sessions

根因二:恢复列表存在过滤

即使会话文件位于同一目录,官方恢复选择器仍可能按以下条件过滤:

  • 当前 model provider;

  • 当前工作目录cwd

  • 是否属于非交互会话。

默认 xiaosi、3060 Ollama 和其他 profile 使用不同 provider,因此旧运行时下的/resume会显示不同集合。

实际修复

1. 固定唯一 Codex 入口

日常执行的codex是以下包装入口:

/home/zhuyq/.local/bin/codex

它固定设置:

export CODEX_HOME=/home/zhuyq/.codex

因此默认入口和所有 profile 共用同一配置根目录与会话目录。

2. 使用跨 provider 运行时

包装入口调用:

/home/zhuyq/.local/libexec/codexdp-resume-any-provider-zh

该运行时让 TUI 的/resume使用跨 provider 恢复视图,不再只显示当前 provider 创建的会话。

3. 补齐命令行恢复参数

执行顶层codex resume时,包装入口自动补充:

--all --include-non-interactive

参数作用:

参数作用
--all取消当前cwd过滤
--include-non-interactive包含exec等非交互会话

4. 统一默认 xiaosi 配置

默认配置和xiaosiprofile 使用相同的ai-xiaosiprovider、base_urlwire_api和内置 bearer token:

/home/zhuyq/.codex/config.toml /home/zhuyq/.codex/xiaosi.config.toml

密钥不会写入本文档。

多网卡和不同 IP

IP 地址本身不是 Codex 会话的存储键。以下连接只要最终进入同一台机器、同一用户环境,就应读取同一列表:

127.0.0.1 192.168.x.x 服务器其他局域网或公网 IP

不同 IP 出现列表不一致时,真正需要检查的是:

whoami printf '%s\n' "$CODEX_HOME" readlink -f "$(command -v codex)"

正确结果应满足:

检查项期望值
用户zhuyq
CODEX_HOME/home/zhuyq/.codex
codex入口/home/zhuyq/.local/bin/codex

如果三项一致,网络入口不会导致会话分裂。

使用方法

默认入口:

codex

3060 profile:

codex3060

进入 TUI 后执行:

/resume

也可以直接按 ID 恢复:

codex resume <SESSION_ID> codex -p 3060 resume <SESSION_ID>

手工验收流程

验收必须比较真实 TUI 的/resume,不能只以codex --version或 CLI 能启动作为通过依据。

  1. 退出所有修改前已打开的 Codex TUI 和 App Server。

  2. 新开终端运行codex,输入/resume,记录列表中的会话数量和若干目标会话。

  3. 退出后运行codex3060,输入/resume,核对数量和目标会话是否相同。

  4. 对其他 profile 重复上述步骤。

  5. 如需验证多网卡,分别通过127.0.0.1192.168.x.x登录,在两边先核对用户、CODEX_HOMEcodex入口,再比较/resume

  6. 从任意 profile 选择由另一个 provider 创建的会话,确认能够实际进入,而不只是列表中可见。

验收条件:

  • 所有入口的/resume显示同一会话集合;

  • 跨 provider 会话能够实际切入;

  • 不同网络入口使用相同用户、CODEX_HOMEcodex路径。

已验证与未验证

2026-08-06 曾对默认、3060claude-code-routerdeepseekhuoshenxiaosi六个配置入口进行程序化列表对比,当时均返回 145 个活动会话,排序后的 ID 哈希均为f4a954577286e790。该结果是当时状态,不代表会话数量永久保持 145。

原验收回归脚本已按要求删除,当前不再提供该脚本。

尚未完成的验证:没有在本文档本次更新中分别通过127.0.0.1192.168.x.x建立两个真实远程 TUI 做对照。因此,多 IP 结论来自已统一的本机用户、入口和CODEX_HOME机制;实际网络验收应按上一节执行。

解决范围与边界

已解决的范围

  • 默认codexcodex3060

  • 当前所有 profile;

  • 不同工作目录;

  • 同一服务器、同一用户下的不同网卡或 IP 登录;

  • 交互会话和非交互会话的命令行恢复列表。

不会自动合并的情况

  • 实际连接的是不同服务器;

  • 登录的是不同 Linux 用户;

  • 容器或虚拟机没有共享/home/zhuyq/.codex

  • 第三方启动器覆盖了CODEX_HOME

  • PATH优先命中了另一套 Codex 安装;

  • 会话已经归档或删除。

这些情况需要先统一文件系统、用户环境或启动入口,不能仅靠跨 provider 运行时解决。

修改文件清单

路径作用
/home/zhuyq/.local/bin/codex固定CODEX_HOME、转发启动参数、补齐resume参数
/home/zhuyq/.local/libexec/codexdp-resume-any-provider-zh提供跨 provider 的 TUI 恢复视图
/home/zhuyq/.codex/config.toml默认 xiaosi 配置
/home/zhuyq/.codex/xiaosi.config.tomlxiaosi profile 配置
/home/zhuyq/.bashrc固定环境变量并定义codex3060等别名

重启要求

已经打开的 Codex TUI 或 App Server 不会自动重新加载入口脚本和配置。修改后必须退出旧进程,重新执行codex或相应 profile 命令,再使用/resume

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询