From d427086aa7cfc31c88a23363ba2b2baef212d840 Mon Sep 17 00:00:00 2001 From: wuyang6 Date: Thu, 14 May 2026 20:55:30 +0800 Subject: [PATCH] Stabilize live run activity updates --- frontend/app/app/api/chat/route.ts | 12 ------- .../assistant-ui/activity-panel.tsx | 33 +++---------------- 2 files changed, 5 insertions(+), 40 deletions(-) diff --git a/frontend/app/app/api/chat/route.ts b/frontend/app/app/api/chat/route.ts index 19571d8..450131f 100644 --- a/frontend/app/app/api/chat/route.ts +++ b/frontend/app/app/api/chat/route.ts @@ -525,10 +525,6 @@ function writeRuntimeEvent( } if (event.type === "content_delta" && event.delta) { if (!streamState?.textStarted) { - if (streamState && !streamState.reasoningEnded) { - writer.write({ type: "reasoning-end", id: "reasoning-1" }); - streamState.reasoningEnded = true; - } writer.write({ type: "text-start", id: "text-1" }); if (streamState) streamState.textStarted = true; } @@ -556,20 +552,12 @@ function writeRuntimeEvent( } if (event.type === "final_text_start") { if (!streamState?.textStarted) { - if (streamState && !streamState.reasoningEnded) { - writer.write({ type: "reasoning-end", id: "reasoning-1" }); - streamState.reasoningEnded = true; - } writer.write({ type: "text-start", id: "text-1" }); if (streamState) streamState.textStarted = true; } } if (event.type === "final_text_delta" && event.delta) { if (!streamState?.textStarted) { - if (streamState && !streamState.reasoningEnded) { - writer.write({ type: "reasoning-end", id: "reasoning-1" }); - streamState.reasoningEnded = true; - } writer.write({ type: "text-start", id: "text-1" }); if (streamState) streamState.textStarted = true; } diff --git a/frontend/app/components/assistant-ui/activity-panel.tsx b/frontend/app/components/assistant-ui/activity-panel.tsx index f2abd68..6e748b7 100644 --- a/frontend/app/components/assistant-ui/activity-panel.tsx +++ b/frontend/app/components/assistant-ui/activity-panel.tsx @@ -156,10 +156,6 @@ export function ActivityPanel() { readActiveSessionId(), ); const liveRunStatus = useLiveRunStatus(activeSessionId, mode); - const replayedSessionId = useMemo( - () => findLatestSessionIdInMessages(messages), - [messages], - ); const messageItems = useMemo( () => collectActivityItems(messages), [messages], @@ -169,22 +165,20 @@ export function ActivityPanel() { [liveRunStatus], ); const selectedMessageId = selectedId ? activityMessageId(selectedId) : null; + const liveRunActive = hasActiveRun(liveRunStatus) && liveItems.length > 0; const selectedMessageItems = selectedMessageId ? messageItems.filter( (item) => activityMessageId(item.id) === selectedMessageId, ) : []; - const shouldUseLiveItems = - !selectedMessageId && - liveItems.length > 0 && - activeSessionId !== null && - (activeSessionId !== replayedSessionId || hasActiveRun(liveRunStatus)); + const shouldUseLiveItems = Boolean(activeSessionId && liveRunActive); const items = shouldUseLiveItems ? liveItems : messageItems; const selectedItems = selectedMessageId ? items.filter((item) => activityMessageId(item.id) === selectedMessageId) : []; - const visibleItems = - selectedMessageId && selectedMessageItems.length > 0 + const visibleItems = shouldUseLiveItems + ? liveItems + : selectedMessageId && selectedMessageItems.length > 0 ? selectedMessageItems : selectedMessageId && selectedItems.length > 0 ? selectedItems @@ -764,23 +758,6 @@ function hasActiveRun( return status?.status === "queued" || status?.status === "running"; } -function findLatestSessionIdInMessages(messages: readonly MessageState[]) { - for (const message of [...messages].reverse()) { - const metadata = message.metadata; - const custom = - metadata && typeof metadata === "object" && "custom" in metadata - ? (metadata as { custom?: unknown }).custom - : null; - if (custom && typeof custom === "object" && "sessionId" in custom) { - const sessionId = (custom as { sessionId?: unknown }).sessionId; - if (typeof sessionId === "string" && sessionId.trim()) { - return sessionId.trim(); - } - } - } - return null; -} - function ActivityPanelItem({ item, open,