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