1.6 KiB
1.6 KiB
7-61 Page AI Pi 历史回放真源混用
问题
Pi Lab 实时对话正常,但重新打开历史 session 后,同一条 assistant 结果可能重复显示多次;工具过程没有同步重复。
根因
历史打开链路同时读取并合并两个来源:
/api/page-ai/pi/sessions/{id}/tree:Pi Rust JSONL session tree,会话消息真源。/api/page-ai/pi/sessions/{id}/events:control-plane runtime events,用于 SSE backlog、导出和诊断。
events 中同一次回复可能以 message_update/text_delta、message_end、agent_end 等形式记录运行过程;它不是历史消息 UI 的 canonical source。前端把 tree 和 events 合并回放后,就会把同一 assistant 结果渲染成多条消息。
修复
sidebar-page-ai-pi-lab-runtime.jsopenHistorySession()只从/tree读取并回放消息。- 移除历史回放消息层面的
eventsToReplayMessages()/mergeReplayMessages()/replayMessageKey(),避免用去重掩盖多真源。 /events继续保留给实时 SSE backlog、导出和诊断,不参与历史消息回放。
scripts/task-pi-lab-history-tail-smoke.js- 构造 JSONL 只有 1 条 assistant 回复,但 runtime events 中包含多段同文结果事件。
- 打开历史后断言 UI 只显示 JSONL 中的 1 条 assistant 回复。
验证
node --check rust/crates/mnote-web/browser/sidebar-page-ai-pi-lab-runtime.jsnode --check scripts/task-pi-lab-history-tail-smoke.jsnode scripts/task-pi-lab-static-smoke.jsnode scripts/task-pi-lab-history-tail-smoke.js