Codex API Provider 硬编码修复工具

问题背景

想必佬们在使用 Codex 时,偶尔会遇到 resume 找不到很久以前会话的情况。

一种常见原因是 pwd 不一致,也就是当前工作目录与之前启动 Codex 时的工作目录不同。这个问题不在本文讨论范围内 通常可以用 VS Code 打开 ~/.codex/sessions,搜索关键字找到历史会话,文件第一行会记录 session_id。

Provider 变更导致的恢复问题

如果佬们经常使用中转站,可能一天内会切换多个 API Provider。修改 config.toml 中的 Provider 后,resume 很可能不再显示此前使用其他 Provider 的会话 即使强制执行 codex resume,也可能出现如下错误:

你会发现,会话仍然尝试使用旧的 Provider,而不是跟随当前的 config.toml。这是因为 OpenAI 在会话历史的 JSONL 文件和 SQLite 数据库中记录了创建会话时的 provider_id。

TUI 恢复历史会话时,如果 config.toml 中已经删除或修改了旧 Provider,Codex 就可能因为找不到配置,或者使用旧 Provider 搭配错误的 API Key 而报错。

修复工具

这里分享一个一键修复的 Python 脚本和快捷命令配置。它能够自动备份并同步修改 JSONL 会话日志与 SQLite 数据库:

fix-codex-session.zip (2.3 KB)

参数说明

通常只需输入会话 ID,其他参数均有默认行为:

  • <session_id>(必填):要修复的会话 ID,支持模糊匹配,输入末尾几位即可。
  • -n / --new-provider(选填):指定新 Provider;未提供时,自动读取当前 config.toml 中正在使用的 model_provider。
  • -o / --old-provider(选填):指定要替换的旧 Provider;未提供时,自动分析会话日志第一行。
  • --no-backup(选填):跳过备份;默认会在同级目录生成 .jsonl.bak 和 state_5.sqlite.bak 备份文件。

配置快捷命令

为了在终端的任意目录中直接调用脚本,可以配置快捷命令。

Windows(PowerShell)

  1. 在 PowerShell 中打开配置文件:
notepad $PROFILE
  1. 将以下函数写入配置文件并保存:
# Codex session fix utility
function fix-codex-session {
    python "$HOME\.codex\fix_session.py" @args
}
  1. 重新加载配置:
. $PROFILE
  1. 之后即可在任意路径运行:
fix-codex-session <session_id>

Linux

在终端执行以下命令,将别名写入 ~/.bashrc 并重新加载:

echo 'alias fix-codex-session="python3 ~/.codex/fix_session.py"' >> ~/.bashrc
source ~/.bashrc

之后同样可以全局调用:

fix-codex-session <session_id>
1 Like