Codex Desktop 本地会话侧边栏在会话数量较多时可能会显示空的项目文件夹

Codex Desktop 本地会话侧边栏在会话数量很多时可能会显示为空的项目文件夹

我在 Windows 上遇到一个 Codex Desktop 问题:侧边栏里较旧的项目文件夹会显示为没有任何对话,尽管这些会话在磁盘上仍然存在。

我观察到的情况

在一台拥有数百个本地 Codex 会话的机器上:

  • SQLite 状态数据库里仍然有 thread 行记录。
  • .codex/sessions 目录下的 rollout JSONL 文件仍然存在。
  • 直接调用 codex.exe app-serverthread/list,在使用分页时可以返回那些缺失的对话。
  • Desktop 侧边栏仍会把一些项目文件夹显示为空,尤其是那些较旧、且位于最初加载的“近期线程”窗口之外的文件夹。

这会让人以为会话被删除了,但其实并没有。问题在于:UI 没有加载足够多的近期线程,导致这些项目分组无法被填充。

本地变通方案

我做了一个仅限 Windows 的本地变通方案,保持官方 Codex 应用不被改动:

  1. 将已安装的官方 Codex 应用资源复制到单独的本地补丁目录中。
  2. 解包 resources/app.asar
  3. 修补前端的近期线程管理器,让初始的近期线程拉取能够沿着 nextCursor 连续获取多页,而不是依赖很小的第一页。
  4. 将“加载更多”和侧边栏搜索的上限提高到 1000。
  5. 通过一个独立的 Electron 运行器启动已打补丁的应用,并使用它自己的 CODEX_ELECTRON_USER_DATA_PATH
  6. 将窗口标题改为 Codex Patched,这样它就能与官方的 Codex 窗口共存而不至于混淆。

项目:

这不会修改 .codex/state_5.sqlite,不会重排 updated_at,也不会删除或重写 rollout 文件。它只会改动一份复制出来的前端 bundle。

建议的上游修复

如果 Codex Desktop 允许用户配置本地会话/侧边栏历史的限制,或者侧边栏能自动分页到足够远、从而可靠地填充项目文件夹,会很有帮助。

至少,UI 应该能区分:

  • “此文件夹没有对话”
  • “对话列表尚未完全加载”

对于本地历史很大的用户,一个可配置的上限(例如 50 / 100 / 500 / 1000 / 全部)能让行为更可预测,并消除本地打补丁的需求。

佬做啥项目啊哈哈,我vibe coding基本只开三到四个窗口