From 54d85609d1f486ddf7609239933a3c5d1f7dcdb4 Mon Sep 17 00:00:00 2001 From: wuyang6 Date: Thu, 14 May 2026 14:13:48 +0800 Subject: [PATCH] Keep selected activity history stable --- .../assistant-ui/activity-panel.tsx | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/frontend/app/components/assistant-ui/activity-panel.tsx b/frontend/app/components/assistant-ui/activity-panel.tsx index 5df63de..4a03773 100644 --- a/frontend/app/components/assistant-ui/activity-panel.tsx +++ b/frontend/app/components/assistant-ui/activity-panel.tsx @@ -168,21 +168,32 @@ export function ActivityPanel() { () => collectLiveRunItems(liveRunStatus), [liveRunStatus], ); + const selectedMessageId = selectedId ? activityMessageId(selectedId) : null; + const selectedMessageItems = selectedMessageId + ? messageItems.filter( + (item) => activityMessageId(item.id) === selectedMessageId, + ) + : []; const shouldUseLiveItems = + !selectedMessageId && liveItems.length > 0 && activeSessionId !== null && (activeSessionId !== replayedSessionId || hasActiveRun(liveRunStatus)); const items = shouldUseLiveItems ? liveItems : messageItems; - const selectedMessageId = selectedId ? activityMessageId(selectedId) : null; const selectedItems = selectedMessageId ? items.filter((item) => activityMessageId(item.id) === selectedMessageId) : []; const visibleItems = - selectedMessageId && selectedItems.length > 0 ? selectedItems : items; + selectedMessageId && selectedMessageItems.length > 0 + ? selectedMessageItems + : selectedMessageId && selectedItems.length > 0 + ? selectedItems + : items; const selectedActivityMissing = Boolean( selectedMessageId && !shouldUseLiveItems && - items.length > 0 && + messageItems.length > 0 && + selectedMessageItems.length === 0 && selectedItems.length === 0, ); const prevLatestIdRef = useRef(null); @@ -207,13 +218,14 @@ export function ActivityPanel() { const latestId = items.at(-1)?.id ?? null; if ( mode === "activity" && + !selectedId && latestId && latestId !== prevLatestIdRef.current ) { openActivity(); } prevLatestIdRef.current = latestId; - }, [items, mode, openActivity]); + }, [items, mode, openActivity, selectedId]); if (!open) return null;