@kolisachint/hoocode-agent 0.5.47 → 0.5.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/core/agent-session-retry.d.ts.map +1 -1
  3. package/dist/core/agent-session-retry.js +10 -1
  4. package/dist/core/agent-session-retry.js.map +1 -1
  5. package/dist/core/session-identity.d.ts +10 -0
  6. package/dist/core/session-identity.d.ts.map +1 -1
  7. package/dist/core/session-identity.js +48 -0
  8. package/dist/core/session-identity.js.map +1 -1
  9. package/dist/core/slash-commands.d.ts.map +1 -1
  10. package/dist/core/slash-commands.js +1 -1
  11. package/dist/core/slash-commands.js.map +1 -1
  12. package/dist/core/system-prompt.d.ts.map +1 -1
  13. package/dist/core/system-prompt.js +1 -0
  14. package/dist/core/system-prompt.js.map +1 -1
  15. package/dist/core/tools/edit-diff.d.ts +7 -3
  16. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  17. package/dist/core/tools/edit-diff.js +156 -65
  18. package/dist/core/tools/edit-diff.js.map +1 -1
  19. package/dist/core/tools/read.d.ts.map +1 -1
  20. package/dist/core/tools/read.js +5 -4
  21. package/dist/core/tools/read.js.map +1 -1
  22. package/dist/modes/interactive/command-executor.d.ts +9 -3
  23. package/dist/modes/interactive/command-executor.d.ts.map +1 -1
  24. package/dist/modes/interactive/command-executor.js +16 -8
  25. package/dist/modes/interactive/command-executor.js.map +1 -1
  26. package/dist/modes/interactive/components/session-color-selector.d.ts.map +1 -1
  27. package/dist/modes/interactive/components/session-color-selector.js +5 -2
  28. package/dist/modes/interactive/components/session-color-selector.js.map +1 -1
  29. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  30. package/dist/modes/interactive/interactive-mode.js +7 -0
  31. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  32. package/dist/utils/sleep.d.ts +9 -0
  33. package/dist/utils/sleep.d.ts.map +1 -1
  34. package/dist/utils/sleep.js +11 -1
  35. package/dist/utils/sleep.js.map +1 -1
  36. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  37. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  38. package/examples/extensions/sandbox/package.json +1 -1
  39. package/examples/extensions/with-deps/package.json +1 -1
  40. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@kolisachint/hoocode-agent-core\";\nimport { createCompactionSummaryMessage } from \"@kolisachint/hoocode-agent-core\";\nimport type { AssistantMessage, ImageContent, Message } from \"@kolisachint/hoocode-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeyId,\n\tMarkdownTheme,\n\tSlashCommand,\n} from \"@kolisachint/hoocode-tui\";\nimport {\n\tBox,\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tgetCapabilities,\n\thyperlink,\n\tLoader,\n\ttype LoaderIndicatorOptions,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tsetKeybindings,\n\tText,\n\tTUI,\n} from \"@kolisachint/hoocode-tui\";\nimport { spawnSync } from \"child_process\";\nimport { APP_NAME, APP_TITLE, VERSION } from \"../../config.js\";\nimport { setTerminalOwnedByTui } from \"../../core/agent-log.js\";\nimport { loadAgentRegistry } from \"../../core/agent-registry.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport { type AssistantUsageTotals, sumAssistantUsage } from \"../../core/agent-session-stats.js\";\nimport { canvasSearchRoots, discoverCanvasExtensions } from \"../../core/canvas/discovery.js\";\nimport { pluginCanvasExtensions } from \"../../core/canvas/plugin-canvases.js\";\nimport { gateCanvasExtensions } from \"../../core/canvas/trust.js\";\nimport type {\n\tAutocompleteProviderFactory,\n\tEditorFactory,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n} from \"../../core/extensions/index.js\";\nimport { getWorkspacePlatforms, setPlatforms } from \"../../core/extensions/plugins/formats/platform-targets.js\";\nimport { describeExternalTools } from \"../../core/external-tools.js\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { formatDurationSecs } from \"../../core/format-duration.js\";\nimport { formatTokens } from \"../../core/format-tokens.js\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.js\";\nimport { measurePromptSurface, measureToolSchemaTokens } from \"../../core/light.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { formatMissingSessionCwdPrompt, MissingSessionCwdError } from \"../../core/session-cwd.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport type { SettingsManager } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { SourceInfo } from \"../../core/source-info.js\";\nimport { startupProgress } from \"../../core/startup-progress.js\";\nimport { taskStore } from \"../../core/task-store.js\";\nimport type { TeamViewConnection } from \"../../core/team-view.js\";\nimport { cycleToolOutputView, type ToolOutputView } from \"../../core/tool-output-view.js\";\nimport { settleDanglingMainTasks } from \"../../core/tools/todo.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport { buildCompactWordmark } from \"../../core/wordmark.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { parseGitUrl } from \"../../utils/git.js\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.js\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { checkForNewHooCodeVersion } from \"../../utils/version-check.js\";\nimport { BashExecutionController } from \"./bash-execution-controller.js\";\nimport { type CommandContext, CommandExecutor } from \"./command-executor.js\";\nimport { BELL, CompletionChime } from \"./completion-chime.js\";\nimport { AssistantMessageComponent, type ThinkingDisplay } from \"./components/assistant-message.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CountdownTimer } from \"./components/countdown-timer.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { FooterComponent } from \"./components/footer.js\";\nimport { keyHint, keyText, rawKeyHint } from \"./components/keybinding-hints.js\";\nimport { renderSessionChip } from \"./components/session-chip.js\";\nimport { SessionColorSelectorComponent } from \"./components/session-color-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport { TaskPanelComponent } from \"./components/task-panel.js\";\nimport { ToolChainComponent } from \"./components/tool-chain.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport { ExtensionChrome } from \"./extension-chrome.js\";\nimport { ExtensionDialogs } from \"./extension-dialogs.js\";\nimport { LoginController } from \"./login-controller.js\";\nimport { MessageQueueController } from \"./message-queue-controller.js\";\nimport { ModelController } from \"./model-controller.js\";\nimport {\n\tExpandableText,\n\tformatDisplayPath,\n\tisExpandable,\n\tshowLoadedResources as renderLoadedResources,\n} from \"./resource-display.js\";\nimport { checkForPackageUpdates, checkTmuxKeyboardSetup, getChangelogForDisplay } from \"./startup-checks.js\";\nimport { TeamFocusController } from \"./team-focus.js\";\nimport {\n\tapplyPaperSheet,\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tstopThemeWatcher,\n\tTheme,\n\ttheme,\n} from \"./theme/theme.js\";\nimport { VoiceController } from \"./voice/voice-controller.js\";\nimport { websearchApiKeyNotice } from \"./websearch-warning.js\";\n\n/** Interface for components that can be expanded/collapsed */\n\nconst DEAD_TERMINAL_ERROR_CODES = new Set([\"EIO\", \"EPIPE\", \"ENOTCONN\"]);\n\n/**\n * Resolve the effective voice trailing-silence window (ms): env\n * `VOICETOOLS_SILENCE_MS` wins (like `VOICETOOLS_BIN`), otherwise the settings\n * value. Both paths are clamped to 300-10000; a malformed env value falls back to\n * the settings value.\n */\nfunction resolveVoiceSilenceMs(settingsManager: SettingsManager): number {\n\tconst envRaw = process.env.VOICETOOLS_SILENCE_MS?.trim();\n\tif (envRaw) {\n\t\tconst envValue = Number(envRaw);\n\t\tif (Number.isFinite(envValue) && envValue > 0) {\n\t\t\treturn Math.min(10000, Math.max(300, Math.floor(envValue)));\n\t\t}\n\t}\n\treturn settingsManager.getVoiceSilenceMs();\n}\n\nfunction isDeadTerminalError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\" || !(\"code\" in error)) {\n\t\treturn false;\n\t}\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code);\n}\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n}\n\n// How often the streaming assistant message re-parses its markdown. Deltas can\n// arrive far faster than this; every application re-lexes the growing tail\n// block, so applying per-delta made streaming cost O(message²).\nconst STREAM_RENDER_THROTTLE_MS = 100;\n// Task-store mutations (subagent tool progress, usage ticks) arrive in bursts;\n// each render they trigger reassembles the whole component tree, so cap them.\nconst TASK_RENDER_THROTTLE_MS = 50;\n// Finished tool blocks beyond this many (oldest first) are frozen to release\n// their retained output/image payloads (see ToolExecutionComponent.freeze).\n// Generous so nothing near the viewport is ever frozen; the cap bounds the\n// view layer's memory across a long session heavy on tool output.\nconst LIVE_TOOL_WINDOW = 50;\n\n/**\n * Leading+trailing throttle: the first call runs immediately, calls landing\n * inside the window coalesce into one trailing run with the latest state.\n */\nfunction throttled(ms: number, fn: () => void): () => void {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet pending = false;\n\tconst run = () => {\n\t\tfn();\n\t\ttimer = setTimeout(() => {\n\t\t\ttimer = undefined;\n\t\t\tif (pending) {\n\t\t\t\tpending = false;\n\t\t\t\trun();\n\t\t\t}\n\t\t}, ms);\n\t\ttimer.unref?.();\n\t};\n\treturn () => {\n\t\tif (timer) {\n\t\t\tpending = true;\n\t\t\treturn;\n\t\t}\n\t\trun();\n\t};\n}\n\n/**\n * Style a status/notify message for the chat.\n *\n * Plain messages are dimmed, as they always were. A message that already\n * carries escape codes is passed through untouched: `theme.fg` closes with\n * `\\x1b[39m` (reset foreground, not \"restore\"), so wrapping a pre-styled string\n * in dim would drop the dim at the first inner span — and the TUI's wrapper\n * carries that reset state across newlines, so every following line would lose\n * it too. Passing through is what lets a listing colour its own columns.\n */\nfunction styleStatusMessage(message: string): string {\n\treturn message.includes(\"\\x1b[\") ? message : theme.fg(\"dim\", message);\n}\n\nexport class InteractiveMode {\n\tprivate runtimeHost: AgentSessionRuntime;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate editorComponentFactory: EditorFactory | undefined;\n\tprivate voice: VoiceController;\n\tprivate autocompleteProvider: AutocompleteProvider | undefined;\n\tprivate autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\t// Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: Loader | undefined = undefined;\n\tprivate workingMessage: string | undefined = undefined;\n\tprivate workingVisible = true;\n\tprivate workingIndicatorOptions: LoaderIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\tprivate readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\tprivate hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\tprivate startupNoticesShown = false;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\t/** Throttled re-parse/re-render of the in-flight assistant message. The\n\t * guard makes a trailing run after message_end/agent_end a no-op; a direct\n\t * updateContent on message_end flushes the final state regardless. */\n\tprivate readonly scheduleStreamingRender = throttled(STREAM_RENDER_THROTTLE_MS, () => {\n\t\tif (!this.streamingComponent || !this.streamingMessage) return;\n\t\t// streaming=true: large blocks render segmented so only the tail chunk\n\t\t// re-parses; message_end's direct updateContent renders the canonical form.\n\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\t\tthis.ui.requestRender();\n\t});\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\t// Persisted view dial (radar / glance / full). See core/tool-output-view.ts.\n\tprivate toolOutputView: ToolOutputView = \"glance\";\n\t// The chain currently collecting tool calls, if the agent is mid-run.\n\tprivate openChain?: ToolChainComponent;\n\t/** The newest tool block in the transcript; radar marks it. */\n\tprivate latestToolBlock?: ToolExecutionComponent;\n\t/** The run that block belongs to; radar marks its folded line too. */\n\tprivate latestChain?: ToolChainComponent;\n\t// Whether the assistant message being streamed has said anything yet. The\n\t// first words it speaks close the chain the previous message's calls built.\n\tprivate sawTextInCurrentMessage = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\t// Task store subscription unsubscribe function (task panel)\n\tprivate taskStoreUnsubscribe?: () => void;\n\t// Startup-progress subscription unsubscribe function (footer download/index bars)\n\tprivate startupProgressUnsubscribe?: () => void;\n\tprivate signalCleanupHandlers: Array<() => void> = [];\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryCountdown: CountdownTimer | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Completion chime state\n\tprivate chime?: CompletionChime;\n\t// True between auto_retry_start and the next agent_start: the turn is not done,\n\t// it is about to re-run, so the deferred completion check must not fire the chime.\n\tprivate chimePendingRetry = false;\n\t// Stop reason of the request's latest assistant message, reset when the user\n\t// starts a new one. Read at settle time by two consumers that ask the same\n\t// question — did this request end cleanly? An \"aborted\" turn means the user is\n\t// present, so no chime; anything other than a clean \"stop\" means dangling plan\n\t// items must not be claimed as completed.\n\tprivate turnStopReason: AssistantMessage[\"stopReason\"] | undefined = undefined;\n\n\t// Cumulative usage + wall clock captured at the first agent_start of a request,\n\t// diffed at agent_end to print that request's own cost into the transcript.\n\t// Anchored on the FIRST start so a retried request reports one span, not one\n\t// per attempt (same reason the chime anchors its duration there).\n\tprivate turnCostAnchor: { totals: AssistantUsageTotals; at: number } | undefined;\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state\n\tprivate dialogs: ExtensionDialogs;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate chrome!: ExtensionChrome;\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Task panel shown just above the editor (active subagent tasks)\n\tprivate taskPanel: TaskPanelComponent;\n\n\t// hooteams team client (--team): steering + attach share its single SSE stream\n\tprivate teamFocus: TeamFocusController;\n\n\t// Bash command execution (the `!cmd` prompt mode)\n\tprivate bashExecution: BashExecutionController;\n\n\t// Message queueing (compaction queue + pending-messages display)\n\tprivate messageQueue: MessageQueueController;\n\n\t// Model selection (/model, /models, cycle keys)\n\tprivate modelController: ModelController;\n\n\t// Auth / login flows (/login, /logout)\n\tprivate loginController: LoginController;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Component | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get session(): AgentSession {\n\t\treturn this.runtimeHost.session;\n\t}\n\tprivate _commandExecutor?: CommandExecutor;\n\t/**\n\t * Lazily-built command executor. The context uses getters for mutable\n\t * dependencies (e.g. the active session) so handlers always operate on the\n\t * current state even after a session switch.\n\t */\n\tprivate get commandExecutor(): CommandExecutor {\n\t\tif (!this._commandExecutor) {\n\t\t\tconst self = this;\n\t\t\tconst context: CommandContext = {\n\t\t\t\tget session() {\n\t\t\t\t\treturn self.session;\n\t\t\t\t},\n\t\t\t\tget sessionManager() {\n\t\t\t\t\treturn self.sessionManager;\n\t\t\t\t},\n\t\t\t\tget runtimeHost() {\n\t\t\t\t\treturn self.runtimeHost;\n\t\t\t\t},\n\t\t\t\tget ui() {\n\t\t\t\t\treturn self.ui;\n\t\t\t\t},\n\t\t\t\tget editor() {\n\t\t\t\t\treturn self.editor;\n\t\t\t\t},\n\t\t\t\tget editorContainer() {\n\t\t\t\t\treturn self.editorContainer;\n\t\t\t\t},\n\t\t\t\tget chatContainer() {\n\t\t\t\t\treturn self.chatContainer;\n\t\t\t\t},\n\t\t\t\tget statusContainer() {\n\t\t\t\t\treturn self.statusContainer;\n\t\t\t\t},\n\t\t\t\tget footer() {\n\t\t\t\t\treturn self.footer;\n\t\t\t\t},\n\t\t\t\tget keybindings() {\n\t\t\t\t\treturn self.keybindings;\n\t\t\t\t},\n\t\t\t\tshowStatus: (message) => self.showStatus(message),\n\t\t\t\tshowError: (message) => self.showError(message),\n\t\t\t\tshowWarning: (message) => self.showWarning(message),\n\t\t\t\tupdateEditorBorderColor: () => self.updateEditorBorderColor(),\n\t\t\t\trenderCurrentSessionState: () => self.renderCurrentSessionState(),\n\t\t\t\trebuildChatFromMessages: () => self.rebuildChatFromMessages(),\n\t\t\t\tgetMarkdownThemeWithSettings: () => self.getMarkdownThemeWithSettings(),\n\t\t\t\tstopLoadingAnimation: () => self.stopLoadingAnimation(),\n\t\t\t\tfindExactModelMatch: (searchTerm) => self.modelController.findExactModelMatch(searchTerm),\n\t\t\t\tmaybeWarnAboutAnthropicSubscriptionAuth: (model) =>\n\t\t\t\t\tself.modelController.maybeWarnAboutAnthropicSubscriptionAuth(model),\n\t\t\t\tshowModelSelector: (searchTerm) => self.modelController.showModelSelector(searchTerm),\n\t\t\t\tshowExtensionConfirm: (title, message) => self.dialogs.confirm(title, message),\n\t\t\t\tpromptForMissingSessionCwd: (error) => self.promptForMissingSessionCwd(error),\n\t\t\t\thandleFatalRuntimeError: (prefix, error) => self.handleFatalRuntimeError(prefix, error),\n\t\t\t};\n\t\t\tthis._commandExecutor = new CommandExecutor(context);\n\t\t}\n\t\treturn this._commandExecutor;\n\t}\n\tprivate stopLoadingAnimation(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t}\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\truntimeHost: AgentSessionRuntime,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.runtimeHost = runtimeHost;\n\t\tthis.runtimeHost.setBeforeSessionInvalidate(() => {\n\t\t\tthis.resetExtensionUI();\n\t\t});\n\t\tthis.runtimeHost.setRebindSession(async () => {\n\t\t\tawait this.rebindCurrentSession();\n\t\t});\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(this.keybindings);\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tborder: this.settingsManager.getEditorBorder(),\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editor.promptPrefix = \"❯\";\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider(this.sessionManager.getCwd());\n\t\tthis.footer = new FooterComponent(this.session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\t\tthis.footer.setToolOutputView(this.toolOutputView);\n\t\tthis.footerDataProvider.setSubagentEnabled(this.session.getActiveToolNames().includes(\"Task\"));\n\t\tthis.chrome = new ExtensionChrome({\n\t\t\tui: this.ui,\n\t\t\twidgetContainerAbove: this.widgetContainerAbove,\n\t\t\twidgetContainerBelow: this.widgetContainerBelow,\n\t\t\theaderContainer: this.headerContainer,\n\t\t\tfooter: this.footer,\n\t\t\tfooterDataProvider: this.footerDataProvider,\n\t\t\tgetBuiltInHeader: () => this.builtInHeader,\n\t\t\tisToolOutputExpanded: () => this.toolOutputExpanded,\n\t\t});\n\t\tthis.taskPanel = new TaskPanelComponent(this.ui);\n\t\tthis.dialogs = new ExtensionDialogs({\n\t\t\tui: this.ui,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tkeybindings: this.keybindings,\n\t\t\tgetEditor: () => this.editor,\n\t\t});\n\t\tthis.teamFocus = new TeamFocusController({\n\t\t\tui: this.ui,\n\t\t\ttaskPanel: this.taskPanel,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tgetEditor: () => this.editor as Component,\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowWarning: (message) => this.showWarning(message),\n\t\t\tshowAskOptions: (questions, opts) => this.dialogs.showAskOptions(questions, opts),\n\t\t\tisAskOptionsOpen: () => this.dialogs.isAskOptionsOpen(),\n\t\t});\n\t\tthis.voice = new VoiceController({\n\t\t\tui: this.ui,\n\t\t\tstatusContainer: this.statusContainer,\n\t\t\tsendEditorInput: (data) => this.editor.handleInput(data),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tsilenceMs: resolveVoiceSilenceMs(this.settingsManager),\n\t\t});\n\t\tconst self = this;\n\t\tthis.bashExecution = new BashExecutionController({\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tui: this.ui,\n\t\t\tpendingMessagesContainer: this.pendingMessagesContainer,\n\t\t\tchatContainer: this.chatContainer,\n\t\t\tshowError: (message) => this.showError(message),\n\t\t});\n\t\tthis.messageQueue = new MessageQueueController({\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tgetEditor: () => this.editor,\n\t\t\tpendingMessagesContainer: this.pendingMessagesContainer,\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t});\n\t\tthis.modelController = new ModelController({\n\t\t\tui: this.ui,\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tshowSelector: (create) => this.showSelector(create),\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tshowWarning: (message) => this.showWarning(message),\n\t\t\tshowNotice: (title, body) => this.showNotice(title, body),\n\t\t\tupdateEditorBorderColor: () => this.updateEditorBorderColor(),\n\t\t\tinvalidateFooter: () => this.footer.invalidate(),\n\t\t\tsetAvailableProviderCount: (count) => this.footerDataProvider.setAvailableProviderCount(count),\n\t\t});\n\t\tthis.loginController = new LoginController({\n\t\t\tui: this.ui,\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tgetEditor: () => this.editor as Component,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tshowSelector: (create) => this.showSelector(create),\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tupdateAvailableProviderCount: () => this.modelController.updateAvailableProviderCount(),\n\t\t\tupdateEditorBorderColor: () => this.updateEditorBorderColor(),\n\t\t\tinvalidateFooter: () => this.footer.invalidate(),\n\t\t\tmaybeWarnAboutAnthropicSubscriptionAuth: (model) =>\n\t\t\t\tthis.modelController.maybeWarnAboutAnthropicSubscriptionAuth(model),\n\t\t});\n\t\tthis.taskPanel.onNudge = (role) => this.teamFocus.showNudgeInput(role);\n\t\tthis.taskPanel.onAttach = (role) => this.teamFocus.showAttach(role);\n\t\tthis.taskPanel.onExitFocus = () => this.teamFocus.exitFocus();\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Load the tool-output view dial\n\t\tthis.toolOutputView = this.settingsManager.getToolOutputView();\n\n\t\t// Completion chime: rings the terminal bell when a long turn finishes or the\n\t\t// agent blocks awaiting input. Enable is read fresh so a live toggle applies.\n\t\tthis.chime = new CompletionChime({\n\t\t\tisEnabled: () => this.settingsManager.getChimeOnTurnComplete(),\n\t\t\tring: () => this.ui.terminal.write(BELL),\n\t\t});\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined {\n\t\tif (!sourceInfo) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst scopePrefix = sourceInfo.scope === \"user\" ? \"u\" : sourceInfo.scope === \"project\" ? \"p\" : \"t\";\n\t\tconst source = sourceInfo.source.trim();\n\n\t\tif (source === \"auto\" || source === \"local\" || source === \"cli\") {\n\t\t\treturn scopePrefix;\n\t\t}\n\n\t\tif (source.startsWith(\"npm:\")) {\n\t\t\treturn `${scopePrefix}:${source}`;\n\t\t}\n\n\t\tconst gitSource = parseGitUrl(source);\n\t\tif (gitSource) {\n\t\t\tconst ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n\t\t\treturn `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n\t\t}\n\n\t\treturn scopePrefix;\n\t}\n\n\tprivate prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n\t\tconst sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n\t\tif (!sourceTag) {\n\t\t\treturn description;\n\t\t}\n\t\treturn description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n\t}\n\n\tprivate getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n\t\tconst builtinNames = new Set(BUILTIN_SLASH_COMMANDS.map((command) => command.name));\n\t\treturn extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((command) => builtinNames.has(command.name))\n\t\t\t.map((command) => ({\n\t\t\t\ttype: \"warning\" as const,\n\t\t\t\tmessage:\n\t\t\t\t\tcommand.invocationName === command.name\n\t\t\t\t\t\t? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n\t\t\t\t\t\t: `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n\t\t\t\tpath: command.sourceInfo.path,\n\t\t\t}));\n\t}\n\n\tprivate createBaseAutocompleteProvider(): AutocompleteProvider {\n\t\t// Define commands for autocomplete\n\t\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst cdCommand = slashCommands.find((command) => command.name === \"cd\");\n\t\tif (cdCommand) {\n\t\t\tcdCommand.argumentHint = \"<path>\";\n\t\t\tcdCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst completions = this.commandExecutor.getChangeDirectoryCompletions(prefix);\n\t\t\t\treturn completions.length > 0 ? completions : null;\n\t\t\t};\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = this.session.extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((cmd) => !builtinCommandNames.has(cmd.name))\n\t\t\t.map((cmd) => ({\n\t\t\t\tname: cmd.invocationName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({\n\t\t\t\t\tname: commandName,\n\t\t\t\t\tdescription: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tthis.sessionManager.getCwd(),\n\t\t\tthis.fdPath,\n\t\t);\n\t}\n\n\tprivate setupAutocompleteProvider(): void {\n\t\tlet provider = this.createBaseAutocompleteProvider();\n\t\tfor (const wrapProvider of this.autocompleteProviderWrappers) {\n\t\t\tprovider = wrapProvider(provider);\n\t\t}\n\n\t\tthis.autocompleteProvider = provider;\n\t\tthis.defaultEditor.setAutocompleteProvider(provider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(provider);\n\t\t}\n\t}\n\n\tprivate showStartupNoticesIfNeeded(): void {\n\t\tif (this.startupNoticesShown) {\n\t\t\treturn;\n\t\t}\n\t\tthis.startupNoticesShown = true;\n\n\t\tif (!this.changelogMarkdown || !this.changelogMarkdown.trim()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.chatContainer.children.length > 0) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\tthis.chatContainer.addChild(new Text(condensedText, 1, 0));\n\t\t} else {\n\t\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t}\n\n\t/** Feed a first-run tool-binary download into the footer's startup-progress line. */\n\tprivate reportToolDownload(key: string, label: string, receivedBytes: number, totalBytes: number | null): void {\n\t\tstartupProgress.set({ key, kind: \"download\", label, receivedBytes, totalBytes });\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\tthis.registerSignalHandlers();\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = getChangelogForDisplay({\n\t\t\thasMessages: this.session.state.messages.length > 0,\n\t\t\tsettingsManager: this.settingsManager,\n\t\t});\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir).\n\t\t// Both help — fd for autocomplete, rg for the grep tool — but neither is required\n\t\t// to start: resolving them can hit a slow or failing network in restricted\n\t\t// environments, and awaiting here froze first paint. Resolve in the background\n\t\t// (never awaited, so a first-run download never blocks first paint) and wire fd\n\t\t// in when ready; the grep/find tools resolve rg/fd on demand with a native\n\t\t// fallback regardless. embsearch is intentionally NOT preloaded here: when the\n\t\t// semantic index is enabled, EmbsearchService (main.ts) owns its download and\n\t\t// build, reporting through the same startupProgress channel — preloading it too\n\t\t// would fetch the binary twice and race.\n\t\t//\n\t\t// First-run download progress streams into the footer's startupProgress line\n\t\t// via ensureTool's byte-count callback; the line clears when the download\n\t\t// settles (path resolved) or is dropped if it fails.\n\t\tvoid Promise.all([\n\t\t\tensureTool(\"fd\", true, (received, total) => this.reportToolDownload(\"fd\", \"fd\", received, total)),\n\t\t\tensureTool(\"rg\", true, (received, total) => this.reportToolDownload(\"rg\", \"ripgrep\", received, total)),\n\t\t])\n\t\t\t.then(([fdPath]) => {\n\t\t\t\tthis.fdPath = fdPath;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Non-fatal: autocomplete simply stays disabled until/unless fd resolves.\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// Downloads settled (resolved or failed): drop any lingering bars.\n\t\t\t\tstartupProgress.remove(\"fd\");\n\t\t\t\tstartupProgress.remove(\"rg\");\n\t\t\t});\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tconst termW = this.ui.terminal.columns;\n\t\t\t// A function, not a value: the banner names the working directory, and\n\t\t\t// `/cd` moves it. `refreshBuiltInHeader` re-reads this after a move.\n\t\t\tconst logo = () =>\n\t\t\t\ttermW >= 40\n\t\t\t\t\t? buildCompactWordmark({\n\t\t\t\t\t\t\tappName: APP_NAME,\n\t\t\t\t\t\t\tversion: this.version,\n\t\t\t\t\t\t\tcwd: formatDisplayPath(this.sessionManager.getCwd()),\n\t\t\t\t\t\t\taccent: (text) => theme.fg(\"accent\", text),\n\t\t\t\t\t\t\tdim: (text) => theme.fg(\"dim\", text),\n\t\t\t\t\t\t\tmuted: (text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\tcursor: (text) => theme.blink(theme.fg(\"accent\", text)),\n\t\t\t\t\t\t\tnote: () => theme.fg(\"dim\", ` ${keyText(\"app.tools.expand\")} more`),\n\t\t\t\t\t\t})\n\t\t\t\t\t: theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${this.version}`);\n\n\t\t\t// Build startup instructions using keybinding hint helpers\n\t\t\tconst hint = (keybinding: AppKeybinding, description: string) => keyHint(keybinding, description);\n\n\t\t\tconst expandedInstructions = [\n\t\t\t\thint(\"app.interrupt\", \"to interrupt\"),\n\t\t\t\thint(\"app.clear\", \"to clear\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")} twice`, \"to exit\"),\n\t\t\t\thint(\"app.exit\", \"to exit (empty)\"),\n\t\t\t\thint(\"app.suspend\", \"to suspend\"),\n\t\t\t\tkeyHint(\"tui.editor.deleteToLineEnd\", \"to delete to end\"),\n\t\t\t\thint(\"app.thinking.cycle\", \"to cycle thinking level\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.model.cycleForward\")}/${keyText(\"app.model.cycleBackward\")}`, \"to cycle models\"),\n\t\t\t\thint(\"app.model.select\", \"to select model\"),\n\t\t\t\thint(\"app.tools.expand\", \"to expand all tool output\"),\n\t\t\t\thint(\"app.tools.unfoldOne\", \"to open one chain or block (repeat to peel back)\"),\n\t\t\t\thint(\"app.view.cycleForward\", \"to cycle tool output (radar/glance/full)\"),\n\t\t\t\thint(\"app.thinking.toggle\", \"to expand thinking\"),\n\t\t\t\thint(\"app.tasks.cycleView\", \"to cycle task panel view\"),\n\t\t\t\t...(this.teamFocus.connected ? [hint(\"app.team.focus\", \"to focus team roster\")] : []),\n\t\t\t\thint(\"app.mode.cycle\", \"to cycle agent mode\"),\n\t\t\t\thint(\"app.session.changeDirectory\", \"to change working directory\"),\n\t\t\t\thint(\"app.settings.open\", \"for settings\"),\n\t\t\t\thint(\"app.hotkeys.open\", \"for all shortcuts\"),\n\t\t\t\thint(\"app.editor.external\", \"for external editor\"),\n\t\t\t\trawKeyHint(\"/\", \"for commands\"),\n\t\t\t\trawKeyHint(\"!\", \"to run bash\"),\n\t\t\t\trawKeyHint(\"!!\", \"to run bash (no context)\"),\n\t\t\t\thint(\"app.message.followUp\", \"to queue follow-up\"),\n\t\t\t\thint(\"app.message.dequeue\", \"to edit all queued messages\"),\n\t\t\t\thint(\"app.clipboard.pasteImage\", \"to paste image\"),\n\t\t\t\trawKeyHint(\"drop files\", \"to attach\"),\n\t\t\t].join(\"\\n\");\n\t\t\tconst onboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t`${APP_NAME} can explain its own features and look up its docs. Ask it how to use or extend ${APP_NAME}.`,\n\t\t\t);\n\t\t\tthis.builtInHeader = new ExpandableText(\n\t\t\t\t() => logo(),\n\t\t\t\t() => `${logo()}\\n${expandedInstructions}\\n\\n${onboarding}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t);\n\n\t\t\t// Setup UI layout\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.chrome.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.taskPanel);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Start the UI before initializing extensions so session_start handlers can use interactive dialogs\n\t\tthis.ui.start();\n\t\t// From here the TUI owns the terminal, so the agent's operational log lines\n\t\t// (dispatch, warm fallback, lifeguard) must stop writing to it — a write the\n\t\t// renderer did not make desyncs its cursor bookkeeping and duplicates rows.\n\t\tsetTerminalOwnedByTui(true);\n\t\tthis.isInitialized = true;\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.rebindCurrentSession();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\t// The chip's fill and ink are baked in at build time, so a theme swap\n\t\t\t// has to rebuild it or it keeps the old theme's colours.\n\t\t\tthis.updateSessionChip();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Re-render the UI when the task list changes (task panel shows active\n\t\t// tasks). Throttled: subagent progress mutates the store in bursts, and\n\t\t// each resulting render reassembles the entire component tree.\n\t\tthis.taskStoreUnsubscribe = taskStore.subscribe(\n\t\t\tthrottled(TASK_RENDER_THROTTLE_MS, () => {\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}),\n\t\t);\n\n\t\t// Re-render the footer as startup progress updates (tool downloads stream\n\t\t// byte counts in bursts, the index build ticks per batch). Throttled like the\n\t\t// task panel so a fast download doesn't drive a render per chunk.\n\t\tthis.startupProgressUnsubscribe = startupProgress.subscribe(\n\t\t\tthrottled(TASK_RENDER_THROTTLE_MS, () => {\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}),\n\t\t);\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.modelController.updateAvailableProviderCount();\n\t}\n\n\t/**\n\t * Refresh everything in the chrome that says *which session this is*: the\n\t * terminal title and the chip on the input box. Both read from the same\n\t * source, so they can never disagree about a rename.\n\t */\n\tprivate refreshSessionIdentity(): void {\n\t\tthis.updateTerminalTitle();\n\t\tthis.updateSessionChip();\n\t}\n\n\t/**\n\t * Rebuild the session chip and hand it to the editor, telling the footer to\n\t * stand down from showing the name itself. Cheap enough to call on any change\n\t * that could move the name, the colour, or the theme they are drawn in.\n\t */\n\tprivate updateSessionChip(): void {\n\t\tconst chip = renderSessionChip(this.sessionManager.getDisplayName(), this.sessionManager.getSessionColorSlot());\n\t\tthis.defaultEditor.topBorderLabel = chip;\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.topBorderLabel = chip;\n\t\t}\n\t\tthis.footer.setSessionChipShown(chip !== undefined);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(this.sessionManager.getCwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version check asynchronously\n\t\tcheckForNewHooCodeVersion(this.version).then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Start package update check asynchronously\n\t\tcheckForPackageUpdates(this.sessionManager.getCwd(), this.settingsManager).then((updates) => {\n\t\t\tif (updates.length > 0) {\n\t\t\t\tthis.showPackageUpdateNotification(updates);\n\t\t\t}\n\t\t});\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tcheckTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) {\n\t\t\t\tthis.showWarning(warning);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\tvoid this.modelController.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\tthis.maybeWarnAboutMissingWebSearchKey();\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tif (initialMessages) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate getStartupExpansionState(): boolean {\n\t\treturn this.options.verbose || this.toolOutputExpanded;\n\t}\n\n\t/** Render the startup/reload resource listing (see resource-display.ts). */\n\tprivate showLoadedResources(options?: {\n\t\textensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\trenderLoadedResources(\n\t\t\t{\n\t\t\t\tchatContainer: this.chatContainer,\n\t\t\t\tgetCwd: () => this.sessionManager.getCwd(),\n\t\t\t\tgetResourceLoader: () => this.session.resourceLoader,\n\t\t\t\tgetPromptTemplates: () => this.session.promptTemplates,\n\t\t\t\tgetExtensionRunner: () => this.session.extensionRunner,\n\t\t\t\tgetActiveMode: () => this.footerDataProvider.getActiveMode(),\n\t\t\t\tgetSubagentEnabled: () => this.footerDataProvider.getSubagentEnabled(),\n\t\t\t\tgetAgentCount: () => this.getDispatchableAgentCount(),\n\t\t\t\t// Cheap and fork-free: directory entries plus each installed plugin's\n\t\t\t\t// resolved canvas dirs. Computed inside the listing branch, so a quiet\n\t\t\t\t// startup pays nothing for it.\n\t\t\t\tgetCanvases: () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\t\t\tconst found = discoverCanvasExtensions(\n\t\t\t\t\t\t\tcanvasSearchRoots(cwd, os.homedir()),\n\t\t\t\t\t\t\tpluginCanvasExtensions(cwd),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst gated = gateCanvasExtensions(found, cwd);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t...gated.runnable.map((e) => ({ id: e.id, scope: e.scope as string, withheld: false })),\n\t\t\t\t\t\t\t...gated.withheld.map((w) => ({\n\t\t\t\t\t\t\t\tid: w.extension.id,\n\t\t\t\t\t\t\t\tscope: w.extension.scope as string,\n\t\t\t\t\t\t\t\twithheld: true,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t];\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetAgents: () => {\n\t\t\t\t\tif (!this.footerDataProvider.getSubagentEnabled()) return [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn loadAgentRegistry({ cwd: this.sessionManager.getCwd() }).list();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetColumns: () => this.ui.terminal.columns,\n\t\t\t\tquietStartup: () => this.settingsManager.getQuietStartup(),\n\t\t\t\tverbose: this.options.verbose ?? false,\n\t\t\t\tisExpanded: () => this.getStartupExpansionState(),\n\t\t\t\tgetBuiltInCommandConflictDiagnostics: (runner) => this.getBuiltInCommandConflictDiagnostics(runner),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Agents the model can actually dispatch. Zero when the Task tool is off, so\n\t * the summary never advertises a capability the session cannot use.\n\t */\n\tprivate getDispatchableAgentCount(): number {\n\t\tif (!this.footerDataProvider.getSubagentEnabled()) return 0;\n\t\ttry {\n\t\t\treturn loadAgentRegistry({ cwd: this.sessionManager.getCwd() }).list().length;\n\t\t} catch {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async bindCurrentSessionExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.newSession(options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfork: async (entryId, options) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId, options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to fork session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn this.handleResumeSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocompleteProvider();\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\t// The startup path draws the listing here, because it renders messages\n\t\t// without clearing. A *rebind* (/new, /resume, /fork) clears the transcript\n\t\t// straight afterwards, so `renderCurrentSessionState` draws it again — this\n\t\t// call is the one startup keeps.\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.showStartupNoticesIfNeeded();\n\t}\n\n\tprivate applyRuntimeSettings(): void {\n\t\tthis.footer.setSession(this.session);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\t\tthis.footer.setToolOutputView(this.toolOutputView);\n\t\t// The startup banner names the cwd, which `/cd` changes under it.\n\t\tif (this.builtInHeader instanceof ExpandableText) {\n\t\t\tthis.builtInHeader.refresh();\n\t\t}\n\t\tthis.footerDataProvider.setCwd(this.sessionManager.getCwd());\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tconst editorBorder = this.settingsManager.getEditorBorder();\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor.setBorder(editorBorder);\n\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setBorder?.(editorBorder);\n\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t}\n\t}\n\n\tprivate async rebindCurrentSession(): Promise<void> {\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.applyRuntimeSettings();\n\t\tawait this.bindCurrentSessionExtensions();\n\t\tthis.subscribeToAgent();\n\t\tawait this.modelController.updateAvailableProviderCount();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.refreshSessionIdentity();\n\t}\n\n\tprivate async handleFatalRuntimeError(prefix: string, error: unknown): Promise<never> {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.showError(`${prefix}: ${message}`);\n\t\tstopThemeWatcher();\n\t\tthis.stop();\n\t\tprocess.exit(1);\n\t}\n\n\t/**\n\t * Reset the transcript to whatever the (possibly just-swapped) session holds.\n\t *\n\t * Every caller — /new, /resume, /fork — reaches here *after* the runtime has\n\t * rebound extensions, and rebinding is what renders the loaded-resource\n\t * listing. Clearing the chat therefore wiped the listing a moment after it was\n\t * drawn, which is why /reload showed skills, agents and plugins and starting a\n\t * new session showed nothing. Re-rendering it here is what makes the surface\n\t * common: one call site, so a session change of any kind reports the same\n\t * capabilities /reload does.\n\t */\n\tprivate renderCurrentSessionState(): void {\n\t\tthis.chatContainer.clear();\n\t\tthis.openChain = undefined;\n\t\tthis.latestToolBlock = undefined;\n\t\tthis.latestChain = undefined;\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.messageQueue.resetCompactionQueue();\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.renderInitialMessages();\n\t}\n\n\t/**\n\t * Bound the view layer's memory: freeze finished tool blocks once more than\n\t * LIVE_TOOL_WINDOW of them are live, releasing their retained tool output and\n\t * base64 image copies. Runs on tool completion (infrequent) and only ever\n\t * freezes blocks far above the viewport. The session data stays intact, so a\n\t * later full rebuild (theme toggle / reload) restores full fidelity.\n\t */\n\tprivate trimTranscriptMemory(): void {\n\t\tconst freezable = this.transcriptToolBlocks().filter((block) => block.isFreezable());\n\t\tconst excess = freezable.length - LIVE_TOOL_WINDOW;\n\t\tfor (let i = 0; i < excess; i++) {\n\t\t\tfreezable[i].freeze();\n\t\t}\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\treturn this.session.getToolDefinition(toolName);\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tsignal: this.session.agent.signal,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.compact(options?.customInstructions);\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t\tactivatePlugin: (pluginDir) => this.session.activatePlugin(pluginDir),\n\t\t\trequestReloadWhenIdle: () => this.session.requestReloadWhenIdle(),\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate getWorkingLoaderMessage(): string {\n\t\treturn this.workingMessage ?? this.defaultWorkingMessage;\n\t}\n\n\tprivate createWorkingLoader(): Loader {\n\t\treturn new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tthis.getWorkingLoaderMessage(),\n\t\t\tthis.workingIndicatorOptions,\n\t\t);\n\t}\n\n\tprivate stopWorkingLoader(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t}\n\n\tprivate setWorkingVisible(visible: boolean): void {\n\t\tthis.workingVisible = visible;\n\t\tif (!visible) {\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isStreaming && !this.loadingAnimation) {\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setWorkingIndicator(options?: LoaderIndicatorOptions): void {\n\t\tthis.workingIndicatorOptions = options;\n\t\tthis.loadingAnimation?.setIndicator(options);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setHiddenThinkingLabel(label?: string): void {\n\t\tthis.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\tchild.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t\t}\n\t\t}\n\t\tif (this.streamingComponent) {\n\t\t\tthis.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tthis.dialogs.reset();\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.chrome.reset();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.autocompleteProviderWrappers = [];\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.refreshSessionIdentity();\n\t\tthis.workingMessage = undefined;\n\t\tthis.workingVisible = true;\n\t\tthis.setWorkingIndicator();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(`${this.defaultWorkingMessage} (${keyText(\"app.interrupt\")} to interrupt)`);\n\t\t}\n\t\tthis.setHiddenThinkingLabel();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\t// Captured for the `columns` getter: `this` inside a getter on the object\n\t\t// literal below would be the literal, not the mode.\n\t\tconst tui = this.ui;\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.dialogs.showSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.dialogs.confirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.dialogs.showInput(title, placeholder, opts),\n\t\t\taskOptions: (questions, opts) => {\n\t\t\t\t// The agent is blocking on the user (the ask_options pane): ring now,\n\t\t\t\t// bypassing the duration threshold — this is the \"it needs you\" cue.\n\t\t\t\tthis.chime?.onBlockedForInput();\n\t\t\t\treturn this.dialogs.showAskOptions(questions, opts);\n\t\t\t},\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tget columns() {\n\t\t\t\t// Live, not captured: the listing must reflow after a resize.\n\t\t\t\treturn tui.terminal.columns;\n\t\t\t},\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetMode: (mode) => {\n\t\t\t\tthis.footerDataProvider.setActiveMode(mode);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tsetWorkingMessage: (message) => {\n\t\t\t\tthis.workingMessage = message;\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.setMessage(message ?? this.defaultWorkingMessage);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\t\tsetWorkingIndicator: (options) => this.setWorkingIndicator(options),\n\t\t\tsetHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),\n\t\t\tsetWidget: (key, content, options) => this.chrome.setWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.chrome.setFooter(factory),\n\t\t\tsetHeader: (factory) => this.chrome.setHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.dialogs.showCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.dialogs.showEditor(title, prefill),\n\t\t\taddAutocompleteProvider: (factory) => {\n\t\t\t\tthis.autocompleteProviderWrappers.push(factory);\n\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t},\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\tprivate async promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined> {\n\t\tconst confirmed = await this.dialogs.confirm(\"Session cwd not found\", formatMissingSessionCwdPrompt(error.issue));\n\t\treturn confirmed ? error.issue.fallbackCwd : undefined;\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(factory: EditorFactory | undefined): void {\n\t\tthis.editorComponentFactory = factory;\n\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.updateSessionChip();\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.messageQueue.restoreQueuedMessagesToEditor({ abort: true });\n\t\t\t} else if (this.session.isBashRunning) {\n\t\t\t\tthis.session.abortBash();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"app.suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"app.thinking.cycle\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"app.model.cycleForward\", () => this.modelController.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.model.cycleBackward\", () => this.modelController.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.commandExecutor.handleDebug();\n\t\tthis.defaultEditor.onAction(\"app.model.select\", () => this.modelController.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"app.tools.expand\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"app.view.cycleForward\", () => this.cycleToolOutputView(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.view.cycleBackward\", () => this.cycleToolOutputView(\"backward\"));\n\t\tthis.defaultEditor.onAction(\"app.tools.unfoldOne\", () => this.stepToolOutput(\"unfold\"));\n\t\tthis.defaultEditor.onAction(\"app.tools.foldOne\", () => this.stepToolOutput(\"fold\"));\n\t\tthis.defaultEditor.onAction(\"app.thinking.toggle\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"app.tasks.cycleView\", () => {\n\t\t\tthis.taskPanel.cycleView();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"app.team.focus\", () => this.teamFocus.enterFocus());\n\t\tthis.defaultEditor.onAction(\"app.editor.external\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"app.input.voiceTranscribe\", () => this.voice.toggle());\n\t\tthis.defaultEditor.onAction(\"app.message.followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"app.message.dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"app.session.new\", () => this.commandExecutor.handleClear());\n\t\tthis.defaultEditor.onAction(\"app.session.tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.resume\", () => this.showSessionSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.changeDirectory\", () => {\n\t\t\t// Prefill rather than act: a directory change needs a target, and the\n\t\t\t// editor's own path completion is already the best way to name one.\n\t\t\tthis.editor.setText(\"/cd \");\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"app.settings.open\", () => this.showSettingsSelector());\n\t\tthis.defaultEditor.onAction(\"app.hotkeys.open\", () => this.commandExecutor.handleHotkeys());\n\t\tthis.defaultEditor.onAction(\"app.mode.cycle\", () => void this.cycleAgentMode());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.updateEditorPromptPrefix();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `${APP_NAME}-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.ui.requestRender();\n\t\t} catch {\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// hooteams team focus (--team): focus role rows, nudge, attach\n\t// =========================================================================\n\n\t/**\n\t * Wire a hooteams connection into the TUI. Called by main.ts when `--team`\n\t * is set, before run(). See TeamFocusController for the feature itself.\n\t */\n\tattachTeamClient(client: TeamViewConnection): void {\n\t\tthis.teamFocus.attachClient(client);\n\t}\n\n\t/**\n\t * Built-in slash commands dispatched by the editor submit handler.\n\t * `withArgs` commands also match \"/name <args>\" and receive the full text.\n\t * Each handler keeps its own editor-clearing order (before vs after the\n\t * await) — some commands must show their UI before the prompt is wiped.\n\t */\n\tprivate createBuiltInSlashCommands(): Map<string, { withArgs?: boolean; run(text: string): Promise<void> | void }> {\n\t\tconst clearEditor = () => this.editor.setText(\"\");\n\t\treturn new Map(\n\t\t\tObject.entries({\n\t\t\t\t\"/settings\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showSettingsSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/scoped-models\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.modelController.showModelsSelector();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/model\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleModel(searchTerm);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/export\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tawait this.commandExecutor.handleExport(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/import\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tawait this.commandExecutor.handleImport(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/share\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tawait this.commandExecutor.handleShare();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/copy\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tawait this.commandExecutor.handleCopy();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/name\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: (text: string) => {\n\t\t\t\t\t\tthis.commandExecutor.handleName(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/color\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: (text: string) => {\n\t\t\t\t\t\t// An argument sets the slot outright; bare `/color` opens the\n\t\t\t\t\t\t// swatches, since a slot number is not something anyone knows\n\t\t\t\t\t\t// by heart.\n\t\t\t\t\t\tif (!this.commandExecutor.handleColor(text)) {\n\t\t\t\t\t\t\tthis.showSessionColorSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/session\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleSession();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/changelog\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleChangelog();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/hotkeys\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleHotkeys();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/fork\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/clone\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleClone();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/tree\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/login\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.loginController.showOAuthSelector(\"login\");\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/logout\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.loginController.showOAuthSelector(\"logout\");\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/new\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleClear();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/compact\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tconst prefix = \"/compact \";\n\t\t\t\t\t\tconst customInstructions = text.startsWith(prefix)\n\t\t\t\t\t\t\t? text.slice(prefix.length).trim() || undefined\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/reload\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/debug\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleDebug();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/resume\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showSessionSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/cd\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleChangeDirectory(text);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/quit\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.shutdown();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/subagent\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleSubagent(text);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tconst slashCommands = this.createBuiltInSlashCommands();\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle built-in slash commands\n\t\t\tconst spaceIdx = text.indexOf(\" \");\n\t\t\tconst commandName = spaceIdx === -1 ? text : text.slice(0, spaceIdx);\n\t\t\tconst command = slashCommands.get(commandName);\n\t\t\tif (command && (spaceIdx === -1 || command.withArgs)) {\n\t\t\t\tawait command.run(text);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.bashExecution.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.messageQueue.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.messageQueue.queueCompactionMessage(text, \"steer\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use prompt() with steer behavior\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.bashExecution.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\t/**\n\t * Deferred end-of-request settle. Called from the agent_end handler, it waits\n\t * one tick so the streaming flag settles and any retry has had a chance to arm,\n\t * then acts only when the session is genuinely idle (not streaming, not\n\t * compacting) and no retry is pending — so a retried or auto-continued request\n\t * neither rings a premature \"it's done\" nor prints a partial cost line.\n\t *\n\t * The completion chime, the transcript cost line, and settling dangling plan\n\t * items all hang off this single check because they answer the same question:\n\t * has the request actually ended?\n\t */\n\tprivate settleRequestOnIdle(): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.chimePendingRetry || this.session.isStreaming || this.session.isCompacting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// The last chain of a turn has nothing after it to close it, so it\n\t\t\t// settles here. A turn that did not end cleanly leaves its chain in the\n\t\t\t// running rendering plus a marker rather than claiming an outcome.\n\t\t\tthis.closeOpenChain(this.turnStopReason === \"stop\" ? \"done\" : \"interrupted\");\n\t\t\tthis.showTurnCost();\n\t\t\tthis.settleDanglingPlanItems();\n\t\t\tthis.chime?.onTurnComplete({ aborted: this.turnStopReason === \"aborted\" });\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Flip main-plan rows the model left at in_progress to a settled status now the\n\t * request is over, instead of letting them claim live work until the next user\n\t * message wipes the pane.\n\t *\n\t * The model marks its own TodoWrite items and routinely drops the final call\n\t * that completes the last one, so the row outlives the work. A clean \"stop\" is\n\t * taken as the model believing it was finished — it chose to stop talking, and\n\t * its closing message is the report — so those items settle to done. An abort,\n\t * error, or length cutoff says the opposite, so they settle to cancelled: an\n\t * honest \"never finished\" rather than a fabricated completion.\n\t *\n\t * Skipped while messages are queued: a follow-up/steer arriving during the run\n\t * means the request continues, and the plan with it.\n\t */\n\tprivate settleDanglingPlanItems(): void {\n\t\tif (this.session.pendingMessageCount > 0) return;\n\t\tconst settled = settleDanglingMainTasks(this.turnStopReason === \"stop\" ? \"done\" : \"cancelled\");\n\t\tif (settled > 0) this.ui.requestRender();\n\t}\n\n\t/**\n\t * Append this request's own token/time/cost to the transcript.\n\t *\n\t * This is the honest home for the number. The task panel is a live instrument —\n\t * present tense, wiped on the next user message — and the footer carries\n\t * cumulative session vitals, so after the fact neither can answer \"what did that\n\t * request cost\". Fired at agent_end rather than turn_end because one request is\n\t * commonly tens of turns; per-turn would wedge a number between every tool block.\n\t *\n\t * Delegated runs are reported separately rather than folded into the totals:\n\t * subagents bill against their own sessions, so their tokens never appear in this\n\t * session's entries and adding them to ↑/↓ would misreport what the parent spent.\n\t */\n\tprivate showTurnCost(): void {\n\t\tconst anchor = this.turnCostAnchor;\n\t\tthis.turnCostAnchor = undefined;\n\t\tif (!anchor) return;\n\n\t\tconst now = sumAssistantUsage(this.session.sessionManager.getEntries());\n\t\tconst input = now.input - anchor.totals.input;\n\t\tconst output = now.output - anchor.totals.output;\n\t\tconst cost = now.cost - anchor.totals.cost;\n\t\t// Nothing was accounted (e.g. aborted before the first response landed): stay\n\t\t// silent rather than print a row of zeroes.\n\t\tif (input <= 0 && output <= 0) return;\n\n\t\tconst segs: string[] = [\n\t\t\ttheme.fg(\"dim\", \"↑\") +\n\t\t\t\ttheme.fg(\"muted\", formatTokens(input)) +\n\t\t\t\ttheme.fg(\"dim\", \" ↓\") +\n\t\t\t\ttheme.fg(\"muted\", formatTokens(output)),\n\t\t\ttheme.fg(\"muted\", formatDurationSecs((Date.now() - anchor.at) / 1000)),\n\t\t];\n\t\tif (cost > 0) segs.push(theme.fg(\"muted\", `$${cost.toFixed(3)}`));\n\n\t\tconst runs = taskStore.list().filter((task) => task.source === \"subagent\");\n\t\tif (runs.length > 0) {\n\t\t\tconst delegatedTokens = runs.reduce((sum, r) => sum + (r.usage ? r.usage.input + r.usage.output : 0), 0);\n\t\t\tconst label = runs.length === 1 ? (runs[0]?.subagentMode ?? \"subagent\") : \"subagents\";\n\t\t\tconst text = `◇${runs.length} ${label}${delegatedTokens > 0 ? ` ${formatTokens(delegatedTokens)}` : \"\"}`;\n\t\t\tsegs.push(theme.fg(\"dim\", text));\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(segs.join(theme.fg(\"dim\", \" · \")), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t// A (possibly retried) turn is (re)starting: anchor its duration on the\n\t\t\t\t// first start and clear the pending-retry gate now that it has resumed.\n\t\t\t\tthis.chime?.onTurnStart();\n\t\t\t\tthis.chimePendingRetry = false;\n\t\t\t\tthis.turnCostAnchor ??= {\n\t\t\t\t\ttotals: sumAssistantUsage(this.session.sessionManager.getEntries()),\n\t\t\t\t\tat: Date.now(),\n\t\t\t\t};\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tthis.stopWorkingLoader();\n\t\t\t\tif (this.workingVisible) {\n\t\t\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.refreshSessionIdentity();\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\t// A new user message starts a new turn: drop finished tasks from the\n\t\t\t\t\t// previous turn and restart numbering from #1 once the pane is empty.\n\t\t\t\t\t// Finished tasks stay visible (with their final status, tokens, and time)\n\t\t\t\t\t// until this point — not the moment they finish — so their outcome remains\n\t\t\t\t\t// glanceable for the whole turn. Active tasks are kept: a follow-up/steer\n\t\t\t\t\t// message can arrive while a subagent is still running.\n\t\t\t\t\ttaskStore.reset();\n\t\t\t\t\t// Startup progress is transient startup status: once the user starts a\n\t\t\t\t\t// turn, drop any lingering bars/notices (e.g. an unavailable-index line)\n\t\t\t\t\t// so they don't sit in the footer for the rest of the session.\n\t\t\t\t\tstartupProgress.clear();\n\t\t\t\t\tthis.turnStopReason = undefined;\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.thinkingDisplayForView(),\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.sawTextInCurrentMessage = false;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.scheduleStreamingRender();\n\n\t\t\t\t\t// The agent speaking ends the run its previous calls formed. Tool\n\t\t\t\t\t// calls later in this same message open a fresh chain.\n\t\t\t\t\tif (!this.sawTextInCurrentMessage) {\n\t\t\t\t\t\tconst spoke = this.streamingMessage.content.some(\n\t\t\t\t\t\t\t(content) => content.type === \"text\" && content.text.trim() !== \"\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (spoke) {\n\t\t\t\t\t\t\tthis.sawTextInCurrentMessage = true;\n\t\t\t\t\t\t\tthis.closeOpenChain(\"done\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.attachToolBlock(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\t\t// Remember how the turn's latest assistant message ended, so the deferred\n\t\t\t\t\t// settle can tell a clean finish from an abort/error.\n\t\t\t\t\tthis.turnStopReason = event.message.stopReason;\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tlet component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (!component) {\n\t\t\t\t\tcomponent = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.toolCallId,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.attachToolBlock(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t}\n\t\t\t\tcomponent.markExecutionStarted();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.trimTranscriptMemory();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\t// agent_end fires before the streaming flag clears and before the retry\n\t\t\t\t// decision is made (both happen after this listener returns), so defer a\n\t\t\t\t// tick and re-check: only settle once the session is genuinely idle and no\n\t\t\t\t// retry is pending — otherwise a retried or auto-continued turn would ring\n\t\t\t\t// a premature \"it's done\" and print a partial cost line.\n\t\t\t\tthis.settleRequestOnIdle();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"compaction_start\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortCompaction();\n\t\t\t\t};\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst cancelHint = `(${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tconst label =\n\t\t\t\t\tevent.reason === \"manual\"\n\t\t\t\t\t\t? `Compacting context... ${cancelHint}`\n\t\t\t\t\t\t: `${event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\"}Auto-compacting... ${cancelHint}`;\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tlabel,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"compaction_end\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t\t}\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\tthis.addMessageToChat(\n\t\t\t\t\t\tcreateCompactionSummaryMessage(\n\t\t\t\t\t\t\tevent.result.summary,\n\t\t\t\t\t\t\tevent.result.tokensBefore,\n\t\t\t\t\t\t\tnew Date().toISOString(),\n\t\t\t\t\t\t\tevent.result.tokensAfter,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// The turn is not done — it will re-run after a backoff (during which the\n\t\t\t\t// session reads as idle). Gate the deferred completion chime until then.\n\t\t\t\tthis.chimePendingRetry = true;\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortRetry();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.retryCountdown?.dispose();\n\t\t\t\tconst retryMessage = (seconds: number) =>\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${seconds}s... (${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tretryMessage(Math.ceil(event.delayMs / 1000)),\n\t\t\t\t);\n\t\t\t\tthis.retryCountdown = new CountdownTimer(\n\t\t\t\t\tevent.delayMs,\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(seconds) => {\n\t\t\t\t\t\tthis.retryLoader?.setMessage(retryMessage(seconds));\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(styleStatusMessage(message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(styleStatusMessage(message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tif (message.display) {\n\t\t\t\t\tconst renderer = this.session.extensionRunner.getMessageRenderer(message.customType);\n\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tif (this.chatContainer.children.length > 0) {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tmessage,\n\t\t\t\t\tthis.thinkingDisplayForView(),\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tconst renderedPendingTools = new Map<string, ToolExecutionComponent>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tlet lastAssistantStopReason: AssistantMessage[\"stopReason\"] | undefined;\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t// Same boundary the live path uses: the agent speaking ends the run\n\t\t\t\t// its previous calls formed. Rebuilding history has to reproduce it,\n\t\t\t\t// or a resumed session would show one chain where it lived through\n\t\t\t\t// several.\n\t\t\t\tconst spoke = message.content.some((content) => content.type === \"text\" && content.text.trim() !== \"\");\n\t\t\t\tif (spoke) this.closeOpenChain(\"done\");\n\t\t\t\tlastAssistantStopReason = message.stopReason;\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.attachToolBlock(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trenderedPendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = renderedPendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\trenderedPendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\t// History has no live state: a chain left open at the end of the rebuild is\n\t\t// finished, and how the last assistant message ended says whether it\n\t\t// finished cleanly. Tool calls still awaiting results are the exception —\n\t\t// this is a resumed run in flight, so its chain stays open for them.\n\t\tif (renderedPendingTools.size === 0) {\n\t\t\tthis.closeOpenChain(lastAssistantStopReason === \"stop\" ? \"done\" : \"interrupted\");\n\t\t}\n\n\t\tfor (const [toolCallId, component] of renderedPendingTools) {\n\t\t\tthis.pendingTools.set(toolCallId, component);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n\t * repaint the final frame while the process is exiting.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.taskStoreUnsubscribe?.();\n\t\tthis.startupProgressUnsubscribe?.();\n\t\tthis.teamFocus.closeAttach();\n\t\tthis.taskPanel.dispose();\n\t\tthis.stop();\n\t\tawait this.runtimeHost.dispose();\n\t\tprocess.exit(0);\n\t}\n\n\tprivate emergencyTerminalExit(): never {\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\t\tkillTrackedDetachedChildren();\n\t\t// The terminal is gone. Do not run normal shutdown because TUI and\n\t\t// extension cleanup can write restore sequences and re-trigger EIO.\n\t\tprocess.exit(129);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate registerSignalHandlers(): void {\n\t\tthis.unregisterSignalHandlers();\n\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tif (signal === \"SIGHUP\") {\n\t\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t\t}\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid this.shutdown();\n\t\t\t};\n\t\t\tprocess.prependListener(signal, handler);\n\t\t\tthis.signalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\n\t\tconst terminalErrorHandler = (error: Error) => {\n\t\t\tif (isDeadTerminalError(error)) {\n\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t}\n\t\t\tthrow error;\n\t\t};\n\t\tprocess.stdout.on(\"error\", terminalErrorHandler);\n\t\tprocess.stderr.on(\"error\", terminalErrorHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.stdout.off(\"error\", terminalErrorHandler));\n\t\tthis.signalCleanupHandlers.push(() => process.stderr.off(\"error\", terminalErrorHandler));\n\t}\n\n\tprivate unregisterSignalHandlers(): void {\n\t\tfor (const cleanup of this.signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tthis.signalCleanupHandlers = [];\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\tif (process.platform === \"win32\") {\n\t\t\tthis.showStatus(\"Suspend to background is not supported on Windows\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Keep the event loop alive while suspended. Without this, stopping the TUI\n\t\t// can leave Node with no ref'ed handles, causing the process to exit on fg\n\t\t// before the SIGCONT handler gets a chance to restore the terminal.\n\t\tconst suspendKeepAlive = setInterval(() => {}, 2 ** 30);\n\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => {};\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\ttry {\n\t\t\t// Stop the TUI (restore terminal to normal mode)\n\t\t\tthis.ui.stop();\n\n\t\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\t\tprocess.kill(0, \"SIGTSTP\");\n\t\t} catch (error) {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.messageQueue.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.messageQueue.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.messageQueue.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate updateEditorPromptPrefix(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.promptPrefix = \"!\";\n\t\t\tthis.editor.promptColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tthis.editor.promptPrefix = \"❯\";\n\t\t\tthis.editor.promptColor = (s: string) => s;\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\t/**\n\t * Put a tool block into the transcript, extending the open chain or starting\n\t * one. Every path that renders a tool call comes through here — live\n\t * streaming, execution start, and rebuilding history — so a chain cannot be\n\t * assembled correctly in one place and forgotten in another.\n\t */\n\tprivate attachToolBlock(block: ToolExecutionComponent): void {\n\t\tif (!this.openChain || !this.openChain.isOpen) {\n\t\t\tthis.openChain = new ToolChainComponent(this.toolOutputView);\n\t\t\tthis.chatContainer.addChild(this.openChain);\n\t\t}\n\t\tthis.openChain.add(block);\n\t\t// The newest call carries radar's marker stroke. This is the one place\n\t\t// every tool block is attached, so it is the one place that can know\n\t\t// which block is newest without two paths disagreeing about it. The run\n\t\t// it belongs to is marked as well: radar folds a run of more than one\n\t\t// call to a single line, and that line is what the view usually shows.\n\t\tthis.latestToolBlock?.setLatest(false);\n\t\tblock.setLatest(true);\n\t\tthis.latestToolBlock = block;\n\t\tif (this.latestChain !== this.openChain) {\n\t\t\tthis.latestChain?.setLatest(false);\n\t\t\tthis.openChain.setLatest(true);\n\t\t\tthis.latestChain = this.openChain;\n\t\t}\n\t}\n\n\t/**\n\t * Settle the open chain.\n\t *\n\t * Called when the agent speaks (the run it was doing is over, whatever comes\n\t * next is a new one) and when the turn settles. Closing on the agent's next\n\t * words rather than only at turn end is what keeps the flip cheap: the line\n\t * is still at the bottom of the screen, so the TUI rewrites it in place\n\t * instead of taking the full-redraw path that clears terminal scrollback.\n\t */\n\tprivate closeOpenChain(outcome: \"done\" | \"interrupted\"): void {\n\t\tif (!this.openChain) return;\n\t\tif (this.openChain.isEmpty) {\n\t\t\tthis.chatContainer.removeChild(this.openChain);\n\t\t} else {\n\t\t\tthis.openChain.close(outcome);\n\t\t}\n\t\tthis.openChain = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\t/** Every tool block in the transcript, in order, across all chains. */\n\tprivate transcriptToolBlocks(): ToolExecutionComponent[] {\n\t\tconst blocks: ToolExecutionComponent[] = [];\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof ToolChainComponent) blocks.push(...child.toolBlocks);\n\t\t\telse if (child instanceof ToolExecutionComponent) blocks.push(child);\n\t\t}\n\t\treturn blocks;\n\t}\n\n\t/** Every chain in the transcript, in order. */\n\tprivate transcriptChains(): ToolChainComponent[] {\n\t\treturn this.chatContainer.children.filter(\n\t\t\t(child): child is ToolChainComponent => child instanceof ToolChainComponent,\n\t\t);\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\t/**\n\t * Open or close one tool block instead of all of them.\n\t *\n\t * `ctrl+o` is all-or-nothing, which left the ▸ caret on every glance and\n\t * radar row advertising something no key could do. This is the missing half:\n\t * unfold walks back from the newest block to the first one still folded,\n\t * fold walks back to the most recently opened one.\n\t *\n\t * Working from the tail is not a shortcut, it is the only thing this view can\n\t * honestly offer. The transcript is bottom-anchored and has no app-level\n\t * scrolling — anything far enough up is in the terminal's own scrollback,\n\t * where this process cannot put a cursor or scroll to a selection. So the\n\t * key peels backwards through what is actually on screen, and each block it\n\t * opens is its own marker for where you have got to.\n\t */\n\tprivate stepToolOutput(direction: \"unfold\" | \"fold\"): void {\n\t\tconst wantOpen = direction === \"unfold\";\n\n\t\t// Radar's unit is the chain: one press turns the newest summary line back\n\t\t// into the calls it stands for. Its per-call bodies are a glance/full\n\t\t// question, so the step stops there rather than cascading.\n\t\tif (this.toolOutputView === \"radar\") {\n\t\t\tconst chains = this.transcriptChains();\n\t\t\tfor (let i = chains.length - 1; i >= 0; i--) {\n\t\t\t\tif (chains[i].isEmpty || chains[i].isOpened === wantOpen) continue;\n\t\t\t\t// A chain of one is never summarised, so there is nothing for unfold to\n\t\t\t\t// reveal; skipping it keeps the press moving to a chain that will change.\n\t\t\t\tif (wantOpen && !chains[i].isSummarised) continue;\n\t\t\t\tchains[i].setOpened(wantOpen);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(wantOpen ? \"No collapsed chains below this point\" : \"No open chains below this point\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst blocks = this.transcriptToolBlocks();\n\t\tfor (let i = blocks.length - 1; i >= 0; i--) {\n\t\t\tconst block = blocks[i];\n\t\t\tif (block.isRevealed() === wantOpen) continue;\n\t\t\tblock.setExpanded(wantOpen);\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.showStatus(wantOpen ? \"No folded tool output below this point\" : \"No unfolded tool output below this point\");\n\t}\n\n\t/**\n\t * Move the view dial one stop and report where it landed.\n\t *\n\t * The dial is the persistent decision (\"how much do I ever want to see\"),\n\t * which is why it saves; `app.tools.expand` stays the momentary one (\"open\n\t * what is in front of me\"), which is why it does not.\n\t */\n\tprivate cycleToolOutputView(direction: \"forward\" | \"backward\"): void {\n\t\tconst next = cycleToolOutputView(this.toolOutputView, direction);\n\t\tthis.applyToolOutputView(next);\n\t}\n\n\t/**\n\t * How much of a thinking trace this view shows.\n\t *\n\t * Radar drops them outright, regardless of the setting. The dial is one\n\t * question asked once — \"how much do I ever want to see\" — and a view whose\n\t * whole job is to fold a run of tool calls down to a row cannot then spend\n\t * forty lines on the reasoning that led to it. Folding to the label is not\n\t * enough either: a message that only thought and called tools has nothing\n\t * else on screen once its calls join the chain, so its label would stand\n\t * alone under the summary and one row per chain would become one row plus a\n\t * label per call.\n\t *\n\t * It is also what keeps a running chain on screen. A chain stays open across\n\t * a thinking block (thinking is not text, so it is not a chain boundary), and\n\t * a trace rendering below pushes the chain's own summary line off the top —\n\t * where every subsequent call rewrites a line above the viewport and forces\n\t * the full redraw that clears terminal scrollback.\n\t */\n\tprivate thinkingDisplayForView(): ThinkingDisplay {\n\t\tif (this.toolOutputView === \"radar\") return \"omit\";\n\t\treturn this.hideThinkingBlock ? \"label\" : \"full\";\n\t}\n\n\tprivate applyToolOutputView(view: ToolOutputView): void {\n\t\tconst previousThinking = this.thinkingDisplayForView();\n\t\tthis.toolOutputView = view;\n\t\tthis.settingsManager.setToolOutputView(view);\n\t\tthis.footer.setToolOutputView(view);\n\t\tconst thinking = this.thinkingDisplayForView();\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof ToolChainComponent) child.setView(view);\n\t\t\telse if (child instanceof ToolExecutionComponent) child.setView(view);\n\t\t\telse if (child instanceof AssistantMessageComponent && thinking !== previousThinking) {\n\t\t\t\tchild.setThinkingDisplay(thinking);\n\t\t\t}\n\t\t}\n\t\tif (this.streamingComponent && thinking !== previousThinking) {\n\t\t\tthis.streamingComponent.setThinkingDisplay(thinking);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tconst activeHeader = this.chrome.customHeader ?? this.builtInHeader;\n\t\tif (isExpandable(activeHeader)) {\n\t\t\tactiveHeader.setExpanded(expanded);\n\t\t}\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Step the agent mode one along (ask → plan → build → debug → ask).\n\t *\n\t * Mode is the product's central guardrail and sits first in the footer, yet\n\t * it was reachable only by typing `/mode <name>`. The list comes from the\n\t * mode command's own argument completions rather than a copy kept here, so\n\t * a project that adds a mode gets it in the rotation for free; if the command\n\t * is missing (a `--light` run strips the extension), the key says so instead\n\t * of guessing.\n\t */\n\tprivate async cycleAgentMode(): Promise<void> {\n\t\tconst command = this.session.extensionRunner.getCommand(\"mode\");\n\t\tif (!command) {\n\t\t\tthis.showWarning(\"Modes are not available in this session\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst completions = (await command.getArgumentCompletions?.(\"\")) ?? [];\n\t\tconst modes = completions.map((item) => item.value);\n\t\tif (modes.length === 0) {\n\t\t\tthis.showWarning(\"No modes are configured\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = this.footerDataProvider.getActiveMode();\n\t\tconst index = modes.indexOf(current);\n\t\tconst next = modes[(index + 1) % modes.length];\n\t\tawait this.session.prompt(`/mode ${next}`);\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setThinkingDisplay(this.thinkingDisplayForView());\n\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\t// Radar overrides the setting, so say so rather than claiming a change the\n\t\t// screen does not show.\n\t\tthis.showStatus(\n\t\t\t!this.hideThinkingBlock && this.toolOutputView === \"radar\"\n\t\t\t\t? \"Thinking blocks: visible (radar hides them)\"\n\t\t\t\t: `Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`,\n\t\t);\n\t}\n\n\tprivate openExternalEditor(): void {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `${APP_NAME}-editor-${Date.now()}.${APP_NAME}.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Paint a message as a filled block, the shape errors and warnings share.\n\t *\n\t * These two used to render differently for no reason anyone could name: an\n\t * error got a blank line above it and a column of padding, a warning got\n\t * neither, so a warning collided with whatever was printed before it and hung\n\t * off the left margin. Both are the same kind of interruption, so both get the\n\t * same frame, and the fill is what separates them from ordinary chat output —\n\t * a single coloured line is easy to scroll straight past.\n\t */\n\tprivate showBlock(bg: \"warningBg\" | \"toolErrorBg\", fg: \"warning\" | \"error\", title: string, body: string[]): void {\n\t\tconst box = new Box(1, 1, (t) => theme.bg(bg, t));\n\t\tapplyPaperSheet(box);\n\t\tbox.addChild(new Text(theme.bold(theme.fg(fg, title)), 0, 0));\n\t\tfor (const line of body) {\n\t\t\tbox.addChild(new Text(theme.fg(\"muted\", line), 0, 0));\n\t\t}\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(box);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Split a message into its headline and the rest.\n\t *\n\t * Multi-line notifications — `/learn` reporting where it searched, a settings\n\t * dump — read as a heading over detail, and rendering them as one undifferen-\n\t * tiated coloured block loses that. A single-line message is all headline.\n\t */\n\tprivate splitBlockMessage(message: string): { title: string; body: string[] } {\n\t\tconst [first = \"\", ...rest] = message.split(\"\\n\");\n\t\treturn { title: first, body: rest };\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tconst { title, body } = this.splitBlockMessage(errorMessage);\n\t\tthis.showBlock(\"toolErrorBg\", \"error\", `Error: ${title}`, body);\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tconst { title, body } = this.splitBlockMessage(warningMessage);\n\t\tthis.showBlock(\"warningBg\", \"warning\", title, body);\n\t}\n\n\t/**\n\t * A warning the user pays for if they miss it — same frame as `showWarning`,\n\t * with an explicit title over its body.\n\t */\n\tshowNotice(title: string, body: string[]): void {\n\t\tthis.showBlock(\"warningBg\", \"warning\", title, body);\n\t}\n\n\t/**\n\t * Say once, at startup, that `websearch` is running on the keyless backend.\n\t * Shown only while the tool is actually active and no keyed provider is\n\t * configured; silenced by `warnings.websearchApiKey`.\n\t */\n\tprivate maybeWarnAboutMissingWebSearchKey(): void {\n\t\tconst notice = websearchApiKeyNotice({\n\t\t\tactiveToolNames: this.session.getActiveToolNames(),\n\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\tsearch: this.settingsManager.getWebtoolsSearch(),\n\t\t});\n\t\tif (notice) this.showNotice(notice.title, notice.body);\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. Run `) + action;\n\t\tconst changelogUrl = \"https://github.com/kolisachint/hoocode/blob/main/packages/coding-agent/CHANGELOG.md\";\n\t\tconst changelogLink = getCapabilities().hyperlinks\n\t\t\t? hyperlink(theme.fg(\"accent\", \"open changelog\"), changelogUrl)\n\t\t\t: theme.fg(\"accent\", changelogUrl);\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogLink;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowPackageUpdateNotification(packages: string[]): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", \"Package updates are available. Run \") + action;\n\t\tconst packageLines = packages.map((pkg) => `- ${pkg}`).join(\"\\n\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Package Updates Available\"))}\\n${updateInstruction}\\n${theme.fg(\"muted\", \"Packages:\")}\\n${packageLines}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst disabledToolNames = new Set(this.settingsManager.getDisabledTools());\n\t\t\tconst builtinToolNames = this.session\n\t\t\t\t.getAllTools()\n\t\t\t\t.filter((t) => t.sourceInfo?.source === \"builtin\")\n\t\t\t\t.map((t) => t.name);\n\t\t\t// Union so tools disabled at startup (absent from the live registry) still\n\t\t\t// appear and can be re-enabled for the next session.\n\t\t\tconst toolToggleNames = [...new Set([...builtinToolNames, ...disabledToolNames])].sort();\n\t\t\t// Price every tool the pane lists, including the ones that are off: what\n\t\t\t// the row needs to show is what turning it back on will cost per turn. A\n\t\t\t// tool disabled before launch has no schema in this session, so it has no\n\t\t\t// price to show either.\n\t\t\tconst schemaTokens = new Map(\n\t\t\t\tthis.session.getAllTools().map((tool) => [tool.name, measureToolSchemaTokens(tool)]),\n\t\t\t);\n\t\t\tconst toolToggles = toolToggleNames.map((name) => ({\n\t\t\t\tname,\n\t\t\t\tenabled: !disabledToolNames.has(name),\n\t\t\t\ttokens: schemaTokens.get(name),\n\t\t\t}));\n\n\t\t\tconst toolGroups = [\n\t\t\t\t{\n\t\t\t\t\tid: \"web\",\n\t\t\t\t\tlabel: \"Web tools\",\n\t\t\t\t\tdescription: \"webfetch + websearch (network access).\",\n\t\t\t\t\tenabled: this.settingsManager.getEnableWebTools(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"embsearch\",\n\t\t\t\t\tlabel: \"Semantic search\",\n\t\t\t\t\tdescription: \"Semantic index layer fused into the always-on search tool.\",\n\t\t\t\t\tenabled: this.settingsManager.getEnableEmbsearchTools(),\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst flagDefs = this.session.extensionRunner.getFlags();\n\t\t\tconst flagValues = this.session.extensionRunner.getFlagValues();\n\t\t\tconst flags = [...flagDefs.values()].map((flag) => ({\n\t\t\t\tname: flag.name,\n\t\t\t\tdescription: flag.description,\n\t\t\t\ttype: flag.type,\n\t\t\t\tvalue: flagValues.get(flag.name) ?? flag.default ?? (flag.type === \"boolean\" ? false : \"\"),\n\t\t\t}));\n\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\ttools: toolToggles,\n\t\t\t\t\ttoolGroups,\n\t\t\t\t\t// Resolved fresh on every open, never downloaded: a binary that\n\t\t\t\t\t// arrived since the last open (a startup fetch, a `brew install`)\n\t\t\t\t\t// shows as present without a restart.\n\t\t\t\t\texternalTools: describeExternalTools(),\n\t\t\t\t\tflags,\n\t\t\t\t\ttoolOutputView: this.toolOutputView,\n\t\t\t\t\ttoolOutputMaxBytes: this.settingsManager.getToolOutputMaxBytes(),\n\t\t\t\t\ttoolOutputMaxLines: this.settingsManager.getToolOutputMaxLines(),\n\t\t\t\t\tcontextGc: this.settingsManager.getContextGcEnabled(),\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tlight: this.settingsManager.getLight(),\n\t\t\t\t\tpluginInstallScope: this.settingsManager.getPluginInstallScope(),\n\t\t\t\t\tenablePluginTools: this.settingsManager.getEnablePluginTools(),\n\t\t\t\t\t// Rows write the user settings file, so a key the project file also\n\t\t\t\t\t// sets is merged back over it next session. The pane says which.\n\t\t\t\t\tprojectPinnedSettings: Object.keys(this.settingsManager.getProjectSettings()),\n\t\t\t\t\t// The targets actually in force, so a session launched with --platform\n\t\t\t\t\t// shows what it is writing rather than the (possibly unset) setting.\n\t\t\t\t\tplatform: getWorkspacePlatforms() ?? [],\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tenableInstallTelemetry: this.settingsManager.getEnableInstallTelemetry(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorBorder: this.settingsManager.getEditorBorder(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t\tshowTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n\t\t\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\t\t\t// Show the effective value: env VOICETOOLS_SILENCE_MS wins for voice;\n\t\t\t\t\t// getWebtoolsTimeoutSecs already folds in HOOCODE_WEBTOOLS_TIMEOUT.\n\t\t\t\t\tvoiceSilenceMs: resolveVoiceSilenceMs(this.settingsManager),\n\t\t\t\t\twebtoolsTimeoutSecs: this.settingsManager.getWebtoolsTimeoutSecs(),\n\t\t\t\t\t// The effective window, so a project settings.json narrowing it for\n\t\t\t\t\t// this repo shows up here rather than the user-scope value alone.\n\t\t\t\t\t// Re-measured on every change so the pane can price what a toggle did:\n\t\t\t\t\t// the session rebuilds its system prompt as tools come and go, and\n\t\t\t\t\t// this reads that live state rather than a snapshot.\n\t\t\t\t\tmeasureTokenSurface: () => measurePromptSurface(this.session),\n\t\t\t\t\tlearn: (() => {\n\t\t\t\t\t\tconst learn = this.settingsManager.getLearnSettings();\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tlearnMaxSessions: learn.maxSessions,\n\t\t\t\t\t\t\tlearnMaxAgeDays: learn.maxAgeDays,\n\t\t\t\t\t\t\tlearnMinRepeats: learn.minRepeats,\n\t\t\t\t\t\t\tlearnMinRequestRepeats: learn.minRequestRepeats,\n\t\t\t\t\t\t\tlearnMaxProposals: learn.maxProposals,\n\t\t\t\t\t\t};\n\t\t\t\t\t})(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonToolEnabledChange: (name, enabled) => {\n\t\t\t\t\t\t// Persist for future sessions (feeds the startup denylist).\n\t\t\t\t\t\tconst disabled = new Set(this.settingsManager.getDisabledTools());\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tdisabled.delete(name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdisabled.add(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.settingsManager.setDisabledTools([...disabled]);\n\n\t\t\t\t\t\t// Apply live for the current session. Re-enabling only works for\n\t\t\t\t\t\t// tools still in the registry (i.e. not removed at startup); tools\n\t\t\t\t\t\t// disabled before launch take effect on the next session.\n\t\t\t\t\t\tconst active = new Set(this.session.getActiveToolNames());\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tif (this.session.getToolDefinition(name)) {\n\t\t\t\t\t\t\t\tactive.add(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactive.delete(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.session.setActiveToolsByName([...active]);\n\t\t\t\t\t\tthis.footerDataProvider.setSubagentEnabled(this.session.getActiveToolNames().includes(\"Task\"));\n\t\t\t\t\t},\n\t\t\t\t\tonToolGroupChange: (id, enabled) => {\n\t\t\t\t\t\t// Master switches for tool availability. These gate tool creation at\n\t\t\t\t\t\t// session build, so they persist and take effect on the next session.\n\t\t\t\t\t\tswitch (id) {\n\t\t\t\t\t\t\tcase \"web\":\n\t\t\t\t\t\t\t\tthis.settingsManager.setEnableWebTools(enabled);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"embsearch\":\n\t\t\t\t\t\t\t\tthis.settingsManager.setEnableEmbsearchTools(enabled);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputViewChange: (view) => {\n\t\t\t\t\t\tthis.applyToolOutputView(view);\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputMaxBytesChange: (bytes) => {\n\t\t\t\t\t\tthis.settingsManager.setToolOutputMaxBytes(bytes);\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputMaxLinesChange: (lines) => {\n\t\t\t\t\t\tthis.settingsManager.setToolOutputMaxLines(lines);\n\t\t\t\t\t},\n\t\t\t\t\tonContextGcChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setContextGcEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonFlagChange: (name, value) => {\n\t\t\t\t\t\t// Persist for future launches; apply live best-effort (extensions\n\t\t\t\t\t\t// that read a flag only at load time pick it up on next launch).\n\t\t\t\t\t\tthis.settingsManager.setFlagOverride(name, value);\n\t\t\t\t\t\tthis.session.extensionRunner.setFlagValue(name, value);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\t\tthis.settingsManager.setImageWidthCells(width);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t\t\t},\n\t\t\t\t\tonLightChange: (enabled) => {\n\t\t\t\t\t\t// Picks the tool set and the system prompt at startup, so it binds\n\t\t\t\t\t\t// on the next session rather than this one.\n\t\t\t\t\t\tthis.settingsManager.setLight(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonPluginInstallScopeChange: (scope) => {\n\t\t\t\t\t\t// Read per install by InstallPlugin, so it applies immediately with\n\t\t\t\t\t\t// nothing to reload.\n\t\t\t\t\t\tthis.settingsManager.setPluginInstallScope(scope);\n\t\t\t\t\t},\n\t\t\t\t\tonEnablePluginToolsChange: (enabled) => {\n\t\t\t\t\t\t// Master switch for the autonomous plugin system. The lifecycle\n\t\t\t\t\t\t// tools are attached when the session is built, so they arrive on\n\t\t\t\t\t\t// the next session; the reuse nudge re-reads settings.json per\n\t\t\t\t\t\t// check and follows immediately.\n\t\t\t\t\t\tthis.settingsManager.setEnablePluginTools(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonPlatformChange: (platforms) => {\n\t\t\t\t\t\t// Persist for later sessions, then update the process-wide session\n\t\t\t\t\t\t// state so plugin authoring and the /new-* scaffolds pick the new\n\t\t\t\t\t\t// layout up in this session too.\n\t\t\t\t\t\tthis.settingsManager.setPlatform(platforms);\n\t\t\t\t\t\tsetPlatforms(platforms);\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.transport = transport;\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tconst effective = this.thinkingDisplayForView();\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setThinkingDisplay(effective);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableInstallTelemetryChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableInstallTelemetry(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorBorderChange: (border) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorBorder(border);\n\t\t\t\t\t\tthis.defaultEditor.setBorder(border);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setBorder !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setBorder(border);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\t\tthis.settingsManager.setWarnings(warnings);\n\t\t\t\t\t},\n\t\t\t\t\tonVoiceSilenceMsChange: (ms) => {\n\t\t\t\t\t\tthis.settingsManager.setVoiceSilenceMs(ms);\n\t\t\t\t\t\t// Env override still wins; re-resolve so the live value stays consistent.\n\t\t\t\t\t\tthis.voice.setSilenceMs(resolveVoiceSilenceMs(this.settingsManager));\n\t\t\t\t\t},\n\t\t\t\t\tonWebtoolsTimeoutSecsChange: (secs) => {\n\t\t\t\t\t\t// Persisted; webfetch/websearch pick it up when tools rebuild next session.\n\t\t\t\t\t\tthis.settingsManager.setWebtoolsTimeoutSecs(secs);\n\t\t\t\t\t},\n\t\t\t\t\tonLearnSettingChange: (key, value) => {\n\t\t\t\t\t\t// /learn reads settings fresh on every invocation, so the next run\n\t\t\t\t\t\t// picks this up with no restart and nothing to re-wire live.\n\t\t\t\t\t\tthis.settingsManager.setLearnSetting(key, value);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId);\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.dialogs.showSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.dialogs.showEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tthis.session.abortBranchSummary();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${keyText(\"app.interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\t/**\n\t * Swatch picker for the session chip's colour. Moving through the list\n\t * repaints the live chip, so the choice is made by looking at the real thing\n\t * in the real theme rather than at a preview of it.\n\t */\n\tprivate showSessionColorSelector(): void {\n\t\tconst originalSlot = this.sessionManager.getSessionColorSlot();\n\t\tthis.showSelector((done) => {\n\t\t\tconst previewSlot = (slot: number) => {\n\t\t\t\tconst chip = renderSessionChip(this.sessionManager.getDisplayName(), slot);\n\t\t\t\tthis.defaultEditor.topBorderLabel = chip;\n\t\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\t\tthis.editor.topBorderLabel = chip;\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t};\n\t\t\tconst selector = new SessionColorSelectorComponent(\n\t\t\t\tthis.sessionManager.getDisplayName(),\n\t\t\t\toriginalSlot,\n\t\t\t\t(slot) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.session.setSessionColor(slot);\n\t\t\t\t\tthis.showStatus(`Session color set to ${slot}`);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\t// Cancelling must put back the colour the session actually has,\n\t\t\t\t\t// not leave it wearing the last swatch the cursor passed over.\n\t\t\t\t\tpreviewSlot(originalSlot);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tpreviewSlot,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSelectList() };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo({ name: next });\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(\n\t\tsessionPath: string,\n\t\toptions?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1],\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t\ttry {\n\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\twithSession: options?.withSession,\n\t\t\t});\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.showStatus(\"Resumed session\");\n\t\t\treturn result;\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\t\tconst selectedCwd = await this.promptForMissingSessionCwd(error);\n\t\t\t\tif (!selectedCwd) {\n\t\t\t\t\tthis.showStatus(\"Resume cancelled\");\n\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\t\tcwdOverride: selectedCwd,\n\t\t\t\t\twithSession: options?.withSession,\n\t\t\t\t});\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\tthis.showStatus(\"Resumed session in current cwd\");\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn this.handleFatalRuntimeError(\"Failed to resume session\", error);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst reloadBox = new Container();\n\t\tconst borderColor = (s: string) => theme.fg(\"border\", s);\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(\n\t\t\tnew Text(theme.fg(\"muted\", \"Reloading keybindings, extensions, skills, prompts, themes...\"), 1, 0),\n\t\t);\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(reloadBox);\n\t\tthis.ui.setFocus(reloadBox);\n\t\tthis.ui.requestRender(true);\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\tconst dismissReloadBox = (editor: Component) => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tthis.keybindings.reload();\n\t\t\tconst activeHeader = this.chrome.customHeader ?? this.builtInHeader;\n\t\t\tif (isExpandable(activeHeader)) {\n\t\t\t\tactiveHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorBorder = this.settingsManager.getEditorBorder();\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setBorder(editorBorder);\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setBorder?.(editorBorder);\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocompleteProvider();\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissReloadBox(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded keybindings, extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissReloadBox(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\t// The session is the single source of truth for whether compaction is\n\t\t// possible (e.g. \"Already compacted\", \"Nothing to compact (session too\n\t\t// small)\"). Its specific error is surfaced via the compaction_end event,\n\t\t// so we don't pre-check here and risk a divergent message.\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\ttry {\n\t\t\tawait this.session.compact(customInstructions);\n\t\t} catch {\n\t\t\t// Ignore, will be emitted as an event\n\t\t}\n\t}\n\n\tstop(): void {\n\t\tthis.unregisterSignalHandlers();\n\t\tthis.voice.dispose();\n\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\tthis.ui.terminal.setProgress(false);\n\t\t}\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\t// The terminal is ours again: later log lines can print normally.\n\t\t\tsetTerminalOwnedByTui(false);\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@kolisachint/hoocode-agent-core\";\nimport { createCompactionSummaryMessage } from \"@kolisachint/hoocode-agent-core\";\nimport type { AssistantMessage, ImageContent, Message } from \"@kolisachint/hoocode-ai\";\nimport { isLongRetryDelayError } from \"@kolisachint/hoocode-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeyId,\n\tMarkdownTheme,\n\tSlashCommand,\n} from \"@kolisachint/hoocode-tui\";\nimport {\n\tBox,\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tgetCapabilities,\n\thyperlink,\n\tLoader,\n\ttype LoaderIndicatorOptions,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tsetKeybindings,\n\tText,\n\tTUI,\n} from \"@kolisachint/hoocode-tui\";\nimport { spawnSync } from \"child_process\";\nimport { APP_NAME, APP_TITLE, VERSION } from \"../../config.js\";\nimport { setTerminalOwnedByTui } from \"../../core/agent-log.js\";\nimport { loadAgentRegistry } from \"../../core/agent-registry.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.js\";\nimport { type AssistantUsageTotals, sumAssistantUsage } from \"../../core/agent-session-stats.js\";\nimport { canvasSearchRoots, discoverCanvasExtensions } from \"../../core/canvas/discovery.js\";\nimport { pluginCanvasExtensions } from \"../../core/canvas/plugin-canvases.js\";\nimport { gateCanvasExtensions } from \"../../core/canvas/trust.js\";\nimport type {\n\tAutocompleteProviderFactory,\n\tEditorFactory,\n\tExtensionCommandContext,\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n} from \"../../core/extensions/index.js\";\nimport { getWorkspacePlatforms, setPlatforms } from \"../../core/extensions/plugins/formats/platform-targets.js\";\nimport { describeExternalTools } from \"../../core/external-tools.js\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { formatDurationSecs } from \"../../core/format-duration.js\";\nimport { formatTokens } from \"../../core/format-tokens.js\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.js\";\nimport { measurePromptSurface, measureToolSchemaTokens } from \"../../core/light.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { formatMissingSessionCwdPrompt, MissingSessionCwdError } from \"../../core/session-cwd.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport type { SettingsManager } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { SourceInfo } from \"../../core/source-info.js\";\nimport { startupProgress } from \"../../core/startup-progress.js\";\nimport { taskStore } from \"../../core/task-store.js\";\nimport type { TeamViewConnection } from \"../../core/team-view.js\";\nimport { cycleToolOutputView, type ToolOutputView } from \"../../core/tool-output-view.js\";\nimport { settleDanglingMainTasks } from \"../../core/tools/todo.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport { buildCompactWordmark } from \"../../core/wordmark.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { parseGitUrl } from \"../../utils/git.js\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.js\";\nimport { ensureTool } from \"../../utils/tools-manager.js\";\nimport { checkForNewHooCodeVersion } from \"../../utils/version-check.js\";\nimport { BashExecutionController } from \"./bash-execution-controller.js\";\nimport { type CommandContext, CommandExecutor } from \"./command-executor.js\";\nimport { BELL, CompletionChime } from \"./completion-chime.js\";\nimport { AssistantMessageComponent, type ThinkingDisplay } from \"./components/assistant-message.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CountdownTimer } from \"./components/countdown-timer.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { FooterComponent } from \"./components/footer.js\";\nimport { keyHint, keyText, rawKeyHint } from \"./components/keybinding-hints.js\";\nimport { renderSessionChip } from \"./components/session-chip.js\";\nimport { SessionColorSelectorComponent } from \"./components/session-color-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport { TaskPanelComponent } from \"./components/task-panel.js\";\nimport { ToolChainComponent } from \"./components/tool-chain.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport { ExtensionChrome } from \"./extension-chrome.js\";\nimport { ExtensionDialogs } from \"./extension-dialogs.js\";\nimport { LoginController } from \"./login-controller.js\";\nimport { MessageQueueController } from \"./message-queue-controller.js\";\nimport { ModelController } from \"./model-controller.js\";\nimport {\n\tExpandableText,\n\tformatDisplayPath,\n\tisExpandable,\n\tshowLoadedResources as renderLoadedResources,\n} from \"./resource-display.js\";\nimport { checkForPackageUpdates, checkTmuxKeyboardSetup, getChangelogForDisplay } from \"./startup-checks.js\";\nimport { TeamFocusController } from \"./team-focus.js\";\nimport {\n\tapplyPaperSheet,\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tstopThemeWatcher,\n\tTheme,\n\ttheme,\n} from \"./theme/theme.js\";\nimport { VoiceController } from \"./voice/voice-controller.js\";\nimport { websearchApiKeyNotice } from \"./websearch-warning.js\";\n\n/** Interface for components that can be expanded/collapsed */\n\nconst DEAD_TERMINAL_ERROR_CODES = new Set([\"EIO\", \"EPIPE\", \"ENOTCONN\"]);\n\n/**\n * Resolve the effective voice trailing-silence window (ms): env\n * `VOICETOOLS_SILENCE_MS` wins (like `VOICETOOLS_BIN`), otherwise the settings\n * value. Both paths are clamped to 300-10000; a malformed env value falls back to\n * the settings value.\n */\nfunction resolveVoiceSilenceMs(settingsManager: SettingsManager): number {\n\tconst envRaw = process.env.VOICETOOLS_SILENCE_MS?.trim();\n\tif (envRaw) {\n\t\tconst envValue = Number(envRaw);\n\t\tif (Number.isFinite(envValue) && envValue > 0) {\n\t\t\treturn Math.min(10000, Math.max(300, Math.floor(envValue)));\n\t\t}\n\t}\n\treturn settingsManager.getVoiceSilenceMs();\n}\n\nfunction isDeadTerminalError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\" || !(\"code\" in error)) {\n\t\treturn false;\n\t}\n\tconst code = (error as NodeJS.ErrnoException).code;\n\treturn code !== undefined && DEAD_TERMINAL_ERROR_CODES.has(code);\n}\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n}\n\n// How often the streaming assistant message re-parses its markdown. Deltas can\n// arrive far faster than this; every application re-lexes the growing tail\n// block, so applying per-delta made streaming cost O(message²).\nconst STREAM_RENDER_THROTTLE_MS = 100;\n// Task-store mutations (subagent tool progress, usage ticks) arrive in bursts;\n// each render they trigger reassembles the whole component tree, so cap them.\nconst TASK_RENDER_THROTTLE_MS = 50;\n// Finished tool blocks beyond this many (oldest first) are frozen to release\n// their retained output/image payloads (see ToolExecutionComponent.freeze).\n// Generous so nothing near the viewport is ever frozen; the cap bounds the\n// view layer's memory across a long session heavy on tool output.\nconst LIVE_TOOL_WINDOW = 50;\n\n/**\n * Leading+trailing throttle: the first call runs immediately, calls landing\n * inside the window coalesce into one trailing run with the latest state.\n */\nfunction throttled(ms: number, fn: () => void): () => void {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet pending = false;\n\tconst run = () => {\n\t\tfn();\n\t\ttimer = setTimeout(() => {\n\t\t\ttimer = undefined;\n\t\t\tif (pending) {\n\t\t\t\tpending = false;\n\t\t\t\trun();\n\t\t\t}\n\t\t}, ms);\n\t\ttimer.unref?.();\n\t};\n\treturn () => {\n\t\tif (timer) {\n\t\t\tpending = true;\n\t\t\treturn;\n\t\t}\n\t\trun();\n\t};\n}\n\n/**\n * Style a status/notify message for the chat.\n *\n * Plain messages are dimmed, as they always were. A message that already\n * carries escape codes is passed through untouched: `theme.fg` closes with\n * `\\x1b[39m` (reset foreground, not \"restore\"), so wrapping a pre-styled string\n * in dim would drop the dim at the first inner span — and the TUI's wrapper\n * carries that reset state across newlines, so every following line would lose\n * it too. Passing through is what lets a listing colour its own columns.\n */\nfunction styleStatusMessage(message: string): string {\n\treturn message.includes(\"\\x1b[\") ? message : theme.fg(\"dim\", message);\n}\n\nexport class InteractiveMode {\n\tprivate runtimeHost: AgentSessionRuntime;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate editorComponentFactory: EditorFactory | undefined;\n\tprivate voice: VoiceController;\n\tprivate autocompleteProvider: AutocompleteProvider | undefined;\n\tprivate autocompleteProviderWrappers: AutocompleteProviderFactory[] = [];\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\t// Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: Loader | undefined = undefined;\n\tprivate workingMessage: string | undefined = undefined;\n\tprivate workingVisible = true;\n\tprivate workingIndicatorOptions: LoaderIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\tprivate readonly defaultHiddenThinkingLabel = \"Thinking...\";\n\tprivate hiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\tprivate startupNoticesShown = false;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\t/** Throttled re-parse/re-render of the in-flight assistant message. The\n\t * guard makes a trailing run after message_end/agent_end a no-op; a direct\n\t * updateContent on message_end flushes the final state regardless. */\n\tprivate readonly scheduleStreamingRender = throttled(STREAM_RENDER_THROTTLE_MS, () => {\n\t\tif (!this.streamingComponent || !this.streamingMessage) return;\n\t\t// streaming=true: large blocks render segmented so only the tail chunk\n\t\t// re-parses; message_end's direct updateContent renders the canonical form.\n\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\t\tthis.ui.requestRender();\n\t});\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\t// Persisted view dial (radar / glance / full). See core/tool-output-view.ts.\n\tprivate toolOutputView: ToolOutputView = \"glance\";\n\t// The chain currently collecting tool calls, if the agent is mid-run.\n\tprivate openChain?: ToolChainComponent;\n\t/** The newest tool block in the transcript; radar marks it. */\n\tprivate latestToolBlock?: ToolExecutionComponent;\n\t/** The run that block belongs to; radar marks its folded line too. */\n\tprivate latestChain?: ToolChainComponent;\n\t// Whether the assistant message being streamed has said anything yet. The\n\t// first words it speaks close the chain the previous message's calls built.\n\tprivate sawTextInCurrentMessage = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\t// Task store subscription unsubscribe function (task panel)\n\tprivate taskStoreUnsubscribe?: () => void;\n\t// Startup-progress subscription unsubscribe function (footer download/index bars)\n\tprivate startupProgressUnsubscribe?: () => void;\n\tprivate signalCleanupHandlers: Array<() => void> = [];\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryCountdown: CountdownTimer | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Completion chime state\n\tprivate chime?: CompletionChime;\n\t// True between auto_retry_start and the next agent_start: the turn is not done,\n\t// it is about to re-run, so the deferred completion check must not fire the chime.\n\tprivate chimePendingRetry = false;\n\t// Stop reason of the request's latest assistant message, reset when the user\n\t// starts a new one. Read at settle time by two consumers that ask the same\n\t// question — did this request end cleanly? An \"aborted\" turn means the user is\n\t// present, so no chime; anything other than a clean \"stop\" means dangling plan\n\t// items must not be claimed as completed.\n\tprivate turnStopReason: AssistantMessage[\"stopReason\"] | undefined = undefined;\n\n\t// Cumulative usage + wall clock captured at the first agent_start of a request,\n\t// diffed at agent_end to print that request's own cost into the transcript.\n\t// Anchored on the FIRST start so a retried request reports one span, not one\n\t// per attempt (same reason the chime anchors its duration there).\n\tprivate turnCostAnchor: { totals: AssistantUsageTotals; at: number } | undefined;\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state\n\tprivate dialogs: ExtensionDialogs;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate chrome!: ExtensionChrome;\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Task panel shown just above the editor (active subagent tasks)\n\tprivate taskPanel: TaskPanelComponent;\n\n\t// hooteams team client (--team): steering + attach share its single SSE stream\n\tprivate teamFocus: TeamFocusController;\n\n\t// Bash command execution (the `!cmd` prompt mode)\n\tprivate bashExecution: BashExecutionController;\n\n\t// Message queueing (compaction queue + pending-messages display)\n\tprivate messageQueue: MessageQueueController;\n\n\t// Model selection (/model, /models, cycle keys)\n\tprivate modelController: ModelController;\n\n\t// Auth / login flows (/login, /logout)\n\tprivate loginController: LoginController;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Component | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get session(): AgentSession {\n\t\treturn this.runtimeHost.session;\n\t}\n\tprivate _commandExecutor?: CommandExecutor;\n\t/**\n\t * Lazily-built command executor. The context uses getters for mutable\n\t * dependencies (e.g. the active session) so handlers always operate on the\n\t * current state even after a session switch.\n\t */\n\tprivate get commandExecutor(): CommandExecutor {\n\t\tif (!this._commandExecutor) {\n\t\t\tconst self = this;\n\t\t\tconst context: CommandContext = {\n\t\t\t\tget session() {\n\t\t\t\t\treturn self.session;\n\t\t\t\t},\n\t\t\t\tget sessionManager() {\n\t\t\t\t\treturn self.sessionManager;\n\t\t\t\t},\n\t\t\t\tget runtimeHost() {\n\t\t\t\t\treturn self.runtimeHost;\n\t\t\t\t},\n\t\t\t\tget ui() {\n\t\t\t\t\treturn self.ui;\n\t\t\t\t},\n\t\t\t\tget editor() {\n\t\t\t\t\treturn self.editor;\n\t\t\t\t},\n\t\t\t\tget editorContainer() {\n\t\t\t\t\treturn self.editorContainer;\n\t\t\t\t},\n\t\t\t\tget chatContainer() {\n\t\t\t\t\treturn self.chatContainer;\n\t\t\t\t},\n\t\t\t\tget statusContainer() {\n\t\t\t\t\treturn self.statusContainer;\n\t\t\t\t},\n\t\t\t\tget footer() {\n\t\t\t\t\treturn self.footer;\n\t\t\t\t},\n\t\t\t\tget keybindings() {\n\t\t\t\t\treturn self.keybindings;\n\t\t\t\t},\n\t\t\t\tshowStatus: (message) => self.showStatus(message),\n\t\t\t\tshowError: (message) => self.showError(message),\n\t\t\t\tshowWarning: (message) => self.showWarning(message),\n\t\t\t\tupdateEditorBorderColor: () => self.updateEditorBorderColor(),\n\t\t\t\trenderCurrentSessionState: () => self.renderCurrentSessionState(),\n\t\t\t\trebuildChatFromMessages: () => self.rebuildChatFromMessages(),\n\t\t\t\tgetMarkdownThemeWithSettings: () => self.getMarkdownThemeWithSettings(),\n\t\t\t\tstopLoadingAnimation: () => self.stopLoadingAnimation(),\n\t\t\t\tfindExactModelMatch: (searchTerm) => self.modelController.findExactModelMatch(searchTerm),\n\t\t\t\tmaybeWarnAboutAnthropicSubscriptionAuth: (model) =>\n\t\t\t\t\tself.modelController.maybeWarnAboutAnthropicSubscriptionAuth(model),\n\t\t\t\tshowModelSelector: (searchTerm) => self.modelController.showModelSelector(searchTerm),\n\t\t\t\tshowExtensionConfirm: (title, message) => self.dialogs.confirm(title, message),\n\t\t\t\tpromptForMissingSessionCwd: (error) => self.promptForMissingSessionCwd(error),\n\t\t\t\thandleFatalRuntimeError: (prefix, error) => self.handleFatalRuntimeError(prefix, error),\n\t\t\t};\n\t\t\tthis._commandExecutor = new CommandExecutor(context);\n\t\t}\n\t\treturn this._commandExecutor;\n\t}\n\tprivate stopLoadingAnimation(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t}\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\truntimeHost: AgentSessionRuntime,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.runtimeHost = runtimeHost;\n\t\tthis.runtimeHost.setBeforeSessionInvalidate(() => {\n\t\t\tthis.resetExtensionUI();\n\t\t});\n\t\tthis.runtimeHost.setRebindSession(async () => {\n\t\t\tawait this.rebindCurrentSession();\n\t\t});\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(this.keybindings);\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tborder: this.settingsManager.getEditorBorder(),\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editor.promptPrefix = \"❯\";\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider(this.sessionManager.getCwd());\n\t\tthis.footer = new FooterComponent(this.session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\t\tthis.footer.setToolOutputView(this.toolOutputView);\n\t\tthis.footerDataProvider.setSubagentEnabled(this.session.getActiveToolNames().includes(\"Task\"));\n\t\tthis.chrome = new ExtensionChrome({\n\t\t\tui: this.ui,\n\t\t\twidgetContainerAbove: this.widgetContainerAbove,\n\t\t\twidgetContainerBelow: this.widgetContainerBelow,\n\t\t\theaderContainer: this.headerContainer,\n\t\t\tfooter: this.footer,\n\t\t\tfooterDataProvider: this.footerDataProvider,\n\t\t\tgetBuiltInHeader: () => this.builtInHeader,\n\t\t\tisToolOutputExpanded: () => this.toolOutputExpanded,\n\t\t});\n\t\tthis.taskPanel = new TaskPanelComponent(this.ui);\n\t\tthis.dialogs = new ExtensionDialogs({\n\t\t\tui: this.ui,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tkeybindings: this.keybindings,\n\t\t\tgetEditor: () => this.editor,\n\t\t});\n\t\tthis.teamFocus = new TeamFocusController({\n\t\t\tui: this.ui,\n\t\t\ttaskPanel: this.taskPanel,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tgetEditor: () => this.editor as Component,\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowWarning: (message) => this.showWarning(message),\n\t\t\tshowAskOptions: (questions, opts) => this.dialogs.showAskOptions(questions, opts),\n\t\t\tisAskOptionsOpen: () => this.dialogs.isAskOptionsOpen(),\n\t\t});\n\t\tthis.voice = new VoiceController({\n\t\t\tui: this.ui,\n\t\t\tstatusContainer: this.statusContainer,\n\t\t\tsendEditorInput: (data) => this.editor.handleInput(data),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tsilenceMs: resolveVoiceSilenceMs(this.settingsManager),\n\t\t});\n\t\tconst self = this;\n\t\tthis.bashExecution = new BashExecutionController({\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tui: this.ui,\n\t\t\tpendingMessagesContainer: this.pendingMessagesContainer,\n\t\t\tchatContainer: this.chatContainer,\n\t\t\tshowError: (message) => this.showError(message),\n\t\t});\n\t\tthis.messageQueue = new MessageQueueController({\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tgetEditor: () => this.editor,\n\t\t\tpendingMessagesContainer: this.pendingMessagesContainer,\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t});\n\t\tthis.modelController = new ModelController({\n\t\t\tui: this.ui,\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tshowSelector: (create) => this.showSelector(create),\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tshowWarning: (message) => this.showWarning(message),\n\t\t\tshowNotice: (title, body) => this.showNotice(title, body),\n\t\t\tupdateEditorBorderColor: () => this.updateEditorBorderColor(),\n\t\t\tinvalidateFooter: () => this.footer.invalidate(),\n\t\t\tsetAvailableProviderCount: (count) => this.footerDataProvider.setAvailableProviderCount(count),\n\t\t});\n\t\tthis.loginController = new LoginController({\n\t\t\tui: this.ui,\n\t\t\tget session() {\n\t\t\t\treturn self.session;\n\t\t\t},\n\t\t\tgetEditor: () => this.editor as Component,\n\t\t\teditorContainer: this.editorContainer,\n\t\t\tshowSelector: (create) => this.showSelector(create),\n\t\t\tshowStatus: (message) => this.showStatus(message),\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tupdateAvailableProviderCount: () => this.modelController.updateAvailableProviderCount(),\n\t\t\tupdateEditorBorderColor: () => this.updateEditorBorderColor(),\n\t\t\tinvalidateFooter: () => this.footer.invalidate(),\n\t\t\tmaybeWarnAboutAnthropicSubscriptionAuth: (model) =>\n\t\t\t\tthis.modelController.maybeWarnAboutAnthropicSubscriptionAuth(model),\n\t\t});\n\t\tthis.taskPanel.onNudge = (role) => this.teamFocus.showNudgeInput(role);\n\t\tthis.taskPanel.onAttach = (role) => this.teamFocus.showAttach(role);\n\t\tthis.taskPanel.onExitFocus = () => this.teamFocus.exitFocus();\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Load the tool-output view dial\n\t\tthis.toolOutputView = this.settingsManager.getToolOutputView();\n\n\t\t// Completion chime: rings the terminal bell when a long turn finishes or the\n\t\t// agent blocks awaiting input. Enable is read fresh so a live toggle applies.\n\t\tthis.chime = new CompletionChime({\n\t\t\tisEnabled: () => this.settingsManager.getChimeOnTurnComplete(),\n\t\t\tring: () => this.ui.terminal.write(BELL),\n\t\t});\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined {\n\t\tif (!sourceInfo) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst scopePrefix = sourceInfo.scope === \"user\" ? \"u\" : sourceInfo.scope === \"project\" ? \"p\" : \"t\";\n\t\tconst source = sourceInfo.source.trim();\n\n\t\tif (source === \"auto\" || source === \"local\" || source === \"cli\") {\n\t\t\treturn scopePrefix;\n\t\t}\n\n\t\tif (source.startsWith(\"npm:\")) {\n\t\t\treturn `${scopePrefix}:${source}`;\n\t\t}\n\n\t\tconst gitSource = parseGitUrl(source);\n\t\tif (gitSource) {\n\t\t\tconst ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n\t\t\treturn `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n\t\t}\n\n\t\treturn scopePrefix;\n\t}\n\n\tprivate prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined {\n\t\tconst sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n\t\tif (!sourceTag) {\n\t\t\treturn description;\n\t\t}\n\t\treturn description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n\t}\n\n\tprivate getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[] {\n\t\tconst builtinNames = new Set(BUILTIN_SLASH_COMMANDS.map((command) => command.name));\n\t\treturn extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((command) => builtinNames.has(command.name))\n\t\t\t.map((command) => ({\n\t\t\t\ttype: \"warning\" as const,\n\t\t\t\tmessage:\n\t\t\t\t\tcommand.invocationName === command.name\n\t\t\t\t\t\t? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n\t\t\t\t\t\t: `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n\t\t\t\tpath: command.sourceInfo.path,\n\t\t\t}));\n\t}\n\n\tprivate createBaseAutocompleteProvider(): AutocompleteProvider {\n\t\t// Define commands for autocomplete\n\t\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst cdCommand = slashCommands.find((command) => command.name === \"cd\");\n\t\tif (cdCommand) {\n\t\t\tcdCommand.argumentHint = \"<path>\";\n\t\t\tcdCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst completions = this.commandExecutor.getChangeDirectoryCompletions(prefix);\n\t\t\t\treturn completions.length > 0 ? completions : null;\n\t\t\t};\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = this.session.extensionRunner\n\t\t\t.getRegisteredCommands()\n\t\t\t.filter((cmd) => !builtinCommandNames.has(cmd.name))\n\t\t\t.map((cmd) => ({\n\t\t\t\tname: cmd.invocationName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({\n\t\t\t\t\tname: commandName,\n\t\t\t\t\tdescription: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tthis.sessionManager.getCwd(),\n\t\t\tthis.fdPath,\n\t\t);\n\t}\n\n\tprivate setupAutocompleteProvider(): void {\n\t\tlet provider = this.createBaseAutocompleteProvider();\n\t\tfor (const wrapProvider of this.autocompleteProviderWrappers) {\n\t\t\tprovider = wrapProvider(provider);\n\t\t}\n\n\t\tthis.autocompleteProvider = provider;\n\t\tthis.defaultEditor.setAutocompleteProvider(provider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(provider);\n\t\t}\n\t}\n\n\tprivate showStartupNoticesIfNeeded(): void {\n\t\tif (this.startupNoticesShown) {\n\t\t\treturn;\n\t\t}\n\t\tthis.startupNoticesShown = true;\n\n\t\tif (!this.changelogMarkdown || !this.changelogMarkdown.trim()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.chatContainer.children.length > 0) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\tthis.chatContainer.addChild(new Text(condensedText, 1, 0));\n\t\t} else {\n\t\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t}\n\n\t/** Feed a first-run tool-binary download into the footer's startup-progress line. */\n\tprivate reportToolDownload(key: string, label: string, receivedBytes: number, totalBytes: number | null): void {\n\t\tstartupProgress.set({ key, kind: \"download\", label, receivedBytes, totalBytes });\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\tthis.registerSignalHandlers();\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = getChangelogForDisplay({\n\t\t\thasMessages: this.session.state.messages.length > 0,\n\t\t\tsettingsManager: this.settingsManager,\n\t\t});\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir).\n\t\t// Both help — fd for autocomplete, rg for the grep tool — but neither is required\n\t\t// to start: resolving them can hit a slow or failing network in restricted\n\t\t// environments, and awaiting here froze first paint. Resolve in the background\n\t\t// (never awaited, so a first-run download never blocks first paint) and wire fd\n\t\t// in when ready; the grep/find tools resolve rg/fd on demand with a native\n\t\t// fallback regardless. embsearch is intentionally NOT preloaded here: when the\n\t\t// semantic index is enabled, EmbsearchService (main.ts) owns its download and\n\t\t// build, reporting through the same startupProgress channel — preloading it too\n\t\t// would fetch the binary twice and race.\n\t\t//\n\t\t// First-run download progress streams into the footer's startupProgress line\n\t\t// via ensureTool's byte-count callback; the line clears when the download\n\t\t// settles (path resolved) or is dropped if it fails.\n\t\tvoid Promise.all([\n\t\t\tensureTool(\"fd\", true, (received, total) => this.reportToolDownload(\"fd\", \"fd\", received, total)),\n\t\t\tensureTool(\"rg\", true, (received, total) => this.reportToolDownload(\"rg\", \"ripgrep\", received, total)),\n\t\t])\n\t\t\t.then(([fdPath]) => {\n\t\t\t\tthis.fdPath = fdPath;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Non-fatal: autocomplete simply stays disabled until/unless fd resolves.\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// Downloads settled (resolved or failed): drop any lingering bars.\n\t\t\t\tstartupProgress.remove(\"fd\");\n\t\t\t\tstartupProgress.remove(\"rg\");\n\t\t\t});\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tconst termW = this.ui.terminal.columns;\n\t\t\t// A function, not a value: the banner names the working directory, and\n\t\t\t// `/cd` moves it. `refreshBuiltInHeader` re-reads this after a move.\n\t\t\tconst logo = () =>\n\t\t\t\ttermW >= 40\n\t\t\t\t\t? buildCompactWordmark({\n\t\t\t\t\t\t\tappName: APP_NAME,\n\t\t\t\t\t\t\tversion: this.version,\n\t\t\t\t\t\t\tcwd: formatDisplayPath(this.sessionManager.getCwd()),\n\t\t\t\t\t\t\taccent: (text) => theme.fg(\"accent\", text),\n\t\t\t\t\t\t\tdim: (text) => theme.fg(\"dim\", text),\n\t\t\t\t\t\t\tmuted: (text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\tcursor: (text) => theme.blink(theme.fg(\"accent\", text)),\n\t\t\t\t\t\t\tnote: () => theme.fg(\"dim\", ` ${keyText(\"app.tools.expand\")} more`),\n\t\t\t\t\t\t})\n\t\t\t\t\t: theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${this.version}`);\n\n\t\t\t// Build startup instructions using keybinding hint helpers\n\t\t\tconst hint = (keybinding: AppKeybinding, description: string) => keyHint(keybinding, description);\n\n\t\t\tconst expandedInstructions = [\n\t\t\t\thint(\"app.interrupt\", \"to interrupt\"),\n\t\t\t\thint(\"app.clear\", \"to clear\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")} twice`, \"to exit\"),\n\t\t\t\thint(\"app.exit\", \"to exit (empty)\"),\n\t\t\t\thint(\"app.suspend\", \"to suspend\"),\n\t\t\t\tkeyHint(\"tui.editor.deleteToLineEnd\", \"to delete to end\"),\n\t\t\t\thint(\"app.thinking.cycle\", \"to cycle thinking level\"),\n\t\t\t\trawKeyHint(`${keyText(\"app.model.cycleForward\")}/${keyText(\"app.model.cycleBackward\")}`, \"to cycle models\"),\n\t\t\t\thint(\"app.model.select\", \"to select model\"),\n\t\t\t\thint(\"app.tools.expand\", \"to expand all tool output\"),\n\t\t\t\thint(\"app.tools.unfoldOne\", \"to open one chain or block (repeat to peel back)\"),\n\t\t\t\thint(\"app.view.cycleForward\", \"to cycle tool output (radar/glance/full)\"),\n\t\t\t\thint(\"app.thinking.toggle\", \"to expand thinking\"),\n\t\t\t\thint(\"app.tasks.cycleView\", \"to cycle task panel view\"),\n\t\t\t\t...(this.teamFocus.connected ? [hint(\"app.team.focus\", \"to focus team roster\")] : []),\n\t\t\t\thint(\"app.mode.cycle\", \"to cycle agent mode\"),\n\t\t\t\thint(\"app.session.changeDirectory\", \"to change working directory\"),\n\t\t\t\thint(\"app.settings.open\", \"for settings\"),\n\t\t\t\thint(\"app.hotkeys.open\", \"for all shortcuts\"),\n\t\t\t\thint(\"app.editor.external\", \"for external editor\"),\n\t\t\t\trawKeyHint(\"/\", \"for commands\"),\n\t\t\t\trawKeyHint(\"!\", \"to run bash\"),\n\t\t\t\trawKeyHint(\"!!\", \"to run bash (no context)\"),\n\t\t\t\thint(\"app.message.followUp\", \"to queue follow-up\"),\n\t\t\t\thint(\"app.message.dequeue\", \"to edit all queued messages\"),\n\t\t\t\thint(\"app.clipboard.pasteImage\", \"to paste image\"),\n\t\t\t\trawKeyHint(\"drop files\", \"to attach\"),\n\t\t\t].join(\"\\n\");\n\t\t\tconst onboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\t`${APP_NAME} can explain its own features and look up its docs. Ask it how to use or extend ${APP_NAME}.`,\n\t\t\t);\n\t\t\tthis.builtInHeader = new ExpandableText(\n\t\t\t\t() => logo(),\n\t\t\t\t() => `${logo()}\\n${expandedInstructions}\\n\\n${onboarding}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t);\n\n\t\t\t// Setup UI layout\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.chrome.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.taskPanel);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Start the UI before initializing extensions so session_start handlers can use interactive dialogs\n\t\tthis.ui.start();\n\t\t// From here the TUI owns the terminal, so the agent's operational log lines\n\t\t// (dispatch, warm fallback, lifeguard) must stop writing to it — a write the\n\t\t// renderer did not make desyncs its cursor bookkeeping and duplicates rows.\n\t\tsetTerminalOwnedByTui(true);\n\t\tthis.isInitialized = true;\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.rebindCurrentSession();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\t// The chip's fill and ink are baked in at build time, so a theme swap\n\t\t\t// has to rebuild it or it keeps the old theme's colours.\n\t\t\tthis.updateSessionChip();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Re-render the UI when the task list changes (task panel shows active\n\t\t// tasks). Throttled: subagent progress mutates the store in bursts, and\n\t\t// each resulting render reassembles the entire component tree.\n\t\tthis.taskStoreUnsubscribe = taskStore.subscribe(\n\t\t\tthrottled(TASK_RENDER_THROTTLE_MS, () => {\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}),\n\t\t);\n\n\t\t// Re-render the footer as startup progress updates (tool downloads stream\n\t\t// byte counts in bursts, the index build ticks per batch). Throttled like the\n\t\t// task panel so a fast download doesn't drive a render per chunk.\n\t\tthis.startupProgressUnsubscribe = startupProgress.subscribe(\n\t\t\tthrottled(TASK_RENDER_THROTTLE_MS, () => {\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}),\n\t\t);\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.modelController.updateAvailableProviderCount();\n\t}\n\n\t/**\n\t * Refresh everything in the chrome that says *which session this is*: the\n\t * terminal title and the chip on the input box. Both read from the same\n\t * source, so they can never disagree about a rename.\n\t */\n\tprivate refreshSessionIdentity(): void {\n\t\tthis.updateTerminalTitle();\n\t\tthis.updateSessionChip();\n\t}\n\n\t/**\n\t * Rebuild the session chip and hand it to the editor, telling the footer to\n\t * stand down from showing the name itself. Cheap enough to call on any change\n\t * that could move the name, the colour, or the theme they are drawn in.\n\t */\n\tprivate updateSessionChip(): void {\n\t\tconst chip = renderSessionChip(this.sessionManager.getDisplayName(), this.sessionManager.getSessionColorSlot());\n\t\tthis.defaultEditor.topBorderLabel = chip;\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.topBorderLabel = chip;\n\t\t}\n\t\tthis.footer.setSessionChipShown(chip !== undefined);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(this.sessionManager.getCwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version check asynchronously\n\t\tcheckForNewHooCodeVersion(this.version).then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Start package update check asynchronously\n\t\tcheckForPackageUpdates(this.sessionManager.getCwd(), this.settingsManager).then((updates) => {\n\t\t\tif (updates.length > 0) {\n\t\t\t\tthis.showPackageUpdateNotification(updates);\n\t\t\t}\n\t\t});\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tcheckTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) {\n\t\t\t\tthis.showWarning(warning);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\tvoid this.modelController.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\tthis.maybeWarnAboutMissingWebSearchKey();\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\n\t\tif (initialMessages) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate getStartupExpansionState(): boolean {\n\t\treturn this.options.verbose || this.toolOutputExpanded;\n\t}\n\n\t/** Render the startup/reload resource listing (see resource-display.ts). */\n\tprivate showLoadedResources(options?: {\n\t\textensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\trenderLoadedResources(\n\t\t\t{\n\t\t\t\tchatContainer: this.chatContainer,\n\t\t\t\tgetCwd: () => this.sessionManager.getCwd(),\n\t\t\t\tgetResourceLoader: () => this.session.resourceLoader,\n\t\t\t\tgetPromptTemplates: () => this.session.promptTemplates,\n\t\t\t\tgetExtensionRunner: () => this.session.extensionRunner,\n\t\t\t\tgetActiveMode: () => this.footerDataProvider.getActiveMode(),\n\t\t\t\tgetSubagentEnabled: () => this.footerDataProvider.getSubagentEnabled(),\n\t\t\t\tgetAgentCount: () => this.getDispatchableAgentCount(),\n\t\t\t\t// Cheap and fork-free: directory entries plus each installed plugin's\n\t\t\t\t// resolved canvas dirs. Computed inside the listing branch, so a quiet\n\t\t\t\t// startup pays nothing for it.\n\t\t\t\tgetCanvases: () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\t\t\tconst found = discoverCanvasExtensions(\n\t\t\t\t\t\t\tcanvasSearchRoots(cwd, os.homedir()),\n\t\t\t\t\t\t\tpluginCanvasExtensions(cwd),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst gated = gateCanvasExtensions(found, cwd);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t...gated.runnable.map((e) => ({ id: e.id, scope: e.scope as string, withheld: false })),\n\t\t\t\t\t\t\t...gated.withheld.map((w) => ({\n\t\t\t\t\t\t\t\tid: w.extension.id,\n\t\t\t\t\t\t\t\tscope: w.extension.scope as string,\n\t\t\t\t\t\t\t\twithheld: true,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t];\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetAgents: () => {\n\t\t\t\t\tif (!this.footerDataProvider.getSubagentEnabled()) return [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn loadAgentRegistry({ cwd: this.sessionManager.getCwd() }).list();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetColumns: () => this.ui.terminal.columns,\n\t\t\t\tquietStartup: () => this.settingsManager.getQuietStartup(),\n\t\t\t\tverbose: this.options.verbose ?? false,\n\t\t\t\tisExpanded: () => this.getStartupExpansionState(),\n\t\t\t\tgetBuiltInCommandConflictDiagnostics: (runner) => this.getBuiltInCommandConflictDiagnostics(runner),\n\t\t\t},\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Agents the model can actually dispatch. Zero when the Task tool is off, so\n\t * the summary never advertises a capability the session cannot use.\n\t */\n\tprivate getDispatchableAgentCount(): number {\n\t\tif (!this.footerDataProvider.getSubagentEnabled()) return 0;\n\t\ttry {\n\t\t\treturn loadAgentRegistry({ cwd: this.sessionManager.getCwd() }).list().length;\n\t\t} catch {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async bindCurrentSessionExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.newSession(options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfork: async (entryId, options) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId, options);\n\t\t\t\t\t\tif (!result.cancelled) {\n\t\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { cancelled: result.cancelled };\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\treturn this.handleFatalRuntimeError(\"Failed to fork session\", error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath, options) => {\n\t\t\t\t\treturn this.handleResumeSession(sessionPath, options);\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocompleteProvider();\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\t// The startup path draws the listing here, because it renders messages\n\t\t// without clearing. A *rebind* (/new, /resume, /fork) clears the transcript\n\t\t// straight afterwards, so `renderCurrentSessionState` draws it again — this\n\t\t// call is the one startup keeps.\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.showStartupNoticesIfNeeded();\n\t}\n\n\tprivate applyRuntimeSettings(): void {\n\t\tthis.footer.setSession(this.session);\n\t\tthis.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);\n\t\tthis.footer.setToolOutputView(this.toolOutputView);\n\t\t// The startup banner names the cwd, which `/cd` changes under it.\n\t\tif (this.builtInHeader instanceof ExpandableText) {\n\t\t\tthis.builtInHeader.refresh();\n\t\t}\n\t\tthis.footerDataProvider.setCwd(this.sessionManager.getCwd());\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tconst editorBorder = this.settingsManager.getEditorBorder();\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor.setBorder(editorBorder);\n\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setBorder?.(editorBorder);\n\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t}\n\t}\n\n\tprivate async rebindCurrentSession(): Promise<void> {\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.applyRuntimeSettings();\n\t\tawait this.bindCurrentSessionExtensions();\n\t\tthis.subscribeToAgent();\n\t\tawait this.modelController.updateAvailableProviderCount();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.refreshSessionIdentity();\n\t}\n\n\tprivate async handleFatalRuntimeError(prefix: string, error: unknown): Promise<never> {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.showError(`${prefix}: ${message}`);\n\t\tstopThemeWatcher();\n\t\tthis.stop();\n\t\tprocess.exit(1);\n\t}\n\n\t/**\n\t * Reset the transcript to whatever the (possibly just-swapped) session holds.\n\t *\n\t * Every caller — /new, /resume, /fork — reaches here *after* the runtime has\n\t * rebound extensions, and rebinding is what renders the loaded-resource\n\t * listing. Clearing the chat therefore wiped the listing a moment after it was\n\t * drawn, which is why /reload showed skills, agents and plugins and starting a\n\t * new session showed nothing. Re-rendering it here is what makes the surface\n\t * common: one call site, so a session change of any kind reports the same\n\t * capabilities /reload does.\n\t */\n\tprivate renderCurrentSessionState(): void {\n\t\tthis.chatContainer.clear();\n\t\tthis.openChain = undefined;\n\t\tthis.latestToolBlock = undefined;\n\t\tthis.latestChain = undefined;\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.messageQueue.resetCompactionQueue();\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.renderInitialMessages();\n\t}\n\n\t/**\n\t * Bound the view layer's memory: freeze finished tool blocks once more than\n\t * LIVE_TOOL_WINDOW of them are live, releasing their retained tool output and\n\t * base64 image copies. Runs on tool completion (infrequent) and only ever\n\t * freezes blocks far above the viewport. The session data stays intact, so a\n\t * later full rebuild (theme toggle / reload) restores full fidelity.\n\t */\n\tprivate trimTranscriptMemory(): void {\n\t\tconst freezable = this.transcriptToolBlocks().filter((block) => block.isFreezable());\n\t\tconst excess = freezable.length - LIVE_TOOL_WINDOW;\n\t\tfor (let i = 0; i < excess; i++) {\n\t\t\tfreezable[i].freeze();\n\t\t}\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\treturn this.session.getToolDefinition(toolName);\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tsignal: this.session.agent.signal,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.compact(options?.customInstructions);\n\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t\tactivatePlugin: (pluginDir) => this.session.activatePlugin(pluginDir),\n\t\t\trequestReloadWhenIdle: () => this.session.requestReloadWhenIdle(),\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate getWorkingLoaderMessage(): string {\n\t\treturn this.workingMessage ?? this.defaultWorkingMessage;\n\t}\n\n\tprivate createWorkingLoader(): Loader {\n\t\treturn new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tthis.getWorkingLoaderMessage(),\n\t\t\tthis.workingIndicatorOptions,\n\t\t);\n\t}\n\n\tprivate stopWorkingLoader(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t}\n\n\tprivate setWorkingVisible(visible: boolean): void {\n\t\tthis.workingVisible = visible;\n\t\tif (!visible) {\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isStreaming && !this.loadingAnimation) {\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setWorkingIndicator(options?: LoaderIndicatorOptions): void {\n\t\tthis.workingIndicatorOptions = options;\n\t\tthis.loadingAnimation?.setIndicator(options);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setHiddenThinkingLabel(label?: string): void {\n\t\tthis.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\tchild.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t\t}\n\t\t}\n\t\tif (this.streamingComponent) {\n\t\t\tthis.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tthis.dialogs.reset();\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.chrome.reset();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.autocompleteProviderWrappers = [];\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.refreshSessionIdentity();\n\t\tthis.workingMessage = undefined;\n\t\tthis.workingVisible = true;\n\t\tthis.setWorkingIndicator();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(`${this.defaultWorkingMessage} (${keyText(\"app.interrupt\")} to interrupt)`);\n\t\t}\n\t\tthis.setHiddenThinkingLabel();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\t// Captured for the `columns` getter: `this` inside a getter on the object\n\t\t// literal below would be the literal, not the mode.\n\t\tconst tui = this.ui;\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.dialogs.showSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.dialogs.confirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.dialogs.showInput(title, placeholder, opts),\n\t\t\taskOptions: (questions, opts) => {\n\t\t\t\t// The agent is blocking on the user (the ask_options pane): ring now,\n\t\t\t\t// bypassing the duration threshold — this is the \"it needs you\" cue.\n\t\t\t\tthis.chime?.onBlockedForInput();\n\t\t\t\treturn this.dialogs.showAskOptions(questions, opts);\n\t\t\t},\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tget columns() {\n\t\t\t\t// Live, not captured: the listing must reflow after a resize.\n\t\t\t\treturn tui.terminal.columns;\n\t\t\t},\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetMode: (mode) => {\n\t\t\t\tthis.footerDataProvider.setActiveMode(mode);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tsetWorkingMessage: (message) => {\n\t\t\t\tthis.workingMessage = message;\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.setMessage(message ?? this.defaultWorkingMessage);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetWorkingVisible: (visible) => this.setWorkingVisible(visible),\n\t\t\tsetWorkingIndicator: (options) => this.setWorkingIndicator(options),\n\t\t\tsetHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),\n\t\t\tsetWidget: (key, content, options) => this.chrome.setWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.chrome.setFooter(factory),\n\t\t\tsetHeader: (factory) => this.chrome.setHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.dialogs.showCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getExpandedText?.() ?? this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.dialogs.showEditor(title, prefill),\n\t\t\taddAutocompleteProvider: (factory) => {\n\t\t\t\tthis.autocompleteProviderWrappers.push(factory);\n\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t},\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tgetEditorComponent: () => this.editorComponentFactory,\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\tprivate async promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined> {\n\t\tconst confirmed = await this.dialogs.confirm(\"Session cwd not found\", formatMissingSessionCwdPrompt(error.issue));\n\t\treturn confirmed ? error.issue.fallbackCwd : undefined;\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(factory: EditorFactory | undefined): void {\n\t\tthis.editorComponentFactory = factory;\n\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tif (!customEditor.onEscape) {\n\t\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\t}\n\t\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t}\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.updateSessionChip();\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.messageQueue.restoreQueuedMessagesToEditor({ abort: true });\n\t\t\t} else if (this.session.isBashRunning) {\n\t\t\t\tthis.session.abortBash();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"app.suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"app.thinking.cycle\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"app.model.cycleForward\", () => this.modelController.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.model.cycleBackward\", () => this.modelController.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.commandExecutor.handleDebug();\n\t\tthis.defaultEditor.onAction(\"app.model.select\", () => this.modelController.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"app.tools.expand\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"app.view.cycleForward\", () => this.cycleToolOutputView(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.view.cycleBackward\", () => this.cycleToolOutputView(\"backward\"));\n\t\tthis.defaultEditor.onAction(\"app.tools.unfoldOne\", () => this.stepToolOutput(\"unfold\"));\n\t\tthis.defaultEditor.onAction(\"app.tools.foldOne\", () => this.stepToolOutput(\"fold\"));\n\t\tthis.defaultEditor.onAction(\"app.thinking.toggle\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"app.tasks.cycleView\", () => {\n\t\t\tthis.taskPanel.cycleView();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"app.team.focus\", () => this.teamFocus.enterFocus());\n\t\tthis.defaultEditor.onAction(\"app.editor.external\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"app.input.voiceTranscribe\", () => this.voice.toggle());\n\t\tthis.defaultEditor.onAction(\"app.message.followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"app.message.dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"app.session.new\", () => this.commandExecutor.handleClear());\n\t\tthis.defaultEditor.onAction(\"app.session.tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.resume\", () => this.showSessionSelector());\n\t\tthis.defaultEditor.onAction(\"app.session.changeDirectory\", () => {\n\t\t\t// Prefill rather than act: a directory change needs a target, and the\n\t\t\t// editor's own path completion is already the best way to name one.\n\t\t\tthis.editor.setText(\"/cd \");\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"app.settings.open\", () => this.showSettingsSelector());\n\t\tthis.defaultEditor.onAction(\"app.hotkeys.open\", () => this.commandExecutor.handleHotkeys());\n\t\tthis.defaultEditor.onAction(\"app.mode.cycle\", () => void this.cycleAgentMode());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.updateEditorPromptPrefix();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `${APP_NAME}-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.ui.requestRender();\n\t\t} catch {\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// hooteams team focus (--team): focus role rows, nudge, attach\n\t// =========================================================================\n\n\t/**\n\t * Wire a hooteams connection into the TUI. Called by main.ts when `--team`\n\t * is set, before run(). See TeamFocusController for the feature itself.\n\t */\n\tattachTeamClient(client: TeamViewConnection): void {\n\t\tthis.teamFocus.attachClient(client);\n\t}\n\n\t/**\n\t * Built-in slash commands dispatched by the editor submit handler.\n\t * `withArgs` commands also match \"/name <args>\" and receive the full text.\n\t * Each handler keeps its own editor-clearing order (before vs after the\n\t * await) — some commands must show their UI before the prompt is wiped.\n\t */\n\tprivate createBuiltInSlashCommands(): Map<string, { withArgs?: boolean; run(text: string): Promise<void> | void }> {\n\t\tconst clearEditor = () => this.editor.setText(\"\");\n\t\treturn new Map(\n\t\t\tObject.entries({\n\t\t\t\t\"/settings\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showSettingsSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/scoped-models\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.modelController.showModelsSelector();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/model\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleModel(searchTerm);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/export\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tawait this.commandExecutor.handleExport(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/import\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tawait this.commandExecutor.handleImport(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/share\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tawait this.commandExecutor.handleShare();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/copy\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tawait this.commandExecutor.handleCopy();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/name\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: (text: string) => {\n\t\t\t\t\t\tthis.commandExecutor.handleName(text);\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/color\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: (text: string) => {\n\t\t\t\t\t\t// An argument sets the slot outright; bare `/color` opens the\n\t\t\t\t\t\t// swatches, since a slot number is not something anyone knows\n\t\t\t\t\t\t// by heart.\n\t\t\t\t\t\tif (!this.commandExecutor.handleColor(text)) {\n\t\t\t\t\t\t\tthis.showSessionColorSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/session\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleSession();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/changelog\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleChangelog();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/hotkeys\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleHotkeys();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/fork\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/clone\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleClone();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/tree\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/login\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.loginController.showOAuthSelector(\"login\");\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/logout\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.loginController.showOAuthSelector(\"logout\");\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/new\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleClear();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/compact\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tconst prefix = \"/compact \";\n\t\t\t\t\t\tconst customInstructions = text.startsWith(prefix)\n\t\t\t\t\t\t\t? text.slice(prefix.length).trim() || undefined\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/reload\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/debug\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.commandExecutor.handleDebug();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/resume\": {\n\t\t\t\t\trun: () => {\n\t\t\t\t\t\tthis.showSessionSelector();\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/cd\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleChangeDirectory(text);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/quit\": {\n\t\t\t\t\trun: async () => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.shutdown();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"/subagent\": {\n\t\t\t\t\twithArgs: true,\n\t\t\t\t\trun: async (text: string) => {\n\t\t\t\t\t\tclearEditor();\n\t\t\t\t\t\tawait this.commandExecutor.handleSubagent(text);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tconst slashCommands = this.createBuiltInSlashCommands();\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle built-in slash commands\n\t\t\tconst spaceIdx = text.indexOf(\" \");\n\t\t\tconst commandName = spaceIdx === -1 ? text : text.slice(0, spaceIdx);\n\t\t\tconst command = slashCommands.get(commandName);\n\t\t\tif (command && (spaceIdx === -1 || command.withArgs)) {\n\t\t\t\tawait command.run(text);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.bashExecution.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.messageQueue.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.messageQueue.queueCompactionMessage(text, \"steer\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use prompt() with steer behavior\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.bashExecution.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\t/**\n\t * Deferred end-of-request settle. Called from the agent_end handler, it waits\n\t * one tick so the streaming flag settles and any retry has had a chance to arm,\n\t * then acts only when the session is genuinely idle (not streaming, not\n\t * compacting) and no retry is pending — so a retried or auto-continued request\n\t * neither rings a premature \"it's done\" nor prints a partial cost line.\n\t *\n\t * The completion chime, the transcript cost line, and settling dangling plan\n\t * items all hang off this single check because they answer the same question:\n\t * has the request actually ended?\n\t */\n\tprivate settleRequestOnIdle(): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.chimePendingRetry || this.session.isStreaming || this.session.isCompacting) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// The last chain of a turn has nothing after it to close it, so it\n\t\t\t// settles here. A turn that did not end cleanly leaves its chain in the\n\t\t\t// running rendering plus a marker rather than claiming an outcome.\n\t\t\tthis.closeOpenChain(this.turnStopReason === \"stop\" ? \"done\" : \"interrupted\");\n\t\t\tthis.showTurnCost();\n\t\t\tthis.settleDanglingPlanItems();\n\t\t\tthis.chime?.onTurnComplete({ aborted: this.turnStopReason === \"aborted\" });\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Flip main-plan rows the model left at in_progress to a settled status now the\n\t * request is over, instead of letting them claim live work until the next user\n\t * message wipes the pane.\n\t *\n\t * The model marks its own TodoWrite items and routinely drops the final call\n\t * that completes the last one, so the row outlives the work. A clean \"stop\" is\n\t * taken as the model believing it was finished — it chose to stop talking, and\n\t * its closing message is the report — so those items settle to done. An abort,\n\t * error, or length cutoff says the opposite, so they settle to cancelled: an\n\t * honest \"never finished\" rather than a fabricated completion.\n\t *\n\t * Skipped while messages are queued: a follow-up/steer arriving during the run\n\t * means the request continues, and the plan with it.\n\t */\n\tprivate settleDanglingPlanItems(): void {\n\t\tif (this.session.pendingMessageCount > 0) return;\n\t\tconst settled = settleDanglingMainTasks(this.turnStopReason === \"stop\" ? \"done\" : \"cancelled\");\n\t\tif (settled > 0) this.ui.requestRender();\n\t}\n\n\t/**\n\t * Append this request's own token/time/cost to the transcript.\n\t *\n\t * This is the honest home for the number. The task panel is a live instrument —\n\t * present tense, wiped on the next user message — and the footer carries\n\t * cumulative session vitals, so after the fact neither can answer \"what did that\n\t * request cost\". Fired at agent_end rather than turn_end because one request is\n\t * commonly tens of turns; per-turn would wedge a number between every tool block.\n\t *\n\t * Delegated runs are reported separately rather than folded into the totals:\n\t * subagents bill against their own sessions, so their tokens never appear in this\n\t * session's entries and adding them to ↑/↓ would misreport what the parent spent.\n\t */\n\tprivate showTurnCost(): void {\n\t\tconst anchor = this.turnCostAnchor;\n\t\tthis.turnCostAnchor = undefined;\n\t\tif (!anchor) return;\n\n\t\tconst now = sumAssistantUsage(this.session.sessionManager.getEntries());\n\t\tconst input = now.input - anchor.totals.input;\n\t\tconst output = now.output - anchor.totals.output;\n\t\tconst cost = now.cost - anchor.totals.cost;\n\t\t// Nothing was accounted (e.g. aborted before the first response landed): stay\n\t\t// silent rather than print a row of zeroes.\n\t\tif (input <= 0 && output <= 0) return;\n\n\t\tconst segs: string[] = [\n\t\t\ttheme.fg(\"dim\", \"↑\") +\n\t\t\t\ttheme.fg(\"muted\", formatTokens(input)) +\n\t\t\t\ttheme.fg(\"dim\", \" ↓\") +\n\t\t\t\ttheme.fg(\"muted\", formatTokens(output)),\n\t\t\ttheme.fg(\"muted\", formatDurationSecs((Date.now() - anchor.at) / 1000)),\n\t\t];\n\t\tif (cost > 0) segs.push(theme.fg(\"muted\", `$${cost.toFixed(3)}`));\n\n\t\tconst runs = taskStore.list().filter((task) => task.source === \"subagent\");\n\t\tif (runs.length > 0) {\n\t\t\tconst delegatedTokens = runs.reduce((sum, r) => sum + (r.usage ? r.usage.input + r.usage.output : 0), 0);\n\t\t\tconst label = runs.length === 1 ? (runs[0]?.subagentMode ?? \"subagent\") : \"subagents\";\n\t\t\tconst text = `◇${runs.length} ${label}${delegatedTokens > 0 ? ` ${formatTokens(delegatedTokens)}` : \"\"}`;\n\t\t\tsegs.push(theme.fg(\"dim\", text));\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(segs.join(theme.fg(\"dim\", \" · \")), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t// A (possibly retried) turn is (re)starting: anchor its duration on the\n\t\t\t\t// first start and clear the pending-retry gate now that it has resumed.\n\t\t\t\tthis.chime?.onTurnStart();\n\t\t\t\tthis.chimePendingRetry = false;\n\t\t\t\tthis.turnCostAnchor ??= {\n\t\t\t\t\ttotals: sumAssistantUsage(this.session.sessionManager.getEntries()),\n\t\t\t\t\tat: Date.now(),\n\t\t\t\t};\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tthis.stopWorkingLoader();\n\t\t\t\tif (this.workingVisible) {\n\t\t\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"queue_update\":\n\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.refreshSessionIdentity();\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"thinking_level_changed\":\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\t// A new user message starts a new turn: drop finished tasks from the\n\t\t\t\t\t// previous turn and restart numbering from #1 once the pane is empty.\n\t\t\t\t\t// Finished tasks stay visible (with their final status, tokens, and time)\n\t\t\t\t\t// until this point — not the moment they finish — so their outcome remains\n\t\t\t\t\t// glanceable for the whole turn. Active tasks are kept: a follow-up/steer\n\t\t\t\t\t// message can arrive while a subagent is still running.\n\t\t\t\t\ttaskStore.reset();\n\t\t\t\t\t// Startup progress is transient startup status: once the user starts a\n\t\t\t\t\t// turn, drop any lingering bars/notices (e.g. an unavailable-index line)\n\t\t\t\t\t// so they don't sit in the footer for the rest of the session.\n\t\t\t\t\tstartupProgress.clear();\n\t\t\t\t\tthis.turnStopReason = undefined;\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.thinkingDisplayForView(),\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.sawTextInCurrentMessage = false;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.scheduleStreamingRender();\n\n\t\t\t\t\t// The agent speaking ends the run its previous calls formed. Tool\n\t\t\t\t\t// calls later in this same message open a fresh chain.\n\t\t\t\t\tif (!this.sawTextInCurrentMessage) {\n\t\t\t\t\t\tconst spoke = this.streamingMessage.content.some(\n\t\t\t\t\t\t\t(content) => content.type === \"text\" && content.text.trim() !== \"\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (spoke) {\n\t\t\t\t\t\t\tthis.sawTextInCurrentMessage = true;\n\t\t\t\t\t\t\tthis.closeOpenChain(\"done\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.attachToolBlock(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\t\t// Remember how the turn's latest assistant message ended, so the deferred\n\t\t\t\t\t// settle can tell a clean finish from an abort/error.\n\t\t\t\t\tthis.turnStopReason = event.message.stopReason;\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tlet component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (!component) {\n\t\t\t\t\tcomponent = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.toolCallId,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.attachToolBlock(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t}\n\t\t\t\tcomponent.markExecutionStarted();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.trimTranscriptMemory();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\t// agent_end fires before the streaming flag clears and before the retry\n\t\t\t\t// decision is made (both happen after this listener returns), so defer a\n\t\t\t\t// tick and re-check: only settle once the session is genuinely idle and no\n\t\t\t\t// retry is pending — otherwise a retried or auto-continued turn would ring\n\t\t\t\t// a premature \"it's done\" and print a partial cost line.\n\t\t\t\tthis.settleRequestOnIdle();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"compaction_start\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t\t}\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortCompaction();\n\t\t\t\t};\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst cancelHint = `(${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tconst label =\n\t\t\t\t\tevent.reason === \"manual\"\n\t\t\t\t\t\t? `Compacting context... ${cancelHint}`\n\t\t\t\t\t\t: `${event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\"}Auto-compacting... ${cancelHint}`;\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tlabel,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"compaction_end\": {\n\t\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t\t}\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\tthis.addMessageToChat(\n\t\t\t\t\t\tcreateCompactionSummaryMessage(\n\t\t\t\t\t\t\tevent.result.summary,\n\t\t\t\t\t\t\tevent.result.tokensBefore,\n\t\t\t\t\t\t\tnew Date().toISOString(),\n\t\t\t\t\t\t\tevent.result.tokensAfter,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// The turn is not done — it will re-run after a backoff (during which the\n\t\t\t\t// session reads as idle). Gate the deferred completion chime until then.\n\t\t\t\tthis.chimePendingRetry = true;\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tthis.session.abortRetry();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.retryCountdown?.dispose();\n\t\t\t\tconst retryMessage = (seconds: number) =>\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${seconds}s... (${keyText(\"app.interrupt\")} to cancel)`;\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tretryMessage(Math.ceil(event.delayMs / 1000)),\n\t\t\t\t);\n\t\t\t\tthis.retryCountdown = new CountdownTimer(\n\t\t\t\t\tevent.delayMs,\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(seconds) => {\n\t\t\t\t\t\tthis.retryLoader?.setMessage(retryMessage(seconds));\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryCountdown) {\n\t\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(styleStatusMessage(message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(styleStatusMessage(message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tif (message.display) {\n\t\t\t\t\tconst renderer = this.session.extensionRunner.getMessageRenderer(message.customType);\n\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tif (this.chatContainer.children.length > 0) {\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t}\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tmessage,\n\t\t\t\t\tthis.thinkingDisplayForView(),\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tconst renderedPendingTools = new Map<string, ToolExecutionComponent>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tlet lastAssistantStopReason: AssistantMessage[\"stopReason\"] | undefined;\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t// Same boundary the live path uses: the agent speaking ends the run\n\t\t\t\t// its previous calls formed. Rebuilding history has to reproduce it,\n\t\t\t\t// or a resumed session would show one chain where it lived through\n\t\t\t\t// several.\n\t\t\t\tconst spoke = message.content.some((content) => content.type === \"text\" && content.text.trim() !== \"\");\n\t\t\t\tif (spoke) this.closeOpenChain(\"done\");\n\t\t\t\tlastAssistantStopReason = message.stopReason;\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.id,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\t\t\t\tview: this.toolOutputView,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\tthis.sessionManager.getCwd(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.attachToolBlock(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trenderedPendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = renderedPendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\trenderedPendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\t// History has no live state: a chain left open at the end of the rebuild is\n\t\t// finished, and how the last assistant message ended says whether it\n\t\t// finished cleanly. Tool calls still awaiting results are the exception —\n\t\t// this is a resumed run in flight, so its chain stays open for them.\n\t\tif (renderedPendingTools.size === 0) {\n\t\t\tthis.closeOpenChain(lastAssistantStopReason === \"stop\" ? \"done\" : \"interrupted\");\n\t\t}\n\n\t\tfor (const [toolCallId, component] of renderedPendingTools) {\n\t\t\tthis.pendingTools.set(toolCallId, component);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Stops the TUI before emitting shutdown events so extension UI cleanup cannot\n\t * repaint the final frame while the process is exiting.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.taskStoreUnsubscribe?.();\n\t\tthis.startupProgressUnsubscribe?.();\n\t\tthis.teamFocus.closeAttach();\n\t\tthis.taskPanel.dispose();\n\t\tthis.stop();\n\t\tawait this.runtimeHost.dispose();\n\t\tprocess.exit(0);\n\t}\n\n\tprivate emergencyTerminalExit(): never {\n\t\tthis.isShuttingDown = true;\n\t\tthis.unregisterSignalHandlers();\n\t\tkillTrackedDetachedChildren();\n\t\t// The terminal is gone. Do not run normal shutdown because TUI and\n\t\t// extension cleanup can write restore sequences and re-trigger EIO.\n\t\tprocess.exit(129);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate registerSignalHandlers(): void {\n\t\tthis.unregisterSignalHandlers();\n\n\t\tconst signals: NodeJS.Signals[] = [\"SIGTERM\"];\n\t\tif (process.platform !== \"win32\") {\n\t\t\tsignals.push(\"SIGHUP\");\n\t\t}\n\n\t\tfor (const signal of signals) {\n\t\t\tconst handler = () => {\n\t\t\t\tif (signal === \"SIGHUP\") {\n\t\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t\t}\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid this.shutdown();\n\t\t\t};\n\t\t\tprocess.prependListener(signal, handler);\n\t\t\tthis.signalCleanupHandlers.push(() => process.off(signal, handler));\n\t\t}\n\n\t\tconst terminalErrorHandler = (error: Error) => {\n\t\t\tif (isDeadTerminalError(error)) {\n\t\t\t\tthis.emergencyTerminalExit();\n\t\t\t}\n\t\t\tthrow error;\n\t\t};\n\t\tprocess.stdout.on(\"error\", terminalErrorHandler);\n\t\tprocess.stderr.on(\"error\", terminalErrorHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.stdout.off(\"error\", terminalErrorHandler));\n\t\tthis.signalCleanupHandlers.push(() => process.stderr.off(\"error\", terminalErrorHandler));\n\t}\n\n\tprivate unregisterSignalHandlers(): void {\n\t\tfor (const cleanup of this.signalCleanupHandlers) {\n\t\t\tcleanup();\n\t\t}\n\t\tthis.signalCleanupHandlers = [];\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\tif (process.platform === \"win32\") {\n\t\t\tthis.showStatus(\"Suspend to background is not supported on Windows\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Keep the event loop alive while suspended. Without this, stopping the TUI\n\t\t// can leave Node with no ref'ed handles, causing the process to exit on fg\n\t\t// before the SIGCONT handler gets a chance to restore the terminal.\n\t\tconst suspendKeepAlive = setInterval(() => {}, 2 ** 30);\n\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => {};\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\ttry {\n\t\t\t// Stop the TUI (restore terminal to normal mode)\n\t\t\tthis.ui.stop();\n\n\t\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\t\tprocess.kill(0, \"SIGTSTP\");\n\t\t} catch (error) {\n\t\t\tclearInterval(suspendKeepAlive);\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.messageQueue.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.messageQueue.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.messageQueue.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.messageQueue.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate updateEditorPromptPrefix(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.promptPrefix = \"!\";\n\t\t\tthis.editor.promptColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tthis.editor.promptPrefix = \"❯\";\n\t\t\tthis.editor.promptColor = (s: string) => s;\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\t/**\n\t * Put a tool block into the transcript, extending the open chain or starting\n\t * one. Every path that renders a tool call comes through here — live\n\t * streaming, execution start, and rebuilding history — so a chain cannot be\n\t * assembled correctly in one place and forgotten in another.\n\t */\n\tprivate attachToolBlock(block: ToolExecutionComponent): void {\n\t\tif (!this.openChain || !this.openChain.isOpen) {\n\t\t\tthis.openChain = new ToolChainComponent(this.toolOutputView);\n\t\t\tthis.chatContainer.addChild(this.openChain);\n\t\t}\n\t\tthis.openChain.add(block);\n\t\t// The newest call carries radar's marker stroke. This is the one place\n\t\t// every tool block is attached, so it is the one place that can know\n\t\t// which block is newest without two paths disagreeing about it. The run\n\t\t// it belongs to is marked as well: radar folds a run of more than one\n\t\t// call to a single line, and that line is what the view usually shows.\n\t\tthis.latestToolBlock?.setLatest(false);\n\t\tblock.setLatest(true);\n\t\tthis.latestToolBlock = block;\n\t\tif (this.latestChain !== this.openChain) {\n\t\t\tthis.latestChain?.setLatest(false);\n\t\t\tthis.openChain.setLatest(true);\n\t\t\tthis.latestChain = this.openChain;\n\t\t}\n\t}\n\n\t/**\n\t * Settle the open chain.\n\t *\n\t * Called when the agent speaks (the run it was doing is over, whatever comes\n\t * next is a new one) and when the turn settles. Closing on the agent's next\n\t * words rather than only at turn end is what keeps the flip cheap: the line\n\t * is still at the bottom of the screen, so the TUI rewrites it in place\n\t * instead of taking the full-redraw path that clears terminal scrollback.\n\t */\n\tprivate closeOpenChain(outcome: \"done\" | \"interrupted\"): void {\n\t\tif (!this.openChain) return;\n\t\tif (this.openChain.isEmpty) {\n\t\t\tthis.chatContainer.removeChild(this.openChain);\n\t\t} else {\n\t\t\tthis.openChain.close(outcome);\n\t\t}\n\t\tthis.openChain = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\t/** Every tool block in the transcript, in order, across all chains. */\n\tprivate transcriptToolBlocks(): ToolExecutionComponent[] {\n\t\tconst blocks: ToolExecutionComponent[] = [];\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof ToolChainComponent) blocks.push(...child.toolBlocks);\n\t\t\telse if (child instanceof ToolExecutionComponent) blocks.push(child);\n\t\t}\n\t\treturn blocks;\n\t}\n\n\t/** Every chain in the transcript, in order. */\n\tprivate transcriptChains(): ToolChainComponent[] {\n\t\treturn this.chatContainer.children.filter(\n\t\t\t(child): child is ToolChainComponent => child instanceof ToolChainComponent,\n\t\t);\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\t/**\n\t * Open or close one tool block instead of all of them.\n\t *\n\t * `ctrl+o` is all-or-nothing, which left the ▸ caret on every glance and\n\t * radar row advertising something no key could do. This is the missing half:\n\t * unfold walks back from the newest block to the first one still folded,\n\t * fold walks back to the most recently opened one.\n\t *\n\t * Working from the tail is not a shortcut, it is the only thing this view can\n\t * honestly offer. The transcript is bottom-anchored and has no app-level\n\t * scrolling — anything far enough up is in the terminal's own scrollback,\n\t * where this process cannot put a cursor or scroll to a selection. So the\n\t * key peels backwards through what is actually on screen, and each block it\n\t * opens is its own marker for where you have got to.\n\t */\n\tprivate stepToolOutput(direction: \"unfold\" | \"fold\"): void {\n\t\tconst wantOpen = direction === \"unfold\";\n\n\t\t// Radar's unit is the chain: one press turns the newest summary line back\n\t\t// into the calls it stands for. Its per-call bodies are a glance/full\n\t\t// question, so the step stops there rather than cascading.\n\t\tif (this.toolOutputView === \"radar\") {\n\t\t\tconst chains = this.transcriptChains();\n\t\t\tfor (let i = chains.length - 1; i >= 0; i--) {\n\t\t\t\tif (chains[i].isEmpty || chains[i].isOpened === wantOpen) continue;\n\t\t\t\t// A chain of one is never summarised, so there is nothing for unfold to\n\t\t\t\t// reveal; skipping it keeps the press moving to a chain that will change.\n\t\t\t\tif (wantOpen && !chains[i].isSummarised) continue;\n\t\t\t\tchains[i].setOpened(wantOpen);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(wantOpen ? \"No collapsed chains below this point\" : \"No open chains below this point\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst blocks = this.transcriptToolBlocks();\n\t\tfor (let i = blocks.length - 1; i >= 0; i--) {\n\t\t\tconst block = blocks[i];\n\t\t\tif (block.isRevealed() === wantOpen) continue;\n\t\t\tblock.setExpanded(wantOpen);\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.showStatus(wantOpen ? \"No folded tool output below this point\" : \"No unfolded tool output below this point\");\n\t}\n\n\t/**\n\t * Move the view dial one stop and report where it landed.\n\t *\n\t * The dial is the persistent decision (\"how much do I ever want to see\"),\n\t * which is why it saves; `app.tools.expand` stays the momentary one (\"open\n\t * what is in front of me\"), which is why it does not.\n\t */\n\tprivate cycleToolOutputView(direction: \"forward\" | \"backward\"): void {\n\t\tconst next = cycleToolOutputView(this.toolOutputView, direction);\n\t\tthis.applyToolOutputView(next);\n\t}\n\n\t/**\n\t * How much of a thinking trace this view shows.\n\t *\n\t * Radar drops them outright, regardless of the setting. The dial is one\n\t * question asked once — \"how much do I ever want to see\" — and a view whose\n\t * whole job is to fold a run of tool calls down to a row cannot then spend\n\t * forty lines on the reasoning that led to it. Folding to the label is not\n\t * enough either: a message that only thought and called tools has nothing\n\t * else on screen once its calls join the chain, so its label would stand\n\t * alone under the summary and one row per chain would become one row plus a\n\t * label per call.\n\t *\n\t * It is also what keeps a running chain on screen. A chain stays open across\n\t * a thinking block (thinking is not text, so it is not a chain boundary), and\n\t * a trace rendering below pushes the chain's own summary line off the top —\n\t * where every subsequent call rewrites a line above the viewport and forces\n\t * the full redraw that clears terminal scrollback.\n\t */\n\tprivate thinkingDisplayForView(): ThinkingDisplay {\n\t\tif (this.toolOutputView === \"radar\") return \"omit\";\n\t\treturn this.hideThinkingBlock ? \"label\" : \"full\";\n\t}\n\n\tprivate applyToolOutputView(view: ToolOutputView): void {\n\t\tconst previousThinking = this.thinkingDisplayForView();\n\t\tthis.toolOutputView = view;\n\t\tthis.settingsManager.setToolOutputView(view);\n\t\tthis.footer.setToolOutputView(view);\n\t\tconst thinking = this.thinkingDisplayForView();\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof ToolChainComponent) child.setView(view);\n\t\t\telse if (child instanceof ToolExecutionComponent) child.setView(view);\n\t\t\telse if (child instanceof AssistantMessageComponent && thinking !== previousThinking) {\n\t\t\t\tchild.setThinkingDisplay(thinking);\n\t\t\t}\n\t\t}\n\t\tif (this.streamingComponent && thinking !== previousThinking) {\n\t\t\tthis.streamingComponent.setThinkingDisplay(thinking);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tconst activeHeader = this.chrome.customHeader ?? this.builtInHeader;\n\t\tif (isExpandable(activeHeader)) {\n\t\t\tactiveHeader.setExpanded(expanded);\n\t\t}\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Step the agent mode one along (ask → plan → build → debug → ask).\n\t *\n\t * Mode is the product's central guardrail and sits first in the footer, yet\n\t * it was reachable only by typing `/mode <name>`. The list comes from the\n\t * mode command's own argument completions rather than a copy kept here, so\n\t * a project that adds a mode gets it in the rotation for free; if the command\n\t * is missing (a `--light` run strips the extension), the key says so instead\n\t * of guessing.\n\t */\n\tprivate async cycleAgentMode(): Promise<void> {\n\t\tconst command = this.session.extensionRunner.getCommand(\"mode\");\n\t\tif (!command) {\n\t\t\tthis.showWarning(\"Modes are not available in this session\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst completions = (await command.getArgumentCompletions?.(\"\")) ?? [];\n\t\tconst modes = completions.map((item) => item.value);\n\t\tif (modes.length === 0) {\n\t\t\tthis.showWarning(\"No modes are configured\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst current = this.footerDataProvider.getActiveMode();\n\t\tconst index = modes.indexOf(current);\n\t\tconst next = modes[(index + 1) % modes.length];\n\t\tawait this.session.prompt(`/mode ${next}`);\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setThinkingDisplay(this.thinkingDisplayForView());\n\t\t\tthis.streamingComponent.updateContent(this.streamingMessage);\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\t// Radar overrides the setting, so say so rather than claiming a change the\n\t\t// screen does not show.\n\t\tthis.showStatus(\n\t\t\t!this.hideThinkingBlock && this.toolOutputView === \"radar\"\n\t\t\t\t? \"Thinking blocks: visible (radar hides them)\"\n\t\t\t\t: `Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`,\n\t\t);\n\t}\n\n\tprivate openExternalEditor(): void {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `${APP_NAME}-editor-${Date.now()}.${APP_NAME}.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Paint a message as a filled block, the shape errors and warnings share.\n\t *\n\t * These two used to render differently for no reason anyone could name: an\n\t * error got a blank line above it and a column of padding, a warning got\n\t * neither, so a warning collided with whatever was printed before it and hung\n\t * off the left margin. Both are the same kind of interruption, so both get the\n\t * same frame, and the fill is what separates them from ordinary chat output —\n\t * a single coloured line is easy to scroll straight past.\n\t */\n\tprivate showBlock(bg: \"warningBg\" | \"toolErrorBg\", fg: \"warning\" | \"error\", title: string, body: string[]): void {\n\t\tconst box = new Box(1, 1, (t) => theme.bg(bg, t));\n\t\tapplyPaperSheet(box);\n\t\tbox.addChild(new Text(theme.bold(theme.fg(fg, title)), 0, 0));\n\t\tfor (const line of body) {\n\t\t\tbox.addChild(new Text(theme.fg(\"muted\", line), 0, 0));\n\t\t}\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(box);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Split a message into its headline and the rest.\n\t *\n\t * Multi-line notifications — `/learn` reporting where it searched, a settings\n\t * dump — read as a heading over detail, and rendering them as one undifferen-\n\t * tiated coloured block loses that. A single-line message is all headline.\n\t */\n\tprivate splitBlockMessage(message: string): { title: string; body: string[] } {\n\t\tconst [first = \"\", ...rest] = message.split(\"\\n\");\n\t\treturn { title: first, body: rest };\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tconst { title, body } = this.splitBlockMessage(errorMessage);\n\t\t// A wait measured in days is a dead end, not a delay, and the block that\n\t\t// reports it is the only place the user finds out. Say what to do about\n\t\t// it there, rather than leaving them to reread a 429 and guess.\n\t\tif (isLongRetryDelayError(errorMessage)) {\n\t\t\tbody.push(\"Switch to another model with /model, or wait for the provider's quota to reset.\");\n\t\t}\n\t\tthis.showBlock(\"toolErrorBg\", \"error\", `Error: ${title}`, body);\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tconst { title, body } = this.splitBlockMessage(warningMessage);\n\t\tthis.showBlock(\"warningBg\", \"warning\", title, body);\n\t}\n\n\t/**\n\t * A warning the user pays for if they miss it — same frame as `showWarning`,\n\t * with an explicit title over its body.\n\t */\n\tshowNotice(title: string, body: string[]): void {\n\t\tthis.showBlock(\"warningBg\", \"warning\", title, body);\n\t}\n\n\t/**\n\t * Say once, at startup, that `websearch` is running on the keyless backend.\n\t * Shown only while the tool is actually active and no keyed provider is\n\t * configured; silenced by `warnings.websearchApiKey`.\n\t */\n\tprivate maybeWarnAboutMissingWebSearchKey(): void {\n\t\tconst notice = websearchApiKeyNotice({\n\t\t\tactiveToolNames: this.session.getActiveToolNames(),\n\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\tsearch: this.settingsManager.getWebtoolsSearch(),\n\t\t});\n\t\tif (notice) this.showNotice(notice.title, notice.body);\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. Run `) + action;\n\t\tconst changelogUrl = \"https://github.com/kolisachint/hoocode/blob/main/packages/coding-agent/CHANGELOG.md\";\n\t\tconst changelogLink = getCapabilities().hyperlinks\n\t\t\t? hyperlink(theme.fg(\"accent\", \"open changelog\"), changelogUrl)\n\t\t\t: theme.fg(\"accent\", changelogUrl);\n\t\tconst changelogLine = theme.fg(\"muted\", \"Changelog: \") + changelogLink;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowPackageUpdateNotification(packages: string[]): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction = theme.fg(\"muted\", \"Package updates are available. Run \") + action;\n\t\tconst packageLines = packages.map((pkg) => `- ${pkg}`).join(\"\\n\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Package Updates Available\"))}\\n${updateInstruction}\\n${theme.fg(\"muted\", \"Packages:\")}\\n${packageLines}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst disabledToolNames = new Set(this.settingsManager.getDisabledTools());\n\t\t\tconst builtinToolNames = this.session\n\t\t\t\t.getAllTools()\n\t\t\t\t.filter((t) => t.sourceInfo?.source === \"builtin\")\n\t\t\t\t.map((t) => t.name);\n\t\t\t// Union so tools disabled at startup (absent from the live registry) still\n\t\t\t// appear and can be re-enabled for the next session.\n\t\t\tconst toolToggleNames = [...new Set([...builtinToolNames, ...disabledToolNames])].sort();\n\t\t\t// Price every tool the pane lists, including the ones that are off: what\n\t\t\t// the row needs to show is what turning it back on will cost per turn. A\n\t\t\t// tool disabled before launch has no schema in this session, so it has no\n\t\t\t// price to show either.\n\t\t\tconst schemaTokens = new Map(\n\t\t\t\tthis.session.getAllTools().map((tool) => [tool.name, measureToolSchemaTokens(tool)]),\n\t\t\t);\n\t\t\tconst toolToggles = toolToggleNames.map((name) => ({\n\t\t\t\tname,\n\t\t\t\tenabled: !disabledToolNames.has(name),\n\t\t\t\ttokens: schemaTokens.get(name),\n\t\t\t}));\n\n\t\t\tconst toolGroups = [\n\t\t\t\t{\n\t\t\t\t\tid: \"web\",\n\t\t\t\t\tlabel: \"Web tools\",\n\t\t\t\t\tdescription: \"webfetch + websearch (network access).\",\n\t\t\t\t\tenabled: this.settingsManager.getEnableWebTools(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"embsearch\",\n\t\t\t\t\tlabel: \"Semantic search\",\n\t\t\t\t\tdescription: \"Semantic index layer fused into the always-on search tool.\",\n\t\t\t\t\tenabled: this.settingsManager.getEnableEmbsearchTools(),\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tconst flagDefs = this.session.extensionRunner.getFlags();\n\t\t\tconst flagValues = this.session.extensionRunner.getFlagValues();\n\t\t\tconst flags = [...flagDefs.values()].map((flag) => ({\n\t\t\t\tname: flag.name,\n\t\t\t\tdescription: flag.description,\n\t\t\t\ttype: flag.type,\n\t\t\t\tvalue: flagValues.get(flag.name) ?? flag.default ?? (flag.type === \"boolean\" ? false : \"\"),\n\t\t\t}));\n\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\ttools: toolToggles,\n\t\t\t\t\ttoolGroups,\n\t\t\t\t\t// Resolved fresh on every open, never downloaded: a binary that\n\t\t\t\t\t// arrived since the last open (a startup fetch, a `brew install`)\n\t\t\t\t\t// shows as present without a restart.\n\t\t\t\t\texternalTools: describeExternalTools(),\n\t\t\t\t\tflags,\n\t\t\t\t\ttoolOutputView: this.toolOutputView,\n\t\t\t\t\ttoolOutputMaxBytes: this.settingsManager.getToolOutputMaxBytes(),\n\t\t\t\t\ttoolOutputMaxLines: this.settingsManager.getToolOutputMaxLines(),\n\t\t\t\t\tcontextGc: this.settingsManager.getContextGcEnabled(),\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\timageWidthCells: this.settingsManager.getImageWidthCells(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tlight: this.settingsManager.getLight(),\n\t\t\t\t\tpluginInstallScope: this.settingsManager.getPluginInstallScope(),\n\t\t\t\t\tenablePluginTools: this.settingsManager.getEnablePluginTools(),\n\t\t\t\t\t// Rows write the user settings file, so a key the project file also\n\t\t\t\t\t// sets is merged back over it next session. The pane says which.\n\t\t\t\t\tprojectPinnedSettings: Object.keys(this.settingsManager.getProjectSettings()),\n\t\t\t\t\t// The targets actually in force, so a session launched with --platform\n\t\t\t\t\t// shows what it is writing rather than the (possibly unset) setting.\n\t\t\t\t\tplatform: getWorkspacePlatforms() ?? [],\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tenableInstallTelemetry: this.settingsManager.getEnableInstallTelemetry(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorBorder: this.settingsManager.getEditorBorder(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t\tshowTerminalProgress: this.settingsManager.getShowTerminalProgress(),\n\t\t\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\t\t\t// Show the effective value: env VOICETOOLS_SILENCE_MS wins for voice;\n\t\t\t\t\t// getWebtoolsTimeoutSecs already folds in HOOCODE_WEBTOOLS_TIMEOUT.\n\t\t\t\t\tvoiceSilenceMs: resolveVoiceSilenceMs(this.settingsManager),\n\t\t\t\t\twebtoolsTimeoutSecs: this.settingsManager.getWebtoolsTimeoutSecs(),\n\t\t\t\t\t// The effective window, so a project settings.json narrowing it for\n\t\t\t\t\t// this repo shows up here rather than the user-scope value alone.\n\t\t\t\t\t// Re-measured on every change so the pane can price what a toggle did:\n\t\t\t\t\t// the session rebuilds its system prompt as tools come and go, and\n\t\t\t\t\t// this reads that live state rather than a snapshot.\n\t\t\t\t\tmeasureTokenSurface: () => measurePromptSurface(this.session),\n\t\t\t\t\tlearn: (() => {\n\t\t\t\t\t\tconst learn = this.settingsManager.getLearnSettings();\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tlearnMaxSessions: learn.maxSessions,\n\t\t\t\t\t\t\tlearnMaxAgeDays: learn.maxAgeDays,\n\t\t\t\t\t\t\tlearnMinRepeats: learn.minRepeats,\n\t\t\t\t\t\t\tlearnMinRequestRepeats: learn.minRequestRepeats,\n\t\t\t\t\t\t\tlearnMaxProposals: learn.maxProposals,\n\t\t\t\t\t\t};\n\t\t\t\t\t})(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonToolEnabledChange: (name, enabled) => {\n\t\t\t\t\t\t// Persist for future sessions (feeds the startup denylist).\n\t\t\t\t\t\tconst disabled = new Set(this.settingsManager.getDisabledTools());\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tdisabled.delete(name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdisabled.add(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.settingsManager.setDisabledTools([...disabled]);\n\n\t\t\t\t\t\t// Apply live for the current session. Re-enabling only works for\n\t\t\t\t\t\t// tools still in the registry (i.e. not removed at startup); tools\n\t\t\t\t\t\t// disabled before launch take effect on the next session.\n\t\t\t\t\t\tconst active = new Set(this.session.getActiveToolNames());\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tif (this.session.getToolDefinition(name)) {\n\t\t\t\t\t\t\t\tactive.add(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tactive.delete(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.session.setActiveToolsByName([...active]);\n\t\t\t\t\t\tthis.footerDataProvider.setSubagentEnabled(this.session.getActiveToolNames().includes(\"Task\"));\n\t\t\t\t\t},\n\t\t\t\t\tonToolGroupChange: (id, enabled) => {\n\t\t\t\t\t\t// Master switches for tool availability. These gate tool creation at\n\t\t\t\t\t\t// session build, so they persist and take effect on the next session.\n\t\t\t\t\t\tswitch (id) {\n\t\t\t\t\t\t\tcase \"web\":\n\t\t\t\t\t\t\t\tthis.settingsManager.setEnableWebTools(enabled);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"embsearch\":\n\t\t\t\t\t\t\t\tthis.settingsManager.setEnableEmbsearchTools(enabled);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputViewChange: (view) => {\n\t\t\t\t\t\tthis.applyToolOutputView(view);\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputMaxBytesChange: (bytes) => {\n\t\t\t\t\t\tthis.settingsManager.setToolOutputMaxBytes(bytes);\n\t\t\t\t\t},\n\t\t\t\t\tonToolOutputMaxLinesChange: (lines) => {\n\t\t\t\t\t\tthis.settingsManager.setToolOutputMaxLines(lines);\n\t\t\t\t\t},\n\t\t\t\t\tonContextGcChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setContextGcEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonFlagChange: (name, value) => {\n\t\t\t\t\t\t// Persist for future launches; apply live best-effort (extensions\n\t\t\t\t\t\t// that read a flag only at load time pick it up on next launch).\n\t\t\t\t\t\tthis.settingsManager.setFlagOverride(name, value);\n\t\t\t\t\t\tthis.session.extensionRunner.setFlagValue(name, value);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonImageWidthCellsChange: (width) => {\n\t\t\t\t\t\tthis.settingsManager.setImageWidthCells(width);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setImageWidthCells(width);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t\t\t},\n\t\t\t\t\tonLightChange: (enabled) => {\n\t\t\t\t\t\t// Picks the tool set and the system prompt at startup, so it binds\n\t\t\t\t\t\t// on the next session rather than this one.\n\t\t\t\t\t\tthis.settingsManager.setLight(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonPluginInstallScopeChange: (scope) => {\n\t\t\t\t\t\t// Read per install by InstallPlugin, so it applies immediately with\n\t\t\t\t\t\t// nothing to reload.\n\t\t\t\t\t\tthis.settingsManager.setPluginInstallScope(scope);\n\t\t\t\t\t},\n\t\t\t\t\tonEnablePluginToolsChange: (enabled) => {\n\t\t\t\t\t\t// Master switch for the autonomous plugin system. The lifecycle\n\t\t\t\t\t\t// tools are attached when the session is built, so they arrive on\n\t\t\t\t\t\t// the next session; the reuse nudge re-reads settings.json per\n\t\t\t\t\t\t// check and follows immediately.\n\t\t\t\t\t\tthis.settingsManager.setEnablePluginTools(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonPlatformChange: (platforms) => {\n\t\t\t\t\t\t// Persist for later sessions, then update the process-wide session\n\t\t\t\t\t\t// state so plugin authoring and the /new-* scaffolds pick the new\n\t\t\t\t\t\t// layout up in this session too.\n\t\t\t\t\t\tthis.settingsManager.setPlatform(platforms);\n\t\t\t\t\t\tsetPlatforms(platforms);\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.transport = transport;\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tconst effective = this.thinkingDisplayForView();\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setThinkingDisplay(effective);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableInstallTelemetryChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableInstallTelemetry(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorBorderChange: (border) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorBorder(border);\n\t\t\t\t\t\tthis.defaultEditor.setBorder(border);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setBorder !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setBorder(border);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowTerminalProgressChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowTerminalProgress(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonWarningsChange: (warnings) => {\n\t\t\t\t\t\tthis.settingsManager.setWarnings(warnings);\n\t\t\t\t\t},\n\t\t\t\t\tonVoiceSilenceMsChange: (ms) => {\n\t\t\t\t\t\tthis.settingsManager.setVoiceSilenceMs(ms);\n\t\t\t\t\t\t// Env override still wins; re-resolve so the live value stays consistent.\n\t\t\t\t\t\tthis.voice.setSilenceMs(resolveVoiceSilenceMs(this.settingsManager));\n\t\t\t\t\t},\n\t\t\t\t\tonWebtoolsTimeoutSecsChange: (secs) => {\n\t\t\t\t\t\t// Persisted; webfetch/websearch pick it up when tools rebuild next session.\n\t\t\t\t\t\tthis.settingsManager.setWebtoolsTimeoutSecs(secs);\n\t\t\t\t\t},\n\t\t\t\t\tonLearnSettingChange: (key, value) => {\n\t\t\t\t\t\t// /learn reads settings fresh on every invocation, so the next run\n\t\t\t\t\t\t// picks this up with no restart and nothing to re-wire live.\n\t\t\t\t\t\tthis.settingsManager.setLearnSetting(key, value);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.runtimeHost.fork(entryId);\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\t\t\tthis.editor.setText(result.selectedText ?? \"\");\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.dialogs.showSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.dialogs.showEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tthis.session.abortBranchSummary();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${keyText(\"app.interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t\tvoid this.messageQueue.flushCompactionQueue({ willRetry: false });\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\t/**\n\t * Swatch picker for the session chip's colour. Moving through the list\n\t * repaints the live chip, so the choice is made by looking at the real thing\n\t * in the real theme rather than at a preview of it.\n\t */\n\tprivate showSessionColorSelector(): void {\n\t\tconst originalSlot = this.sessionManager.getSessionColorSlot();\n\t\tthis.showSelector((done) => {\n\t\t\tconst previewSlot = (slot: number) => {\n\t\t\t\tconst chip = renderSessionChip(this.sessionManager.getDisplayName(), slot);\n\t\t\t\tthis.defaultEditor.topBorderLabel = chip;\n\t\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\t\tthis.editor.topBorderLabel = chip;\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t};\n\t\t\tconst selector = new SessionColorSelectorComponent(\n\t\t\t\tthis.sessionManager.getDisplayName(),\n\t\t\t\toriginalSlot,\n\t\t\t\t(slot) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.session.setSessionColor(slot);\n\t\t\t\t\tthis.showStatus(`Session color set to ${slot}`);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\t// Cancelling must put back the colour the session actually has,\n\t\t\t\t\t// not leave it wearing the last swatch the cursor passed over.\n\t\t\t\t\tpreviewSlot(originalSlot);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tpreviewSlot,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSelectList() };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo({ name: next });\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(\n\t\tsessionPath: string,\n\t\toptions?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1],\n\t): Promise<{ cancelled: boolean }> {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\t\ttry {\n\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\twithSession: options?.withSession,\n\t\t\t});\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.showStatus(\"Resumed session\");\n\t\t\treturn result;\n\t\t} catch (error: unknown) {\n\t\t\tif (error instanceof MissingSessionCwdError) {\n\t\t\t\tconst selectedCwd = await this.promptForMissingSessionCwd(error);\n\t\t\t\tif (!selectedCwd) {\n\t\t\t\t\tthis.showStatus(\"Resume cancelled\");\n\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeHost.switchSession(sessionPath, {\n\t\t\t\t\tcwdOverride: selectedCwd,\n\t\t\t\t\twithSession: options?.withSession,\n\t\t\t\t});\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthis.renderCurrentSessionState();\n\t\t\t\tthis.showStatus(\"Resumed session in current cwd\");\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn this.handleFatalRuntimeError(\"Failed to resume session\", error);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst reloadBox = new Container();\n\t\tconst borderColor = (s: string) => theme.fg(\"border\", s);\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(\n\t\t\tnew Text(theme.fg(\"muted\", \"Reloading keybindings, extensions, skills, prompts, themes...\"), 1, 0),\n\t\t);\n\t\treloadBox.addChild(new Spacer(1));\n\t\treloadBox.addChild(new DynamicBorder(borderColor));\n\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(reloadBox);\n\t\tthis.ui.setFocus(reloadBox);\n\t\tthis.ui.requestRender(true);\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\tconst dismissReloadBox = (editor: Component) => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tthis.keybindings.reload();\n\t\t\tconst activeHeader = this.chrome.customHeader ?? this.builtInHeader;\n\t\t\tif (isExpandable(activeHeader)) {\n\t\t\t\tactiveHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorBorder = this.settingsManager.getEditorBorder();\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setBorder(editorBorder);\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setBorder?.(editorBorder);\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocompleteProvider();\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissReloadBox(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded keybindings, extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissReloadBox(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\t// The session is the single source of truth for whether compaction is\n\t\t// possible (e.g. \"Already compacted\", \"Nothing to compact (session too\n\t\t// small)\"). Its specific error is surfaced via the compaction_end event,\n\t\t// so we don't pre-check here and risk a divergent message.\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\ttry {\n\t\t\tawait this.session.compact(customInstructions);\n\t\t} catch {\n\t\t\t// Ignore, will be emitted as an event\n\t\t}\n\t}\n\n\tstop(): void {\n\t\tthis.unregisterSignalHandlers();\n\t\tthis.voice.dispose();\n\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\tthis.ui.terminal.setProgress(false);\n\t\t}\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\t// The terminal is ours again: later log lines can print normally.\n\t\t\tsetTerminalOwnedByTui(false);\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}