修复: aichat 切换/新建对话缺陷(队列串会话/回切丢消息/审批误终态化/删除复活/切换链路)

This commit is contained in:
lxy
2026-08-08 14:20:10 +08:00
parent 795e05f42d
commit 9f75db5b15
8 changed files with 511 additions and 325 deletions
+13
View File
@@ -316,3 +316,16 @@ export function clearConvStreamState(convId: string | null | undefined): void {
if (!convId) return
convStreamStates.delete(convId)
}
// ── 切换中缓冲 ──
//
// 背景:后台会话(A)生成中,用户点击切换到 A(switchConversation await 往返期间),A 的
// AiTextDelta 事件因 `convId !== activeConversationId` 被 handleEvent 的 isCurrent 守卫丢弃 →
// 切换完成后回复缺前缀(切换窗口 token 丢失)。
//
// 本集合标记「正在被 switchConversation 拉取的目标 conv」:useAiEvents.handleEvent 对非当前
// 会话的 AiTextDelta 若命中此集合,则累积到该 conv 的 per-conv 流式态(而非 drop);
// 切换成功后由 switchConversation 恢复该流式文本续显,失败/过期路径丢弃(防陈旧重复)。
//
// 普通 Set(仅事件处理器读,无渲染追踪需求);生命周期由 switchConversation 的 finally 管理。
export const switchingConvs = new Set<string>()