Files
shiyue 69b6db0f5b 修复完整会话历史与长气泡交互并更新 CentOS 7 发布包
提交当前工作区全部源码、回归脚本、任务记录及重新构建的 Bun baseline 发布包。发布单文件 MCP 初始化及前端资源一致性验证通过。
2026-10-10 23:40:16 +08:00

2.9 KiB
Raw Permalink Blame History

cc-web 独立完整历史持久化与读取

用户需求

用户反馈「还有 45 条更早消息,但原始记录不可用,无法恢复」,说明出现在别的客户端,并明确「无法恢复这种情况是不可能存在的」。正常成功保存的 cc-web 对话必须能从自身存储完整读取,不依赖外部 Codex/Claude 日志继续存在。目标客户端及会话尚未提供,不能使用本机会话替代异机实测。

已确认根因

  1. saveSession 经过 buildSessionJsonForPersist,默认只保留最后 180 条,还会裁剪正文、工具内容与数组;超过快照大小后继续缩减,最坏仅写提示。
  2. 当前没有独立完整历史存档;截断历史只能依赖外部原始记录并确认合并边界。
  3. 原始记录不可用时 resolver 仍返回已有快照,但 available=false 导致前端禁止分页;45 等游标数量其实来自仍保存的消息。

实施要求

  • 引入 cc-web 自身的完整历史保存,快照大小限制仅用于热数据/预览,不再造成消息或内容永久消失。
  • 完整记录必须先持久化,随后才允许更新受限快照。完整历史落盘失败应明确失败,保持上次数据,不能先裁剪覆盖。
  • 完整归档已提交但受限快照更新失败时,本次历史仍已保存;记录缓存失败,重启从归档读取完整会话和元数据。
  • 支持进程重启、外部原始记录缺失、短快照反复保存、同 ID 消息内容及工具更新,保持顺序和去重;不限制完整档案的消息数和文本长度。
  • 导入和运行时通过统一保存入口覆盖;旧的确认可恢复原始前缀应安全补入自身档案,未确认的历史不得混入。
  • 正文和用户提问目录均可分页已有记录;提示准确说明旧历史来源状态,不再把可读取消息宣称无法恢复。
  • 正常完整记录读完即结束;旧版早已裁掉的记录只能基于存在且可确证的来源补齐,不伪造或掩盖缺口。
  • 不改写本机真实会话、不操作远端、不重启生产服务。记录异机实际验证仍未完成的边界。

验收

  • 超过快照条数上限的完整消息,在多次保存、重新加载存储实例/模拟重启、禁用外部原始日志后均保持全部消息和内容。
  • 超过正文与工具结果预览限制的内容可原样读回;覆盖旧快照重新保存不能把档案裁短。
  • 完整归档和快照写入失败、重复保存、同 ID 更新、跨会话隔离均有行为回归,失败不破坏上次数据。
  • 57 条快照/首屏12/游标45/原始日志不可用,剩余45逐页可读,无重复且顺序正确;用户目录完成索引。
  • 原始日志存在但边界不匹配只读取自身记录;确认可恢复的旧前缀会持久化后再提供。
  • 相关单测、全量回归、语法与差异检查通过;实际生产及异机状态如实交付。