Repository navigation
feat(history): 扩展会话索引修复,补齐不完整轮次与用时 - #2649
Yuimi-chaya wants to merge 10 commits into
Conversation
|
看起来和会话管理的 修复会话索引 功能差不多?可以直接完善那个。#2262 |
10b8912 to
6172235
Compare
|
当前 head 的 Windows/macOS CI 均已通过。复核发现本 PR 与已关闭的 #2262 在“历史空轮次/缺失消息补载”职责上存在明显重叠;合并前请明确由哪个入口负责补载,避免两套自动 loader 并行。当前暂不列入可直接合并清单。 |
|
感谢提醒,我核对了 #2262 和当前 main。两者确实都面向历史消息缺失,但修复层次不同:#2262 从 rollout 修复原生数据库中的消息索引;#2649 处理消息及索引已经存在、后端能够返回,但前端轮次内容尚未加载而不显示的情况。 这次 10 月的实际案例中,数据库和后端读取均正常,调用原生轮次补载后内容恢复,因此仅重复索引修复不能覆盖这个场景。当前旧功能调用的是 Rust 索引修复,并不调用前端的 我认同避免重复入口和自动调度。如果希望统一到现有会话修复功能下,我可以据此调整入口和职责划分,保留数据库索引修复与前端补载两个阶段。想先确认,这是否是期望的整合方向? |
|
@130040167 可以在现有会话修复入口下完善,我认同尽量复用入口。只是这次需要补充的是前端加载状态的恢复,单独扩展 Rust 侧的索引扫描还不够。 10 月 16 日排查的实际情况是:缺失消息已经同时存在于 rollout 和原生历史数据库中,后端历史接口也能返回;但已打开会话里的三个前端轮次,其 所以不是认为 #2262 没生效,而是它处理的“索引缺项”和这次的“索引已有、前端未加载”需要分别处理。如果统一到现有入口,可以保留索引检查,再增加针对当前已打开会话的前端补载阶段,由明确的触发入口负责,避免重复自动调度;不需要为这个场景重新插入消息或改写索引。 我可以按这个方向配合整合,具体入口和触发方式等维护者确认后再调整。至于前端最初为什么留下这些空轮次,目前还没有复现,这个 PR 是补载兜底,不是宣称已经修复了那个初始原因。 |
|
嗯,整合在一起吧。 |
问题与现有修复的关系
历史搜索能找到消息,但对话时间线可能跳过轮次,或只显示中间工作过程,缺少最终答复、文件改动及用时。一种已确认的情况是:源记录和历史索引完整,后端能够返回内容,但前端已经登记的轮次没有加载完整。
#2262 已提供基于 rollout 的消息索引修复。本 PR 在同一流程中补充前端恢复阶段,不创建第二套入口或自动 loader。持久化索引仍由原有修复负责,前端阶段不改写 rollout 或 SQLite。
入口与触发
不完整轮次的恢复
hasLoadedOldest才确认消息分页完成。loadTurnItems(..., false, ...),在共享预算内继续读取;之前已补回部分内容的轮次,在后续修复中仍可继续处理。agentMessage、fileChange等消息,保留原生显示和文件改动派生逻辑,不自行生成报告或文件清单。thread/turns/list的itemsView: "notLoaded"模式读取元数据,不请求消息正文。只对原生 ID 与终态匹配的现存轮次,经原生状态接口填入缺值;保留已有值,包括 0。并发与安全边界
上游兼容
已合并上游 v1.11.1 的 main。两处冲突均为已等价合入修复的注释差异,保留上游实现和注释;未回退上游更新。
保留独立的默认状态路径测试隔离锁及供应商同步测试断言。前端界面、翻译、原有索引扫描和修复职责不另起实现。
验证
git diff --check通过。限制
这是对已登记轮次加载不完整及缺失时间信息的有界恢复,不表示已查明最初留下异常前端状态的原因。未登记的历史、损坏的索引、丢失的源文件和缺失的原生消息投影,不由前端阶段猜测补建。
本次修复已覆盖静态原生契约及自动化回归;更新后的实际应用验收仍待进行,不把之前的人工补载成功当作本次修复的验收。仅适配可确认归属的主窗口本机会话,远端主机、活动悬浮层和快捷聊天不在范围内。
使用与边界见
docs/session-index-repair.md和docs/history-turn-recovery.md。