# 修复历史消息回看入口 ## 目标 让被本地展示裁剪的旧消息仍然可通过明确入口回看,保留当前渲染性能与会话加载稳定性。 ## 步骤 - [x] 定位消息裁剪逻辑、历史数据来源和现有接口 - [x] 明确按需加载旧消息的交互与数据边界 - [x] 实现历史消息回看入口及服务端/客户端衔接 - [x] 补充裁剪与历史回看回归测试 - [x] 运行测试并核验兼容性,完成后按约定清理临时 TODO 文件 ## 验收标准 - 默认加载仍只渲染最近 45 条(或当前代码实际配置的同等窗口),不会因增加入口而自动拉取全部旧消息。 - 出现“省略 50 条旧消息”时,界面有清晰可操作的回看入口,而不是只有数量提示。 - 用户点击入口后能看到被省略消息的真实内容,并可继续按页查看更早消息。 - 回看后的顺序、时间线、角色、内容和现有消息渲染保持正确;滚动位置不会跳乱。 - 覆盖空历史、旧消息不足一页、连续多页、重复点击、加载失败和新消息并发到达等边界。 ## 错误记录 | 错误 | 尝试 | 处理 | |---|---:|---| ## 当前决策 - 不删除旧消息数据,只调整本地展示和按需加载路径。 - 先复用现有会话消息接口;只有确认接口无法分页时才扩展接口。 ## 风险与约束 - 优先使用分页/游标加载,避免一次性把全部历史复制到浏览器内存。 - 历史加载与实时新消息并发时,必须按稳定消息索引或 ID 去重并保持排序。 - 历史接口沿用会话归属校验;失败时给出可理解的错误反馈并允许重试。 - 不能破坏现有裁剪提示、缓存、滚动位置和消息渲染批处理。 ## 已确认实现边界 - 旧消息优先从 Claude JSONL / Codex rollout 原始记录恢复;cc-web 快照只作为无原始记录时的降级来源。 - 正常打开会话只渲染最近窗口;历史按钮使用现有 `load_history_page` WebSocket 按游标加载。 - 搜索命中跳转仍允许目标预取,不受普通会话的按需加载策略影响。