新增: 待发箱抽屉与对话体验前端批
- 待发箱抽屉: ChatInput ⏰ 入口 + OutboxDrawer + useAiOutbox IPC 封装
- U2 进度语义三层: 内容层(最近动作) + 静默三档降速脉冲, 永不自动判死
- 流式心跳自愈: 竞态窗口旧任务迟到完成事件误收敛的自愈判定(949 前端兜底)
- 953 截断提示: 末条气泡渲染截断标记 + 继续输出按钮, 事件契约透传
This commit is contained in:
@@ -202,6 +202,19 @@ export async function handleLifecycleEvent(event: AiChatEvent): Promise<boolean>
|
||||
timestamp: Date.now(),
|
||||
})
|
||||
}
|
||||
// 看板 953:max_tokens 截断标记(主对话气泡截断提示条的数据源)。后端正常收敛出口且
|
||||
// 最终回复被 provider 上限腰斩时为 true;旧事件无字段(undefined)不标,向后兼容。
|
||||
// 只标末条 assistant(倒序找,跳过错误气泡):用户再发消息/继续输出后新气泡顶掉末条
|
||||
// 位置,提示条随 isLastAi 判定自然消失,无需清除逻辑。
|
||||
if (event.truncated_by_max_tokens) {
|
||||
for (let i = state.messages.length - 1; i >= 0; i--) {
|
||||
const m = state.messages[i]
|
||||
if (m.role === 'assistant' && !m.isError) {
|
||||
m.truncatedByMaxTokens = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
// 直接从事件更新 pinned_goals,不等 loadConversations 异步刷新
|
||||
if (event.pinned_goals && state.activeConversationId) {
|
||||
const conv = state.conversations.find(c => c.id === state.activeConversationId)
|
||||
|
||||
Reference in New Issue
Block a user