Codex Session Sync 是一个本地会话同步工具,用来把 OpenAI Codex / Codex CLI 的会话数据在多个 LLM provider 之间同步。它会同时处理 JSONL 会话文件和 state_*.sqlite 索引,让不同 provider 能看到同一批历史会话。
默认操作是 预览,只有勾选确认并执行写入时才会修改文件。写入前可以指定备份目录,工具会先备份 SQLite 和被改动的 JSONL 文件。
所有发布包都面向 Windows x64。AOT 版本不需要安装 .NET 运行时。
| 版本 | 推荐场景 | 发布形态 | 说明 |
|---|---|---|---|
| MewUI | 想要最小、最快启动的 Native AOT GUI | CodexSessionSync.MewUI-aot.zip |
Aprillz.MewUI + Direct2D,纯 C# Markup,无 XAML,按 full trim 发布。 |
| WinUI 3 | 想要最接近 Windows 11 的原生体验 | CodexSessionSync.WinUI-aot.zip |
Windows App SDK + Acrylic + 深浅色切换。必须完整解压后运行,不是单 exe。 |
| Avalonia | 想要接近 WinUI 3 的现代界面和较小 AOT 包 | CodexSessionSync.Avalonia-aot.zip |
基于 FluentAvalonia 的 AppWindow、InfoBar、SettingsExpander、FAComboBox 和 Fluent 风格按钮,并使用 Mica 背景。Windows x64 self-contained Native AOT,需保留 zip 内 native DLL。 |
| WinForms | 想要最朴素、直接、兼容性好的 GUI | CodexSessionSync.WinForms-aot.zip |
紧凑管理工具窗,self-contained AOT,需保留 zip 内 SQLite native DLL。 |
| WPF UI | 想试 lepoco/WPF UI 的 Fluent 控件 | CodexSessionSync.Wpf.WpfUi.exe |
FluentWindow、TitleBar、Card、InfoBar、ToggleSwitch,self-contained 单文件。 |
| TUI | 想在终端或脚本里跑 | CodexSessionSync.Tui-aot.zip |
Spectre.Console 交互界面,支持交互模式和脚本参数。 |
WinUI 3 包里的文件都要保留,尤其是 .pri、.mui、WinUI/XAML/Windows App SDK 运行时 DLL。它的 "self-contained" 含义是 不要求目标机器预装 Windows App Runtime,不是 "只有一个 exe"。
- 全供应商互同步:自动发现配置和会话文件里的 provider,让每个 provider 最终看到同一批会话。
- OpenAI 同步到全部:以
openai或指定 source provider 为源,给其它 provider 创建镜像会话。 - 单目标迁移:把不属于保留 provider 的会话迁移到目标 provider,改写 JSONL 和 SQLite 中的
model_provider。 - 预览优先:默认只报告将要创建、更新、跳过或冲突的项目,不写入。
- SQLite 索引同步:除了 JSONL 文件,也会同步
state_*.sqlite中的threads行和关联索引数据。 - 自动备份:写入前可备份 SQLite 和被修改的 JSONL 文件。
- Codex 运行中可读:读取文件时使用共享读写模式,Codex Desktop 正在运行时也能预览。
MewUI 版本使用 Aprillz.MewUI.Windows 和 Direct2D 后端,界面完全由 C# Markup 构建,没有 XAML 或反射绑定。项目按 self-contained Native AOT、TrimMode=full、MewUIBackend=Direct2D 发布,目标是比 WinUI/Avalonia 更轻的现代 GUI。
WinUI 3 是最偏"原生 Windows 应用"的版本。它使用 Windows App SDK 2.x,带 DesktopAcrylicBackdrop,界面有深色/浅色主题切换,并同步调整窗口标题栏按钮颜色。
Avalonia 版本使用 amwx/FluentAvalonia,应用主题由 FluentAvaloniaTheme 接管,主界面使用 AppWindow、InfoBar、SettingsExpander、FAComboBox 和 Fluent 风格按钮组织,并使用 Mica 背景和顶部深浅色切换。
WinForms 版本是轻量 fallback:控件朴素,布局直接,依赖少,self-contained AOT。
WPF UI 版本使用 CodexSessionSync.Wpf.Shared 同步执行层,基于 lepoco/WPF UI 控件库。
TUI 版本基于 Spectre.Console,适合终端环境、远程桌面、脚本化或快速检查。支持交互模式和 CLI 参数:
CodexSessionSync.Tui.exe --preview
CodexSessionSync.Tui.exe --apply
CodexSessionSync.Tui.exe --preview --mode openai --source openai
CodexSessionSync.Tui.exe --apply --mode migrate --target openai --backup-dir C:\backup| 参数 | 说明 |
|---|---|
--mode mutual|openai|migrate |
选择同步模式 |
--codex-home <path> |
指定 Codex Home |
--backup-dir <path> |
写入前备份目录 |
--source <provider> |
OpenAI 同步到全部模式的源 provider |
--target <provider> |
单目标迁移模式的目标 provider |
- 打开任一 GUI 版本,
Codex Home会默认填入CODEX_HOME或当前用户的.codex。 - 选择同步模式。
- 点击
预览查看将要执行的操作。 - 如果结果没问题,填写或确认备份目录。
- 勾选
我已备份或确认可以写入,点击执行写入。
工具按以下顺序检测:
- 环境变量
CODEX_HOME - 当前用户目录下的
.codex
CodexSessionSync.Core 是纯类库,不依赖任何 UI 框架。所有 7 个界面版本和测试项目都引用同一套同步引擎,行为保持一致。
CodexSessionSync.Core
├── SyncEngine 同步引擎(mutual / openai / migrate 三种模式)
├── ReportFormatter 统一的报告文本渲染
├── TomlParser 轻量 TOML 解析器
├── UuidV5 确定性 UUIDv5 生成
└── Models 数据模型(ConfigStatus, SyncReport, SqliteReport, MigrateResult ...)
核心处理的数据:
config.toml:解析 provider 配置和默认 provider。sessions/**/*.jsonl:读取和写入 Codex 会话事件流。state_*.sqlite:同步会话索引,确保 Codex UI 能检索到镜像会话。
关键实现:
- JSONL 使用
System.Text.Json逐行解析,避免把整份会话文件当普通文本乱改。 - TOML 使用项目内轻量解析器,只覆盖 Codex 配置所需的节、点分键和注释。
- 镜像 ID 使用 UUIDv5 确定性生成:同一个源会话同步到同一个 provider 时会得到稳定 ID。
- 生成的镜像会在
session_meta.payload中写入forked_from_id,用于后续反向映射和去重。 - 三种同步模式(mutual / openai / migrate)的执行逻辑和报告渲染全部集中在 Core 中,UI 层只负责参数收集和结果展示。
需要 .NET 10 SDK。
# 构建全部项目
dotnet build CodexSessionSync.sln
# 运行测试
dotnet test CodexSessionSync.Tests
# 一键发布所有变体
.\publish-all.ps1项目使用 GitHub Actions 自动化:
- push / PR → main:自动构建全部项目 + 运行测试。
- 推送
v*tag:自动执行publish-all.ps1并创建 GitHub Release。
项目目标是尽量提供"不安装 .NET 运行时即可运行"的 Windows x64 包:
| 项目 | 框架 | Native AOT | 单文件 | 发布备注 |
|---|---|---|---|---|
CodexSessionSync.MewUI |
Aprillz.MewUI + Direct2D | 是 | 近似 | full trim,无 XAML,zip 内包含 exe 和 SQLite native DLL。 |
CodexSessionSync.Tui |
.NET 10 + Spectre.Console | 是 | 近似 | zip 内包含 exe 和 SQLite native DLL。 |
CodexSessionSync.WinForms |
Windows Forms | 是 | 近似 | 使用 partial trim,zip 内包含 exe 和 SQLite native DLL。 |
CodexSessionSync.Avalonia |
Avalonia UI 11 | 是 | 否 | 使用 Fluent 主题和 compiled bindings,Skia/SQLite native DLL 需要 side-by-side 保留。 |
CodexSessionSync.WinUI |
WinUI 3 / Windows App SDK | 是 | 否 | self-contained 文件夹包,必须完整解压。 |
CodexSessionSync.Wpf.WpfUi |
WPF + WPF UI | 否 | 是 | self-contained 单文件,使用 lepoco/WPF UI 控件。 |
CodexSessionSync.sln 解决方案文件(包含全部项目)
CodexSessionSync.Core/ 核心同步引擎 + 报告格式化 + 模型
CodexSessionSync.MewUI/ MewUI 轻量桌面界面
CodexSessionSync.Tui/ 终端交互界面
CodexSessionSync.WinForms/ WinForms 桌面界面
CodexSessionSync.Wpf.Shared/ 两个 Fluent WPF 版本共享的同步执行层
CodexSessionSync.Wpf.WpfUi/ lepoco/WPF UI 桌面界面
CodexSessionSync.Avalonia/ Avalonia 桌面界面
CodexSessionSync.WinUI/ WinUI 3 桌面界面
CodexSessionSync.Tests/ 单元测试(xUnit)
.github/workflows/ci.yml GitHub Actions CI/CD
publish-all.ps1 一键发布脚本
| 方法 | 说明 |
|---|---|
SyncEngine.DefaultCodexHome() |
获取默认 Codex Home 路径 |
SyncEngine.InspectConfig(path, targetProvider) |
解析 Codex 配置 |
SyncEngine.ResolveStateDb(codexHome, config, explicitPath) |
定位 state_*.sqlite |
SyncEngine.ResolveConfiguredProviders(config) |
读取应参与同步的 provider |
SyncEngine.FindMutualSourceSessions(...) |
扫描源会话并建立 ID/provider/path 映射 |
SyncEngine.BuildMutualMirrorPlans(...) |
生成镜像计划 |
SyncEngine.SyncRolloutMirrors(...) |
创建或更新 JSONL 镜像文件 |
SyncEngine.SyncSqliteMirrors(...) |
同步 SQLite 索引 |
SyncEngine.RunMigrate(...) |
执行单目标迁移(改写 JSONL + SQLite) |
SyncEngine.BackupSqlite(...) |
备份 SQLite |
SyncEngine.BackupFile(...) |
备份 JSONL 文件 |
ReportFormatter.RenderMutual(...) |
渲染全供应商互同步报告 |
ReportFormatter.RenderOpenAi(...) |
渲染 OpenAI 同步报告 |
ReportFormatter.RenderMigrate(...) |
渲染单目标迁移报告 |
UuidV5.Create(...) |
生成确定性 UUIDv5 |
本项目采用 MIT 许可证 开源。