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

32 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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