Files
cc-web/.planning/history-message-recall/task_plan.md
2026-09-11 09:29:53 +08:00

45 lines
2.1 KiB
Markdown
Raw 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.

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