[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-78765":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},78765,"codex-provider-sync","Dailin521\u002Fcodex-provider-sync","Dailin521","Synchronize Codex session provider metadata across rollout files and SQLite state.",null,"C#",2076,92,4,7,0,179,463,765,537,27.91,"MIT License",false,"main",true,[],"2026-06-12 02:03:48","\u003Cdiv align=\"center\">\n\n# codex-provider-sync\n\n### 切换 provider 后，让 Codex 历史会话重新可见\n\n[![CI](https:\u002F\u002Fgithub.com\u002FDailin521\u002Fcodex-provider-sync\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FDailin521\u002Fcodex-provider-sync\u002Factions\u002Fworkflows\u002Fci.yml)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows-lightgrey.svg)](https:\u002F\u002Fgithub.com\u002FDailin521\u002Fcodex-provider-sync)\n[![Node](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-24%2B-brightgreen.svg)](https:\u002F\u002Fnodejs.org\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg)](LICENSE)\n\n中文 | [English](docs\u002FREADME_EN.md)\n\n\u003C\u002Fdiv>\n\n## 解决什么问题\n\nCodex 切换 `model_provider` 后，旧会话可能在 Desktop 或 `\u002Fresume` 里不可见。原因通常不是会话文件丢了，而是 rollout 文件、SQLite 线程表、项目路径缓存里的 provider \u002F 可见性 metadata 不一致。\n\n本工具同步这些位置：\n\n- `~\u002F.codex\u002Fsessions`\n- `~\u002F.codex\u002Farchived_sessions`\n- `~\u002F.codex\u002Fstate_5.sqlite`\n- `.codex-global-state.json` 中的项目根路径缓存\n\n## 快速使用\n\nWindows 用户优先下载 Release 里的 `CodexProviderSync.exe`：\n\n1. 打开 `CodexProviderSync.exe`\n2. 点击 `Refresh`\n3. 选择目标 Provider\n4. 点击 `Execute`\n\nmacOS 等环境使用 CLI：\n\n```bash\nnpm install -g git+https:\u002F\u002Fgithub.com\u002FDailin521\u002Fcodex-provider-sync.git\ncodex-provider sync\n```\n\nCLI 需要 Node.js `24+`。如果使用 Node 20\u002F22，可能会看到 `node:sqlite` 不存在的错误。\n\n更多 CLI 常用命令：\n\n```bash\ncodex-provider status\ncodex-provider sync\ncodex-provider sync --provider openai\ncodex-provider switch apigather\ncodex-provider restore C:\\Users\\you\\.codex\\backups_state\\provider-sync\\\u003Ctimestamp>\ncodex-provider prune-backups --keep 5\n```\n\n命令含义：\n\n- `status`：只检查当前 provider、rollout、SQLite、项目可见性诊断。\n- `sync`：不切换登录状态，只把历史会话 metadata 同步到当前 provider。\n- `switch \u003Cprovider-id>`：修改 `config.toml` 根级 `model_provider`，然后执行同步。\n- `restore \u003Cbackup-dir>`：从备份恢复，支持 `--no-config`、`--no-db`、`--no-sessions`。\n- `prune-backups --keep \u003Cn>`：只清理本工具创建的旧备份。\n\n## 能力边界\n\n本工具只修复“历史会话可见性”相关 metadata，不修改会话内容。\n\n- 不处理登录、认证、`auth.json` 或第三方切号工具。\n- 不修改消息历史、会话标题、对话内容。\n- 不修改 `updated_at`，不通过改变历史排序来修复 Desktop 显示。\n- 不把旧会话里的 `encrypted_content` 重新加密到另一个 provider \u002F account。\n- 含 `encrypted_content` 的旧会话跨 provider\u002Faccount 后，通常只能恢复列表可见性，继续对话或 compact 仍可能报 `invalid_encrypted_content`。\n\n## Codex Desktop 最近 50 条限制\n\n目前 Codex Desktop 的 Recent\u002F项目侧会话列表存在一个上游显示限制：前端首屏只拉取最近 `50` 条会话。\n\n影响：\n\n- CLI `\u002Fresume` 能看到的旧会话，Desktop 项目侧可能仍显示“暂无对话”。\n- 旧项目会话如果排在全局最近 50 条之后，Desktop 首屏可能不会展示。\n- `codex-provider-sync status` \u002F GUI Refresh 会显示 `first page 0\u002F50`、`ranks 64-77` 这类诊断，帮助判断是不是这个问题。\n\n本工具不会通过修改 `updated_at` 或文件时间把旧会话强行挤进前 50。这个问题应由 Codex Desktop 上游改成按项目分页加载，或提高\u002F开放首屏加载数量。\n\n## 安全与排障\n\n每次 `sync` \u002F `switch` 前都会备份到：\n\n```text\n~\u002F.codex\u002Fbackups_state\u002Fprovider-sync\u002F\u003Ctimestamp>\n```\n\n注意：\n\n- 如果 `state_5.sqlite` 被占用，关闭 Codex \u002F Codex App \u002F app-server 后重试。\n- 如果 `state_5.sqlite` 损坏，工具会提示 malformed\u002Funreadable 并停止同步。\n- 如果活跃会话锁住 rollout 文件，工具会跳过该文件并继续处理其它历史会话。\n- 如果 EXE 双击无反应，先确认已解压，再查看 `%AppData%\\codex-provider-sync\\startup-error.log`，或在 PowerShell 里运行 `.\u002FCodexProviderSync.exe`。\n\nGUI 说明见 [README_GUI_ZH.md](docs\u002FREADME_GUI_ZH.md)。AI \u002F Agent 说明见 [AGENTS.md](AGENTS.md)。\n\n## 开发\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FDailin521\u002Fcodex-provider-sync.git\ncd codex-provider-sync\nnpm test\ndotnet test desktop\u002FCodexProviderSync.Core.Tests\u002FCodexProviderSync.Core.Tests.csproj\npwsh .\u002Fscripts\u002Fpublish-gui.ps1\n```\n\n## License\n\nMIT\n","codex-provider-sync 是一个用于同步 Codex 会话提供者元数据的工具，确保在切换提供者后历史会话仍然可见。其核心功能包括同步 `~\u002F.codex\u002Fsessions`、`~\u002F.codex\u002Farchived_sessions`、`~\u002F.codex\u002Fstate_5.sqlite` 和 `.codex-global-state.json` 中的项目根路径缓存，以解决因元数据不一致导致的历史会话不可见问题。该工具支持 Windows 平台上的图形界面操作以及 macOS 等环境下的命令行使用，并且需要 Node.js 24 及以上版本。适用于开发者在切换 Codex 提供者时，希望保留并恢复历史会话可见性的场景。",2,"2026-06-11 03:57:09","high_star"]