Skip to content

feat: save local side chats as ordinary conversations - #2660

Open
toby1123yjh wants to merge 2 commits into
BigPizzaV3:mainfrom
toby1123yjh:feat/save-side-chat
Open

toby1123yjh wants to merge 2 commits into
BigPizzaV3:mainfrom
toby1123yjh:feat/save-side-chat

Conversation

@toby1123yjh

Copy link
Copy Markdown

feat(side-chat): 支持将旁支保存为普通会话

问题

Side Chat 适合临时追问,但重启应用后无法从聊天列表恢复。如果旁支里形成了值得继续讨论的结论或代码,目前需要手动整理到新会话。

本 PR 增加「保存」入口,将需要保留的旁支变成独立普通会话,之后可以从列表重新打开并继续对话。

改动

  • 新增「旁支保存」增强,入口为「Codex 增强 → 常用增强 → 对话与输入」。默认关闭,受增强总开关控制。
  • 开启后,本地 Side Chat 标签头显示「保存」。按钮状态、悬停提示和结果提示复用现有增强样式。
  • 保存创建旁支时已有的主会话历史,以及旁支已完成的对话;主会话后续新增的内容不混入。
  • 新会话归属主会话所在的项目,按原生分叉规则命名,如 原标题 (2)。保存成功后打开新会话;失败保留原旁支,同一次保存重试复用已写入的文件。
  • 通过原生 thread/resume、thread/read 登记并核验新会话,不直接写索引数据库。保存与分享分开处理,本地保存不继承分享的 16 MiB 上限。

首版仅支持本地分页历史。旁支仍在回复、工具执行或等待审批时不可保存;历史未完整加载或旁支用户消息含图片附件时,会明确提示并保留旁支。

保存不调用模型,不重新执行历史工具。无法还原原始调用协议的工具记录作为历史参考保留,不承诺还原临时线程的全部隐藏状态。实现及边界说明见 [设计说明](https://github.com/toby1123yjh/CodexPlusPlus/blob/9d81de460965fbf14a8eeb216dfb6fdb6a263071/docs/specs/2026-10-21-save-side-chat.md)。

验证

基于上游 032ffa9a,Windows / Codex 0.162.0-alpha.2:

  • 前端测试 757 项通过、1 项跳过;npm run check、npm run vite:build 和两项注入产物一致性检查通过。
  • cargo test -p codex-plus-core --test side_chat -- --include-ignored:9 项通过。原生兼容测试通过 CODEX_PLUS_TEST_CODEX_BIN 指定本机 Codex,使用合成历史和独立目录,验证列表可见、历史及工具状态保留、进程重启后恢复,不调用模型。
  • 分享模块的 ID 重写回归测试通过;另有回归覆盖超过 16 MiB 的本地保存、主历史后续追加、前缀改写或截断、保存失败重试和同名项目归属。
  • Windows 开发版已构建并启动。

前端测试排除了 14 项在本机 Git Bash 下超时的 DMG 打包测试。工作区 Rust 测试未完成;macOS未验证。cargo clippy --workspace --all-features 完成,存在仓库既有警告;全仓格式检查存在既有差异,新增 Rust 文件格式检查通过。

@toby1123yjh

Copy link
Copy Markdown
Author

@BigPizzaV3 Codex 仓库也有类似需求:openai/codex#26227 目前有 41 个赞、19 条评论,主要也是希望旁支内容不要在重启后丢失。方便的话优先看一下这个PR

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant