一个解决 Codex 中转站 ↔ 官方登录切换后历史会话消失 问题的桌面工具。
Codex 会把每个会话打上 model_provider(供应商标识):
- 官方 ChatGPT 登录 →
openai - 中转站 / API 站 → 站点配置的自定义 ID(如
superapi、packycode等)
会话列表按当前供应商过滤显示。一旦你从官方切到中转站(或反过来), 之前用另一身份产生的所有历史会话就不再出现在列表里 —— 数据其实还在磁盘上, 只是被"隐藏"了。
本工具把数据库和会话文件里的供应商标记统一到当前身份, 让全部历史会话在任何登录方式下都完整可见。
| 功能 | 说明 |
|---|---|
| 🔍 健康总览 | 当前认证状态、供应商分布、孤儿/缺失文件检测、健康检查清单 |
| 🔄 一键同步 | 统一数据库 + 全部会话文件的 provider 标记;支持试运行预览 |
| 📥 孤儿收养 | 磁盘上存在但未注册到数据库的会话文件,一键找回(自动跳过子代理会话) |
| 👤 配置档案 | 把官方/各家中转站的 auth.json + config.toml 存成档案,一键切换并自动同步 |
| 🗄 备份恢复 | 每次修改前自动快照到 ~/.codex/session-sync/backups/,支持一键回滚 |
- 完全退出 Codex(桌面版 / CLI / VS Code 插件都要退)
- 双击
CodexSync.exe - 推荐流程:
- 「配置档案」→ 把当前官方登录存为「官方」,把中转站配置存为对应名字
- 以后切换 = 点档案上的「切换并同步」
- 或者手动切换登录后,来「会话同步」页点一次「开始同步」
⚠️ 配置档案包含你的登录凭据,仅保存在本机~/.codex/session-sync/profiles/下。
npm install # 安装 @tauri-apps/cli
npx tauri build # 产出 src-tauri/target/release/CodexSync.exe无头自检(内置端到端验证:扫描→试运行→真实同步→收养→回滚往返):
python scripts/make_fixture.py /tmp/fixture-home # 构造假数据
CODEX_SYNC_CODEX_HOME=/tmp/fixture-home \
src-tauri/target/release/CodexSync.exe --selftest --apply- 修改对象:
~/.codex/state_5.sqlite的threads.model_provider列- 各 rollout JSONL 文件头部
session_meta.payload.model_provider字段 (未涉及的行保持字节级不变,JSON 键顺序保留)
- 安全机制:
- 写入前自动备份(SQLite 主库 + WAL/SHM + 将被重写的每个 JSONL)
BEGIN IMMEDIATE检测数据库占用,Codex 未退出时拒绝操作并提示- JSONL 采用临时文件 + 原子替换写入
- 收养规则:仅收养用户会话(
thread_source != "subagent"),标题从首条用户消息提取
src-tauri/src/
├── main.rs 入口 + 无头自检模式
├── types.rs 前后端共享数据结构
├── paths.rs 路径解析与规范化(处理 \\?\ 前缀、大小写)
├── codex_home.rs config.toml / auth.json 解析,当前供应商识别
├── db.rs SQLite 访问(threads 表读写、事务、锁检测)
├── rollouts.rs JSONL 扫描 / 元数据重写 / 孤儿识别与入库
├── backup.rs 备份与恢复(含 manifest)
├── profiles.rs 配置档案管理
├── sync.rs 同步引擎(只读分析 → 备份 → 事务写入 → 文件重写)
└── commands.rs Tauri 命令层
ui/ 纯静态前端(HTML/CSS/JS,深色玻璃拟态主题)
scripts/ 图标生成 / 测试夹具脚本
