顶富Astra说你好...
成功解决✅

解决codex的websocket报错+会话迁移

给一台新电脑装了个codex cli,但是上来就是雷霆大报错+超时5次。因为系统环境不一样,梯子也换了,就很神经

报错信息…
Falling back from WebSockets to HTTPS transport.
stream disconnected before completion: tls handshake eof

那总不能每次开新对话等他重连3分钟吧?既然网络不好解决,干脆去解决codex了。

但是gpt订阅不能直接改配置文件,改了没用,于是在github找到解决方法,改 ~/.codex/config.toml 即可,新增一个配置从而关掉websocket。

~/.codex/config.toml
model_provider = "chatgpt-http"

[model_providers.chatgpt-http]
name = "ChatGPT HTTP"
base_url = "https://chatgpt.com/backend-api/codex"
wire_api = "responses"
requires_openai_auth = true
supports_websockets = false        # ← 关键:禁用 WebSocket
stream_idle_timeout_ms = 60000
stream_max_retries = 5

然后,问题来了,旧的会话怎么办? codex下面其实有写什么ctrl+o和ctrl+e的,可惜都不能跨供应商打开。
不过还好,社区也有一些工具能搞定,比如这个

WattskiTian/codex-resume-any: 跨 provider 恢复 Codex CLI 本地历史会话的轻量级 fzf 工具

虽然但是,这个star有点少,见仁见智吧。

哪有没更彻底的方法呢?我当时要agent直接帮我改sql了,但是后来发现Linux Do上面有个文章很好,这里也搬运一下吧

不依赖任何软件,手动解决Codex多供应商会话隔离 – 开发调优 – LINUX DO

但是但是,对于ai时代的懒人来说,手操sql是万万不可能的,所以我也整理了一份agent提示词,直接复制粘贴一键搞定。

懒人提示词
# 任务目标
通过修改本地 Codex CLI 的 SQLite 数据库和会话文件,将指定会话的供应商(model_provider)进行更改,实现跨供应商加载会话。

# 前提条件与安全规范
1. 操作前必须备份 ~/.codex/ 下的 state_5.sqlite 以及目标 JSONL 文件,防止数据损坏。
2. 必须确保 Codex 以及相关软件(如 CC Switch、Codex++)已完全退出,确保文件未被占用。

# 环境路径说明
- Windows 默认数据目录:`C:\Users\<用户名>\.codex\`
- Linux 默认数据目录:`~/.codex/`
(下文以 `CODEX_DIR` 代指该目录)

# 执行步骤

## 步骤 1:修改 SQLite 数据库索引
1. 定位数据库文件:`<CODEX_DIR>/state_5.sqlite`。
2. 打开数据库中的 `threads` 表。
3. 根据会话的 `title` 或 `cwd` 找到目标会话记录。
4. 修改该会话的 `model_provider` 字段值。非官方供应商统一改为 `custom`。
5. 注意:必须处理 WAL 模式(如有 `state_5.sqlite-wal` 和 `state_5.sqlite-shm` 文件),确保修改被写入并提交(执行 COMMIT)。

## 步骤 2:修改 JSONL 会话文件
1. 从 `threads` 表刚才修改的记录中,读取 `rollout_path` 字段的值(这是 JSONL 文件的绝对路径,例如 `C:\Users\user25\.codex\sessions\...\rollout-xxx.jsonl` 或 Linux 下的 `~/.codex/sessions/...`)。
2. 打开该 JSONL 文件。
3. 读取并修改文件的第一行(通常是 `session_meta` 类型)。
4. 将第一行 JSON 数据中的 `payload.model_provider` 字段的值,修改为与步骤 1 数据库修改的值保持一致(即 `custom`)。
5. 保存并关闭 JSONL 文件。

## 步骤 3:完成与验证
1. 确认所有文件已保存,数据库连接已释放。
2. 输出执行结果报告(包含修改的会话 ID、原供应商、新供应商、JSONL 路径)。
3. 提示用户重新打开 Codex 进行验证(重启后会话将成功同步)。

# 注意事项
- Windows 和 Linux 目录层级结构一致,仅根路径不同。
- 务必确保 JSONL 第一行内部的 `model_provider` 与数据库的值严格一致,否则会引起加载错误。
- 如果第一行 JSON 中原本没有 `model_provider` 字段,需要根据其 JSON 结构合理插入。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注