import { useChatStore } from '../../stores/chatStore' import { useTabStore } from '../../stores/tabStore' import { useTranslation, type TranslationKey } from '../../i18n' function formatElapsed(seconds: number): string { if (seconds < 60) return `${seconds}s` const m = Math.floor(seconds / 60) const s = seconds % 60 return `${m}m ${s}s` } function translateServerVerb( t: (key: TranslationKey) => string, verb: string, ): string { const key = `serverVerb.${verb}` as TranslationKey const translated = t(key) return translated === key ? verb : translated } export function StreamingIndicator() { const t = useTranslation() const activeTabId = useTabStore((s) => s.activeTabId) const sessionState = useChatStore((s) => activeTabId ? s.sessions[activeTabId] : undefined) const chatState = sessionState?.chatState ?? 'idle' const statusVerb = sessionState?.statusVerb ?? '' const elapsedSeconds = sessionState?.elapsedSeconds ?? 0 const tokenUsage = sessionState?.tokenUsage ?? { input_tokens: 0, output_tokens: 0 } let verb: string if (statusVerb) { verb = translateServerVerb(t, statusVerb) } else { verb = chatState === 'thinking' ? t('serverVerb.Thinking') : chatState === 'tool_executing' ? t('serverVerb.Running') : t('serverVerb.Working') } return (
{verb}... {elapsedSeconds > 0 && ( {formatElapsed(elapsedSeconds)} )} {tokenUsage.output_tokens > 0 && ( · ↓ {tokenUsage.output_tokens} )}
) }