diff --git a/ui-tui/src/components/appLayout.tsx b/ui-tui/src/components/appLayout.tsx
index 4f5c772761..545817f23c 100644
--- a/ui-tui/src/components/appLayout.tsx
+++ b/ui-tui/src/components/appLayout.tsx
@@ -2,10 +2,12 @@ import { AlternateScreen, Box, NoSelect, ScrollBox, Text } from '@hermes/ink'
import { useStore } from '@nanostores/react'
import { memo } from 'react'
-import type { AppLayoutProps } from '../app/interfaces.js'
+import type { AppLayoutProgressProps, AppLayoutProps } from '../app/interfaces.js'
import { $isBlocked } from '../app/overlayStore.js'
import { $uiState } from '../app/uiStore.js'
import { PLACEHOLDER } from '../content/placeholders.js'
+import type { Theme } from '../theme.js'
+import type { DetailsMode } from '../types.js'
import { GoodVibesHeart, StatusRule, StickyPromptTracker, TranscriptScrollbar } from './appChrome.js'
import { AppOverlays } from './appOverlays.js'
@@ -15,6 +17,58 @@ import { QueuedMessages } from './queuedMessages.js'
import { TextInput } from './textInput.js'
import { ToolTrail } from './thinking.js'
+const StreamingAssistant = memo(function StreamingAssistant({
+ busy,
+ cols,
+ compact,
+ detailsMode,
+ progress,
+ t
+}: {
+ busy: boolean
+ cols: number
+ compact?: boolean
+ detailsMode: DetailsMode
+ progress: AppLayoutProgressProps
+ t: Theme
+}) {
+ if (!progress.showProgressArea && !progress.showStreamingArea) return null
+
+ return (
+
+ {progress.showProgressArea && (
+
+
+
+ )}
+
+ {progress.showStreamingArea && (
+
+ )}
+
+ )
+})
+
const TranscriptPane = memo(function TranscriptPane({
actions,
composer,
@@ -55,35 +109,15 @@ const TranscriptPane = memo(function TranscriptPane({
{transcript.virtualHistory.bottomSpacer > 0 ? : null}
- {progress.showProgressArea && (
-
- )}
+
- {progress.showStreamingArea && (
-
-
-
- )}
diff --git a/ui-tui/src/components/thinking.tsx b/ui-tui/src/components/thinking.tsx
index 8c57eeaad0..25f2080818 100644
--- a/ui-tui/src/components/thinking.tsx
+++ b/ui-tui/src/components/thinking.tsx
@@ -695,7 +695,8 @@ export const ToolTrail = memo(function ToolTrail({
const hasThinking = !!cot || reasoningActive || busy
const thinkingLive = reasoningActive || reasoningStreaming
- const tokenCount = reasoningTokens !== undefined ? reasoningTokens : reasoning ? estimateTokensRough(reasoning) : 0
+ const tokenCount =
+ reasoningTokens && reasoningTokens > 0 ? reasoningTokens : reasoning ? estimateTokensRough(reasoning) : 0
const toolTokenCount = toolTokens ?? 0
const totalTokenCount = tokenCount + toolTokenCount