# 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逐页可读,无重复且顺序正确;用户目录完成索引。 - 原始日志存在但边界不匹配只读取自身记录;确认可恢复的旧前缀会持久化后再提供。 - 相关单测、全量回归、语法与差异检查通过;实际生产及异机状态如实交付。