From e85d2dff97fb5b4697fae2207c128af27ca4f049 Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Sun, 18 Jan 2026 13:22:19 -0800 Subject: [PATCH] TUI: pick waiting phrase once per waiting session --- src/tui/tui-waiting.ts | 10 +++++++--- src/tui/tui.ts | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/tui/tui-waiting.ts b/src/tui/tui-waiting.ts index 25cfe8d60..acf810ef3 100644 --- a/src/tui/tui-waiting.ts +++ b/src/tui/tui-waiting.ts @@ -1,4 +1,8 @@ -import type { ClawdbotTheme } from "./theme/theme.js"; +type MinimalTheme = { + dim: (s: string) => string; + bold: (s: string) => string; + accentSoft: (s: string) => string; +}; export const defaultWaitingPhrases = [ "flibbertigibbeting", @@ -18,7 +22,7 @@ export function pickWaitingPhrase(tick: number, phrases = defaultWaitingPhrases) return phrases[idx] ?? phrases[0] ?? "waiting"; } -export function shimmerText(theme: ClawdbotTheme, text: string, tick: number) { +export function shimmerText(theme: MinimalTheme, text: string, tick: number) { const width = 6; const hi = (ch: string) => theme.bold(theme.accentSoft(ch)); @@ -35,7 +39,7 @@ export function shimmerText(theme: ClawdbotTheme, text: string, tick: number) { } export function buildWaitingStatusMessage(params: { - theme: ClawdbotTheme; + theme: MinimalTheme; tick: number; elapsed: string; connectionStatus: string; diff --git a/src/tui/tui.ts b/src/tui/tui.ts index 7bc41fe04..1b12c02b0 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -22,7 +22,10 @@ import { editorTheme, theme } from "./theme/theme.js"; import { createCommandHandlers } from "./tui-command-handlers.js"; import { createEventHandlers } from "./tui-event-handlers.js"; import { formatTokens } from "./tui-formatters.js"; -import { buildWaitingStatusMessage } from "./tui-waiting.js"; +import { + buildWaitingStatusMessage, + defaultWaitingPhrases, +} from "./tui-waiting.js"; import { createOverlayHandlers } from "./tui-overlays.js"; import { createSessionActions } from "./tui-session-actions.js"; import type { @@ -289,6 +292,7 @@ export async function runTui(opts: TuiOptions) { let waitingTick = 0; let waitingTimer: NodeJS.Timeout | null = null; + let waitingPhrase: string | null = null; const updateBusyStatusMessage = () => { if (!statusLoader || !statusStartedAt) return; @@ -302,6 +306,7 @@ export async function runTui(opts: TuiOptions) { tick: waitingTick, elapsed, connectionStatus, + phrases: waitingPhrase ? [waitingPhrase] : undefined, }), ); return; @@ -326,6 +331,16 @@ export async function runTui(opts: TuiOptions) { const startWaitingTimer = () => { if (waitingTimer) return; + + // Pick a phrase once per waiting session. + if (!waitingPhrase) { + const idx = Math.floor(Math.random() * defaultWaitingPhrases.length); + waitingPhrase = + defaultWaitingPhrases[idx] ?? defaultWaitingPhrases[0] ?? "waiting"; + } + + waitingTick = 0; + waitingTimer = setInterval(() => { if (activityStatus !== "waiting") return; updateBusyStatusMessage(); @@ -336,6 +351,7 @@ export async function runTui(opts: TuiOptions) { if (!waitingTimer) return; clearInterval(waitingTimer); waitingTimer = null; + waitingPhrase = null; }; const renderStatus = () => {