From 26f3a05c9c56fa24c21fc8b65e5332188578ed84 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Thu, 16 Apr 2026 20:39:02 -0500 Subject: [PATCH] fix(tui): don't clobber busy on the progress panel during streaming MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `appLayout` was passing `busy={ui.busy && !progress.streaming}` into ToolTrail, so the moment `message.delta` fired and streaming began, the panel internally saw `busy=false`. With the prior fix in place (hasThinking = !!cot || reasoningActive || busy), that flipped hasThinking to false and the Thinking expander vanished mid-turn — reappearing only after message.complete when the finalized row rendered with its own internal expander. The `!progress.streaming` override was a defensive guard against the panel implying "still thinking" once the response text was streaming. But that's already handled inside ToolTrail — `streaming` prop on the Thinking component uses `busy && reasoningStreaming`, and reasoningStreaming is already falsey once recordMessageDelta calls endReasoningPhase. Pass plain `busy={ui.busy}`. Panel stays up start-to-finish; handoff to the finalized-message row is continuous. --- ui-tui/src/components/appLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-tui/src/components/appLayout.tsx b/ui-tui/src/components/appLayout.tsx index 7ee0de88f..4f5c77276 100644 --- a/ui-tui/src/components/appLayout.tsx +++ b/ui-tui/src/components/appLayout.tsx @@ -58,7 +58,7 @@ const TranscriptPane = memo(function TranscriptPane({ {progress.showProgressArea && (