/** * [WHO]: Provides InteractiveState, CompactionQueuedMessage — the shared render/turn UI state container * [FROM]: Depends on @catui/ai (AssistantMessage), @catui/tui (Component/Spacer/Text), * components (AssistantMessageComponent/CustomMessageComponent/ToolExecutionComponent) — types only * [TO]: Consumed by modes/interactive/interactive-mode.ts (holds one as `this.state`); will be read by the * render-layer controller when handleEvent is sliced (UI04) * [HERE]: modes/interactive/state/interactive-state.ts — P5 state 合一 (UI02) * * Consolidates the ~20 scattered `this._` fields that describe the *current/streaming turn's render * state* (streaming message, tool components, loaders, run timers, status line, optimistic + compaction * queues). Plain field holder — no behavior; relocated verbatim from InteractiveMode so behavior is * identical. Concern-local state (bash, extension widgets, cancellation, skill, buddy) stays with its * own owner and is not consolidated here. */ import type { AssistantMessage } from "@catui/ai/types"; import type { Component, Spacer, Text } from "@catui/tui"; import type { AssistantMessageComponent } from "../components/assistant-message.js"; import type { CustomMessageComponent } from "../components/custom-message.js"; import type { PlanProgressPanelComponent } from "../components/plan-progress-panel.js"; import type { TaskStatusPanelComponent } from "../components/task-status-panel.js"; import type { ToolExecutionComponent } from "../components/tool-execution.js"; export type CompactionQueuedMessage = { text: string; mode: "steer" | "followUp"; }; /** Per-sub-agent state tracked for TUI display. */ export interface SubAgentState { id: string; agentType: string; description: string; isAsync: boolean; isResolved: boolean; isError: boolean; toolUseCount: number; lastToolName: string | null; startTime: number; } /** Per-phase state for plan execution progress display. */ export interface PlanPhaseState { label: string; status: "pending" | "in_progress" | "completed"; } /** Overall plan progress state for TUI rendering. */ export interface PlanProgressState { phases: PlanPhaseState[]; currentPhaseIndex: number; startTime: number; tokenCount?: number; } export declare class InteractiveState { loadingAnimation: Component | undefined; pendingWorkingMessage: string | undefined; workingMessageOverride: string | undefined; agentRunStartMs: number | undefined; agentRunTimer: ReturnType | undefined; welcomeBannerTimer: ReturnType | undefined; lastStatusSpacer: Spacer | undefined; lastStatusText: Text | undefined; streamingComponent: AssistantMessageComponent | undefined; streamingMessage: AssistantMessage | undefined; customStreamComponents: Map; pendingTools: Map; subAgentStates: Map; subAgentPanelComponent: Component | undefined; planProgress: PlanProgressState | undefined; planProgressPanel: PlanProgressPanelComponent | undefined; taskStatusPanel: TaskStatusPanelComponent | undefined; toolOutputExpanded: boolean; hideThinkingBlock: boolean; compactionQueuedMessages: CompactionQueuedMessage[]; optimisticUserMessages: Array<{ text: string; }>; }