@ai-agent-forge/agent-forge 0.88.1 → 0.88.2
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.
- package/CHANGELOG.md +44 -0
- package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
- package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
- package/bundled-plugins/coding-tools/agent-forge.json +1 -1
- package/bundled-plugins/coding-tools/plugin.json +1 -1
- package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
- package/bundled-plugins/compaction-policy/plugin.json +1 -1
- package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
- package/bundled-plugins/overflow-policy/plugin.json +1 -1
- package/bundled-plugins/provider-failover/agent-forge.json +1 -1
- package/bundled-plugins/provider-failover/plugin.json +1 -1
- package/bundled-plugins/retry-policy/agent-forge.json +1 -1
- package/bundled-plugins/retry-policy/plugin.json +1 -1
- package/dist/bundle/.build-manifest.json +68 -58
- package/dist/bundle/chunks/{chunk-D3ARGZFR.js → chunk-44I47ACN.js} +3 -3
- package/dist/bundle/chunks/{chunk-Z72JWUZ4.js → chunk-6F5JWGKE.js} +1 -1
- package/dist/bundle/chunks/{chunk-LZOEQITZ.js → chunk-HTC5K5SM.js} +56 -45
- package/dist/bundle/chunks/{chunk-AQLNTW2B.js → chunk-LSP24WNH.js} +8 -7
- package/dist/bundle/chunks/image-resize-worker.js +3 -3
- package/dist/bundle/chunks/{virtual-modules-WF6WRHP7.js → virtual-modules-MRXD3RWG.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +8 -2
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +2 -0
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-store.d.ts.map +1 -1
- package/dist/core/agent-session-store.js +6 -1
- package/dist/core/agent-session-store.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +13 -0
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +24 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +58 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.js +2 -0
- package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/index.js +2 -0
- package/dist/core/i18n/locales/zh-cn/index.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +5 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts +7 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.d.ts.map +1 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js +15 -0
- package/dist/core/i18n/locales/zh-cn/session-cleanup.js.map +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/slash-commands.js +1 -0
- package/dist/core/i18n/locales/zh-cn/slash-commands.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +24 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cleanup.d.ts +49 -0
- package/dist/core/session-cleanup.d.ts.map +1 -0
- package/dist/core/session-cleanup.js +159 -0
- package/dist/core/session-cleanup.js.map +1 -0
- package/dist/core/session-index.d.ts +75 -0
- package/dist/core/session-index.d.ts.map +1 -0
- package/dist/core/session-index.js +455 -0
- package/dist/core/session-index.js.map +1 -0
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +202 -47
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +5 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +12 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/capability-mount.d.ts +40 -0
- package/dist/core/tools/capability-mount.d.ts.map +1 -0
- package/dist/core/tools/capability-mount.js +112 -0
- package/dist/core/tools/capability-mount.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +27 -5
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +5 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +9 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +17 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +43 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.d.ts +44 -0
- package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-run-group.js +121 -0
- package/dist/modes/interactive/components/tool-run-group.js.map +1 -0
- package/dist/modes/interactive/interactive-commands.d.ts +2 -0
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +7 -0
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +18 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +85 -3
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +6 -3
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +7 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +50 -3
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +28 -16
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +35 -33
- package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
- package/dist/profile/plugin-profiles.d.ts +1 -1
- package/dist/profile/plugin-profiles.d.ts.map +1 -1
- package/dist/profile/plugin-profiles.js +18 -0
- package/dist/profile/plugin-profiles.js.map +1 -1
- package/dist/profiles/builtin-suites.d.ts +14 -4
- package/dist/profiles/builtin-suites.d.ts.map +1 -1
- package/dist/profiles/builtin-suites.js +20 -5
- package/dist/profiles/builtin-suites.js.map +1 -1
- package/docs/settings.md +354 -354
- package/docs/usage.md +292 -292
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +1 -1
- package/examples/extensions/mcp-stdio/index.d.ts +0 -64
- package/examples/extensions/mcp-stdio/index.d.ts.map +0 -1
- package/examples/extensions/mcp-stdio/index.js +0 -292
- package/examples/extensions/mcp-stdio/index.js.map +0 -1
|
@@ -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, ThinkingLevel } from \"@agent-forge/agent-core\";\nimport { type AuthEvent, type AuthPrompt, contentText } from \"@agent-forge/ai\";\nimport type { Api, AssistantMessage, ImageContent, Message, Model, Usage } from \"@agent-forge/ai/compat\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeybinding,\n\tMarkdownTheme,\n\tSlashCommand,\n\tTerminal,\n\tTuiMainScreenRenderState,\n\tWheelScrollLines,\n} from \"@agent-forge/tui\";\nimport * as TuiLayouts from \"@agent-forge/tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\thyperlink,\n\tMarkdown,\n\tProcessTerminal,\n\tSpacer,\n\tsetCapabilityOverrides,\n\tsetKeybindings,\n\tText,\n\tTruncatedText,\n\ttype TUI,\n\tTuiAltScreen,\n\tTuiMainScreen,\n\tvisibleWidth,\n} from \"@agent-forge/tui\";\nimport chalk from \"chalk\";\nimport { spawn } from \"child_process\";\nimport { APP_NAME, APP_TITLE, getAgentDir, getDebugLogPath, VERSION } from \"../../config.ts\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.ts\";\nimport type { ReplacedSessionContext } from \"../../core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntime, SessionImportFileNotFoundError } from \"../../core/agent-session-runtime.ts\";\nimport type { AgentSessionRuntimeDiagnostic } from \"../../core/agent-session-services.ts\";\nimport { listAgentSessions, readAgentSession } from \"../../core/agent-session-store.ts\";\nimport {\n\tCACHE_TTL_MS,\n\ttype CacheMiss,\n\tcollectCacheMisses,\n\tcomputeCacheWaste,\n\tdetectCacheMiss,\n} from \"../../core/cache-stats.ts\";\nimport { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from \"../../core/defaults.ts\";\nimport type { InteractionDialogOptions, InteractionHostV1 } from \"../../core/extensions/index.ts\";\nimport type { ModelAuthRuntime } from \"../../core/facade/coding-agent-facade.ts\";\nimport {\n\ttype CodingAgentFacadeV1,\n\ttype CodingAgentRuntimeFacadeV1,\n\tcreateCodingAgentFacade,\n\tcreateCodingAgentRuntimeFacade,\n} from \"../../core/facade/index.ts\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { configureHttpDispatcher, formatHttpIdleTimeoutMs } from \"../../core/http-dispatcher.ts\";\nimport { setI18nLanguage, t } from \"../../core/i18n/index.ts\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { createCompactionSummaryMessage } from \"../../core/messages.ts\";\nimport { DefaultPackageManager } from \"../../core/package-manager.ts\";\nimport type { ResourceDiagnostic, ThemeMetaV1 } from \"../../core/resource-loader.ts\";\nimport { formatMissingSessionCwdPrompt, MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport { type SessionEntry, SessionManager, sessionEntryToContextMessages } from \"../../core/session-manager.ts\";\nimport type { FullscreenExitOutput, SettingsManager, TuiMode } from \"../../core/settings-manager.ts\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.ts\";\nimport type { SourceInfo } from \"../../core/source-info.ts\";\nimport type { TruncationResult } from \"../../core/tools/truncate.ts\";\nimport { getUsageCostBreakdown } from \"../../core/usage-totals.ts\";\nimport type { MetricsSnapshotV1, ObservabilityMetricsOptions } from \"../../plugins/observability-types.ts\";\nimport { listSuiteIds, resolveSuiteId, SUITE_ENV_VAR, SUITE_SESSION_ENTRY_TYPE } from \"../../profiles/suite-loader.ts\";\nimport { getChangelogPath, getNewEntries, normalizeChangelogLinks, parseChangelog } from \"../../utils/changelog.ts\";\nimport { copyToClipboard, readClipboardText } from \"../../utils/clipboard.ts\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.ts\";\nimport { parseGitUrl } from \"../../utils/git.ts\";\nimport { openBrowser } from \"../../utils/open-browser.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { loadAllHighlightLanguages } from \"../../utils/syntax-highlight.ts\";\nimport { ensureTool, type ToolStatus } from \"../../utils/tools-manager.ts\";\nimport { checkForNewVersion, type LatestRelease } from \"../../utils/version-check.ts\";\nimport { AgentsViewComponent } from \"./components/agents-view.ts\";\nimport { ArminComponent } from \"./components/armin.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport { BashExecutionComponent } from \"./components/bash-execution.ts\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.ts\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.ts\";\nimport { CustomEditor } from \"./components/custom-editor.ts\";\nimport { CustomMessageComponent } from \"./components/custom-message.ts\";\nimport { DaxnutsComponent } from \"./components/daxnuts.ts\";\nimport type { DialogEditorComponent } from \"./components/dialog-editor.ts\";\nimport type { DialogInputComponent } from \"./components/dialog-input.ts\";\nimport type { DialogSelectorComponent } from \"./components/dialog-selector.ts\";\nimport { DynamicBorder } from \"./components/dynamic-border.ts\";\nimport { FooterComponent, formatTokens } from \"./components/footer.ts\";\nimport { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from \"./components/keybinding-hints.ts\";\nimport type { LoginDialogComponent } from \"./components/login-dialog.ts\";\nimport { createMermaidMarkdownTransformer } from \"./components/mermaid.ts\";\nimport type { AuthSelectorProvider } from \"./components/oauth-selector.ts\";\nimport type { MarkdownTransformer } from \"./components/render-types.ts\";\nimport { readSessionSuiteIdFromFile, SessionSelectorComponent } from \"./components/session-selector.ts\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.ts\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.ts\";\nimport {\n\tBranchSummaryStatusIndicator,\n\tCompactionStatusIndicator,\n\tIdleStatus,\n\tRetryStatusIndicator,\n\ttype StatusIndicator,\n\ttype WorkingIndicatorOptions,\n\tWorkingStatusIndicator,\n} from \"./components/status-indicator.ts\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.ts\";\nimport { UserMessageComponent } from \"./components/user-message.ts\";\nimport { WorkflowViewComponent } from \"./components/workflow-view.ts\";\nimport { editInExternalEditor } from \"./external-editor.ts\";\nimport * as authFlow from \"./interactive-auth.ts\";\nimport {\n\tCOMMAND_DISPATCH_ENTRIES,\n\tfilterCapabilityCommandsForCompletions,\n\tmatchCommandDispatchEntry,\n} from \"./interactive-commands.ts\";\nimport {\n\tcreateInteractionHostV1,\n\ttype DialogUiHost,\n\ttype Expandable,\n\thideDialogEditor,\n\thideDialogInput,\n\thideDialogSelector,\n\tisExpandable,\n\tshowDialogConfirm,\n\tshowDialogEditor,\n\tshowDialogInput,\n\tshowDialogNotify,\n\tshowDialogSelector,\n} from \"./interactive-dialog-ui.ts\";\nimport {\n\tbuildScopeGroups,\n\tfindSourceInfoForPath,\n\tformatContextPath,\n\tformatDiagnostics,\n\tformatDisplayPath,\n\tformatMetricsSnapshot,\n\tformatPathWithSource,\n\tformatScopeGroups,\n\tgetCompactPackageSourceLabel,\n\tgetCompactPathLabel,\n\tgetDisplaySourceInfo,\n\tgetScopeGroup,\n\tgetShortPath,\n\tisPackageSource,\n} from \"./interactive-format.ts\";\nimport {\n\tcreateFuzzyAutocompleteItems,\n\tformatLoginProviderCompletionDescription,\n\tgetLoginProviderCompletionOptions,\n\tgetLoginProviderSearchText,\n\tisAnthropicSubscriptionAuthKey,\n\tisDeadTerminalError,\n\tquoteIfNeeded,\n} from \"./interactive-helpers.ts\";\nimport * as selectorsFlow from \"./interactive-selectors.ts\";\nimport { type ModelCatalogRuntime, refreshModelCatalogs } from \"./model-catalog-refresh.ts\";\nimport { getModelSearchText } from \"./model-search.ts\";\nimport {\n\tgetAvailableThemes,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tloadThemeFromPath,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tstopThemeWatcher,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.ts\";\nimport { InteractiveThemeController } from \"./theme/theme-controller.ts\";\n\n// Re-exported for existing consumers of the interactive mode module; the\n// implementation moved to ./interactive-dialog-ui.ts with the extension UI block.\nexport { mapLegacyDialogResultToOutcome } from \"./interactive-dialog-ui.ts\";\n\n/**\n * Rebuilds real Theme instances from the resource loader's ThemeMetaV1\n * projection for the theme registry (B-S2b v1). Registration points\n * (constructor, runtime session start, reload) need loadable instances —\n * setRegisteredThemes stores what it is given and getThemeByName returns the\n * registered instance first — while the loader surface now projects only\n * metadata. Re-loading is synchronous and deterministic per sourcePath;\n * theme names come from the same JSON the loader parsed, so meta.name ===\n * Theme.name and the registry keeps its own name-filter/dedupe semantics.\n *\n * Contract: a meta without a sourcePath (or one whose file no longer parses)\n * throws — themesOverride host inputs must always carry a loadable\n * sourcePath. This adds one extra parse per theme at registration time\n * (constructor / session start / reload, not per turn).\n */\nexport function buildRegisteredThemes(themes: readonly ThemeMetaV1[]): Theme[] {\n\treturn themes.map((meta) => loadThemeFromPath(meta.sourcePath));\n}\n\nclass ExpandableText extends Text implements Expandable {\n\tprivate readonly getCollapsedText: () => string;\n\tprivate readonly getExpandedText: () => string;\n\n\tconstructor(\n\t\tgetCollapsedText: () => string,\n\t\tgetExpandedText: () => string,\n\t\texpanded = false,\n\t\tpaddingX = 0,\n\t\tpaddingY = 0,\n\t) {\n\t\tsuper(expanded ? getExpandedText() : getCollapsedText(), paddingX, paddingY);\n\t\tthis.getCollapsedText = getCollapsedText;\n\t\tthis.getExpandedText = getExpandedText;\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.setText(expanded ? this.getExpandedText() : this.getCollapsedText());\n\t}\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\";\n};\n\ntype CompactionCostNotice = {\n\ttype: \"compaction_cost\";\n\tkind: \"compaction\" | \"branch_summary\";\n\tusage: Usage;\n};\n\ntype RenderSessionItem = AgentMessage | Extract<SessionEntry, { type: \"custom\" }> | CompactionCostNotice;\n\nfunction isCustomSessionEntry(item: RenderSessionItem): item is Extract<SessionEntry, { type: \"custom\" }> {\n\treturn \"type\" in item && item.type === \"custom\";\n}\n\nfunction isCompactionCostNotice(item: RenderSessionItem): item is CompactionCostNotice {\n\treturn \"type\" in item && item.type === \"compaction_cost\";\n}\n\n// Empty-reply auto-continuation (#5, print-mode parity): sent at most once per\n// submitted turn when the turn ends with an empty assistant reply and the\n// model was neither aborted nor errored. The one-shot budget prevents loops.\nconst EMPTY_REPLY_RETRY_PROMPT = \"Your previous reply was empty. Continue the user's task now.\";\n\nconst ANTHROPIC_SUBSCRIPTION_AUTH_WARNING =\n\t\"Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage. Disable this warning in /settings.\";\n\n/**\n * Session read view consumed by formatResumeCommand: the subset of\n * session-manager reads the command needs. Satisfied by the runtime facade\n * (structural) and by real SessionManager instances.\n */\ninterface ResumeCommandSessionReads {\n\tisPersisted(): boolean;\n\tgetSessionFile(): string | undefined;\n\tusesDefaultSessionDir(): boolean;\n\tgetSessionDir(): string;\n\tgetSessionId(): string;\n}\n\nexport function formatResumeCommand(session: ResumeCommandSessionReads): string | undefined {\n\tif (!process.stdout.isTTY) return undefined;\n\tif (!session.isPersisted()) return undefined;\n\n\tconst sessionFile = session.getSessionFile();\n\tif (!sessionFile || !fs.existsSync(sessionFile)) return undefined;\n\n\tconst args = [APP_NAME];\n\tif (!session.usesDefaultSessionDir()) {\n\t\targs.push(\"--session-dir\", quoteIfNeeded(session.getSessionDir()));\n\t}\n\targs.push(\"--session\", session.getSessionId());\n\treturn args.join(\" \");\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/** Diagnostics collected before the interactive TUI was initialized. */\n\tstartupDiagnostics?: AgentSessionRuntimeDiagnostic[];\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\t/** TUI layout mode. */\n\ttuiMode?: TuiMode;\n\t/** Initial interactive theme setting for this invocation. */\n\tinitialThemeSetting?: string;\n\t/**\n\t * Unresolved suite id at startup (设计 §9): the requested `--suite`/env/\n\t * settings id could not be resolved before the TUI opened. Interactive mode\n\t * shows a suite selector first; the selected id is written to project\n\t * settings and a new session is assembled with it. print/RPC keep the\n\t * structured exit-1 in main.ts. The placeholder session for the failed id\n\t * is fully created (plugin session_start hooks fire once) and then\n\t * discarded by the newSession() rebuild after the choice.\n\t */\n\tpendingSuiteSelector?: { requestedId: string; available: readonly string[] };\n\t/**\n\t * Observability metrics source for the `/metrics` command, wired from the\n\t * session's mounted observability plugin (`plugin.getMetrics`). Resolved\n\t * lazily at command time — the plugin's factory runs at mount, which can\n\t * happen after host construction, so a host must pass a closure reading the\n\t * shared ref rather than capture `ref.current` eagerly. Omitted, or\n\t * returning undefined, when the plugin is not mounted; `/metrics` then\n\t * shows a warning.\n\t */\n\tgetMetrics?: (options?: ObservabilityMetricsOptions) => MetricsSnapshotV1 | undefined;\n\t/**\n\t * Settings manager for this invocation, injected by the host (D-047: the\n\t * host already holds the same instance it passes to AgentSessionConfig).\n\t * The TUI no longer reads settings from AgentSession.\n\t */\n\tsettingsManager: SettingsManager;\n}\n\ninterface InteractiveTuiOptions {\n\ttuiMode: TuiMode;\n\tshowHardwareCursor: boolean;\n\tlogDirectory: string;\n\tterminal?: Terminal;\n\tonRightClickPaste?: () => void;\n\tfullscreenCopyOnSelect?: boolean;\n\tfullscreenWheelScrollLines?: WheelScrollLines;\n}\n\n/** Composition root for selecting the interactive terminal renderer. */\nexport function createInteractiveTui(options: InteractiveTuiOptions): TuiMainScreen | TuiAltScreen {\n\tconst terminal = options.terminal ?? new ProcessTerminal();\n\tif (options.tuiMode === \"fullscreen\") {\n\t\tconst styleSearchMatch = (text: string) => theme.bg(\"searchMatchBg\", theme.fg(\"searchMatchText\", text));\n\t\treturn new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, {\n\t\t\tsearchMatchStyle: (text) => theme.underline(styleSearchMatch(text)),\n\t\t\tsearchCurrentMatchStyle: (text) => theme.bold(theme.inverse(styleSearchMatch(text))),\n\t\t\topenUrl: openBrowser,\n\t\t\tonRightClickPaste: options.onRightClickPaste,\n\t\t\tcopyOnSelect: options.fullscreenCopyOnSelect,\n\t\t\twheelScrollLines: options.fullscreenWheelScrollLines ?? 1,\n\t\t\tcopySelection: async (text) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait copyToClipboard(text);\n\t\t\t\t\treturn true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn error instanceof Error ? error.message : String(error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// tui 包自带文案的注入式翻译(批次⑦):默认英文,en 下逐字节不变;\n\t\t\t// 前导/尾随空格在 t() 外拼接(t() 会 trim key)。\n\t\t\tlabels: {\n\t\t\t\tsearchTitle: ` ${t(\"Find transcript\")}`,\n\t\t\t\tsearchNoMatches: `${t(\"No matches\")} `,\n\t\t\t\tcopied: t(\"Copied!\"),\n\t\t\t\tcopyFailed: t(\"Copy failed\"),\n\t\t\t},\n\t\t});\n\t}\n\treturn new TuiMainScreen(terminal, options.showHardwareCursor, options.logDirectory);\n}\n\n/** Stable reference for components while InteractiveMode replaces the active renderer. */\nexport function createInteractiveTuiReference(getTui: () => TUI): TUI {\n\treturn new Proxy({} as TUI, {\n\t\tget: (_target, property) => {\n\t\t\tconst tui = getTui();\n\t\t\tconst value = Reflect.get(tui, property, tui);\n\t\t\tif (typeof value !== \"function\") return value;\n\t\t\tlet methodTui = tui;\n\t\t\tlet method = value;\n\t\t\treturn (...args: unknown[]) => {\n\t\t\t\tconst currentTui = getTui();\n\t\t\t\tif (currentTui !== methodTui) {\n\t\t\t\t\tconst currentMethod = Reflect.get(currentTui, property, currentTui);\n\t\t\t\t\tif (typeof currentMethod !== \"function\") {\n\t\t\t\t\t\tthrow new TypeError(t(\"TUI property {property} is not callable\", { property: String(property) }));\n\t\t\t\t\t}\n\t\t\t\t\tmethodTui = currentTui;\n\t\t\t\t\tmethod = currentMethod;\n\t\t\t\t}\n\t\t\t\treturn Reflect.apply(method, methodTui, args);\n\t\t\t};\n\t\t},\n\t\tset: (_target, property, value) => {\n\t\t\tconst tui = getTui();\n\t\t\treturn Reflect.set(tui, property, value, tui);\n\t\t},\n\t\thas: (_target, property) => Reflect.has(getTui(), property),\n\t\tgetPrototypeOf: () => Reflect.getPrototypeOf(getTui()),\n\t});\n}\n\n/**\n * Provider failover footer ticker (设计 供应商能力槽位与主备切换 §4.7 Phase 3):\n * while the latest `provider.failover.state` snapshot reports an open breaker, the\n * footer countdown must advance once per second, so re-render on a 1s interval\n * (countdown-timer.ts 同构). The interval is created on the first refresh that\n * sees an open state and cleared as soon as the state leaves open — no leak.\n */\nexport class ProviderFailoverTicker {\n\tprivate intervalId: ReturnType<typeof setInterval> | undefined;\n\tprivate readonly isOpen: () => boolean;\n\tprivate readonly requestRender: () => void;\n\n\tconstructor(isOpen: () => boolean, requestRender: () => void) {\n\t\tthis.isOpen = isOpen;\n\t\tthis.requestRender = requestRender;\n\t}\n\n\t/** Re-evaluate the open state: start ticking when open, stop when not. */\n\trefresh(): void {\n\t\tif (this.isOpen()) {\n\t\t\tif (this.intervalId === undefined) {\n\t\t\t\tthis.intervalId = setInterval(() => {\n\t\t\t\t\tthis.requestRender();\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.dispose();\n\t}\n\n\tdispose(): void {\n\t\tif (this.intervalId !== undefined) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t}\n}\n\nexport class InteractiveMode implements DialogUiHost, authFlow.AuthUiHost, selectorsFlow.SelectorsHost {\n\tprivate runtimeHost: AgentSessionRuntime;\n\tprivate renderer: TuiMainScreen | TuiAltScreen;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tui: TUI;\n\tprivate mainScreenRenderState: TuiMainScreenRenderState | undefined;\n\tprivate loadedResourcesContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tchatContainer: Container;\n\tprivate documentContainer: Container;\n\tprivate transcriptScrollView: TuiLayouts.ScrollView | undefined;\n\tprivate fullscreenLayoutRoot: Component | undefined;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tdefaultEditor: CustomEditor;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\teditor: EditorComponent;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tautocompleteProvider: AutocompleteProvider | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tprivate fdPath: string | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\teditorContainer: Container;\n\tprivate activeSelectorToken?: object;\n\tprivate activeSelectorDispose?: () => void;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooter: FooterComponent;\n\t/**\n\t * Re-renders the footer once per second while the provider failover breaker is\n\t * open (§4.7 Phase 3). Optional-typed to match the prototype-based test stubs\n\t * (constructor always assigns it on real instances).\n\t */\n\tprivate failoverTicker: ProviderFailoverTicker | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooterContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooterDataProvider: FooterDataProvider;\n\t// Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tkeybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate pendingUserInputs: string[] = [];\n\tprivate activeStatusIndicator: StatusIndicator | undefined = undefined;\n\tprivate readonly idleStatus = new IdleStatus();\n\tprivate workingMessage: string | undefined = undefined;\n\tprivate workingVisible = true;\n\tprivate workingIndicatorOptions: WorkingIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = t(\"Working...\");\n\tprivate readonly defaultHiddenThinkingLabel = t(\"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\tprivate anthropicSubscriptionWarningShown = 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\tprivate managedToolStatusStarted = false;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Tool output expansion state\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\ttoolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\tprivate outputPad = 1;\n\tprivate readonly mermaidMarkdownTransformer: MarkdownTransformer = createMermaidMarkdownTransformer({\n\t\tgetMode: () => this.settingsManager.getMermaidRenderingMode(),\n\t\ttheme,\n\t});\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => 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// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state: host-visible for ./interactive-dialog-ui.ts (S5 slice 2).\n\tdialogSelector: DialogSelectorComponent | undefined = undefined;\n\tdialogInput: DialogInputComponent | undefined = undefined;\n\t// Settles the replaced dialog's still-pending promise when a concurrent\n\t// request mounts a new dialog in the same slot (1A.8: request() settles).\n\tdialogSelectorReplaced: (() => void) | undefined = undefined;\n\tdialogInputReplaced: (() => void) | undefined = undefined;\n\tdialogEditor: DialogEditorComponent | undefined = undefined;\n\n\t// Layout spacer slots above/below the editor (fixed empty chrome; the legacy extension widget producer is retired).\n\twidgetContainerAbove!: Container;\n\twidgetContainerBelow!: Container;\n\n\t// Header container that holds the built-in or custom header\n\theaderContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tbuiltInHeader: Component | undefined = undefined;\n\n\tprivate options: InteractiveModeOptions;\n\tprivate readonly onRightClickPaste = (): void => {\n\t\tvoid this.handleRightClickPaste();\n\t};\n\tprivate themeController: InteractiveThemeController;\n\n\t// Convenience accessors\n\tprivate get session(): AgentSession {\n\t\treturn this.runtimeHost.session;\n\t}\n\t/**\n\t * Constructor-injected settings (D-047): the TUI reads settings from the\n\t * host-provided manager, never from AgentSession. Internal collaboration\n\t * surface; exposed for ./interactive-selectors.ts (S5 slice 5).\n\t */\n\tget settingsManager(): SettingsManager {\n\t\treturn this.options.settingsManager;\n\t}\n\t// Stable facade (阶段 1 slice 1): derived on each access; the facade and\n\t// `this.session` always resolve to the same AgentSession, so session rebind\n\t// needs no separate handling.\n\t/** Internal collaboration surface; exposed for ./interactive-selectors.ts (S5 slice 5). */\n\tget facade(): CodingAgentFacadeV1 {\n\t\treturn createCodingAgentFacade(this.session);\n\t}\n\t// Stable runtime facade (阶段 4 slice 3): derived on each access, same\n\t// pattern as `facade`; runtime session rebinds are picked up automatically.\n\t/** Internal collaboration surface; exposed for ./interactive-selectors.ts (S5 slice 5). */\n\tget runtimeFacade(): CodingAgentRuntimeFacadeV1 {\n\t\treturn createCodingAgentRuntimeFacade(this.runtimeHost);\n\t}\n\n\tconstructor(runtimeHost: AgentSessionRuntime, options: InteractiveModeOptions) {\n\t\t// Assign options first: the settingsManager getter reads the injected\n\t\t// manager (D-047) and the constructor uses it before anything else.\n\t\tthis.options = { ...options };\n\t\tthis.runtimeHost = runtimeHost;\n\t\tsetI18nLanguage(this.settingsManager.getUiLanguage());\n\t\tsetCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());\n\t\tconst tuiMode = options.tuiMode ?? this.settingsManager.getTuiMode();\n\t\tthis.options.tuiMode = tuiMode;\n\t\tthis.runtimeFacade.setBeforeSessionInvalidate(() => {\n\t\t\tthis.resetDialogUI();\n\t\t});\n\t\tthis.runtimeFacade.setRebindSession(async () => {\n\t\t\tawait this.rebindCurrentSession({ renderBeforeBind: true });\n\t\t\tawait this.themeController.applyFromSettings();\n\t\t});\n\t\tthis.version = VERSION;\n\t\tthis.renderer = createInteractiveTui({\n\t\t\ttuiMode,\n\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\tlogDirectory: getAgentDir(),\n\t\t\tonRightClickPaste: this.onRightClickPaste,\n\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t});\n\t\tthis.ui = createInteractiveTuiReference(() => this.renderer);\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.loadedResourcesContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.documentContainer = new Container();\n\t\tthis.documentContainer.addChild(this.headerContainer);\n\t\tthis.documentContainer.addChild(this.loadedResourcesContainer);\n\t\tthis.documentContainer.addChild(this.chatContainer);\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\t// Fixed empty state (single spacer): matches the retired widget renderer's empty layout.\n\t\tthis.widgetContainerAbove.addChild(new Spacer(1));\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\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider(this.facade.getCwd());\n\t\tthis.footer = new FooterComponent(this.session, this.footerDataProvider);\n\t\tthis.footerContainer = new Container();\n\t\tthis.footerContainer.addChild(this.footer);\n\t\tthis.failoverTicker = new ProviderFailoverTicker(\n\t\t\t() => this.footer.isProviderFailoverOpen(),\n\t\t\t() => this.ui.requestRender(),\n\t\t);\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\tthis.themeController = new InteractiveThemeController(this.ui, {\n\t\t\tgetSettingsManager: () => this.settingsManager,\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tonChanged: () => this.updateEditorBorderColor(),\n\t\t\tinitialThemeSetting: options.initialThemeSetting,\n\t\t});\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 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\t...(command.argumentHint && { argumentHint: command.argumentHint }),\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 model,find 必命中\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst models =\n\t\t\t\t\tthis.facade.getScopedModels().length > 0\n\t\t\t\t\t\t? this.facade.getScopedModels().map((s) => s.model)\n\t\t\t\t\t\t: this.facade.getAvailableModels();\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\tname: m.name,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\treturn createFuzzyAutocompleteItems(items, prefix, getModelSearchText, (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 thinkingCommand = slashCommands.find((command) => command.name === \"thinking\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 thinking,find 必命中\n\t\tif (thinkingCommand) {\n\t\t\tthinkingCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\treturn createFuzzyAutocompleteItems(\n\t\t\t\t\tthis.facade.getAvailableThinkingLevels(),\n\t\t\t\t\tprefix,\n\t\t\t\t\t(level) => level,\n\t\t\t\t\t(level) => ({\n\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst suiteCommand = slashCommands.find((command) => command.name === \"suite\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 suite,find 必命中\n\t\tif (suiteCommand) {\n\t\t\tsuiteCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\treturn createFuzzyAutocompleteItems(\n\t\t\t\t\tlistSuiteIds(getAgentDir()),\n\t\t\t\t\tprefix,\n\t\t\t\t\t(id) => id,\n\t\t\t\t\t(id) => ({\n\t\t\t\t\t\tvalue: id,\n\t\t\t\t\t\tlabel: id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst loginCommand = slashCommands.find((command) => command.name === \"login\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 login,find 必命中\n\t\tif (loginCommand) {\n\t\t\tloginCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst providers = getLoginProviderCompletionOptions(this.getLoginProviderOptions());\n\t\t\t\treturn createFuzzyAutocompleteItems(providers, prefix, getLoginProviderSearchText, (provider) => ({\n\t\t\t\t\tvalue: provider.id,\n\t\t\t\t\tlabel: provider.id,\n\t\t\t\t\tdescription: formatLoginProviderCompletionDescription(provider),\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst capabilityRegistrations = this.session.getCapabilityRuntime().listCommands();\n\t\tconst capabilityCommandNames = new Set(capabilityRegistrations.map(({ definition }) => definition.name));\n\n\t\t// Conflicting command names are rejected by AgentSession rather than silently\n\t\t// selecting a source, so do not offer either side as an executable completion.\n\t\tconst templateCommands: SlashCommand[] = this.facade\n\t\t\t.getPromptTemplates()\n\t\t\t.filter((cmd) => !capabilityCommandNames.has(cmd.name))\n\t\t\t.map((cmd) => ({\n\t\t\t\tname: cmd.name,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t\t\t}));\n\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst templateCommandNames = new Set(this.facade.getPromptTemplates().map((cmd) => cmd.name));\n\t\tconst resourceSkillCommandNames = new Set(this.facade.getSkills().skills.map((skill) => `skill:${skill.name}`));\n\t\tconst capabilityCommands: SlashCommand[] = filterCapabilityCommandsForCompletions(\n\t\t\tcapabilityRegistrations.map(({ definition }) => ({\n\t\t\t\tname: definition.name,\n\t\t\t\tdescription: definition.description,\n\t\t\t\t...(definition.argumentHint && { argumentHint: definition.argumentHint }),\n\t\t\t})),\n\t\t\t[builtinCommandNames, templateCommandNames, [...resourceSkillCommandNames]],\n\t\t);\n\n\t\t// Skill commands register unconditionally (D-079: the enableSkillCommands\n\t\t// switch is retired). A capability command claiming the same skill:name\n\t\t// still wins: conflicting names are rejected by AgentSession, so neither\n\t\t// side is offered as an executable completion.\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tfor (const skill of this.facade.getSkills().skills) {\n\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\tif (capabilityCommandNames.has(commandName)) continue;\n\t\t\tskillCommandList.push({\n\t\t\t\tname: commandName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),\n\t\t\t});\n\t\t}\n\n\t\treturn new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...capabilityCommands, ...skillCommandList],\n\t\t\tthis.facade.getCwd(),\n\t\t\tthis.fdPath,\n\t\t);\n\t}\n\n\tsetupAutocompleteProvider(): void {\n\t\tconst provider = this.createBaseAutocompleteProvider();\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) {\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 = t(\"Updated to v{version}. Use {command} to view full changelog.\", {\n\t\t\t\tversion: latestVersion,\n\t\t\t\tcommand: theme.bold(\"/changelog\"),\n\t\t\t});\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\", t(\"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\tprivate mountInteractiveTui(tui: TuiMainScreen | TuiAltScreen, components: readonly Component[]): void {\n\t\tfor (const component of components) tui.addChild(component);\n\t\tif (TuiLayouts.isViewportTUI(tui)) {\n\t\t\tif (!this.fullscreenLayoutRoot) throw new Error(t(\"Fullscreen layout is not initialized\"));\n\t\t\ttui.setLayoutRoot(this.fullscreenLayoutRoot);\n\t\t}\n\t}\n\n\tprivate stopInteractiveTui(fullscreenExitOutput: FullscreenExitOutput): void {\n\t\tif (this.renderer.mode === \"fullscreen\" && fullscreenExitOutput === \"transcript\") {\n\t\t\twhile (this.renderer.hasOverlayEntries) this.renderer.hideOverlay();\n\t\t\tthis.switchTuiMode(\"regular\", false, false);\n\t\t\tthis.renderer.renderNow();\n\t\t}\n\t\tthis.ui.stop({ preserveScreen: this.renderer.mode === \"fullscreen\" });\n\t}\n\n\tprivate switchTuiMode(mode: TuiMode, restoreProgress = true, startRenderer = true): boolean {\n\t\tconst previousUi = this.renderer;\n\t\tif (mode === previousUi.mode) return true;\n\t\tif (previousUi.hasOverlayEntries) return false;\n\n\t\tconst components = [...previousUi.children];\n\t\tconst focus = previousUi.getFocusedComponent();\n\t\tconst terminal = previousUi.terminal;\n\t\tconst showHardwareCursor = previousUi.getShowHardwareCursor();\n\t\tconst clearOnShrink = previousUi.getClearOnShrink();\n\t\tconst onDebug = previousUi.onDebug;\n\t\tif (previousUi instanceof TuiMainScreen) {\n\t\t\tthis.mainScreenRenderState = previousUi.captureRenderState();\n\t\t}\n\n\t\tpreviousUi.stop({ preserveScreen: true });\n\t\tpreviousUi.setFocus(null);\n\t\tpreviousUi.clear();\n\t\tif (TuiLayouts.isViewportTUI(previousUi)) previousUi.setLayoutRoot(undefined);\n\n\t\tconst nextUi = createInteractiveTui({\n\t\t\ttuiMode: mode,\n\t\t\tshowHardwareCursor,\n\t\t\tlogDirectory: getAgentDir(),\n\t\t\tterminal,\n\t\t\tonRightClickPaste: this.onRightClickPaste,\n\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t});\n\t\tnextUi.setClearOnShrink(clearOnShrink);\n\t\tnextUi.onDebug = onDebug;\n\t\tif (nextUi instanceof TuiMainScreen && this.mainScreenRenderState) {\n\t\t\tnextUi.restoreRenderState(this.mainScreenRenderState);\n\t\t}\n\t\tthis.renderer = nextUi;\n\t\tthis.options.tuiMode = mode;\n\t\tthis.mountInteractiveTui(nextUi, components);\n\t\tnextUi.invalidate();\n\t\tnextUi.setFocus(focus);\n\t\tif (!startRenderer) return true;\n\t\tnextUi.start();\n\t\tthis.themeController.rebindTui();\n\t\tif (\n\t\t\trestoreProgress &&\n\t\t\tthis.settingsManager.getShowTerminalProgress() &&\n\t\t\t(this.facade.isStreaming() || this.facade.isCompacting())\n\t\t) {\n\t\t\tterminal.setProgress(true);\n\t\t}\n\t\treturn true;\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 = this.getChangelogForDisplay();\n\n\t\tif (\n\t\t\tthis.facade.getScopedModels().length > 0 &&\n\t\t\t(this.options.verbose || !this.settingsManager.getQuietStartup())\n\t\t) {\n\t\t\tconst modelList = this.facade\n\t\t\t\t.getScopedModels()\n\t\t\t\t.map((sm) => {\n\t\t\t\t\tconst thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : \"\";\n\t\t\t\t\treturn `${sm.model.id}${thinkingStr}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconst cycleKeys = this.keybindings.getKeys(\"app.model.cycleForward\");\n\t\t\tconst cycleHint =\n\t\t\t\tcycleKeys.length > 0\n\t\t\t\t\t? theme.fg(\n\t\t\t\t\t\t\t\"muted\",\n\t\t\t\t\t\t\t` ${t(\"({key} to cycle)\", {\n\t\t\t\t\t\t\t\tkey: formatKeyText(cycleKeys.join(\"/\"), { capitalize: true }),\n\t\t\t\t\t\t\t})}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"\";\n\t\t\tconsole.log(theme.fg(\"dim\", t(\"Model scope: {models}{hint}\", { models: modelList, hint: cycleHint })));\n\t\t}\n\n\t\t// Keep one component tree and remount it when changing renderers.\n\t\t// Widget chrome is fixed empty; no initialization render needed.\n\t\tthis.transcriptScrollView = new TuiLayouts.ScrollView(this.documentContainer, {\n\t\t\tfollow: \"end\",\n\t\t\tprimary: true,\n\t\t\toverscroll: \"chain\",\n\t\t\tscrollbar: this.settingsManager.getFullscreenScrollbar(),\n\t\t\tscrollbarStyle: (text) => theme.bg(\"scrollbarThumb\", text),\n\t\t});\n\t\tconst dock = new TuiLayouts.VStack([\n\t\t\t{ component: this.pendingMessagesContainer, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.statusContainer, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.widgetContainerAbove, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.editorContainer, shrink: 1, minSize: 3 },\n\t\t\t{ component: this.widgetContainerBelow, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.footerContainer, shrink: 1, minSize: 1 },\n\t\t]);\n\t\tthis.fullscreenLayoutRoot = new TuiLayouts.VStack([\n\t\t\t{ component: this.transcriptScrollView, basis: 0, grow: 1, shrink: 1, minSize: 1 },\n\t\t\t{ component: dock, basis: \"auto\", grow: 0, shrink: 1, minSize: 1 },\n\t\t]);\n\t\tthis.mountInteractiveTui(this.renderer, [\n\t\t\tthis.documentContainer,\n\t\t\tthis.pendingMessagesContainer,\n\t\t\tthis.statusContainer,\n\t\t\tthis.widgetContainerAbove,\n\t\t\tthis.editorContainer,\n\t\t\tthis.widgetContainerBelow,\n\t\t\tthis.footerContainer,\n\t\t]);\n\t\t// Accept text while startup completes, but only enable interrupt, exit, and submission feedback.\n\t\tthis.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onSubmit = (text) => this.handleStartupSubmit(text);\n\t\tthis.ui.setFocus(this.editor);\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\tthis.isInitialized = true;\n\n\t\tawait this.themeController.applyFromSettings();\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 logo = 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\", t(\"to interrupt\")),\n\t\t\t\thint(\"app.clear\", t(\"to clear\")),\n\t\t\t\trawKeyHint(t(\"{key} twice\", { key: keyText(\"app.clear\") }), t(\"to exit\")),\n\t\t\t\thint(\"app.exit\", t(\"to exit (empty)\")),\n\t\t\t\thint(\"app.suspend\", t(\"to suspend\")),\n\t\t\t\tkeyHint(\"tui.editor.deleteToLineEnd\", t(\"to delete to end\")),\n\t\t\t\thint(\"app.tools.expand\", t(\"to expand tools\")),\n\t\t\t\thint(\"app.thinking.toggle\", t(\"to expand thinking\")),\n\t\t\t\thint(\"app.editor.external\", t(\"for external editor\")),\n\t\t\t\trawKeyHint(\"/\", t(\"for commands\")),\n\t\t\t\trawKeyHint(\"!\", t(\"to run bash\")),\n\t\t\t\trawKeyHint(\"!!\", t(\"to run bash (no context)\")),\n\t\t\t\thint(\"app.clipboard.pasteImage\", t(\"to paste image (with text fallback)\")),\n\t\t\t\trawKeyHint(\"drop files\", t(\"to attach\")),\n\t\t\t].join(\"\\n\");\n\t\t\tconst compactInstructions = [\n\t\t\t\thint(\"app.interrupt\", t(\"interrupt\")),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")}/${keyText(\"app.exit\")}`, t(\"clear/exit\")),\n\t\t\t\trawKeyHint(\"/\", t(\"commands\")),\n\t\t\t\trawKeyHint(\"!\", t(\"bash\")),\n\t\t\t\thint(\"app.tools.expand\", t(\"more\")),\n\t\t\t].join(theme.fg(\"muted\", \" · \"));\n\t\t\tconst compactOnboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\tt(\"Press {key} to show full startup help and loaded resources.\", {\n\t\t\t\t\tkey: keyText(\"app.tools.expand\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst onboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\tt(\n\t\t\t\t\t\"Agent Forge can explain its own features and look up its docs. Ask it how to use or extend Agent Forge.\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tthis.builtInHeader = new ExpandableText(\n\t\t\t\t() => `${logo}\\n${compactInstructions}\\n${compactOnboarding}\\n\\n${onboarding}`,\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(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\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\t\tthis.ui.requestRender();\n\n\t\t// Ensure fd and rg are available after mounting the TUI (downloads if missing, adds to PATH via getBinDir)\n\t\t// so slow downloads do not make startup appear frozen.\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands.\n\t\tconst [fdPath] = await Promise.all([\n\t\t\tensureTool(\"fd\", (status) => this.showManagedToolStatus(status)),\n\t\t\tensureTool(\"rg\", (status) => this.showManagedToolStatus(status)),\n\t\t]);\n\t\tthis.fdPath = fdPath;\n\n\t\t// Enable the remaining input handlers only after managed-tool setup completes.\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\t\tthis.ui.requestRender();\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// Cross-suite resume detection (设计 §10.1 最小可用版): a `-c`/resumed\n\t\t// session may carry a binding from a different suite than the one the\n\t\t// runtime just assembled it with. Record the fact; conversion is out of\n\t\t// scope.\n\t\tthis.detectCrossSuiteResume();\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\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// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\n\t\t// Unresolved startup suite id (设计 §9): with the TUI ready, let the user\n\t\t// pick a suite before the first prompt; the session is then rebuilt with\n\t\t// the selected suite. print/RPC never reach here (structured exit in main.ts).\n\t\tif (this.options.pendingSuiteSelector) {\n\t\t\tawait this.showStartupSuiteSelector(this.options.pendingSuiteSelector);\n\t\t}\n\n\t\t// Flush the completed startup state before loading the remaining syntax grammars.\n\t\tthis.ui.renderNow();\n\t\tvoid loadAllHighlightLanguages().then(() => {\n\t\t\tif (!this.isInitialized) return;\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.ui.requestRender();\n\t\t});\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.facade.getCwd());\n\t\tconst sessionName = this.facade.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\tif (!process.env.AGENT_FORGE_OFFLINE) {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), 15_000);\n\t\t\tvoid refreshModelCatalogs(this.facade.getModelCatalog(), controller.signal)\n\t\t\t\t.then(() => this.updateAvailableProviderCount())\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => clearTimeout(timeout));\n\t\t}\n\n\t\t// Start version check asynchronously\n\t\tcheckForNewVersion(this.version).then((newRelease) => {\n\t\t\tif (newRelease) {\n\t\t\t\tthis.showNewVersionNotification(newRelease);\n\t\t\t}\n\t\t});\n\n\t\t// Start package update check asynchronously\n\t\tthis.checkForPackageUpdates()\n\t\t\t.then((updates) => {\n\t\t\t\tif (updates.length > 0) {\n\t\t\t\t\tthis.showPackageUpdateNotification(updates);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// On Windows, npm can overwrite the shared console title while checking\n\t\t\t\t// extension package versions. Restore the product title after the startup check.\n\t\t\t\tif (process.platform === \"win32\" && this.isInitialized) {\n\t\t\t\t\tthis.updateTerminalTitle();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tthis.checkTmuxKeyboardSetup().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 {\n\t\t\tmigratedProviders,\n\t\t\tstartupDiagnostics,\n\t\t\tmodelFallbackMessage,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages,\n\t\t} = this.options;\n\n\t\tfor (const diagnostic of startupDiagnostics ?? []) {\n\t\t\tif (diagnostic.type === \"error\") {\n\t\t\t\tthis.showError(diagnostic.message);\n\t\t\t} else if (diagnostic.type === \"warning\") {\n\t\t\t\tthis.showWarning(diagnostic.message);\n\t\t\t} else {\n\t\t\t\tthis.showStatus(diagnostic.message);\n\t\t\t}\n\t\t}\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(\n\t\t\t\tt(\"Migrated credentials to auth.json: {providers}\", { providers: migratedProviders.join(\", \") }),\n\t\t\t);\n\t\t}\n\n\t\tconst modelsJsonError = this.facade.getModelsError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(t(\"models.json error: {error}\", { error: modelsJsonError }));\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.facade.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"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.facade.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"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\t// Inputs queued during startup may be \"/\" commands or \"!\" bash\n\t\t\t\t// lines; replay them through the normal submit path (they were\n\t\t\t\t// queued precisely because it needs the post-startup context).\n\t\t\t\t// Inputs arriving through onInputCallback were already filtered\n\t\t\t\t// by the editor submit handler, so this is a no-op for them.\n\t\t\t\tif (await this.dispatchCommandOrBash(userInput)) continue;\n\t\t\t\tawait this.promptWithEmptyReplyRetry(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"Unknown error occurred\");\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * One-shot empty-reply auto-continuation (#5, print-mode parity): when a\n\t * submitted turn finishes with an empty assistant text — and the model was\n\t * neither aborted nor errored — nudge the model once to continue the task.\n\t * The retry itself is never retried, so the budget is capped at one\n\t * continuation per submission and this cannot loop.\n\t */\n\tprivate async promptWithEmptyReplyRetry(text: string): Promise<void> {\n\t\tconst seen = this.facade.getState().messages.length;\n\t\tawait this.facade.prompt(text);\n\t\tconst lastAssistant = [...this.facade.getState().messages.slice(seen)]\n\t\t\t.reverse()\n\t\t\t.find((m): m is AssistantMessage => m.role === \"assistant\");\n\t\tif (lastAssistant === undefined) return;\n\t\tif (lastAssistant.stopReason === \"error\" || lastAssistant.stopReason === \"aborted\") return;\n\t\tif (contentText(lastAssistant.content).trim().length > 0) return;\n\t\tthis.showStatus(t(\"Previous reply was empty, retrying...\"));\n\t\tawait this.facade.prompt(EMPTY_REPLY_RETRY_PROMPT);\n\t}\n\n\tprivate async checkForPackageUpdates(): Promise<string[]> {\n\t\tif (process.env.AGENT_FORGE_OFFLINE) {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst packageManager = new DefaultPackageManager({\n\t\t\t\tcwd: this.facade.getCwd(),\n\t\t\t\tagentDir: getAgentDir(),\n\t\t\t\tsettingsManager: this.settingsManager,\n\t\t\t});\n\t\t\tconst updates = await packageManager.checkForAvailableUpdates();\n\t\t\treturn updates.map((update) => update.displayName);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\t\tif (!process.env.TMUX) return undefined;\n\n\t\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t});\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\tproc.kill();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t}, 2000);\n\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"error\", () => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\t\trunTmuxShow(\"extended-keys\"),\n\t\t\trunTmuxShow(\"extended-keys-format\"),\n\t\t]);\n\n\t\t// If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n\t\tif (extendedKeys === undefined) return undefined;\n\n\t\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\t\treturn t(\n\t\t\t\t\"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\",\n\t\t\t);\n\t\t}\n\n\t\tif (extendedKeysFormat === \"xterm\") {\n\t\t\treturn t(\n\t\t\t\t\"tmux extended-keys-format is xterm. Agent Forge works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\",\n\t\t\t);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.facade.getState().messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - record the version, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\tif (newEntries.length > 0) {\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn newEntries.map((e) => normalizeChangelogLinks(e.content, e)).join(\"\\n\\n\");\n\t\t}\n\n\t\treturn undefined;\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 formatDisplayPath(p: string): string {\n\t\treturn formatDisplayPath(p);\n\t}\n\n\tprivate formatContextPath(p: string): string {\n\t\treturn formatContextPath(p, this.facade.getCwd());\n\t}\n\n\tprivate getStartupExpansionState(): boolean {\n\t\treturn this.options.verbose || this.toolOutputExpanded;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, sourceInfo?: SourceInfo): string {\n\t\treturn getShortPath(fullPath, sourceInfo);\n\t}\n\n\tprivate getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string {\n\t\treturn getCompactPathLabel(resourcePath, sourceInfo);\n\t}\n\n\t// The following formatting delegates have no in-class call sites (their\n\t// implementations moved to interactive-format.ts) but remain part of the\n\t// prototype contract, so they stay public instead of private.\n\n\tgetCompactPackageSourceLabel(sourceInfo?: SourceInfo): string {\n\t\treturn getCompactPackageSourceLabel(sourceInfo);\n\t}\n\n\tgetDisplaySourceInfo(sourceInfo?: SourceInfo): {\n\t\tlabel: string;\n\t\tscopeLabel?: string;\n\t\tcolor: \"accent\" | \"muted\";\n\t} {\n\t\treturn getDisplaySourceInfo(sourceInfo);\n\t}\n\n\tgetScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\" {\n\t\treturn getScopeGroup(sourceInfo);\n\t}\n\n\tisPackageSource(sourceInfo?: SourceInfo): boolean {\n\t\treturn isPackageSource(sourceInfo);\n\t}\n\n\tprivate buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n\t\tscope: \"user\" | \"project\" | \"path\";\n\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t}> {\n\t\treturn buildScopeGroups(items);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{\n\t\t\tscope: \"user\" | \"project\" | \"path\";\n\t\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t\t}>,\n\t\toptions: {\n\t\t\tformatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n\t\t\tformatPackagePath: (item: { path: string; sourceInfo?: SourceInfo }, source: string) => string;\n\t\t},\n\t): string {\n\t\treturn formatScopeGroups(groups, options);\n\t}\n\n\tfindSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined {\n\t\treturn findSourceInfoForPath(p, sourceInfos);\n\t}\n\n\tformatPathWithSource(p: string, sourceInfo?: SourceInfo): string {\n\t\treturn formatPathWithSource(p, sourceInfo);\n\t}\n\n\tprivate formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string {\n\t\treturn formatDiagnostics(diagnostics, sourceInfos);\n\t}\n\n\tprivate showLoadedResources(options?: { force?: boolean; showDiagnosticsWhenQuiet?: boolean }): void {\n\t\t// Resource rendering is idempotent; chat clears no longer clear this separate container.\n\t\tthis.loadedResourcesContainer.clear();\n\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\t\tconst formatCompactList = (items: string[], options?: { sort?: boolean }): string => {\n\t\t\tconst labels = items.map((item) => item.trim()).filter((item) => item.length > 0);\n\t\t\tif (options?.sort !== false) {\n\t\t\t\tlabels.sort((a, b) => a.localeCompare(b));\n\t\t\t}\n\t\t\treturn theme.fg(\"dim\", ` ${labels.join(\", \")}`);\n\t\t};\n\t\tconst addLoadedSection = (\n\t\t\tname: string,\n\t\t\tcollapsedBody: string,\n\t\t\texpandedBody = collapsedBody,\n\t\t\tcolor: ThemeColor = \"mdHeading\",\n\t\t): void => {\n\t\t\tconst section = new ExpandableText(\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${collapsedBody}`,\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${expandedBody}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tthis.loadedResourcesContainer.addChild(section);\n\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t};\n\n\t\tconst skillsResult = this.facade.getSkills();\n\t\tconst promptsResult = this.facade.getPrompts();\n\t\tconst themesResult = this.facade.getThemes();\n\t\tconst sourceInfos = new Map<string, SourceInfo>();\n\t\tfor (const skill of skillsResult.skills) {\n\t\t\tif (skill.sourceInfo) {\n\t\t\t\tsourceInfos.set(skill.filePath, skill.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const prompt of promptsResult.prompts) {\n\t\t\tif (prompt.sourceInfo) {\n\t\t\t\tsourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const loadedTheme of themesResult.themes) {\n\t\t\tif (loadedTheme.sourcePath && loadedTheme.sourceInfo) {\n\t\t\t\tsourceInfos.set(loadedTheme.sourcePath, loadedTheme.sourceInfo);\n\t\t\t}\n\t\t}\n\n\t\tif (showListing) {\n\t\t\tconst systemPromptSource = this.facade.getSystemPromptSource();\n\t\t\tconst contextFiles = [\n\t\t\t\t...(systemPromptSource ? [systemPromptSource] : []),\n\t\t\t\t...this.facade.getAppendSystemPromptSources(),\n\t\t\t\t...this.facade.getAgentsFiles().agentsFiles,\n\t\t\t];\n\t\t\tif (contextFiles.length > 0) {\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t\tconst contextList = contextFiles\n\t\t\t\t\t.map((f) => theme.fg(\"dim\", ` ${this.formatDisplayPath(f.path)}`))\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst contextCompactList = formatCompactList(\n\t\t\t\t\tcontextFiles.map((contextFile) => this.formatContextPath(contextFile.path)),\n\t\t\t\t\t{ sort: false },\n\t\t\t\t);\n\t\t\t\taddLoadedSection(t(\"Context\"), contextCompactList, contextList);\n\t\t\t}\n\n\t\t\tconst skills = skillsResult.skills;\n\t\t\tif (skills.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tskills.map((skill) => ({ path: skill.filePath, sourceInfo: skill.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst skillList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst skillCompactList = formatCompactList(skills.map((skill) => skill.name));\n\t\t\t\taddLoadedSection(t(\"Skills\"), skillCompactList, skillList);\n\t\t\t}\n\n\t\t\tconst templates = this.facade.getPromptTemplates();\n\t\t\tif (templates.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\ttemplates.map((template) => ({ path: template.filePath, sourceInfo: template.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\n\t\t\t\tconst templateList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\t// v8 ignore next -- templateByPath is built from the same templates as the groups\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t\tformatPackagePath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\t// v8 ignore next -- templateByPath is built from the same templates as the groups\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst promptCompactList = formatCompactList(templates.map((template) => `/${template.name}`));\n\t\t\t\taddLoadedSection(t(\"Prompts\"), promptCompactList, templateList);\n\t\t\t}\n\n\t\t\t// Show loaded themes (excluding built-in)\n\t\t\tconst loadedThemes = themesResult.themes;\n\t\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\t\tif (customThemes.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tcustomThemes.map((loadedTheme) => ({\n\t\t\t\t\t\tpath: loadedTheme.sourcePath!,\n\t\t\t\t\t\tsourceInfo: loadedTheme.sourceInfo,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tconst themeList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst themeCompactList = formatCompactList(\n\t\t\t\t\tcustomThemes.map(\n\t\t\t\t\t\t(loadedTheme) =>\n\t\t\t\t\t\t\tloadedTheme.name ?? this.getCompactPathLabel(loadedTheme.sourcePath!, loadedTheme.sourceInfo),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\taddLoadedSection(t(\"Themes\"), themeCompactList, themeList);\n\t\t\t}\n\t\t}\n\n\t\t// v8 ignore next -- showDiagnostics 为假时上方已提前返回,此处恒为真\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Skill conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Prompt conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Theme conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Run the session-start boundary for the current session (capability\n\t * session.start@1 dispatch + resource discovery pass) and refresh the\n\t * startup surfaces that read session resources.\n\t */\n\tprivate async bindCurrentSessionExtensions(): Promise<void> {\n\t\tawait this.session.startSession();\n\n\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.showStartupNoticesIfNeeded();\n\t}\n\n\tprivate applyFullscreenScrollbarSetting(): void {\n\t\tthis.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());\n\t}\n\n\tprivate applyRuntimeSettings(): void {\n\t\tsetI18nLanguage(this.settingsManager.getUiLanguage());\n\t\tsetCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());\n\t\tconfigureHttpDispatcher(this.settingsManager.getHttpIdleTimeoutMs());\n\t\tthis.applyFullscreenScrollbarSetting();\n\t\tif (this.renderer instanceof TuiAltScreen) {\n\t\t\tthis.renderer.setCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());\n\t\t\tthis.renderer.setWheelScrollLines(this.settingsManager.getFullscreenWheelScrollLines());\n\t\t}\n\t\tthis.footer.setSession(this.session);\n\t\tthis.footerDataProvider.setCwd(this.facade.getCwd());\n\t\t// The switched session carries its own failover snapshot history; re-check\n\t\t// whether the countdown ticker is needed.\n\t\tthis.failoverTicker?.refresh();\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\tconst clearOnShrink = this.settingsManager.getClearOnShrink();\n\t\tthis.ui.setClearOnShrink(clearOnShrink);\n\t\tif (!clearOnShrink && !this.activeStatusIndicator) {\n\t\t\tthis.statusContainer.clear();\n\t\t}\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t}\n\t}\n\n\tprivate async rebindCurrentSession(options: { renderBeforeBind?: boolean } = {}): Promise<void> {\n\t\tconst session = this.session;\n\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.applyRuntimeSettings();\n\n\t\tif (options.renderBeforeBind) {\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.subscribeToAgent();\n\t\t}\n\n\t\tawait this.bindCurrentSessionExtensions();\n\n\t\tif (this.session !== session) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!options.renderBeforeBind) {\n\t\t\tthis.subscribeToAgent();\n\t\t}\n\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.updateTerminalTitle();\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(\"transcript\");\n\t\tprocess.exit(1);\n\t}\n\n\tprivate renderCurrentSessionState(): void {\n\t\tthis.loadedResourcesContainer.clear();\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.renderInitialMessages();\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.facade.getToolDefinition(toolName);\n\t}\n\n\tprivate getMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn [this.mermaidMarkdownTransformer];\n\t}\n\n\tprivate showStatusIndicator(indicator: StatusIndicator): void {\n\t\tthis.activeStatusIndicator?.dispose();\n\t\tthis.activeStatusIndicator = indicator;\n\t\tthis.statusContainer.clear();\n\t\tthis.statusContainer.addChild(indicator);\n\t}\n\n\tprivate clearStatusIndicator(kind?: StatusIndicator[\"kind\"]): void {\n\t\tif (kind && this.activeStatusIndicator?.kind !== kind) {\n\t\t\treturn;\n\t\t}\n\t\tconst hadActiveStatusIndicator = this.activeStatusIndicator !== undefined;\n\t\tthis.activeStatusIndicator?.dispose();\n\t\tthis.activeStatusIndicator = undefined;\n\t\tthis.statusContainer.clear();\n\t\tif (hadActiveStatusIndicator && this.options.tuiMode === \"regular\" && this.ui.getClearOnShrink()) {\n\t\t\tthis.statusContainer.addChild(this.idleStatus);\n\t\t}\n\t}\n\n\tprivate showWorkingStatusIndicator(): void {\n\t\tthis.showStatusIndicator(\n\t\t\tnew WorkingStatusIndicator(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.workingMessage ?? this.defaultWorkingMessage,\n\t\t\t\tthis.workingIndicatorOptions,\n\t\t\t),\n\t\t);\n\t}\n\n\tsetWorkingVisible(visible: boolean): void {\n\t\tthis.workingVisible = visible;\n\t\tif (!visible) {\n\t\t\tthis.clearStatusIndicator(\"working\");\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (this.facade.isStreaming() && this.activeStatusIndicator?.kind !== \"working\") {\n\t\t\tthis.showWorkingStatusIndicator();\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetWorkingIndicator(options?: WorkingIndicatorOptions): void {\n\t\tthis.workingIndicatorOptions = options;\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setIndicator(options);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetHiddenThinkingLabel(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\t/**\n\t * Set the working/loading message shown during streaming. Host entry wired\n\t * through ./interactive-dialog-ui.ts; restores the default when undefined.\n\t */\n\tsetWorkingMessage(message: string | undefined): void {\n\t\tthis.workingMessage = message;\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setMessage(message ?? this.defaultWorkingMessage);\n\t\t}\n\t}\n\n\tprivate resetDialogUI(): void {\n\t\tif (this.dialogSelector) {\n\t\t\tthis.hideDialogSelector();\n\t\t}\n\t\tif (this.dialogInput) {\n\t\t\tthis.hideDialogInput();\n\t\t}\n\t\tif (this.dialogEditor) {\n\t\t\tthis.hideDialogEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.footer.invalidate();\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.updateTerminalTitle();\n\t\tthis.workingMessage = undefined;\n\t\tthis.workingVisible = true;\n\t\tthis.setWorkingIndicator();\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setMessage(\n\t\t\t\t`${this.defaultWorkingMessage} ${t(\"({key} to interrupt)\", { key: keyText(\"app.interrupt\") })}`,\n\t\t\t);\n\t\t}\n\t\tthis.setHiddenThinkingLabel();\n\t}\n\n\t/**\n\t * Apply a theme request from the extension UI host (implemented by\n\t * ./interactive-dialog-ui.ts), keeping the theme controller and settings\n\t * persistence on the mode.\n\t */\n\tapplyExtensionTheme(themeOrName: string | Theme): { success: boolean; error?: string } {\n\t\tif (themeOrName instanceof Theme) {\n\t\t\treturn this.themeController.setThemeInstance(themeOrName);\n\t\t}\n\t\tconst result = this.themeController.setThemeName(themeOrName);\n\t\tif (result.success) {\n\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Interaction host for the versioned capability surface (1A.8): maps the\n\t * frozen InteractionHostV1 contract onto the legacy TUI dialogs. Cancellation\n\t * rides the existing dialog signal support; notify reuses the notify channel.\n\t */\n\tcreateInteractionHostV1(): InteractionHostV1 {\n\t\treturn createInteractionHostV1(this);\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tshowDialogSelector(title: string, options: string[], opts?: InteractionDialogOptions): Promise<string | undefined> {\n\t\treturn showDialogSelector(this, title, options, opts);\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\thideDialogSelector(): void {\n\t\thideDialogSelector(this);\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tasync showDialogConfirm(title: string, message: string, opts?: InteractionDialogOptions): Promise<boolean> {\n\t\treturn showDialogConfirm(this, title, message, opts);\n\t}\n\n\tprivate async promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined> {\n\t\tconst confirmed = await this.showDialogConfirm(\n\t\t\t\"Session cwd not found\",\n\t\t\tformatMissingSessionCwdPrompt(error.issue),\n\t\t);\n\t\treturn confirmed ? error.issue.fallbackCwd : undefined;\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tshowDialogInput(title: string, placeholder?: string, opts?: InteractionDialogOptions): Promise<string | undefined> {\n\t\treturn showDialogInput(this, title, placeholder, opts);\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\thideDialogInput(): void {\n\t\thideDialogInput(this);\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tshowDialogEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn showDialogEditor(this, title, prefill);\n\t}\n\n\t/**\n\t * External editor command for extension editors. Host entry for\n\t * ./interactive-dialog-ui.ts, keeping settings access on the mode.\n\t */\n\tgetExternalEditorCommand(): string {\n\t\treturn this.settingsManager.getExternalEditorCommand();\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\thideDialogEditor(): void {\n\t\thideDialogEditor(this);\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tshowDialogNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tshowDialogNotify(this, message, type);\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.facade.isStreaming()) {\n\t\t\t\t// 中断分级(设计 子代理运行时 §4.2,2026-10-02):Esc 只停当前\n\t\t\t\t// 回合,从不终止后台子代理(用户裁决:入口分离,同键不承载两\n\t\t\t\t// 个烈度)。仍有活跃子代理时状态行指路 /stop-agents。\n\t\t\t\tthis.restoreQueuedMessagesToEditor({ abort: true, cancelAgentTasks: false });\n\t\t\t\tconst activeAgents = this.facade.getActiveAgentTaskCount();\n\t\t\t\tif (activeAgents > 0) {\n\t\t\t\t\t// 单复数拆双 key 保 en 语法(批次⑩规则,同 handleStopAgentsCommand)。\n\t\t\t\t\tthis.showStatus(\n\t\t\t\t\t\tactiveAgents === 1\n\t\t\t\t\t\t\t? t(\"{count} subagent still running · /stop-agents stops all (Esc only stops the current turn)\", {\n\t\t\t\t\t\t\t\t\tcount: activeAgents,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: t(\"{count} subagents still running · /stop-agents stops all (Esc only stops the current turn)\", {\n\t\t\t\t\t\t\t\t\tcount: activeAgents,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (this.facade.isBashRunning()) {\n\t\t\t\tthis.facade.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 or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action === \"tree\") {\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\tthis.showTreeSelector();\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.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.model.cycleBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"app.model.select\", () => this.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"app.tools.expand\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"app.thinking.toggle\", () => this.toggleThinkingBlockVisibility());\n\t\t// Iron law (2026-10-02 复审): the main editor must not consume\n\t\t// ctrl+g/ctrl+x — /editor and /copy are the single entries here. The\n\t\t// bindings keep their defaults for the components that have no command\n\t\t// channel (dialog editors' external-editor entry, the tree view's\n\t\t// in-place copy).\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.handleClearCommand());\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\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}\n\t\t};\n\n\t\t// Handle clipboard paste (triggered on Ctrl+V). Images are attached by path;\n\t\t// otherwise, paste plain text from the system clipboard.\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tvoid this.handleClipboardPaste();\n\t\t};\n\t}\n\n\tprivate async handleRightClickPaste(): Promise<void> {\n\t\tconst target = this.renderer.getFocusedComponent();\n\t\tconst handleInput = target?.handleInput;\n\t\tif (!target || !handleInput) return;\n\t\ttry {\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (!text || this.renderer.getFocusedComponent() !== target) return;\n\t\t\thandleInput.call(target, `\\x1b[200~${text}\\x1b[201~`);\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\tprivate async handleClipboardPaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (image) {\n\t\t\t\tconst tmpDir = os.tmpdir();\n\t\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\t\tconst fileName = `agent-forge-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (text) {\n\t\t\t\tthis.editor.insertTextAtCursor?.(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\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// Startup-time submissions (prompts, \"/\" commands, and \"!\" bash inputs)\n\t// are all queued; the main loop dequeues them automatically once startup\n\t// completes. Commands and bash inputs replay through the normal submit\n\t// path (dispatch table / bash handling) because they need the\n\t// post-startup context — queueing is exactly what waits for it. Restoring\n\t// them into the editor instead proved hazardous: the restored text\n\t// concatenated with the user's next keystrokes and could be submitted to\n\t// the model as a literal prompt. Empty input is ignored.\n\tprivate handleStartupSubmit(text: string): void {\n\t\tif (!text.trim()) return;\n\t\tthis.pendingUserInputs.push(text);\n\t\tthis.showStatus(t(\"Startup in progress — input queued and will run when startup completes\"));\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (rawText: string) => {\n\t\t\tconst text = rawText.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle /commands and bash inputs (\"!\"/\"!!\"); this is the same path\n\t\t\t// the main loop uses to replay inputs queued during startup.\n\t\t\tif (await this.dispatchCommandOrBash(text)) return;\n\n\t\t\t// Queue input during compaction\n\t\t\tif (this.facade.isCompacting()) {\n\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\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.facade.isStreaming()) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.facade.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.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.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t} else {\n\t\t\t\tthis.pendingUserInputs.push(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\t/**\n\t * Shared \"/\"-command and bash (\"!\"/\"!!\") handling for the editor submit\n\t * path and the main-loop replay of inputs queued during startup. Returns\n\t * true when the input was handled as a command or bash invocation; false\n\t * means the caller should treat it as a normal prompt.\n\t */\n\tprivate async dispatchCommandOrBash(text: string): Promise<boolean> {\n\t\t// Handle /commands through the dispatch table (interactive-commands.ts)\n\t\tconst dispatched = this.dispatchEditorCommand(text);\n\t\tif (dispatched) {\n\t\t\tif (dispatched.pending) await dispatched.pending;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\tif (text.startsWith(\"!\")) {\n\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\tif (command) {\n\t\t\t\tif (this.facade.isBashRunning()) {\n\t\t\t\t\tthis.showWarning(t(\"A bash command is already running. Press Esc to cancel it first.\"));\n\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Run a /command through COMMAND_DISPATCH_ENTRIES. Returns undefined when\n\t * text is not a registered command; otherwise the command has been fully\n\t * dispatched (handler invoked, editor cleared in the original order) and\n\t * pending carries the async completion, if any.\n\t */\n\tprivate dispatchEditorCommand(text: string): { pending: Promise<void> | undefined } | undefined {\n\t\tconst match = matchCommandDispatchEntry(COMMAND_DISPATCH_ENTRIES, text);\n\t\tif (!match) return undefined;\n\t\tconst { entry, arg } = match;\n\t\tif (entry.clearEditorBeforeRun) this.setEditorText(\"\");\n\t\tconst result = entry.run(this, text, arg);\n\t\t// Clear the submitted command text after the run — but only while the\n\t\t// editor still holds it. Handlers that write their own content into\n\t\t// the editor (/dequeue restores the queue, /editor applies external\n\t\t// edits) must not have that wiped (review finding: the unconditional\n\t\t// clear lost the restored/edited content).\n\t\tconst clearIfUntouched = (): void => {\n\t\t\tif (this.editor.getText().trim() === text) this.setEditorText(\"\");\n\t\t};\n\t\tif (!(result instanceof Promise)) {\n\t\t\tif (!entry.clearEditorBeforeRun) clearIfUntouched();\n\t\t\treturn { pending: undefined };\n\t\t}\n\t\treturn {\n\t\t\tpending: entry.clearEditorBeforeRun ? result : result.then(clearIfUntouched),\n\t\t};\n\t}\n\n\tsetEditorText(text: string): void {\n\t\tthis.editor.setText(text);\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.facade.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\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\t\t// Failover snapshots land as entry_appended events; the ticker decides here\n\t\t// whether the per-second countdown re-render is needed (§4.7 Phase 3).\n\t\tthis.failoverTicker?.refresh();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.pendingTools.clear();\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\tbreak;\n\n\t\t\tcase \"turn_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\tif (this.workingVisible) {\n\t\t\t\t\tif (this.activeStatusIndicator?.kind !== \"working\") {\n\t\t\t\t\t\tthis.showWorkingStatusIndicator();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.clearStatusIndicator();\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.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"entry_appended\":\n\t\t\t\t// Custom entries have no renderer source since the legacy extension\n\t\t\t\t// surface was removed; nothing to append to the chat.\n\t\t\t\tbreak;\n\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.updateTerminalTitle();\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\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.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.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\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.streamingComponent.updateContent(this.streamingMessage, true);\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},\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.facade.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.chatContainer.addChild(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\t// v8 ignore next -- has() 已确认键存在,get() 恒返回组件\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 (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.facade.getRetryAttempt();\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? retryAttempt === 1\n\t\t\t\t\t\t\t\t\t? t(\"Aborted after {count} retry attempt\", { count: retryAttempt })\n\t\t\t\t\t\t\t\t\t: t(\"Aborted after {count} retry attempts\", { count: retryAttempt })\n\t\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, false);\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 || t(\"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\tthis.maybeShowThinkingDropNotice(this.streamingMessage);\n\t\t\t\t\t\tthis.maybeShowCacheMissNotice(this.streamingMessage);\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 \"bash_execution_update\":\n\t\t\t\t// The bash execution callback handles TUI output rendering.\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},\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.facade.getCwd(),\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(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.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"capability_command_result\": {\n\t\t\t\tconst links = event.result.links?.map((link) => `${link.label}: ${link.url}`) ?? [];\n\t\t\t\tconst message = [event.result.message, ...links].filter(Boolean).join(\"\\n\");\n\t\t\t\tif (event.result.status === \"error\") this.showError(message);\n\t\t\t\telse this.showStatus(message);\n\t\t\t\tthis.ui.requestRender();\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\tthis.clearStatusIndicator(\"working\");\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\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"agent_settled\":\n\t\t\t\tawait this.checkShutdownRequested();\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.facade.abortCompaction();\n\t\t\t\t};\n\t\t\t\tthis.showStatusIndicator(new CompactionStatusIndicator(this.ui, event.reason));\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\tthis.clearStatusIndicator(\"compaction\");\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(t(\"Compaction cancelled\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showStatus(t(\"Auto-compaction cancelled\"));\n\t\t\t\t\t}\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\tconst entries = this.facade.getContextEntries();\n\t\t\t\t\tif (entries[0]?.type !== \"compaction\") {\n\t\t\t\t\t\tthrow new Error(t(\"Completed compaction is missing from the session context\"));\n\t\t\t\t\t}\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t// The latest compaction is prepended for model context; append it below at its chronological position.\n\t\t\t\t\tthis.renderSessionEntries(entries.slice(1));\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),\n\t\t\t\t\t);\n\t\t\t\t\tif (event.result.usage) {\n\t\t\t\t\t\tthis.addCompactionCostNotice({\n\t\t\t\t\t\t\ttype: \"compaction_cost\",\n\t\t\t\t\t\t\tkind: \"compaction\",\n\t\t\t\t\t\t\tusage: event.result.usage,\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.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 \"compaction_skipped\": {\n\t\t\t\tthis.showStatus(t(\"Auto-compaction skipped: nothing to compact\"));\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// 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.facade.abortRetry();\n\t\t\t\t};\n\t\t\t\tthis.showStatusIndicator(\n\t\t\t\t\tnew RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs),\n\t\t\t\t);\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\tthis.clearStatusIndicator(\"retry\");\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(\n\t\t\t\t\t\tt(\"Retry failed after {count} attempts: {error}\", {\n\t\t\t\t\t\t\tcount: event.attempt,\n\t\t\t\t\t\t\terror: event.finalError || t(\"Unknown error\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_scheduled\": {\n\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\tthis.showStatusIndicator(\n\t\t\t\t\tnew RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs),\n\t\t\t\t);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_attempt_start\": {\n\t\t\t\tthis.clearStatusIndicator(\"retry\");\n\t\t\t\tif (event.source === \"branchSummary\") {\n\t\t\t\t\tthis.showStatusIndicator(new BranchSummaryStatusIndicator(this.ui));\n\t\t\t\t} else {\n\t\t\t\t\tthis.showStatusIndicator(new CompactionStatusIndicator(this.ui, event.reason));\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_finished\": {\n\t\t\t\tthis.clearStatusIndicator(\"retry\");\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/** Show a managed-tool status update in the chat. */\n\tprivate showManagedToolStatus(status: ToolStatus): void {\n\t\tif (!this.managedToolStatusStarted) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.managedToolStatusStarted = true;\n\t\t}\n\t\tconst message = status.type === \"warning\" ? t(\"Warning: {message}\", { message: status.message }) : status.message;\n\t\tconst color = status.type === \"warning\" ? \"warning\" : \"dim\";\n\t\tthis.chatContainer.addChild(new Text(theme.fg(color, message), 1, 0));\n\t\tthis.lastStatusSpacer = undefined;\n\t\tthis.lastStatusText = undefined;\n\t\tthis.ui.requestRender();\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\tshowStatus(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(theme.fg(\"dim\", 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(theme.fg(\"dim\", 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 = undefined;\n\t\t\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\trenderer,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t);\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\tthis.chatContainer.addChild(new Spacer(1));\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\tthis.outputPad,\n\t\t\t\t\t\t\t\tthis.getMarkdownTransformers(),\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(\n\t\t\t\t\t\t\ttextContent,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\t\t);\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.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\tthis.outputPad,\n\t\t\t\t\tthis.getMarkdownTransformers(),\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\t// v8 ignore next -- exhaustive over AgentMessage roles\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate renderSessionItems(\n\t\titems: readonly RenderSessionItem[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tconst renderedPendingTools = new Map<string, ToolExecutionComponent>();\n\t\t// Cache-miss notices are not persisted; re-derive them from the full entry\n\t\t// list and re-inject them after the assistant messages that paid for them.\n\t\tconst cacheMisses = this.settingsManager.getShowCacheMissNotices()\n\t\t\t? collectCacheMisses(this.facade.getEntries(), this.facade.getModelPriceSource())\n\t\t\t: new Map<AssistantMessage, CacheMiss>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const item of items) {\n\t\t\tif (isCustomSessionEntry(item)) {\n\t\t\t\t// No entry renderer source since the legacy extension surface was\n\t\t\t\t// removed; previously renderer-less entries were skipped as well.\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isCompactionCostNotice(item)) {\n\t\t\t\tthis.addCompactionCostNotice(item);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst message = item;\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\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},\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.facade.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.chatContainer.addChild(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.facade.getRetryAttempt();\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? retryAttempt === 1\n\t\t\t\t\t\t\t\t\t\t\t? t(\"Aborted after {count} retry attempt\", { count: retryAttempt })\n\t\t\t\t\t\t\t\t\t\t\t: t(\"Aborted after {count} retry attempts\", { count: retryAttempt })\n\t\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 || t(\"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\tif (message.stopReason !== \"aborted\" && message.stopReason !== \"error\") {\n\t\t\t\t\tconst miss = cacheMisses.get(message);\n\t\t\t\t\tif (miss) this.addCacheMissNotice(miss);\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\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\t/**\n\t * Render session entries to chat. Used for initial load and rebuild after compaction.\n\t * @param entries Compaction-aware session entries 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 renderSessionEntries(\n\t\tentries: SessionEntry[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tconst items = entries.flatMap((entry): RenderSessionItem[] => {\n\t\t\tif (entry.type === \"custom\") {\n\t\t\t\treturn [entry];\n\t\t\t}\n\t\t\tconst messages = sessionEntryToContextMessages(entry);\n\t\t\tif ((entry.type === \"compaction\" || entry.type === \"branch_summary\") && entry.usage && messages.length > 0) {\n\t\t\t\treturn [...messages, { type: \"compaction_cost\", kind: entry.type, usage: entry.usage }];\n\t\t\t}\n\t\t\treturn messages;\n\t\t});\n\t\tthis.renderSessionItems(items, options);\n\t}\n\n\t/**\n\t * Render billing usage for a compaction or branch summary. The notice is derived\n\t * from persisted summary usage and is not stored as a separate session entry.\n\t */\n\tprivate addCompactionCostNotice(notice: CompactionCostNotice): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\tconst { usage } = notice;\n\t\tconst tokens = usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n\t\tconst cost = usage.cost.total >= 0.01 ? ` (~$${usage.cost.total.toFixed(2)})` : \"\";\n\t\tconst label = notice.kind === \"compaction\" ? t(\"Compaction\") : t(\"Branch summary\");\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\t`${label}: ${t(\"{tokens} tokens billed{cost}\", { tokens: formatTokens(tokens), cost })}`,\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate static countDroppedThinkingBlocks(message: AssistantMessage): number {\n\t\tlet count = 0;\n\t\tfor (const diagnostic of message.diagnostics ?? []) {\n\t\t\tif (diagnostic.type !== \"anthropic_input_transformations\") continue;\n\t\t\tconst transformations = diagnostic.details?.transformations;\n\t\t\tif (!Array.isArray(transformations)) continue;\n\t\t\tcount += transformations.filter(\n\t\t\t\t(transformation) =>\n\t\t\t\t\ttypeof transformation === \"object\" &&\n\t\t\t\t\ttransformation !== null &&\n\t\t\t\t\t(transformation as Record<string, unknown>).type === \"thinking_dropped\",\n\t\t\t).length;\n\t\t}\n\t\treturn count;\n\t}\n\n\tprivate maybeShowThinkingDropNotice(message: AssistantMessage): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\tconst droppedCount = InteractiveMode.countDroppedThinkingBlocks(message);\n\t\tif (droppedCount === 0) return;\n\n\t\tlet previousDroppedCount = 0;\n\t\t// message_end reaches the UI before the current message is persisted,\n\t\t// so the branch's last assistant message is the previous response.\n\t\tconst entries = this.facade.getEntries();\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\tpreviousDroppedCount = InteractiveMode.countDroppedThinkingBlocks(entry.message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (droppedCount <= previousDroppedCount) return;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\tt(\"Anthropic dropped {count} thinking blocks (details in session)\", { count: droppedCount }),\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Show a transcript notice when a completed assistant message paid for a\n\t * significant cache miss. Only states observable facts: the miss itself,\n\t * a model switch, or an idle gap past the cache TTL.\n\t */\n\tprivate maybeShowCacheMissNotice(message: AssistantMessage): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\t// Entries don't contain `message` yet: message_end fires before persistence.\n\t\tconst miss = detectCacheMiss(this.facade.getEntries(), message, this.facade.getModelPriceSource());\n\t\tif (miss) this.addCacheMissNotice(miss);\n\t}\n\n\tprivate addCacheMissNotice(miss: CacheMiss): void {\n\t\tif (miss.missedTokens < 20_000 && miss.missedCost < 0.1) return;\n\n\t\tconst cost = miss.missedCost >= 0.01 ? ` (~$${miss.missedCost.toFixed(2)})` : \"\";\n\t\tconst reBilled = t(\"{tokens} tokens re-billed{cost}\", { tokens: formatTokens(miss.missedTokens), cost });\n\t\tlet label = t(\"Cache miss\");\n\t\tif (miss.modelChanged) {\n\t\t\tlabel = t(\"Cache miss after model switch\");\n\t\t} else if (miss.idleMs >= CACHE_TTL_MS) {\n\t\t\tlabel = t(\"Cache miss after {minutes}m idle\", { minutes: Math.round(miss.idleMs / 60_000) });\n\t\t}\n\t\tconst text = theme.fg(\"warning\", `${label}: ${reBilled}`);\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(text, 1, 0));\n\t}\n\n\trenderInitialMessages(): void {\n\t\tconst entries = this.facade.getContextEntries();\n\t\tthis.renderSessionEntries(entries, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.facade.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tthis.showStatus(\n\t\t\t\tcompactionCount === 1\n\t\t\t\t\t? t(\"Session compacted {count} time\", { count: compactionCount })\n\t\t\t\t\t: t(\"Session compacted {count} times\", { count: compactionCount }),\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\tconst queuedInput = this.pendingUserInputs.shift();\n\t\tif (queuedInput !== undefined) {\n\t\t\treturn queuedInput;\n\t\t}\n\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\tthis.renderSessionEntries(this.facade.getContextEntries());\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\tasync shutdown(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\t\t// Keep signal handlers registered until terminal cleanup has completed.\n\t\t// `signal-exit` checks the listener list during the same SIGTERM/SIGHUP\n\t\t// dispatch and re-sends the signal if only its own listeners remain.\n\n\t\tif (options?.fromSignal) {\n\t\t\t// Signal-triggered shutdown (SIGTERM/SIGHUP). Emit extension cleanup\n\t\t\t// (session_shutdown) BEFORE touching the terminal. Extension teardown\n\t\t\t// such as removing sockets does not write to the tty, so it must not be\n\t\t\t// skipped if a later terminal-restore write fails on a dead or stalled\n\t\t\t// terminal. If the terminal is gone, the restore writes below emit EIO,\n\t\t\t// which the stdout/stderr error handler turns into emergencyTerminalExit;\n\t\t\t// the render loop is already idle, so this cannot hot-spin (see #4144).\n\t\t\tawait this.runtimeFacade.dispose();\n\t\t\tthis.themeController.disableAutoSync();\n\t\t\tawait this.ui.terminal.drainInput(1000);\n\t\t\tthis.stop();\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// Interactive quit (Ctrl+D, Ctrl+C, /quit, extension shutdown()). Stop the\n\t\t// TUI before emitting shutdown events so extension UI cleanup cannot repaint\n\t\t// the final frame while the process is exiting.\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\tthis.themeController.disableAutoSync();\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tawait this.runtimeFacade.dispose();\n\n\t\tconst resumeCommand = formatResumeCommand(this.runtimeFacade);\n\t\tif (resumeCommand) {\n\t\t\tprocess.stdout.write(`${chalk.dim(t(\"To resume this session:\"))} ${resumeCommand}\\n`);\n\t\t}\n\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 * Last-resort handler for uncaught exceptions. The TUI puts stdin into raw\n\t * mode and hides the cursor; without this handler, an uncaught throw from\n\t * anywhere (e.g. an extension's async `ChildProcess.on(\"exit\")` callback)\n\t * tears down the process while leaving the terminal in raw mode with no\n\t * cursor, requiring `stty sane && reset` to recover.\n\t *\n\t * Unlike emergencyTerminalExit, the terminal is still alive here, so we\n\t * call ui.stop() to restore cooked mode, the cursor, and disable bracketed\n\t * paste / Kitty / modifyOtherKeys sequences.\n\t */\n\tprivate uncaughtCrash(error: Error): never {\n\t\tif (this.isShuttingDown) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tthis.isShuttingDown = true;\n\t\ttry {\n\t\t\tthis.unregisterSignalHandlers();\n\t\t} catch {}\n\t\ttry {\n\t\t\tkillTrackedDetachedChildren();\n\t\t} catch {}\n\t\ttry {\n\t\t\tthis.ui.stop();\n\t\t} catch {}\n\t\tconsole.error(t(\"{app} exiting due to uncaughtException:\", { app: APP_NAME }));\n\t\tconsole.error(error);\n\t\tprocess.exit(1);\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\t// SIGHUP no longer hard-exits: graceful shutdown emits session_shutdown\n\t\t\t\t// first, then attempts terminal restore. A genuinely dead terminal\n\t\t\t\t// surfaces as an EIO on the restore writes, which the stdout/stderr\n\t\t\t\t// error handler converts into emergencyTerminalExit (see #4144, #5080).\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid this.shutdown({ fromSignal: true });\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\n\t\t// Restore the terminal before the process dies on any uncaught throw.\n\t\t// Without this, an unhandled exception from extension code (or anywhere\n\t\t// in the application) leaves the terminal in raw mode with no cursor.\n\t\tconst uncaughtExceptionHandler = (error: Error) => this.uncaughtCrash(error);\n\t\tprocess.prependListener(\"uncaughtException\", uncaughtExceptionHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.off(\"uncaughtException\", uncaughtExceptionHandler));\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(t(\"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(explicitText?: string): Promise<void> {\n\t\tconst text = (explicitText ?? 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.facade.isCompacting()) {\n\t\t\tthis.queueCompactionMessage(text, \"followUp\");\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.facade.isStreaming()) {\n\t\t\t// An explicit /queue <text> argument must not touch the editor draft.\n\t\t\tif (explicitText === undefined) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t}\n\t\t\tawait this.facade.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.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\tif (explicitText === undefined) this.editor.setText(\"\");\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(t(\"No queued messages to restore\"));\n\t\t} else if (restored === 1) {\n\t\t\tthis.showStatus(t(\"Restored {count} queued message to editor\", { count: restored }));\n\t\t} else {\n\t\t\tthis.showStatus(t(\"Restored {count} queued messages to editor\", { count: restored }));\n\t\t}\n\t}\n\n\t/** /queue command host face (single-entry iron law): queues the given text for after the current run. A bare /queue cannot mirror the keybinding — the editor buffer is cleared on submit before the command runs — so it prints usage instead of silently doing nothing. */\n\thandleQueueCommand(text: string | undefined): Promise<void> {\n\t\tif (text === undefined || text.trim() === \"\") {\n\t\t\tthis.showStatus(t(\"Usage: /queue <text>\"));\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\treturn this.handleFollowUp(text);\n\t}\n\n\t/** /dequeue command host face: restore queued messages back to the editor. */\n\thandleDequeueCommand(): void {\n\t\tthis.handleDequeue();\n\t}\n\n\t/** /queue-list command host face: open the queued-message manager selector. Both queues empty is a status message, not an empty overlay. */\n\thandleQueueListCommand(): void {\n\t\tconst steering = this.facade.getSteeringMessages();\n\t\tconst followUp = this.facade.getFollowUpMessages();\n\t\tif (steering.length === 0 && followUp.length === 0) {\n\t\t\tthis.showStatus(t(\"No queued messages to manage\"));\n\t\t\treturn;\n\t\t}\n\t\tselectorsFlow.showQueueManagerSelector(this);\n\t}\n\n\t/** /editor command host face: edit the current input in an external editor. */\n\thandleEditorCommand(): Promise<void> {\n\t\treturn this.handleOpenExternalEditor();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tupdateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.facade.getState().thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.facade.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(t(\"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(t(\"Thinking level: {level}\", { level: newLevel }));\n\t\t}\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.facade.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg =\n\t\t\t\t\tthis.facade.getScopedModels().length > 0 ? t(\"Only one model in scope\") : t(\"Only one model available\");\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\"\n\t\t\t\t\t\t? ` ${t(\"(thinking: {level})\", { level: result.thinkingLevel })}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\tthis.showStatus(\n\t\t\t\t\tt(\"Switched to {model}{thinking}\", {\n\t\t\t\t\t\tmodel: result.model.name || result.model.id,\n\t\t\t\t\t\tthinking: thinkingStr,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(result.model);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\ttoggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\tsetToolsExpanded(expanded: boolean): void {\n\t\tif (expanded === this.toolOutputExpanded) return;\n\n\t\tthis.toolOutputExpanded = expanded;\n\t\tconst activeHeader = this.builtInHeader;\n\t\tif (isExpandable(activeHeader)) {\n\t\t\tactiveHeader.setExpanded(expanded);\n\t\t}\n\t\tfor (const container of [this.loadedResourcesContainer, this.chatContainer]) {\n\t\t\tfor (const child of container.children) {\n\t\t\t\tif (isExpandable(child)) {\n\t\t\t\t\tchild.setExpanded(expanded);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.showStatus(expanded ? t(\"Tool output: expanded\") : t(\"Tool output: collapsed\"));\n\t}\n\n\t/** Update rendered assistant messages without rebuilding live tool components. */\n\tprivate updateThinkingBlockVisibility(): void {\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\tchild.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\t\tthis.updateThinkingBlockVisibility();\n\t\tthis.showStatus(this.hideThinkingBlock ? t(\"Thinking blocks: hidden\") : t(\"Thinking blocks: visible\"));\n\t}\n\n\tprivate async handleOpenExternalEditor(): Promise<void> {\n\t\tconst editorCmd = this.settingsManager.getExternalEditorCommand();\n\t\tconst content = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tthis.ui.stop();\n\t\ttry {\n\t\t\tconst result = await editInExternalEditor({\n\t\t\t\tcommand: editorCmd,\n\t\t\t\tcontent,\n\t\t\t});\n\t\t\tif (result.status === \"complete\") {\n\t\t\t\tthis.editor.setText(result.content);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.ui.start();\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\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"error\", t(\"Error: {message}\", { message: errorMessage })), this.outputPad, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"warning\", t(\"Warning: {message}\", { message: warningMessage })), 1, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(release: LatestRelease): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction =\n\t\t\ttheme.fg(\"muted\", `${t(\"New version {version} is available. Run\", { version: release.version })} `) + action;\n\t\tconst changelogUrl = process.env.AGENT_FORGE_CHANGELOG_URL;\n\t\tconst changelogLine = changelogUrl\n\t\t\t? theme.fg(\"muted\", `${t(\"Changelog:\")} `) +\n\t\t\t\t(getCapabilities().hyperlinks\n\t\t\t\t\t? hyperlink(theme.fg(\"accent\", changelogUrl), changelogUrl)\n\t\t\t\t\t: theme.fg(\"accent\", changelogUrl))\n\t\t\t: theme.fg(\"muted\", t(\"Changelog URL is not configured.\"));\n\t\tconst note = release.note?.trim();\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(`${theme.bold(theme.fg(\"warning\", t(\"Update Available\")))}\\n${updateInstruction}`, 1, 0),\n\t\t);\n\t\tif (note) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Markdown(note, 1, 0, this.getMarkdownThemeWithSettings(), {\n\t\t\t\t\tcolor: (text) => theme.fg(\"muted\", text),\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new Text(changelogLine, 1, 0));\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 --extensions`);\n\t\tconst updateInstruction = theme.fg(\"muted\", `${t(\"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\", t(\"Package Updates Available\")))}\\n${updateInstruction}\\n${theme.fg(\"muted\", `${t(\"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 * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.facade.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.facade.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\tconst { steering, followUp } = this.facade.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t};\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (queue manager close path). */\n\tupdatePendingMessagesDisplay(): void {\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst { steering: steeringMessages, followUp: followUpMessages } = this.getAllQueuedMessages();\n\t\tif (steeringMessages.length > 0 || followUpMessages.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", t(\"Steering: {message}\", { message }));\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", t(\"Follow-up: {message}\", { message }));\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\t// The dequeue keybinding's shipped default was cleared (iron law):\n\t\t\t// /queue's sibling command is the discoverable entry.\n\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"app.message.dequeue\") || \"/dequeue\";\n\t\t\tconst hintText = theme.fg(\"dim\", t(\"↳ {key} to edit all queued messages\", { key: dequeueHint }));\n\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t}\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: {\n\t\tabort?: boolean;\n\t\t/** Interrupt grading (设计 子代理运行时 §4.2): false aborts the turn\n\t\t * without cancelling background agent tasks. */\n\t\tcancelAgentTasks?: boolean;\n\t\tcurrentText?: string;\n\t}): number {\n\t\tconst { steering, followUp } = this.clearAllQueues();\n\t\tconst allQueued = [...steering, ...followUp];\n\t\tconst abortOptions =\n\t\t\toptions?.abort === true\n\t\t\t\t? { ...(options.cancelAgentTasks === undefined ? {} : { cancelAgentTasks: options.cancelAgentTasks }) }\n\t\t\t\t: undefined;\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (abortOptions !== undefined) {\n\t\t\t\tvoid this.facade.abort(abortOptions);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (abortOptions !== undefined) {\n\t\t\tvoid this.facade.abort(abortOptions);\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(t(\"Queued message for after compaction\"));\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.facade.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\tqueuedMessages.length > 1\n\t\t\t\t\t? t(\"Failed to send queued messages: {error}\", {\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t})\n\t\t\t\t\t: t(\"Failed to send queued message: {error}\", {\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t}),\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.facade.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.facade.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [firstPrompt, ...rest] = queuedMessages;\n\n\t\t\t// Start a prompt when idle, or queue it into a run still finishing compaction.\n\t\t\tconst promptPromise = this.facade\n\t\t\t\t.prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\trestoreQueue(error);\n\t\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.facade.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.facade.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// Suite/thinking/model/scoped-models/user-message-fork/clone selectors are\n\t// implemented in ./interactive-selectors.ts (S5 slice 5) behind the\n\t// SelectorsHost interface; same-name delegates below keep the command\n\t// dispatch and prototype-level tests bound to these names. The selector\n\t// infrastructure (showSelector/disposeActiveSelector), the settings/tree/\n\t// session selectors, and resume stay on the mode: the settings and tree\n\t// selectors assemble from broad private UI state, and the session/resume\n\t// path is the documented session-boundary carve-out (SessionManager\n\t// manager-level writes plus per-entry display reads).\n\t// =========================================================================\n\n\tdisposeActiveSelector(): void {\n\t\tconst dispose = this.activeSelectorDispose;\n\t\tthis.activeSelectorToken = undefined;\n\t\tthis.activeSelectorDispose = undefined;\n\t\tdispose?.();\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\tshowSelector(create: (done: () => void) => { component: Component; focus: Component; dispose?: () => void }): void {\n\t\tconst token = {};\n\t\tlet dispose: (() => void) | undefined;\n\t\tconst done = () => {\n\t\t\tdispose?.();\n\t\t\tif (this.activeSelectorToken !== token) return;\n\t\t\tthis.activeSelectorToken = undefined;\n\t\t\tthis.activeSelectorDispose = undefined;\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 created = create(done);\n\t\tdispose = created.dispose;\n\t\tthis.disposeActiveSelector();\n\t\tthis.activeSelectorToken = token;\n\t\tthis.activeSelectorDispose = dispose;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(created.component);\n\t\tthis.ui.setFocus(created.focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tlet selector: SettingsSelectorComponent | undefined;\n\t\t\tconst defaultProvider = this.settingsManager.getDefaultProvider();\n\t\t\tconst defaultModelId = this.settingsManager.getDefaultModel();\n\t\t\tconst defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t(\"not set\");\n\t\t\tselector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tdefaultModel,\n\t\t\t\t\tcurrentModel: this.facade.getModel(),\n\t\t\t\t\tavailableDefaultModels: this.facade.getAvailableModels(),\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\tsteeringMode: this.facade.getSteeringMode(),\n\t\t\t\t\tfollowUpMode: this.facade.getFollowUpMode(),\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\thttpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n\t\t\t\t\tthinkingLevel: this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,\n\t\t\t\t\tavailableThinkingLevels: [...THINKING_LEVEL_OPTIONS],\n\t\t\t\t\tmodelThinkingLevels: this.settingsManager.getAllModelThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.themeController.getThemeSelection() || \"dark\",\n\t\t\t\t\tterminalTheme: this.themeController.getTerminalTheme(),\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tmermaidRenderingMode: this.settingsManager.getMermaidRenderingMode(),\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\tuiLanguage: this.settingsManager.getUiLanguage(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\tshowCacheMissNotices: this.settingsManager.getShowCacheMissNotices(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\toutputPad: this.settingsManager.getOutputPad(),\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\ttuiMode: this.ui.mode,\n\t\t\t\t\tfullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),\n\t\t\t\t\tfullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),\n\t\t\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\t\t},\n\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\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.facade.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.facade.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.host.setTransport(transport);\n\t\t\t\t\t},\n\t\t\t\t\tonHttpIdleTimeoutMsChange: (timeoutMs) => {\n\t\t\t\t\t\tthis.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n\t\t\t\t\t\tconfigureHttpDispatcher(timeoutMs);\n\t\t\t\t\t\tthis.showStatus(t(\"HTTP idle timeout: {value}\", { value: formatHttpIdleTimeoutMs(timeoutMs) }));\n\t\t\t\t\t},\n\t\t\t\t\tonModelThinkingLevelChange: (provider, modelId, level) => {\n\t\t\t\t\t\tthis.settingsManager.setModelThinkingLevel(provider, modelId, level);\n\t\t\t\t\t\t// If the override is for the current model, apply it to the session too\n\t\t\t\t\t\tconst current = this.facade.getModel();\n\t\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\t\tthis.facade.setThinkingLevel(level);\n\t\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonModelThinkingLevelRemove: (provider, modelId) => {\n\t\t\t\t\t\tthis.settingsManager.removeModelThinkingLevel(provider, modelId);\n\t\t\t\t\t\t// If the override was for the current model, revert to global default\n\t\t\t\t\t\tconst current = this.facade.getModel();\n\t\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\t\tconst globalDefault = this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t\t\t\t\t\t\tthis.facade.setThinkingLevel(globalDefault);\n\t\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeSetting) => {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeSetting);\n\t\t\t\t\t\tvoid this.themeController.setThemeSetting(themeSetting);\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => this.themeController.preview(themeName),\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\tthis.updateThinkingBlockVisibility();\n\t\t\t\t\t},\n\t\t\t\t\tonMermaidRenderingModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setMermaidRenderingMode(mode);\n\t\t\t\t\t\tthis.chatContainer.invalidate();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t\tonShowCacheMissNoticesChange: (shown) => {\n\t\t\t\t\t\tthis.settingsManager.setShowCacheMissNotices(shown);\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\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\tonUiLanguageChange: (language) => {\n\t\t\t\t\t\tthis.settingsManager.setUiLanguage(language);\n\t\t\t\t\t\tsetI18nLanguage(language);\n\t\t\t\t\t\tthis.ui.requestRender();\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\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\tonOutputPadChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setOutputPad(padding);\n\t\t\t\t\t\tthis.outputPad = padding;\n\t\t\t\t\t\tif (this.streamingComponent || this.facade.isStreaming()) {\n\t\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tchild instanceof AssistantMessageComponent ||\n\t\t\t\t\t\t\t\t\tchild instanceof CustomMessageComponent ||\n\t\t\t\t\t\t\t\t\tchild instanceof UserMessageComponent\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tchild.setOutputPad(padding);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\t\t\t\tthis.streamingComponent.setOutputPad(padding);\n\t\t\t\t\t\t\t}\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\t\t\t\t\t\tthis.rebuildChatFromMessages();\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\tif (!enabled && !this.activeStatusIndicator) {\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\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\tonTuiModeChange: (mode) => {\n\t\t\t\t\t\tif (!this.switchTuiMode(mode)) {\n\t\t\t\t\t\t\tselector?.getSettingsList().updateValue(\"tui-mode\", this.ui.mode);\n\t\t\t\t\t\t\tthis.showStatus(t(\"Close active overlays before changing TUI mode\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.settingsManager.setTuiMode(mode);\n\t\t\t\t\t\tif (!this.activeStatusIndicator) this.statusContainer.clear();\n\t\t\t\t\t\tthis.showStatus(t(\"TUI mode: {mode}\", { mode }));\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenExitOutputChange: (output) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenExitOutput(output);\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenScrollbarChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenScrollbar(mode);\n\t\t\t\t\t\tthis.applyFullscreenScrollbarSetting();\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenCopyOnSelectChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenCopyOnSelect(enabled);\n\t\t\t\t\t\tif (this.renderer instanceof TuiAltScreen) this.renderer.setCopyOnSelect(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenWheelScrollLinesChange: (lines) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenWheelScrollLines(lines);\n\t\t\t\t\t\tif (this.renderer instanceof TuiAltScreen) this.renderer.setWheelScrollLines(lines);\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\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\t/** /thinking command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\thandleThinkingCommand(searchTerm?: string): void {\n\t\tselectorsFlow.handleThinkingCommand(this, searchTerm);\n\t}\n\n\t/** Thinking level apply; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate selectThinkingLevel(level: ThinkingLevel, persist: boolean): void {\n\t\tselectorsFlow.selectThinkingLevel(this, level, persist);\n\t}\n\n\t/** Thinking level picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showThinkingSelector(): void {\n\t\tselectorsFlow.showThinkingSelector(this);\n\t}\n\n\t/**\n\t * Current session's suite id, read from the session custom entry recorded at\n\t * creation (设计 §10.1). Never inferred from settings or env; undefined when\n\t * the session carries no suite entry (e.g. resumed legacy sessions).\n\t * Internal collaboration surface; exposed for ./interactive-selectors.ts\n\t * (S5 slice 5) while the read stays on the mode (session-boundary carve-out).\n\t */\n\tgetCurrentSessionSuiteId(): string | undefined {\n\t\tconst entries = this.facade.getEntries();\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== SUITE_SESSION_ENTRY_TYPE) continue;\n\t\t\tconst suiteId = (entry.data as { suiteId?: unknown } | undefined)?.suiteId;\n\t\t\tif (typeof suiteId === \"string\" && suiteId.trim().length > 0) return suiteId;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate sessionSuiteIdCache: Map<string, string | undefined> | undefined;\n\n\t/** Host-visible for ./interactive-selectors.ts (S5 slice 5): narrow session read. */\n\tgetAvailableThinkingLevels(): ThinkingLevel[] {\n\t\treturn this.facade.getAvailableThinkingLevels();\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (S5 slice 5): narrow session read. */\n\tgetUserMessagesForForking(): Array<{ entryId: string; text: string; replySummary?: string }> {\n\t\treturn this.facade.getUserMessagesForForking();\n\t}\n\n\t/**\n\t * Bound suite id of a listed session (设计 §10.1), read from the session\n\t * file's binding entry and cached per path — the selector refilters the\n\t * list on every keystroke.\n\t */\n\tprivate readSessionSuiteId(sessionPath: string): string | undefined {\n\t\tthis.sessionSuiteIdCache ??= new Map();\n\t\tif (this.sessionSuiteIdCache.has(sessionPath)) return this.sessionSuiteIdCache.get(sessionPath);\n\t\tconst suiteId = readSessionSuiteIdFromFile(sessionPath);\n\t\tthis.sessionSuiteIdCache.set(sessionPath, suiteId);\n\t\treturn suiteId;\n\t}\n\n\t/** /suite command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\thandleSuiteCommand(suiteId?: string): void {\n\t\tselectorsFlow.handleSuiteCommand(this, suiteId);\n\t}\n\n\t/** Suite list overlay; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showSuiteSelector(availableSuites: readonly string[]): void {\n\t\tselectorsFlow.showSuiteSelector(this, availableSuites);\n\t}\n\n\t/**\n\t * Shared suite list overlay (设计 §9); implementation in\n\t * ./interactive-selectors.ts (S5 slice 5).\n\t */\n\tprivate openSuiteListSelector(callbacks: {\n\t\tavailableSuites: readonly string[];\n\t\t/** explanatory line under the title; defaults to the /suite wording */\n\t\tnote?: string;\n\t\tonSelect: (suiteId: string) => void;\n\t\tonCancel: () => void;\n\t}): void {\n\t\tselectorsFlow.openSuiteListSelector(this, callbacks);\n\t}\n\n\t/**\n\t * Interactive recovery for an unresolved startup suite id (设计 §9): pick a\n\t * suite, persist it as the project setting, then rebuild the session with\n\t * the selected suite via the same /new assembly path. Cancelling keeps the\n\t * fallback assembly the runtime started with.\n\t */\n\tprivate async showStartupSuiteSelector(pending: {\n\t\trequestedId: string;\n\t\tavailable: readonly string[];\n\t}): Promise<void> {\n\t\tconst selected = await new Promise<string | undefined>((resolve) => {\n\t\t\tthis.openSuiteListSelector({\n\t\t\t\tavailableSuites: pending.available,\n\t\t\t\tnote: t('Suite \"{id}\" was not found. The selected suite applies to the new session.', {\n\t\t\t\t\tid: pending.requestedId,\n\t\t\t\t}),\n\t\t\t\tonSelect: (suiteId) => resolve(suiteId),\n\t\t\t\tonCancel: () => resolve(undefined),\n\t\t\t});\n\t\t});\n\n\t\tif (selected === undefined) {\n\t\t\tthis.showWarning(\n\t\t\t\tt('Suite \"{id}\" was not found — continuing without a suite. Use /suite to choose one.', {\n\t\t\t\t\tid: pending.requestedId,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.settingsManager.setProjectSuite(selected);\n\t\ttry {\n\t\t\tawait this.runtimeFacade.newSession();\n\t\t\tthis.showStatus(t(\"Suite set to {id} — new session started\", { id: selected }));\n\t\t} catch (error) {\n\t\t\tawait this.handleFatalRuntimeError(t(\"Failed to create session\"), error);\n\t\t}\n\t}\n\n\t/** /model command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tasync handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tawait selectorsFlow.handleModelCommand(this, searchTerm);\n\t}\n\n\t/** Exact model lookup; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined> {\n\t\treturn selectorsFlow.findExactModelMatch(this, searchTerm);\n\t}\n\n\t/**\n\t * Update the footer's available provider count from the current snapshot without\n\t * refreshing catalogs. Host-visible for ./interactive-auth.ts (S5 slice 3).\n\t */\n\tupdateAvailableProviderCount(): void {\n\t\tconst models =\n\t\t\tthis.facade.getScopedModels().length > 0\n\t\t\t\t? this.facade.getScopedModels().map((scoped) => scoped.model)\n\t\t\t\t: this.facade.getAvailableModels();\n\t\tconst uniqueProviders = new Set(models.map((model) => model.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tasync maybeWarnAboutAnthropicSubscriptionAuth(\n\t\tmodel: Model<Api> | undefined = this.facade.getModel(),\n\t): Promise<void> {\n\t\tif (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.anthropicSubscriptionWarningShown) {\n\t\t\treturn;\n\t\t}\n\t\tif (!model || model.provider !== \"anthropic\") {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif ((await this.facade.checkProviderAuth(\"anthropic\"))?.type === \"oauth\") {\n\t\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\t\tthis.showWarning(t(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst apiKey = (await this.facade.getProviderAuth(model.provider))?.auth.apiKey;\n\t\t\tif (!isAnthropicSubscriptionAuthKey(apiKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\tthis.showWarning(t(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING));\n\t\t} catch {\n\t\t\t// Ignore auth lookup failures for warning-only checks.\n\t\t}\n\t}\n\n\t/** Model picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showModelSelector(initialSearchInput?: string): void {\n\t\tselectorsFlow.showModelSelector(this, initialSearchInput);\n\t}\n\n\t/** Scoped-models picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tshowModelsSelector(): void {\n\t\tselectorsFlow.showModelsSelector(this);\n\t}\n\n\t/** Fork picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tshowUserMessageSelector(): void {\n\t\tselectorsFlow.showUserMessageSelector(this);\n\t}\n\n\t/** /clone command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tasync handleCloneCommand(): Promise<void> {\n\t\tawait selectorsFlow.handleCloneCommand(this);\n\t}\n\n\t/**\n\t * Workflow overlay (§9 L2/L3): read-only panorama + transition log from\n\t * `workflow.state`/`workflow.transition` entries. Actions are forwarded to\n\t * the editor as reviewable text; the main agent executes them via\n\t * workflow_advance (rendering and execution stay separated).\n\t */\n\tshowWorkflowView(): void {\n\t\tconst hasSnapshot = this.facade\n\t\t\t.getEntries()\n\t\t\t.some((entry) => entry.type === \"custom\" && entry.customType === \"workflow.state\");\n\t\tif (!hasSnapshot) {\n\t\t\tthis.showStatus(t(\"No workflow in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst view = new WorkflowViewComponent({\n\t\t\t\tgetEntries: () => this.facade.getEntries(),\n\t\t\t\tmaxRows: Math.max(6, Math.floor(this.ui.terminal.rows / 2)),\n\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t});\n\t\t\tview.onClose = done;\n\t\t\tview.onForwardAction = (text) => {\n\t\t\t\tdone();\n\t\t\t\tthis.editor.setText(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tthis.showStatus(t(\"Workflow action staged — review in the editor and submit\"));\n\t\t\t};\n\t\t\treturn { component: view, focus: view, dispose: () => view.dispose() };\n\t\t});\n\t}\n\n\t/**\n\t * Subagent session browser (/agents): read-only list + detail of this\n\t * session's subagent transcripts from the D-060 §3 on-disk store — the same\n\t * parent-scoped summary source as the subagent_list model tool (only this\n\t * session's children, newest first). Detail entries load lazily per\n\t * session; a failed load renders inside the view instead of throwing.\n\t */\n\tshowAgentsView(): void {\n\t\tconst agentDir = getAgentDir();\n\t\tconst sessions = listAgentSessions({ agentDir, parentAgentSession: this.facade.getSessionId() });\n\t\tif (sessions.length === 0) {\n\t\t\tthis.showStatus(t(\"No subagent sessions in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst view = new AgentsViewComponent({\n\t\t\t\tsessions,\n\t\t\t\tloadEntries: (sessionId) => readAgentSession({ agentDir, sessionId }),\n\t\t\t\tmaxRows: Math.max(6, Math.floor(this.ui.terminal.rows / 2)),\n\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t});\n\t\t\tview.onClose = done;\n\t\t\treturn { component: view, focus: view };\n\t\t});\n\t}\n\n\tshowTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.facade.getTree();\n\t\tconst realLeafId = this.facade.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(t(\"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 === this.facade.getLeafId()) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(t(\"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.showDialogSelector(t(\"Summarize branch?\"), [\n\t\t\t\t\t\t\t\tt(\"No summary\"),\n\t\t\t\t\t\t\t\tt(\"Summarize\"),\n\t\t\t\t\t\t\t\tt(\"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 !== t(\"No summary\");\n\n\t\t\t\t\t\t\tif (summaryChoice === t(\"Summarize with custom prompt\")) {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showDialogEditor(t(\"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// The user committed to navigating: stop the active response first.\n\t\t\t\t\t// 中断分级:导航清场只停回合,不终止后台子代理(设计 §4.2)。\n\t\t\t\t\tif (this.facade.isStreaming()) {\n\t\t\t\t\t\tthis.restoreQueuedMessagesToEditor();\n\t\t\t\t\t\tawait this.facade.abort({ cancelAgentTasks: false });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and status indicator if summarizing\n\t\t\t\t\tlet showingSummaryIndicator = false;\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.facade.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\tthis.showStatusIndicator(new BranchSummaryStatusIndicator(this.ui));\n\t\t\t\t\t\tshowingSummaryIndicator = true;\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.facade.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(t(\"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(t(\"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(t(\"Navigated to selected point\"));\n\t\t\t\t\t\tvoid this.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 (showingSummaryIndicator) {\n\t\t\t\t\t\t\tthis.clearStatusIndicator(\"branchSummary\");\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.facade.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\tselector.onCopy = async (text) => {\n\t\t\t\tif (!text) {\n\t\t\t\t\tthis.showError(t(\"Selected entry has no text to copy\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait copyToClipboard(text);\n\t\t\t\t\tthis.showStatus(t(\"Copied selected message to clipboard\"));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tshowSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress, signal) => this.runtimeFacade.listSessions(onProgress, signal),\n\t\t\t\t(onProgress, signal) => this.runtimeFacade.listAllSessions(onProgress, signal),\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(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\t// 会话选择器默认只列当前方案的会话;跨方案会话仅在显式\n\t\t\t\t\t// \"show all\" 后可见(设计 §10.1)。\n\t\t\t\t\tsuiteFilter: {\n\t\t\t\t\t\tcurrentSuiteId: this.getCurrentSessionSuiteId(),\n\t\t\t\t\t\tgetSessionSuiteId: (session) => this.readSessionSuiteId(session.path),\n\t\t\t\t\t},\n\t\t\t\t},\n\n\t\t\t\tthis.runtimeFacade.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?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.clearStatusIndicator();\n\t\ttry {\n\t\t\tconst result = await this.runtimeFacade.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.showStatus(t(\"Resumed session\"));\n\t\t\tthis.detectCrossSuiteResume();\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(t(\"Resume cancelled\"));\n\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeFacade.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.showStatus(t(\"Resumed session in current cwd\"));\n\t\t\t\tthis.detectCrossSuiteResume();\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn this.handleFatalRuntimeError(t(\"Failed to resume session\"), error);\n\t\t}\n\t}\n\n\t/**\n\t * Cross-suite resume detection (设计 §10.1 最小可用版): compare the loaded\n\t * session's original suite binding with the suite resolved from the current\n\t * settings/env — the id the resumed session was actually reassembled with\n\t * (assembly happens at session creation, so reassembly is the existing\n\t * behavior). On a mismatch, record the fact for later debugging: an info\n\t * status line plus a `suite_mismatch` custom entry on the session. No\n\t * context serialization or conversion is attempted.\n\t */\n\tprivate detectCrossSuiteResume(): void {\n\t\tconst originalSuiteId = this.getCurrentSessionSuiteId();\n\t\t// Pre-suite (legacy) sessions carry no binding; nothing to compare.\n\t\tif (originalSuiteId === undefined) return;\n\t\tconst currentSuiteId = resolveSuiteId({\n\t\t\tenvSuite: process.env[SUITE_ENV_VAR],\n\t\t\tsettings: this.settingsManager,\n\t\t\tagentDir: getAgentDir(),\n\t\t});\n\t\tif (currentSuiteId === originalSuiteId) return;\n\t\tthis.showStatus(\n\t\t\tt('Cross-suite compatible mode: session created with \"{from}\", assembling with \"{to}\"', {\n\t\t\t\tfrom: originalSuiteId,\n\t\t\t\tto: currentSuiteId,\n\t\t\t}),\n\t\t);\n\t\tthis.facade.recordSuiteMismatch(originalSuiteId, currentSuiteId);\n\t}\n\n\t// =========================================================================\n\t// Login/authentication (implementation in ./interactive-auth.ts, S5 slice 3)\n\t// Host-visible narrow accessors plus same-name delegates; prototype-level\n\t// tests and the command dispatch bind to these names.\n\t// =========================================================================\n\n\t/**\n\t * Host-visible for ./interactive-auth.ts (D-048): narrow credential/provider\n\t * auth projection of the session's ModelRuntime through the stable facade.\n\t * The full runtime never crosses the host boundary (D-047 裁决 3's\n\t * credential-management semantics stay open).\n\t */\n\tgetModelAuthRuntime(): ModelAuthRuntime {\n\t\treturn this.facade.getModelAuthRuntime();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (D-048): available model snapshot. */\n\tgetAvailableModels(): readonly Model<Api>[] {\n\t\treturn this.facade.getAvailableModels();\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (D-048): narrow catalog-refresh projection. */\n\tgetModelCatalog(): ModelCatalogRuntime {\n\t\treturn this.facade.getModelCatalog();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): opaque session identity. */\n\tgetSessionIdentity(): unknown {\n\t\treturn this.session;\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tisSameSessionIdentity(identity: unknown): boolean {\n\t\treturn this.session === identity;\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): stable facade read. */\n\tgetSelectedModel(): Model<Api> | undefined {\n\t\treturn this.facade.getModel();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): stable facade write. */\n\tasync setSelectedModel(model: Model<Api>): Promise<void> {\n\t\tawait this.facade.setModel(model, { persist: true });\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tinvalidateFooter(): void {\n\t\tthis.footer.invalidate();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3); delegates to the selector area. */\n\tshowAuthSelector(\n\t\tcreate: (done: () => void) => { component: Component; focus: Component; dispose?: () => void },\n\t): void {\n\t\tthis.showSelector(create);\n\t}\n\n\t/** Login provider options; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tgetLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[] {\n\t\treturn authFlow.getLoginProviderOptions(this, authType);\n\t}\n\n\t/** Logout provider options; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync getLogoutProviderOptions(): Promise<AuthSelectorProvider[]> {\n\t\treturn authFlow.getLogoutProviderOptions(this);\n\t}\n\n\t/** Login provider lookup; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tfindLoginProviderOptions(providerRef: string): AuthSelectorProvider[] {\n\t\treturn authFlow.findLoginProviderOptions(this, providerRef);\n\t}\n\n\t/** /login command entry; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync handleLoginCommand(providerRef?: string): Promise<void> {\n\t\tawait authFlow.handleLoginCommand(this, providerRef);\n\t}\n\n\t/** Login branch by auth type; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync startProviderLogin(providerOption: AuthSelectorProvider): Promise<void> {\n\t\tawait authFlow.startProviderLogin(this, providerOption);\n\t}\n\n\t/** Auth type selector; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowLoginAuthTypeSelector(providerOptions?: AuthSelectorProvider[]): void {\n\t\tauthFlow.showLoginAuthTypeSelector(this, providerOptions);\n\t}\n\n\t/** Login provider selector; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowLoginProviderSelector(authType?: AuthSelectorProvider[\"authType\"], initialSearchInput?: string): void {\n\t\tauthFlow.showLoginProviderSelector(this, authType, initialSearchInput);\n\t}\n\n\t/** Login/logout selector entry; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tawait authFlow.showOAuthSelector(this, mode);\n\t}\n\n\t/** Post-login completion; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync completeProviderAuthentication(\n\t\tproviderId: string,\n\t\tproviderName: string,\n\t\tauthType: \"oauth\" | \"api_key\",\n\t\tpreviousModel: Model<Api> | undefined,\n\t): Promise<void> {\n\t\tawait authFlow.completeProviderAuthentication(this, providerId, providerName, authType, previousModel);\n\t}\n\n\t/** Ambient auth notice; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowAmbientAuthDialog(providerOption: AuthSelectorProvider): void {\n\t\tauthFlow.showAmbientAuthDialog(this, providerOption);\n\t}\n\n\t/** API key login dialog; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tawait authFlow.showApiKeyLoginDialog(this, providerId, providerName);\n\t}\n\n\t/** Auth select prompt; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowAuthSelect(dialog: LoginDialogComponent, prompt: Extract<AuthPrompt, { type: \"select\" }>): Promise<string> {\n\t\treturn authFlow.showAuthSelect(this, dialog, prompt);\n\t}\n\n\t/** Auth prompt plumbing; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showAuthPrompt(dialog: LoginDialogComponent, prompt: AuthPrompt): Promise<string> {\n\t\treturn authFlow.showAuthPrompt(this, dialog, prompt);\n\t}\n\n\t/** Auth event rendering; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tnotifyAuthDialog(dialog: LoginDialogComponent, event: AuthEvent): void {\n\t\tauthFlow.notifyAuthDialog(this, dialog, event);\n\t}\n\n\t/** Provider login call; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync loginProvider(dialog: LoginDialogComponent, providerId: string, method: \"api_key\" | \"oauth\"): Promise<void> {\n\t\tawait authFlow.loginProvider(this, dialog, providerId, method);\n\t}\n\n\t/** OAuth login dialog; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tawait authFlow.showLoginDialog(this, providerId, providerName);\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tasync handleReloadCommand(): Promise<void> {\n\t\tif (this.facade.isStreaming()) {\n\t\t\tthis.showWarning(t(\"Wait for the current response to finish before reloading.\"));\n\t\t\treturn;\n\t\t}\n\t\tif (this.facade.isCompacting()) {\n\t\t\tthis.showWarning(t(\"Wait for compaction to finish before reloading.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetDialogUI();\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\", t(\"Reloading keybindings, skills, prompts, themes, and context files...\")), 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\tlet chatRestoredBeforeSessionStart = false;\n\t\tlet reloadBoxDismissed = false;\n\t\tconst restoreChatBeforeSessionStart = () => {\n\t\t\tif (chatRestoredBeforeSessionStart) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tchatRestoredBeforeSessionStart = true;\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.facade.reload({ beforeSessionStart: restoreChatBeforeSessionStart });\n\t\t\trestoreChatBeforeSessionStart();\n\t\t\tthis.keybindings.reload();\n\t\t\tconst activeHeader = this.builtInHeader;\n\t\t\tif (isExpandable(activeHeader)) {\n\t\t\t\tactiveHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\t\tthis.applyRuntimeSettings();\n\t\t\tawait this.themeController.applyFromSettings();\n\t\t\tthis.setupAutocompleteProvider();\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.facade.getModelsError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(t(\"models.json error: {error}\", { error: modelsJsonError }));\n\t\t\t}\n\t\t\tthis.showStatus(t(\"Reloaded keybindings, skills, prompts, themes, and context files\"));\n\t\t\tdismissReloadBox(this.editor as Component);\n\t\t\treloadBoxDismissed = true;\n\t\t} catch (error) {\n\t\t\t// v8 ignore next -- reloadBoxDismissed 置位后 catch 前无可抛出点,恒走 dismiss 分支\n\t\t\tif (!reloadBoxDismissed) {\n\t\t\t\tdismissReloadBox(previousEditor as Component);\n\t\t\t}\n\t\t\tthis.showError(t(\"Reload failed: {error}\", { error: error instanceof Error ? error.message : String(error) }));\n\t\t}\n\t}\n\n\tasync handleExportCommand(text: string): Promise<void> {\n\t\tconst outputPath = this.getPathCommandArgument(text, \"/export\");\n\n\t\ttry {\n\t\t\tif (outputPath?.endsWith(\".jsonl\")) {\n\t\t\t\tconst filePath = this.facade.exportToJsonl(outputPath);\n\t\t\t\tthis.showStatus(t(\"Session exported to: {path}\", { path: filePath }));\n\t\t\t} else {\n\t\t\t\tconst filePath = await this.facade.exportToHtml(outputPath, {\n\t\t\t\t\tthemeName: theme.name,\n\t\t\t\t});\n\t\t\t\tthis.showStatus(t(\"Session exported to: {path}\", { path: filePath }));\n\t\t\t}\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(\n\t\t\t\tt(\"Failed to export session: {error}\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : t(\"Unknown error\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined {\n\t\tif (text === command) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!text.startsWith(`${command} `)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst argsString = text.slice(command.length + 1).trimStart();\n\t\tif (!argsString) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstChar = argsString[0];\n\t\tif (firstChar === '\"' || firstChar === \"'\") {\n\t\t\tconst closingQuoteIndex = argsString.indexOf(firstChar, 1);\n\t\t\tif (closingQuoteIndex < 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn argsString.slice(1, closingQuoteIndex);\n\t\t}\n\n\t\tconst firstWhitespaceIndex = argsString.search(/\\s/);\n\t\tif (firstWhitespaceIndex < 0) {\n\t\t\treturn argsString;\n\t\t}\n\t\treturn argsString.slice(0, firstWhitespaceIndex);\n\t}\n\n\tasync handleImportCommand(text: string): Promise<void> {\n\t\tconst inputPath = this.getPathCommandArgument(text, \"/import\");\n\t\tif (!inputPath) {\n\t\t\tthis.showError(t(\"Usage: /import <path.jsonl>\"));\n\t\t\treturn;\n\t\t}\n\n\t\tconst confirmed = await this.showDialogConfirm(\n\t\t\tt(\"Import session\"),\n\t\t\tt(\"Replace current session with {path}?\", { path: inputPath }),\n\t\t);\n\t\tif (!confirmed) {\n\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.clearStatusIndicator();\n\t\t\tconst result = await this.runtimeFacade.importFromJsonl(inputPath);\n\t\t\tif (result.cancelled) {\n\t\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(t(\"Session imported from: {path}\", { path: inputPath }));\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(t(\"Import cancelled\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeFacade.importFromJsonl(inputPath, selectedCwd);\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showStatus(t(\"Session imported from: {path}\", { path: inputPath }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (error instanceof SessionImportFileNotFoundError) {\n\t\t\t\tthis.showError(t(\"Failed to import session: {error}\", { error: error.message }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.handleFatalRuntimeError(t(\"Failed to import session\"), error);\n\t\t}\n\t}\n\n\tasync handleCopyCommand(options: { flashConfirmation?: boolean; preferSelection?: boolean } = {}): Promise<void> {\n\t\tif (\n\t\t\toptions.preferSelection &&\n\t\t\tthis.ui instanceof TuiAltScreen &&\n\t\t\t!this.ui.getCopyOnSelect() &&\n\t\t\tthis.ui.hasActiveSelection()\n\t\t) {\n\t\t\tawait this.ui.copyActiveSelectionToClipboard();\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = this.facade.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(t(\"No agent messages to copy yet.\"));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait copyToClipboard(text);\n\t\t\tif (options.flashConfirmation && this.ui instanceof TuiAltScreen) {\n\t\t\t\tthis.ui.flash(t(\"Copied!\"));\n\t\t\t} else {\n\t\t\t\tthis.showStatus(t(\"Copied last agent message to clipboard\"));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\thandleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.facade.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(theme.fg(\"dim\", t(\"Session name: {name}\", { name: currentName })), 1, 0),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.showWarning(t(\"Usage: /name <name>\"));\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.facade.setSessionName(name);\n\t\tconst sessionName = this.facade.getSessionName();\n\t\tif (sessionName !== name) {\n\t\t\tthis.showWarning(\n\t\t\t\tt(\"Session name was normalized from {from} to {to}\", {\n\t\t\t\t\tfrom: JSON.stringify(name),\n\t\t\t\t\tto: JSON.stringify(sessionName),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"dim\", t(\"Session name set: {name}\", { name: sessionName ?? name })), 1, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * 中断分级(设计 子代理运行时 §4.2,2026-10-02):/stop-agents 的唯一执行\n\t * 面——终止全部后台子代理(不触当前回合)。Esc 从不做这件事。\n\t */\n\thandleStopAgentsCommand(): void {\n\t\tconst active = this.facade.getActiveAgentTaskCount();\n\t\tif (active === 0) {\n\t\t\tthis.showStatus(t(\"No background subagents running\"));\n\t\t\treturn;\n\t\t}\n\t\tthis.facade.abortAgentTasks();\n\t\tthis.showStatus(\n\t\t\tactive === 1\n\t\t\t\t? t(\"Terminated {count} background subagent\", { count: active })\n\t\t\t\t: t(\"Terminated {count} background subagents\", { count: active }),\n\t\t);\n\t}\n\n\thandleSessionCommand(): void {\n\t\tconst stats = this.facade.getSessionStats();\n\t\tconst sessionName = this.facade.getSessionName();\n\t\tconst entries = this.facade.getEntries();\n\t\tconst cacheWaste = computeCacheWaste(entries, this.facade.getModelPriceSource());\n\n\t\t// Cost/token totals per provider/model actually used (e.g. OpenRouter `auto`\n\t\t// resolves to a concrete responseModel). Usage without model attribution is\n\t\t// grouped separately so the breakdown reconciles with the session total.\n\t\tconst usageBreakdown = getUsageCostBreakdown(entries);\n\n\t\tlet info = `${theme.bold(t(\"Session Info\"))}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", t(\"Name:\"))} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", t(\"File:\"))} ${stats.sessionFile ?? t(\"In-memory\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"ID:\"))} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(t(\"Messages\"))}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} ${stats.totalMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"User:\"))} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Assistant:\"))} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Tools:\"))} ${t(\"{calls} calls, {results} results\", {\n\t\t\tcalls: stats.toolCalls,\n\t\t\tresults: stats.toolResults,\n\t\t})}\\n\\n`;\n\t\tinfo += `${theme.bold(t(\"Tokens\"))}\\n`;\n\t\t// \"Input\" is the full prompt volume. With cache activity, split it into\n\t\t// cached (served from cache) vs uncached (everything else) - the only\n\t\t// provider-independent split. Cache writes, where reported, are a detail\n\t\t// of the uncached portion.\n\t\tconst { input, cacheRead, cacheWrite } = stats.tokens;\n\t\tconst promptTokens = input + cacheRead + cacheWrite;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Input:\"))} ${promptTokens.toLocaleString()}\\n`;\n\t\tif (promptTokens > 0 && (cacheRead > 0 || cacheWrite > 0)) {\n\t\t\tconst hitRate = theme.fg(\"dim\", `(${((cacheRead / promptTokens) * 100).toFixed(1)}%)`);\n\t\t\tinfo += ` ${theme.fg(\"dim\", t(\"Cached:\"))} ${cacheRead.toLocaleString()} ${hitRate}\\n`;\n\t\t\tconst written =\n\t\t\t\tcacheWrite > 0\n\t\t\t\t\t? ` ${theme.fg(\"dim\", t(\"({count} written to cache)\", { count: cacheWrite.toLocaleString() }))}`\n\t\t\t\t\t: \"\";\n\t\t\tinfo += ` ${theme.fg(\"dim\", t(\"Uncached:\"))} ${(input + cacheWrite).toLocaleString()}${written}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", t(\"Output:\"))} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\t// 双维度统计(用户裁决 2026-09-25):总计之外按供应商/模型分桶——缓存读/写、\n\t\t// 命中率、费用逐桶可见。此前该拆分门控在 cost>0 且多桶才渲染,单价为 0 的\n\t\t// 自定义供应商(如自建代理)永远看不到。\n\t\tif (usageBreakdown.length > 0) {\n\t\t\tinfo += `\\n${theme.bold(t(\"By Provider/Model\"))}\\n`;\n\t\t\tfor (const entry of usageBreakdown) {\n\t\t\t\tconst bucket = entry.totals;\n\t\t\t\tconst promptBucket = bucket.input + bucket.cacheRead + bucket.cacheWrite;\n\t\t\t\tlet line = ` ${theme.bold(entry.key)}`;\n\t\t\t\tif (promptBucket > 0) {\n\t\t\t\t\tline += `\\n ${theme.fg(\"dim\", t(\"Input:\"))} ${promptBucket.toLocaleString()}`;\n\t\t\t\t\tif (bucket.cacheRead > 0 || bucket.cacheWrite > 0) {\n\t\t\t\t\t\tconst rate = promptBucket > 0 ? ((bucket.cacheRead / promptBucket) * 100).toFixed(1) : \"0.0\";\n\t\t\t\t\t\tline += ` ${theme.fg(\"dim\", t(\"(cache {rate}%, W {written})\", { rate, written: bucket.cacheWrite.toLocaleString() }))}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (bucket.output > 0) line += `\\n ${theme.fg(\"dim\", t(\"Output:\"))} ${bucket.output.toLocaleString()}`;\n\t\t\t\tif (entry.cost > 0) line += ` ${theme.fg(\"dim\", `$${entry.cost.toFixed(3)}`)}`;\n\t\t\t\tinfo += `${line}\\n`;\n\t\t\t}\n\t\t}\n\n\t\tif (stats.cost > 0 || cacheWaste.missedTokens > 0) {\n\t\t\tinfo += `\\n${theme.bold(t(\"Cost\"))}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} $${stats.cost.toFixed(3)}`;\n\t\t\tif (usageBreakdown.length > 1) {\n\t\t\t\tfor (const entry of usageBreakdown) {\n\t\t\t\t\tinfo += `\\n ${theme.fg(\"dim\", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${theme.fg(\"dim\", t(\"({tokens} tokens)\", { tokens: formatTokens(entry.tokens) }))}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (cacheWaste.missedTokens > 0) {\n\t\t\t\tconst missLabel =\n\t\t\t\t\tcacheWaste.missCount === 1\n\t\t\t\t\t\t? t(\"{count} miss\", { count: cacheWaste.missCount })\n\t\t\t\t\t\t: t(\"{count} misses\", { count: cacheWaste.missCount });\n\t\t\t\tconst detail = t(\"{tokens} tokens, {misses}\", {\n\t\t\t\t\ttokens: cacheWaste.missedTokens.toLocaleString(),\n\t\t\t\t\tmisses: missLabel,\n\t\t\t\t});\n\t\t\t\tinfo +=\n\t\t\t\t\tcacheWaste.missedCost >= 0.0001\n\t\t\t\t\t\t? `\\n${theme.fg(\"dim\", t(\"Cache Re-billed:\"))} $${cacheWaste.missedCost.toFixed(3)} ${theme.fg(\"dim\", `(${detail})`)}`\n\t\t\t\t\t\t: `\\n${theme.fg(\"dim\", t(\"Cache Re-billed:\"))} ${detail}`;\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleMetricsCommand(turnsArg: string | undefined): void {\n\t\tconst provider = this.options.getMetrics;\n\t\tif (!provider) {\n\t\t\tthis.showWarning(t(\"Metrics are not available: the observability plugin is not mounted in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet windowTurns: number | undefined;\n\t\tif (turnsArg !== undefined) {\n\t\t\tconst parsed = Number.parseInt(turnsArg, 10);\n\t\t\tif (!Number.isSafeInteger(parsed) || parsed < 1) {\n\t\t\t\tthis.showWarning(t(\"Invalid turns: {turns}. Usage: /metrics [turns]\", { turns: turnsArg }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindowTurns = parsed;\n\t\t}\n\n\t\tlet snapshot: MetricsSnapshotV1;\n\t\ttry {\n\t\t\tconst result = provider({ windowTurns });\n\t\t\tif (result === undefined) {\n\t\t\t\tthis.showWarning(t(\"Metrics are not available: the observability plugin is not mounted in this session\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsnapshot = result;\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(formatMetricsSnapshot(snapshot), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.map((e) => normalizeChangelogLinks(e.content, e))\n\t\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: t(\"No changelog entries found.\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"What's New\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppKeybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: Keybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\thandleHelpCommand(): void {\n\t\tconst section = (title: string, rows: Array<{ name: string; hint?: string; description?: string }>) => {\n\t\t\tif (rows.length === 0) return \"\";\n\t\t\tlet table = `\\n**${title}**\\n| ${t(\"Command\")} | ${t(\"Description\")} |\\n|---------|-------------|\\n`;\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst command = row.hint ? `\\`/${row.name} ${row.hint}\\`` : `\\`/${row.name}\\``;\n\t\t\t\ttable += `| ${command} | ${row.description ?? \"\"} |\\n`;\n\t\t\t}\n\t\t\treturn table;\n\t\t};\n\n\t\tconst builtinRows = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\thint: command.argumentHint,\n\t\t\tdescription: command.description,\n\t\t}));\n\t\tconst promptRows = this.facade.getPromptTemplates().map((template) => ({\n\t\t\tname: template.name,\n\t\t\thint: template.argumentHint,\n\t\t\tdescription: template.description,\n\t\t}));\n\t\tconst skillRows = this.facade.getSkills().skills.map((skill) => ({\n\t\t\tname: `skill:${skill.name}`,\n\t\t\tdescription: skill.description,\n\t\t}));\n\n\t\tconst help =\n\t\t\tsection(t(\"Built-in commands\"), builtinRows) +\n\t\t\tsection(t(\"Prompt templates\"), promptRows) +\n\t\t\tsection(t(\"Skills\"), skillRows) +\n\t\t\t`\\n${t(\"Type `/` for autocomplete. Use `/hotkeys` for keyboard shortcuts.\")}`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"Available Commands\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Markdown(help.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorUp = this.getEditorKeyDisplay(\"tui.editor.cursorUp\");\n\t\tconst cursorDown = this.getEditorKeyDisplay(\"tui.editor.cursorDown\");\n\t\tconst cursorLeft = this.getEditorKeyDisplay(\"tui.editor.cursorLeft\");\n\t\tconst cursorRight = this.getEditorKeyDisplay(\"tui.editor.cursorRight\");\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"tui.editor.cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"tui.editor.cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"tui.editor.cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"tui.editor.cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"tui.editor.jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"tui.editor.jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"tui.editor.pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"tui.editor.pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"tui.input.submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"tui.input.newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"tui.editor.deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"tui.editor.deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"tui.editor.deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"tui.editor.deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"tui.editor.yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"tui.editor.yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"tui.editor.undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tui.input.tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"app.interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"app.clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"app.exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"app.suspend\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"app.thinking.cycle\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"app.model.cycleForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"app.model.select\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"app.tools.expand\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"app.thinking.toggle\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"app.editor.external\");\n\t\tconst cycleModelBackward = this.getAppKeyDisplay(\"app.model.cycleBackward\");\n\t\tconst copyMessage = this.getAppKeyDisplay(\"app.message.copy\");\n\t\tconst followUp = this.getAppKeyDisplay(\"app.message.followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"app.message.dequeue\");\n\t\tconst pasteImage = this.getAppKeyDisplay(\"app.clipboard.pasteImage\");\n\t\t// Iron law (2026-10-01): these shipped defaults were cleared in favor of\n\t\t// the /model command; the row only appears when a user re-configures a key.\n\t\tconst selectModelRow = selectModel ? `| \\`${selectModel}\\` | ${t(\"Open model selector\")} |\\n` : \"\";\n\t\t// Iron law (2026-10-02 复审): ctrl+g/ctrl+x stay bound only for the\n\t\t// components without a command channel — the main editor ignores them\n\t\t// (/editor and /copy are its single entries), so the rows say where\n\t\t// each key actually acts.\n\t\tconst copyMessageRow = copyMessage ? `| \\`${copyMessage}\\` | ${t(\"Copy selection in /tree\")} |\\n` : \"\";\n\t\tconst externalEditorRow = externalEditor\n\t\t\t? `| \\`${externalEditor}\\` | ${t(\"External editor (inside dialog inputs)\")} |\\n`\n\t\t\t: \"\";\n\t\t// Iron law (2026-10-01): the message queue is the /queue and /dequeue\n\t\t// commands' feature; rows only appear when a user re-configures a key.\n\t\tconst followUpRow = followUp ? `| \\`${followUp}\\` | ${t(\"Queue follow-up message\")} |\\n` : \"\";\n\t\tconst dequeueRow = dequeue ? `| \\`${dequeue}\\` | ${t(\"Restore queued messages\")} |\\n` : \"\";\n\t\tconst cycleThinkingRow = cycleThinkingLevel\n\t\t\t? `| \\`${cycleThinkingLevel}\\` | ${t(\"Cycle thinking level\")} |\\n`\n\t\t\t: \"\";\n\t\tconst cycleModelsRow =\n\t\t\tcycleModelForward || cycleModelBackward\n\t\t\t\t? `| \\`${cycleModelForward}\\` / \\`${cycleModelBackward}\\` | ${t(\"Cycle models\")} |\\n`\n\t\t\t\t: \"\";\n\t\t// Suspend has no default key on native Windows; hide the row there.\n\t\tconst suspendRow = suspend ? `| \\`${suspend}\\` | ${t(\"Suspend to background\")} |\\n` : \"\";\n\n\t\tconst hotkeys = `\n**${t(\"Navigation\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${cursorUp}\\` / \\`${cursorDown}\\` / \\`${cursorLeft}\\` / \\`${cursorRight}\\` | ${t(\"Move cursor / browse history\")} |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | ${t(\"Move by word\")} |\n| \\`${cursorLineStart}\\` | ${t(\"Start of line\")} |\n| \\`${cursorLineEnd}\\` | ${t(\"End of line\")} |\n| \\`${jumpForward}\\` | ${t(\"Jump forward to character\")} |\n| \\`${jumpBackward}\\` | ${t(\"Jump backward to character\")} |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | ${t(\"Scroll by page\")} |\n\n**${t(\"Editing\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${submit}\\` | ${t(\"Send message\")} |\n| \\`${newLine}\\` | ${process.platform === \"win32\" ? t(\"New line (Ctrl+Enter on Windows Terminal)\") : t(\"New line\")} |\n| \\`${deleteWordBackward}\\` | ${t(\"Delete word backwards\")} |\n| \\`${deleteWordForward}\\` | ${t(\"Delete word forwards\")} |\n| \\`${deleteToLineStart}\\` | ${t(\"Delete to start of line\")} |\n| \\`${deleteToLineEnd}\\` | ${t(\"Delete to end of line\")} |\n| \\`${yank}\\` | ${t(\"Paste the most-recently-deleted text\")} |\n| \\`${yankPop}\\` | ${t(\"Cycle through the deleted text after pasting\")} |\n| \\`${undo}\\` | ${t(\"Undo\")} |\n\n**${t(\"Other\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${tab}\\` | ${t(\"Path completion / accept autocomplete\")} |\n| \\`${interrupt}\\` | ${t(\"Cancel autocomplete / abort streaming\")} |\n| \\`${clear}\\` | ${t(\"Clear editor (first) / exit (second)\")} |\n| \\`${exit}\\` | ${t(\"Exit (when editor is empty)\")} |\n${suspendRow}${cycleThinkingRow}${cycleModelsRow}${selectModelRow}| \\`${expandTools}\\` | ${t(\"Toggle tool output expansion\")} |\n| \\`${toggleThinking}\\` | ${t(\"Toggle thinking block visibility\")} |\n${externalEditorRow}${copyMessageRow}${followUpRow}${dequeueRow}\n| \\`${pasteImage}\\` | ${t(\"Paste image or text from clipboard\")} |\n| \\`/\\` | ${t(\"Slash commands\")} |\n| \\`!\\` | ${t(\"Run bash command\")} |\n| \\`!!\\` | ${t(\"Run bash command (excluded from context)\")} |\n`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"Keyboard Shortcuts\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync handleClearCommand(): Promise<void> {\n\t\tthis.clearStatusIndicator();\n\t\ttry {\n\t\t\tconst result = await this.runtimeFacade.newSession();\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", t(\"✓ New session started\"))}`, 1, 1));\n\t\t\tthis.ui.requestRender();\n\t\t} catch (error: unknown) {\n\t\t\tawait this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t}\n\t}\n\n\thandleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\tt(\"Debug output at {date}\", { date: new Date().toISOString() }),\n\t\t\tt(\"Terminal: {columns}x{rows}\", { columns: width, rows: height }),\n\t\t\tt(\"Total lines: {count}\", { count: allLines.length }),\n\t\t\t\"\",\n\t\t\tt(\"=== All rendered lines with visible widths ===\"),\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\tt(\"=== Agent messages (JSONL) ===\"),\n\t\t\t...this.facade\n\t\t\t\t.getSessionAPI()\n\t\t\t\t.getMessages()\n\t\t\t\t.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", t(\"✓ Debug log written\"))}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\t// Dispatch the user.bash lifecycle facts, then execute locally.\n\t\tthis.facade.emitUserBash(excludeFromContext);\n\n\t\t// Normal execution path\n\t\tconst isDeferred = this.facade.isStreaming();\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.facade.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(\n\t\t\t\tt(\"Bash command failed: {error}\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : t(\"Unknown error\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tthis.clearStatusIndicator();\n\n\t\ttry {\n\t\t\tawait this.facade.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(fullscreenExitOutput = this.settingsManager.getFullscreenExitOutput()): void {\n\t\tthis.disposeActiveSelector();\n\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\tthis.ui.terminal.setProgress(false);\n\t\t}\n\t\tthis.clearStatusIndicator();\n\t\tthis.themeController.disableAutoSync();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tthis.failoverTicker?.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.stopInteractiveTui(fullscreenExitOutput);\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t\tthis.unregisterSignalHandlers();\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, ThinkingLevel } from \"@agent-forge/agent-core\";\nimport { type AuthEvent, type AuthPrompt, contentText } from \"@agent-forge/ai\";\nimport type { Api, AssistantMessage, ImageContent, Message, Model, Usage } from \"@agent-forge/ai/compat\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorComponent,\n\tKeybinding,\n\tMarkdownTheme,\n\tSlashCommand,\n\tTerminal,\n\tTuiMainScreenRenderState,\n\tWheelScrollLines,\n} from \"@agent-forge/tui\";\nimport * as TuiLayouts from \"@agent-forge/tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tgetCapabilities,\n\thyperlink,\n\tMarkdown,\n\tProcessTerminal,\n\tSpacer,\n\tsetCapabilityOverrides,\n\tsetKeybindings,\n\tText,\n\tTruncatedText,\n\ttype TUI,\n\tTuiAltScreen,\n\tTuiMainScreen,\n\tvisibleWidth,\n} from \"@agent-forge/tui\";\nimport chalk from \"chalk\";\nimport { spawn } from \"child_process\";\nimport { APP_NAME, APP_TITLE, getAgentDir, getDebugLogPath, VERSION } from \"../../config.ts\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.ts\";\nimport type { ReplacedSessionContext } from \"../../core/agent-session-runtime.ts\";\nimport { type AgentSessionRuntime, SessionImportFileNotFoundError } from \"../../core/agent-session-runtime.ts\";\nimport type { AgentSessionRuntimeDiagnostic } from \"../../core/agent-session-services.ts\";\nimport { listAgentSessions, readAgentSession } from \"../../core/agent-session-store.ts\";\nimport {\n\tCACHE_TTL_MS,\n\ttype CacheMiss,\n\tcollectCacheMisses,\n\tcomputeCacheWaste,\n\tdetectCacheMiss,\n} from \"../../core/cache-stats.ts\";\nimport { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from \"../../core/defaults.ts\";\nimport type { InteractionDialogOptions, InteractionHostV1 } from \"../../core/extensions/index.ts\";\nimport type { ModelAuthRuntime } from \"../../core/facade/coding-agent-facade.ts\";\nimport {\n\ttype CodingAgentFacadeV1,\n\ttype CodingAgentRuntimeFacadeV1,\n\tcreateCodingAgentFacade,\n\tcreateCodingAgentRuntimeFacade,\n} from \"../../core/facade/index.ts\";\nimport { FooterDataProvider } from \"../../core/footer-data-provider.ts\";\nimport { configureHttpDispatcher, formatHttpIdleTimeoutMs } from \"../../core/http-dispatcher.ts\";\nimport { setI18nLanguage, t } from \"../../core/i18n/index.ts\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.ts\";\nimport { createCompactionSummaryMessage } from \"../../core/messages.ts\";\nimport { DefaultPackageManager } from \"../../core/package-manager.ts\";\nimport type { ResourceDiagnostic, ThemeMetaV1 } from \"../../core/resource-loader.ts\";\nimport { runCleanSessions } from \"../../core/session-cleanup.ts\";\nimport { formatMissingSessionCwdPrompt, MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport { type SessionEntry, SessionManager, sessionEntryToContextMessages } from \"../../core/session-manager.ts\";\nimport type { FullscreenExitOutput, SettingsManager, TuiMode } from \"../../core/settings-manager.ts\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.ts\";\nimport type { SourceInfo } from \"../../core/source-info.ts\";\nimport type { TruncationResult } from \"../../core/tools/truncate.ts\";\nimport { getUsageCostBreakdown } from \"../../core/usage-totals.ts\";\nimport type { MetricsSnapshotV1, ObservabilityMetricsOptions } from \"../../plugins/observability-types.ts\";\nimport { listSuiteIds, resolveSuiteId, SUITE_ENV_VAR, SUITE_SESSION_ENTRY_TYPE } from \"../../profiles/suite-loader.ts\";\nimport { getChangelogPath, getNewEntries, normalizeChangelogLinks, parseChangelog } from \"../../utils/changelog.ts\";\nimport { copyToClipboard, readClipboardText } from \"../../utils/clipboard.ts\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.ts\";\nimport { parseGitUrl } from \"../../utils/git.ts\";\nimport { openBrowser } from \"../../utils/open-browser.ts\";\nimport { killTrackedDetachedChildren } from \"../../utils/shell.ts\";\nimport { loadAllHighlightLanguages } from \"../../utils/syntax-highlight.ts\";\nimport { ensureTool, type ToolStatus } from \"../../utils/tools-manager.ts\";\nimport { checkForNewVersion, type LatestRelease } from \"../../utils/version-check.ts\";\nimport { AgentsViewComponent } from \"./components/agents-view.ts\";\nimport { ArminComponent } from \"./components/armin.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport { BashExecutionComponent } from \"./components/bash-execution.ts\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.ts\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.ts\";\nimport { CustomEditor } from \"./components/custom-editor.ts\";\nimport { CustomMessageComponent } from \"./components/custom-message.ts\";\nimport { DaxnutsComponent } from \"./components/daxnuts.ts\";\nimport type { DialogEditorComponent } from \"./components/dialog-editor.ts\";\nimport type { DialogInputComponent } from \"./components/dialog-input.ts\";\nimport type { DialogSelectorComponent } from \"./components/dialog-selector.ts\";\nimport { DynamicBorder } from \"./components/dynamic-border.ts\";\nimport { FooterComponent, formatTokens } from \"./components/footer.ts\";\nimport { formatKeyText, keyDisplayText, keyHint, keyText, rawKeyHint } from \"./components/keybinding-hints.ts\";\nimport type { LoginDialogComponent } from \"./components/login-dialog.ts\";\nimport { createMermaidMarkdownTransformer } from \"./components/mermaid.ts\";\nimport type { AuthSelectorProvider } from \"./components/oauth-selector.ts\";\nimport type { MarkdownTransformer } from \"./components/render-types.ts\";\nimport { readSessionSuiteIdFromFile, SessionSelectorComponent } from \"./components/session-selector.ts\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.ts\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.ts\";\nimport {\n\tBranchSummaryStatusIndicator,\n\tCompactionStatusIndicator,\n\tIdleStatus,\n\tRetryStatusIndicator,\n\ttype StatusIndicator,\n\ttype WorkingIndicatorOptions,\n\tWorkingStatusIndicator,\n} from \"./components/status-indicator.ts\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport { ToolRunGroupComponent } from \"./components/tool-run-group.ts\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.ts\";\nimport { UserMessageComponent } from \"./components/user-message.ts\";\nimport { WorkflowViewComponent } from \"./components/workflow-view.ts\";\nimport { editInExternalEditor } from \"./external-editor.ts\";\nimport * as authFlow from \"./interactive-auth.ts\";\nimport {\n\tCOMMAND_DISPATCH_ENTRIES,\n\tfilterCapabilityCommandsForCompletions,\n\tmatchCommandDispatchEntry,\n} from \"./interactive-commands.ts\";\nimport {\n\tcreateInteractionHostV1,\n\ttype DialogUiHost,\n\ttype Expandable,\n\thideDialogEditor,\n\thideDialogInput,\n\thideDialogSelector,\n\tisExpandable,\n\tshowDialogConfirm,\n\tshowDialogEditor,\n\tshowDialogInput,\n\tshowDialogNotify,\n\tshowDialogSelector,\n} from \"./interactive-dialog-ui.ts\";\nimport {\n\tbuildScopeGroups,\n\tfindSourceInfoForPath,\n\tformatContextPath,\n\tformatDiagnostics,\n\tformatDisplayPath,\n\tformatMetricsSnapshot,\n\tformatPathWithSource,\n\tformatScopeGroups,\n\tgetCompactPackageSourceLabel,\n\tgetCompactPathLabel,\n\tgetDisplaySourceInfo,\n\tgetScopeGroup,\n\tgetShortPath,\n\tisPackageSource,\n} from \"./interactive-format.ts\";\nimport {\n\tcreateFuzzyAutocompleteItems,\n\tformatLoginProviderCompletionDescription,\n\tgetLoginProviderCompletionOptions,\n\tgetLoginProviderSearchText,\n\tisAnthropicSubscriptionAuthKey,\n\tisDeadTerminalError,\n\tquoteIfNeeded,\n} from \"./interactive-helpers.ts\";\nimport * as selectorsFlow from \"./interactive-selectors.ts\";\nimport { type ModelCatalogRuntime, refreshModelCatalogs } from \"./model-catalog-refresh.ts\";\nimport { getModelSearchText } from \"./model-search.ts\";\nimport {\n\tgetAvailableThemes,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tloadThemeFromPath,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tstopThemeWatcher,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.ts\";\nimport { InteractiveThemeController } from \"./theme/theme-controller.ts\";\n\n// Re-exported for existing consumers of the interactive mode module; the\n// implementation moved to ./interactive-dialog-ui.ts with the extension UI block.\nexport { mapLegacyDialogResultToOutcome } from \"./interactive-dialog-ui.ts\";\n\n/**\n * Rebuilds real Theme instances from the resource loader's ThemeMetaV1\n * projection for the theme registry (B-S2b v1). Registration points\n * (constructor, runtime session start, reload) need loadable instances —\n * setRegisteredThemes stores what it is given and getThemeByName returns the\n * registered instance first — while the loader surface now projects only\n * metadata. Re-loading is synchronous and deterministic per sourcePath;\n * theme names come from the same JSON the loader parsed, so meta.name ===\n * Theme.name and the registry keeps its own name-filter/dedupe semantics.\n *\n * Contract: a meta without a sourcePath (or one whose file no longer parses)\n * throws — themesOverride host inputs must always carry a loadable\n * sourcePath. This adds one extra parse per theme at registration time\n * (constructor / session start / reload, not per turn).\n */\nexport function buildRegisteredThemes(themes: readonly ThemeMetaV1[]): Theme[] {\n\treturn themes.map((meta) => loadThemeFromPath(meta.sourcePath));\n}\n\nclass ExpandableText extends Text implements Expandable {\n\tprivate readonly getCollapsedText: () => string;\n\tprivate readonly getExpandedText: () => string;\n\n\tconstructor(\n\t\tgetCollapsedText: () => string,\n\t\tgetExpandedText: () => string,\n\t\texpanded = false,\n\t\tpaddingX = 0,\n\t\tpaddingY = 0,\n\t) {\n\t\tsuper(expanded ? getExpandedText() : getCollapsedText(), paddingX, paddingY);\n\t\tthis.getCollapsedText = getCollapsedText;\n\t\tthis.getExpandedText = getExpandedText;\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.setText(expanded ? this.getExpandedText() : this.getCollapsedText());\n\t}\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\";\n};\n\ntype CompactionCostNotice = {\n\ttype: \"compaction_cost\";\n\tkind: \"compaction\" | \"branch_summary\";\n\tusage: Usage;\n};\n\ntype RenderSessionItem = AgentMessage | Extract<SessionEntry, { type: \"custom\" }> | CompactionCostNotice;\n\nfunction isCustomSessionEntry(item: RenderSessionItem): item is Extract<SessionEntry, { type: \"custom\" }> {\n\treturn \"type\" in item && item.type === \"custom\";\n}\n\nfunction isCompactionCostNotice(item: RenderSessionItem): item is CompactionCostNotice {\n\treturn \"type\" in item && item.type === \"compaction_cost\";\n}\n\n// Empty-reply auto-continuation (#5, print-mode parity): sent at most once per\n// submitted turn when the turn ends with an empty assistant reply and the\n// model was neither aborted nor errored. The one-shot budget prevents loops.\nconst EMPTY_REPLY_RETRY_PROMPT = \"Your previous reply was empty. Continue the user's task now.\";\n\nconst ANTHROPIC_SUBSCRIPTION_AUTH_WARNING =\n\t\"Anthropic subscription auth is active. Third-party harness usage draws from extra usage and is billed per token, not your Claude plan limits. Manage extra usage at https://claude.ai/settings/usage. Disable this warning in /settings.\";\n\n/**\n * Session read view consumed by formatResumeCommand: the subset of\n * session-manager reads the command needs. Satisfied by the runtime facade\n * (structural) and by real SessionManager instances.\n */\ninterface ResumeCommandSessionReads {\n\tisPersisted(): boolean;\n\tgetSessionFile(): string | undefined;\n\tusesDefaultSessionDir(): boolean;\n\tgetSessionDir(): string;\n\tgetSessionId(): string;\n}\n\nexport function formatResumeCommand(session: ResumeCommandSessionReads): string | undefined {\n\tif (!process.stdout.isTTY) return undefined;\n\tif (!session.isPersisted()) return undefined;\n\n\tconst sessionFile = session.getSessionFile();\n\tif (!sessionFile || !fs.existsSync(sessionFile)) return undefined;\n\n\tconst args = [APP_NAME];\n\tif (!session.usesDefaultSessionDir()) {\n\t\targs.push(\"--session-dir\", quoteIfNeeded(session.getSessionDir()));\n\t}\n\targs.push(\"--session\", session.getSessionId());\n\treturn args.join(\" \");\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/** Diagnostics collected before the interactive TUI was initialized. */\n\tstartupDiagnostics?: AgentSessionRuntimeDiagnostic[];\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\t/** TUI layout mode. */\n\ttuiMode?: TuiMode;\n\t/** Initial interactive theme setting for this invocation. */\n\tinitialThemeSetting?: string;\n\t/**\n\t * Unresolved suite id at startup (设计 §9): the requested `--suite`/env/\n\t * settings id could not be resolved before the TUI opened. Interactive mode\n\t * shows a suite selector first; the selected id is written to project\n\t * settings and a new session is assembled with it. print/RPC keep the\n\t * structured exit-1 in main.ts. The placeholder session for the failed id\n\t * is fully created (plugin session_start hooks fire once) and then\n\t * discarded by the newSession() rebuild after the choice.\n\t */\n\tpendingSuiteSelector?: { requestedId: string; available: readonly string[] };\n\t/**\n\t * Observability metrics source for the `/metrics` command, wired from the\n\t * session's mounted observability plugin (`plugin.getMetrics`). Resolved\n\t * lazily at command time — the plugin's factory runs at mount, which can\n\t * happen after host construction, so a host must pass a closure reading the\n\t * shared ref rather than capture `ref.current` eagerly. Omitted, or\n\t * returning undefined, when the plugin is not mounted; `/metrics` then\n\t * shows a warning.\n\t */\n\tgetMetrics?: (options?: ObservabilityMetricsOptions) => MetricsSnapshotV1 | undefined;\n\t/**\n\t * Settings manager for this invocation, injected by the host (D-047: the\n\t * host already holds the same instance it passes to AgentSessionConfig).\n\t * The TUI no longer reads settings from AgentSession.\n\t */\n\tsettingsManager: SettingsManager;\n}\n\ninterface InteractiveTuiOptions {\n\ttuiMode: TuiMode;\n\tshowHardwareCursor: boolean;\n\tlogDirectory: string;\n\tterminal?: Terminal;\n\tonRightClickPaste?: () => void;\n\tfullscreenCopyOnSelect?: boolean;\n\tfullscreenWheelScrollLines?: WheelScrollLines;\n}\n\n/** Composition root for selecting the interactive terminal renderer. */\nexport function createInteractiveTui(options: InteractiveTuiOptions): TuiMainScreen | TuiAltScreen {\n\tconst terminal = options.terminal ?? new ProcessTerminal();\n\tif (options.tuiMode === \"fullscreen\") {\n\t\tconst styleSearchMatch = (text: string) => theme.bg(\"searchMatchBg\", theme.fg(\"searchMatchText\", text));\n\t\treturn new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, {\n\t\t\tsearchMatchStyle: (text) => theme.underline(styleSearchMatch(text)),\n\t\t\tsearchCurrentMatchStyle: (text) => theme.bold(theme.inverse(styleSearchMatch(text))),\n\t\t\topenUrl: openBrowser,\n\t\t\tonRightClickPaste: options.onRightClickPaste,\n\t\t\tcopyOnSelect: options.fullscreenCopyOnSelect,\n\t\t\twheelScrollLines: options.fullscreenWheelScrollLines ?? 1,\n\t\t\tcopySelection: async (text) => {\n\t\t\t\ttry {\n\t\t\t\t\tawait copyToClipboard(text);\n\t\t\t\t\treturn true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn error instanceof Error ? error.message : String(error);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// tui 包自带文案的注入式翻译(批次⑦):默认英文,en 下逐字节不变;\n\t\t\t// 前导/尾随空格在 t() 外拼接(t() 会 trim key)。\n\t\t\tlabels: {\n\t\t\t\tsearchTitle: ` ${t(\"Find transcript\")}`,\n\t\t\t\tsearchNoMatches: `${t(\"No matches\")} `,\n\t\t\t\tcopied: t(\"Copied!\"),\n\t\t\t\tcopyFailed: t(\"Copy failed\"),\n\t\t\t},\n\t\t});\n\t}\n\treturn new TuiMainScreen(terminal, options.showHardwareCursor, options.logDirectory);\n}\n\n/** Stable reference for components while InteractiveMode replaces the active renderer. */\nexport function createInteractiveTuiReference(getTui: () => TUI): TUI {\n\treturn new Proxy({} as TUI, {\n\t\tget: (_target, property) => {\n\t\t\tconst tui = getTui();\n\t\t\tconst value = Reflect.get(tui, property, tui);\n\t\t\tif (typeof value !== \"function\") return value;\n\t\t\tlet methodTui = tui;\n\t\t\tlet method = value;\n\t\t\treturn (...args: unknown[]) => {\n\t\t\t\tconst currentTui = getTui();\n\t\t\t\tif (currentTui !== methodTui) {\n\t\t\t\t\tconst currentMethod = Reflect.get(currentTui, property, currentTui);\n\t\t\t\t\tif (typeof currentMethod !== \"function\") {\n\t\t\t\t\t\tthrow new TypeError(t(\"TUI property {property} is not callable\", { property: String(property) }));\n\t\t\t\t\t}\n\t\t\t\t\tmethodTui = currentTui;\n\t\t\t\t\tmethod = currentMethod;\n\t\t\t\t}\n\t\t\t\treturn Reflect.apply(method, methodTui, args);\n\t\t\t};\n\t\t},\n\t\tset: (_target, property, value) => {\n\t\t\tconst tui = getTui();\n\t\t\treturn Reflect.set(tui, property, value, tui);\n\t\t},\n\t\thas: (_target, property) => Reflect.has(getTui(), property),\n\t\tgetPrototypeOf: () => Reflect.getPrototypeOf(getTui()),\n\t});\n}\n\n/**\n * Provider failover footer ticker (设计 供应商能力槽位与主备切换 §4.7 Phase 3):\n * while the latest `provider.failover.state` snapshot reports an open breaker, the\n * footer countdown must advance once per second, so re-render on a 1s interval\n * (countdown-timer.ts 同构). The interval is created on the first refresh that\n * sees an open state and cleared as soon as the state leaves open — no leak.\n */\nexport class ProviderFailoverTicker {\n\tprivate intervalId: ReturnType<typeof setInterval> | undefined;\n\tprivate readonly isOpen: () => boolean;\n\tprivate readonly requestRender: () => void;\n\n\tconstructor(isOpen: () => boolean, requestRender: () => void) {\n\t\tthis.isOpen = isOpen;\n\t\tthis.requestRender = requestRender;\n\t}\n\n\t/** Re-evaluate the open state: start ticking when open, stop when not. */\n\trefresh(): void {\n\t\tif (this.isOpen()) {\n\t\t\tif (this.intervalId === undefined) {\n\t\t\t\tthis.intervalId = setInterval(() => {\n\t\t\t\t\tthis.requestRender();\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.dispose();\n\t}\n\n\tdispose(): void {\n\t\tif (this.intervalId !== undefined) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t}\n}\n\nexport class InteractiveMode implements DialogUiHost, authFlow.AuthUiHost, selectorsFlow.SelectorsHost {\n\tprivate runtimeHost: AgentSessionRuntime;\n\tprivate renderer: TuiMainScreen | TuiAltScreen;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tui: TUI;\n\tprivate mainScreenRenderState: TuiMainScreenRenderState | undefined;\n\tprivate loadedResourcesContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tchatContainer: Container;\n\tprivate documentContainer: Container;\n\tprivate transcriptScrollView: TuiLayouts.ScrollView | undefined;\n\tprivate fullscreenLayoutRoot: Component | undefined;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tdefaultEditor: CustomEditor;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\teditor: EditorComponent;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tautocompleteProvider: AutocompleteProvider | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tprivate fdPath: string | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\teditorContainer: Container;\n\tprivate activeSelectorToken?: object;\n\tprivate activeSelectorDispose?: () => void;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooter: FooterComponent;\n\t/**\n\t * Re-renders the footer once per second while the provider failover breaker is\n\t * open (§4.7 Phase 3). Optional-typed to match the prototype-based test stubs\n\t * (constructor always assigns it on real instances).\n\t */\n\tprivate failoverTicker: ProviderFailoverTicker | undefined;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooterContainer: Container;\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tfooterDataProvider: FooterDataProvider;\n\t// Stored so the same manager can be injected into custom editors, selectors, and extension UI.\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\tkeybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate pendingUserInputs: string[] = [];\n\tprivate activeStatusIndicator: StatusIndicator | undefined = undefined;\n\tprivate readonly idleStatus = new IdleStatus();\n\tprivate workingMessage: string | undefined = undefined;\n\tprivate workingVisible = true;\n\tprivate workingIndicatorOptions: WorkingIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = t(\"Working...\");\n\tprivate readonly defaultHiddenThinkingLabel = t(\"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\tprivate anthropicSubscriptionWarningShown = 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\tprivate managedToolStatusStarted = false;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// D-083 quiet transcript: the tool-run group for the current assistant\n\t// turn (one group per message_start; null between turns).\n\tprivate activeToolRunGroup: ToolRunGroupComponent | undefined = undefined;\n\n\t// Tool output expansion state\n\t/** Host-visible for ./interactive-dialog-ui.ts (S5 slice 2). */\n\ttoolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\tprivate outputPad = 1;\n\tprivate readonly mermaidMarkdownTransformer: MarkdownTransformer = createMermaidMarkdownTransformer({\n\t\tgetMode: () => this.settingsManager.getMermaidRenderingMode(),\n\t\ttheme,\n\t});\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => 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// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// Extension UI state: host-visible for ./interactive-dialog-ui.ts (S5 slice 2).\n\tdialogSelector: DialogSelectorComponent | undefined = undefined;\n\tdialogInput: DialogInputComponent | undefined = undefined;\n\t// Settles the replaced dialog's still-pending promise when a concurrent\n\t// request mounts a new dialog in the same slot (1A.8: request() settles).\n\tdialogSelectorReplaced: (() => void) | undefined = undefined;\n\tdialogInputReplaced: (() => void) | undefined = undefined;\n\tdialogEditor: DialogEditorComponent | undefined = undefined;\n\n\t// Layout spacer slots above/below the editor (fixed empty chrome; the legacy extension widget producer is retired).\n\twidgetContainerAbove!: Container;\n\twidgetContainerBelow!: Container;\n\n\t// Header container that holds the built-in or custom header\n\theaderContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tbuiltInHeader: Component | undefined = undefined;\n\n\tprivate options: InteractiveModeOptions;\n\tprivate readonly onRightClickPaste = (): void => {\n\t\tvoid this.handleRightClickPaste();\n\t};\n\tprivate themeController: InteractiveThemeController;\n\n\t// Convenience accessors\n\tprivate get session(): AgentSession {\n\t\treturn this.runtimeHost.session;\n\t}\n\t/**\n\t * Constructor-injected settings (D-047): the TUI reads settings from the\n\t * host-provided manager, never from AgentSession. Internal collaboration\n\t * surface; exposed for ./interactive-selectors.ts (S5 slice 5).\n\t */\n\tget settingsManager(): SettingsManager {\n\t\treturn this.options.settingsManager;\n\t}\n\t// Stable facade (阶段 1 slice 1): derived on each access; the facade and\n\t// `this.session` always resolve to the same AgentSession, so session rebind\n\t// needs no separate handling.\n\t/** Internal collaboration surface; exposed for ./interactive-selectors.ts (S5 slice 5). */\n\tget facade(): CodingAgentFacadeV1 {\n\t\treturn createCodingAgentFacade(this.session);\n\t}\n\t// Stable runtime facade (阶段 4 slice 3): derived on each access, same\n\t// pattern as `facade`; runtime session rebinds are picked up automatically.\n\t/** Internal collaboration surface; exposed for ./interactive-selectors.ts (S5 slice 5). */\n\tget runtimeFacade(): CodingAgentRuntimeFacadeV1 {\n\t\treturn createCodingAgentRuntimeFacade(this.runtimeHost);\n\t}\n\n\tconstructor(runtimeHost: AgentSessionRuntime, options: InteractiveModeOptions) {\n\t\t// Assign options first: the settingsManager getter reads the injected\n\t\t// manager (D-047) and the constructor uses it before anything else.\n\t\tthis.options = { ...options };\n\t\tthis.runtimeHost = runtimeHost;\n\t\tsetI18nLanguage(this.settingsManager.getUiLanguage());\n\t\tsetCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());\n\t\tconst tuiMode = options.tuiMode ?? this.settingsManager.getTuiMode();\n\t\tthis.options.tuiMode = tuiMode;\n\t\tthis.runtimeFacade.setBeforeSessionInvalidate(() => {\n\t\t\tthis.resetDialogUI();\n\t\t});\n\t\tthis.runtimeFacade.setRebindSession(async () => {\n\t\t\tawait this.rebindCurrentSession({ renderBeforeBind: true });\n\t\t\tawait this.themeController.applyFromSettings();\n\t\t});\n\t\tthis.version = VERSION;\n\t\tthis.renderer = createInteractiveTui({\n\t\t\ttuiMode,\n\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\tlogDirectory: getAgentDir(),\n\t\t\tonRightClickPaste: this.onRightClickPaste,\n\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t});\n\t\tthis.ui = createInteractiveTuiReference(() => this.renderer);\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.loadedResourcesContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.documentContainer = new Container();\n\t\tthis.documentContainer.addChild(this.headerContainer);\n\t\tthis.documentContainer.addChild(this.loadedResourcesContainer);\n\t\tthis.documentContainer.addChild(this.chatContainer);\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\t// Fixed empty state (single spacer): matches the retired widget renderer's empty layout.\n\t\tthis.widgetContainerAbove.addChild(new Spacer(1));\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\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider(this.facade.getCwd());\n\t\tthis.footer = new FooterComponent(this.session, this.footerDataProvider);\n\t\tthis.footerContainer = new Container();\n\t\tthis.footerContainer.addChild(this.footer);\n\t\tthis.failoverTicker = new ProviderFailoverTicker(\n\t\t\t() => this.footer.isProviderFailoverOpen(),\n\t\t\t() => this.ui.requestRender(),\n\t\t);\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\tthis.themeController = new InteractiveThemeController(this.ui, {\n\t\t\tgetSettingsManager: () => this.settingsManager,\n\t\t\tshowError: (message) => this.showError(message),\n\t\t\tonChanged: () => this.updateEditorBorderColor(),\n\t\t\tinitialThemeSetting: options.initialThemeSetting,\n\t\t});\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 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\t...(command.argumentHint && { argumentHint: command.argumentHint }),\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 model,find 必命中\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst models =\n\t\t\t\t\tthis.facade.getScopedModels().length > 0\n\t\t\t\t\t\t? this.facade.getScopedModels().map((s) => s.model)\n\t\t\t\t\t\t: this.facade.getAvailableModels();\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\tname: m.name,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\treturn createFuzzyAutocompleteItems(items, prefix, getModelSearchText, (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 thinkingCommand = slashCommands.find((command) => command.name === \"thinking\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 thinking,find 必命中\n\t\tif (thinkingCommand) {\n\t\t\tthinkingCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\treturn createFuzzyAutocompleteItems(\n\t\t\t\t\tthis.facade.getAvailableThinkingLevels(),\n\t\t\t\t\tprefix,\n\t\t\t\t\t(level) => level,\n\t\t\t\t\t(level) => ({\n\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst suiteCommand = slashCommands.find((command) => command.name === \"suite\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 suite,find 必命中\n\t\tif (suiteCommand) {\n\t\t\tsuiteCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\treturn createFuzzyAutocompleteItems(\n\t\t\t\t\tlistSuiteIds(getAgentDir()),\n\t\t\t\t\tprefix,\n\t\t\t\t\t(id) => id,\n\t\t\t\t\t(id) => ({\n\t\t\t\t\t\tvalue: id,\n\t\t\t\t\t\tlabel: id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\tconst loginCommand = slashCommands.find((command) => command.name === \"login\");\n\t\t// v8 ignore next -- BUILTIN_SLASH_COMMANDS 恒含 login,find 必命中\n\t\tif (loginCommand) {\n\t\t\tloginCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\tconst providers = getLoginProviderCompletionOptions(this.getLoginProviderOptions());\n\t\t\t\treturn createFuzzyAutocompleteItems(providers, prefix, getLoginProviderSearchText, (provider) => ({\n\t\t\t\t\tvalue: provider.id,\n\t\t\t\t\tlabel: provider.id,\n\t\t\t\t\tdescription: formatLoginProviderCompletionDescription(provider),\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst capabilityRegistrations = this.session.getCapabilityRuntime().listCommands();\n\t\tconst capabilityCommandNames = new Set(capabilityRegistrations.map(({ definition }) => definition.name));\n\n\t\t// Conflicting command names are rejected by AgentSession rather than silently\n\t\t// selecting a source, so do not offer either side as an executable completion.\n\t\tconst templateCommands: SlashCommand[] = this.facade\n\t\t\t.getPromptTemplates()\n\t\t\t.filter((cmd) => !capabilityCommandNames.has(cmd.name))\n\t\t\t.map((cmd) => ({\n\t\t\t\tname: cmd.name,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t\t\t}));\n\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst templateCommandNames = new Set(this.facade.getPromptTemplates().map((cmd) => cmd.name));\n\t\tconst resourceSkillCommandNames = new Set(this.facade.getSkills().skills.map((skill) => `skill:${skill.name}`));\n\t\tconst capabilityCommands: SlashCommand[] = filterCapabilityCommandsForCompletions(\n\t\t\tcapabilityRegistrations.map(({ definition }) => ({\n\t\t\t\tname: definition.name,\n\t\t\t\tdescription: definition.description,\n\t\t\t\t...(definition.argumentHint && { argumentHint: definition.argumentHint }),\n\t\t\t})),\n\t\t\t[builtinCommandNames, templateCommandNames, [...resourceSkillCommandNames]],\n\t\t);\n\n\t\t// Skill commands register unconditionally (D-079: the enableSkillCommands\n\t\t// switch is retired). A capability command claiming the same skill:name\n\t\t// still wins: conflicting names are rejected by AgentSession, so neither\n\t\t// side is offered as an executable completion.\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tfor (const skill of this.facade.getSkills().skills) {\n\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\tif (capabilityCommandNames.has(commandName)) continue;\n\t\t\tskillCommandList.push({\n\t\t\t\tname: commandName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),\n\t\t\t});\n\t\t}\n\n\t\treturn new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...capabilityCommands, ...skillCommandList],\n\t\t\tthis.facade.getCwd(),\n\t\t\tthis.fdPath,\n\t\t);\n\t}\n\n\tsetupAutocompleteProvider(): void {\n\t\tconst provider = this.createBaseAutocompleteProvider();\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) {\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 = t(\"Updated to v{version}. Use {command} to view full changelog.\", {\n\t\t\t\tversion: latestVersion,\n\t\t\t\tcommand: theme.bold(\"/changelog\"),\n\t\t\t});\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\", t(\"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\tprivate mountInteractiveTui(tui: TuiMainScreen | TuiAltScreen, components: readonly Component[]): void {\n\t\tfor (const component of components) tui.addChild(component);\n\t\tif (TuiLayouts.isViewportTUI(tui)) {\n\t\t\tif (!this.fullscreenLayoutRoot) throw new Error(t(\"Fullscreen layout is not initialized\"));\n\t\t\ttui.setLayoutRoot(this.fullscreenLayoutRoot);\n\t\t}\n\t}\n\n\tprivate stopInteractiveTui(fullscreenExitOutput: FullscreenExitOutput): void {\n\t\tif (this.renderer.mode === \"fullscreen\" && fullscreenExitOutput === \"transcript\") {\n\t\t\twhile (this.renderer.hasOverlayEntries) this.renderer.hideOverlay();\n\t\t\tthis.switchTuiMode(\"regular\", false, false);\n\t\t\tthis.renderer.renderNow();\n\t\t}\n\t\tthis.ui.stop({ preserveScreen: this.renderer.mode === \"fullscreen\" });\n\t}\n\n\tprivate switchTuiMode(mode: TuiMode, restoreProgress = true, startRenderer = true): boolean {\n\t\tconst previousUi = this.renderer;\n\t\tif (mode === previousUi.mode) return true;\n\t\tif (previousUi.hasOverlayEntries) return false;\n\n\t\tconst components = [...previousUi.children];\n\t\tconst focus = previousUi.getFocusedComponent();\n\t\tconst terminal = previousUi.terminal;\n\t\tconst showHardwareCursor = previousUi.getShowHardwareCursor();\n\t\tconst clearOnShrink = previousUi.getClearOnShrink();\n\t\tconst onDebug = previousUi.onDebug;\n\t\tif (previousUi instanceof TuiMainScreen) {\n\t\t\tthis.mainScreenRenderState = previousUi.captureRenderState();\n\t\t}\n\n\t\tpreviousUi.stop({ preserveScreen: true });\n\t\tpreviousUi.setFocus(null);\n\t\tpreviousUi.clear();\n\t\tif (TuiLayouts.isViewportTUI(previousUi)) previousUi.setLayoutRoot(undefined);\n\n\t\tconst nextUi = createInteractiveTui({\n\t\t\ttuiMode: mode,\n\t\t\tshowHardwareCursor,\n\t\t\tlogDirectory: getAgentDir(),\n\t\t\tterminal,\n\t\t\tonRightClickPaste: this.onRightClickPaste,\n\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t});\n\t\tnextUi.setClearOnShrink(clearOnShrink);\n\t\tnextUi.onDebug = onDebug;\n\t\tif (nextUi instanceof TuiMainScreen && this.mainScreenRenderState) {\n\t\t\tnextUi.restoreRenderState(this.mainScreenRenderState);\n\t\t}\n\t\tthis.renderer = nextUi;\n\t\tthis.options.tuiMode = mode;\n\t\tthis.mountInteractiveTui(nextUi, components);\n\t\tnextUi.invalidate();\n\t\tnextUi.setFocus(focus);\n\t\tif (!startRenderer) return true;\n\t\tnextUi.start();\n\t\tthis.themeController.rebindTui();\n\t\tif (\n\t\t\trestoreProgress &&\n\t\t\tthis.settingsManager.getShowTerminalProgress() &&\n\t\t\t(this.facade.isStreaming() || this.facade.isCompacting())\n\t\t) {\n\t\t\tterminal.setProgress(true);\n\t\t}\n\t\treturn true;\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 = this.getChangelogForDisplay();\n\n\t\tif (\n\t\t\tthis.facade.getScopedModels().length > 0 &&\n\t\t\t(this.options.verbose || !this.settingsManager.getQuietStartup())\n\t\t) {\n\t\t\tconst modelList = this.facade\n\t\t\t\t.getScopedModels()\n\t\t\t\t.map((sm) => {\n\t\t\t\t\tconst thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : \"\";\n\t\t\t\t\treturn `${sm.model.id}${thinkingStr}`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconst cycleKeys = this.keybindings.getKeys(\"app.model.cycleForward\");\n\t\t\tconst cycleHint =\n\t\t\t\tcycleKeys.length > 0\n\t\t\t\t\t? theme.fg(\n\t\t\t\t\t\t\t\"muted\",\n\t\t\t\t\t\t\t` ${t(\"({key} to cycle)\", {\n\t\t\t\t\t\t\t\tkey: formatKeyText(cycleKeys.join(\"/\"), { capitalize: true }),\n\t\t\t\t\t\t\t})}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t: \"\";\n\t\t\tconsole.log(theme.fg(\"dim\", t(\"Model scope: {models}{hint}\", { models: modelList, hint: cycleHint })));\n\t\t}\n\n\t\t// Keep one component tree and remount it when changing renderers.\n\t\t// Widget chrome is fixed empty; no initialization render needed.\n\t\tthis.transcriptScrollView = new TuiLayouts.ScrollView(this.documentContainer, {\n\t\t\tfollow: \"end\",\n\t\t\tprimary: true,\n\t\t\toverscroll: \"chain\",\n\t\t\tscrollbar: this.settingsManager.getFullscreenScrollbar(),\n\t\t\tscrollbarStyle: (text) => theme.bg(\"scrollbarThumb\", text),\n\t\t});\n\t\tconst dock = new TuiLayouts.VStack([\n\t\t\t{ component: this.pendingMessagesContainer, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.statusContainer, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.widgetContainerAbove, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.editorContainer, shrink: 1, minSize: 3 },\n\t\t\t{ component: this.widgetContainerBelow, shrink: 1, minSize: 0 },\n\t\t\t{ component: this.footerContainer, shrink: 1, minSize: 1 },\n\t\t]);\n\t\tthis.fullscreenLayoutRoot = new TuiLayouts.VStack([\n\t\t\t{ component: this.transcriptScrollView, basis: 0, grow: 1, shrink: 1, minSize: 1 },\n\t\t\t{ component: dock, basis: \"auto\", grow: 0, shrink: 1, minSize: 1 },\n\t\t]);\n\t\tthis.mountInteractiveTui(this.renderer, [\n\t\t\tthis.documentContainer,\n\t\t\tthis.pendingMessagesContainer,\n\t\t\tthis.statusContainer,\n\t\t\tthis.widgetContainerAbove,\n\t\t\tthis.editorContainer,\n\t\t\tthis.widgetContainerBelow,\n\t\t\tthis.footerContainer,\n\t\t]);\n\t\t// Accept text while startup completes, but only enable interrupt, exit, and submission feedback.\n\t\tthis.defaultEditor.onAction(\"app.clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onSubmit = (text) => this.handleStartupSubmit(text);\n\t\tthis.ui.setFocus(this.editor);\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\tthis.isInitialized = true;\n\n\t\tawait this.themeController.applyFromSettings();\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 logo = 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\", t(\"to interrupt\")),\n\t\t\t\thint(\"app.clear\", t(\"to clear\")),\n\t\t\t\trawKeyHint(t(\"{key} twice\", { key: keyText(\"app.clear\") }), t(\"to exit\")),\n\t\t\t\thint(\"app.exit\", t(\"to exit (empty)\")),\n\t\t\t\thint(\"app.suspend\", t(\"to suspend\")),\n\t\t\t\tkeyHint(\"tui.editor.deleteToLineEnd\", t(\"to delete to end\")),\n\t\t\t\thint(\"app.tools.expand\", t(\"to expand tools\")),\n\t\t\t\thint(\"app.thinking.toggle\", t(\"to expand thinking\")),\n\t\t\t\thint(\"app.editor.external\", t(\"for external editor\")),\n\t\t\t\trawKeyHint(\"/\", t(\"for commands\")),\n\t\t\t\trawKeyHint(\"!\", t(\"to run bash\")),\n\t\t\t\trawKeyHint(\"!!\", t(\"to run bash (no context)\")),\n\t\t\t\thint(\"app.clipboard.pasteImage\", t(\"to paste image (with text fallback)\")),\n\t\t\t\trawKeyHint(\"drop files\", t(\"to attach\")),\n\t\t\t].join(\"\\n\");\n\t\t\tconst compactInstructions = [\n\t\t\t\thint(\"app.interrupt\", t(\"interrupt\")),\n\t\t\t\trawKeyHint(`${keyText(\"app.clear\")}/${keyText(\"app.exit\")}`, t(\"clear/exit\")),\n\t\t\t\trawKeyHint(\"/\", t(\"commands\")),\n\t\t\t\trawKeyHint(\"!\", t(\"bash\")),\n\t\t\t\thint(\"app.tools.expand\", t(\"more\")),\n\t\t\t].join(theme.fg(\"muted\", \" · \"));\n\t\t\tconst compactOnboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\tt(\"Press {key} to show full startup help and loaded resources.\", {\n\t\t\t\t\tkey: keyText(\"app.tools.expand\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst onboarding = theme.fg(\n\t\t\t\t\"dim\",\n\t\t\t\tt(\n\t\t\t\t\t\"Agent Forge can explain its own features and look up its docs. Ask it how to use or extend Agent Forge.\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tthis.builtInHeader = new ExpandableText(\n\t\t\t\t() => `${logo}\\n${compactInstructions}\\n${compactOnboarding}\\n\\n${onboarding}`,\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(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\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\t\tthis.ui.requestRender();\n\n\t\t// Ensure fd and rg are available after mounting the TUI (downloads if missing, adds to PATH via getBinDir)\n\t\t// so slow downloads do not make startup appear frozen.\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands.\n\t\tconst [fdPath] = await Promise.all([\n\t\t\tensureTool(\"fd\", (status) => this.showManagedToolStatus(status)),\n\t\t\tensureTool(\"rg\", (status) => this.showManagedToolStatus(status)),\n\t\t]);\n\t\tthis.fdPath = fdPath;\n\n\t\t// Enable the remaining input handlers only after managed-tool setup completes.\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\t\tthis.ui.requestRender();\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// Cross-suite resume detection (设计 §10.1 最小可用版): a `-c`/resumed\n\t\t// session may carry a binding from a different suite than the one the\n\t\t// runtime just assembled it with. Record the fact; conversion is out of\n\t\t// scope.\n\t\tthis.detectCrossSuiteResume();\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\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// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\n\t\t// Unresolved startup suite id (设计 §9): with the TUI ready, let the user\n\t\t// pick a suite before the first prompt; the session is then rebuilt with\n\t\t// the selected suite. print/RPC never reach here (structured exit in main.ts).\n\t\tif (this.options.pendingSuiteSelector) {\n\t\t\tawait this.showStartupSuiteSelector(this.options.pendingSuiteSelector);\n\t\t}\n\n\t\t// Flush the completed startup state before loading the remaining syntax grammars.\n\t\tthis.ui.renderNow();\n\t\tvoid loadAllHighlightLanguages().then(() => {\n\t\t\tif (!this.isInitialized) return;\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.ui.requestRender();\n\t\t});\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.facade.getCwd());\n\t\tconst sessionName = this.facade.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\tif (!process.env.AGENT_FORGE_OFFLINE) {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeout = setTimeout(() => controller.abort(), 15_000);\n\t\t\tvoid refreshModelCatalogs(this.facade.getModelCatalog(), controller.signal)\n\t\t\t\t.then(() => this.updateAvailableProviderCount())\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => clearTimeout(timeout));\n\t\t}\n\n\t\t// Start version check asynchronously\n\t\tcheckForNewVersion(this.version).then((newRelease) => {\n\t\t\tif (newRelease) {\n\t\t\t\tthis.showNewVersionNotification(newRelease);\n\t\t\t}\n\t\t});\n\n\t\t// Start package update check asynchronously\n\t\tthis.checkForPackageUpdates()\n\t\t\t.then((updates) => {\n\t\t\t\tif (updates.length > 0) {\n\t\t\t\t\tthis.showPackageUpdateNotification(updates);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\t// On Windows, npm can overwrite the shared console title while checking\n\t\t\t\t// extension package versions. Restore the product title after the startup check.\n\t\t\t\tif (process.platform === \"win32\" && this.isInitialized) {\n\t\t\t\t\tthis.updateTerminalTitle();\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Check tmux keyboard setup asynchronously\n\t\tthis.checkTmuxKeyboardSetup().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 {\n\t\t\tmigratedProviders,\n\t\t\tstartupDiagnostics,\n\t\t\tmodelFallbackMessage,\n\t\t\tinitialMessage,\n\t\t\tinitialImages,\n\t\t\tinitialMessages,\n\t\t} = this.options;\n\n\t\tfor (const diagnostic of startupDiagnostics ?? []) {\n\t\t\tif (diagnostic.type === \"error\") {\n\t\t\t\tthis.showError(diagnostic.message);\n\t\t\t} else if (diagnostic.type === \"warning\") {\n\t\t\t\tthis.showWarning(diagnostic.message);\n\t\t\t} else {\n\t\t\t\tthis.showStatus(diagnostic.message);\n\t\t\t}\n\t\t}\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(\n\t\t\t\tt(\"Migrated credentials to auth.json: {providers}\", { providers: migratedProviders.join(\", \") }),\n\t\t\t);\n\t\t}\n\n\t\tconst modelsJsonError = this.facade.getModelsError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(t(\"models.json error: {error}\", { error: modelsJsonError }));\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\n\t\t// Process initial messages\n\t\tif (initialMessage) {\n\t\t\ttry {\n\t\t\t\tawait this.facade.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"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.facade.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"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\t// Inputs queued during startup may be \"/\" commands or \"!\" bash\n\t\t\t\t// lines; replay them through the normal submit path (they were\n\t\t\t\t// queued precisely because it needs the post-startup context).\n\t\t\t\t// Inputs arriving through onInputCallback were already filtered\n\t\t\t\t// by the editor submit handler, so this is a no-op for them.\n\t\t\t\tif (await this.dispatchCommandOrBash(userInput)) continue;\n\t\t\t\tawait this.promptWithEmptyReplyRetry(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : t(\"Unknown error occurred\");\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * One-shot empty-reply auto-continuation (#5, print-mode parity): when a\n\t * submitted turn finishes with an empty assistant text — and the model was\n\t * neither aborted nor errored — nudge the model once to continue the task.\n\t * The retry itself is never retried, so the budget is capped at one\n\t * continuation per submission and this cannot loop.\n\t */\n\tprivate async promptWithEmptyReplyRetry(text: string): Promise<void> {\n\t\tconst seen = this.facade.getState().messages.length;\n\t\tawait this.facade.prompt(text);\n\t\tconst lastAssistant = [...this.facade.getState().messages.slice(seen)]\n\t\t\t.reverse()\n\t\t\t.find((m): m is AssistantMessage => m.role === \"assistant\");\n\t\tif (lastAssistant === undefined) return;\n\t\tif (lastAssistant.stopReason === \"error\" || lastAssistant.stopReason === \"aborted\") return;\n\t\tif (contentText(lastAssistant.content).trim().length > 0) return;\n\t\tthis.showStatus(t(\"Previous reply was empty, retrying...\"));\n\t\tawait this.facade.prompt(EMPTY_REPLY_RETRY_PROMPT);\n\t}\n\n\tprivate async checkForPackageUpdates(): Promise<string[]> {\n\t\tif (process.env.AGENT_FORGE_OFFLINE) {\n\t\t\treturn [];\n\t\t}\n\n\t\ttry {\n\t\t\tconst packageManager = new DefaultPackageManager({\n\t\t\t\tcwd: this.facade.getCwd(),\n\t\t\t\tagentDir: getAgentDir(),\n\t\t\t\tsettingsManager: this.settingsManager,\n\t\t\t});\n\t\t\tconst updates = await packageManager.checkForAvailableUpdates();\n\t\t\treturn updates.map((update) => update.displayName);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async checkTmuxKeyboardSetup(): Promise<string | undefined> {\n\t\tif (!process.env.TMUX) return undefined;\n\n\t\tconst runTmuxShow = (option: string): Promise<string | undefined> => {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t});\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\tproc.kill();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t}, 2000);\n\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"error\", () => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => {\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tresolve(code === 0 ? stdout.trim() : undefined);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tconst [extendedKeys, extendedKeysFormat] = await Promise.all([\n\t\t\trunTmuxShow(\"extended-keys\"),\n\t\t\trunTmuxShow(\"extended-keys-format\"),\n\t\t]);\n\n\t\t// If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n\t\tif (extendedKeys === undefined) return undefined;\n\n\t\tif (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n\t\t\treturn t(\n\t\t\t\t\"tmux extended-keys is off. Modified Enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\",\n\t\t\t);\n\t\t}\n\n\t\tif (extendedKeysFormat === \"xterm\") {\n\t\t\treturn t(\n\t\t\t\t\"tmux extended-keys-format is xterm. Agent Forge works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\",\n\t\t\t);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.facade.getState().messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - record the version, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\tif (newEntries.length > 0) {\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn newEntries.map((e) => normalizeChangelogLinks(e.content, e)).join(\"\\n\\n\");\n\t\t}\n\n\t\treturn undefined;\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 formatDisplayPath(p: string): string {\n\t\treturn formatDisplayPath(p);\n\t}\n\n\tprivate formatContextPath(p: string): string {\n\t\treturn formatContextPath(p, this.facade.getCwd());\n\t}\n\n\tprivate getStartupExpansionState(): boolean {\n\t\treturn this.options.verbose || this.toolOutputExpanded;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, sourceInfo?: SourceInfo): string {\n\t\treturn getShortPath(fullPath, sourceInfo);\n\t}\n\n\tprivate getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string {\n\t\treturn getCompactPathLabel(resourcePath, sourceInfo);\n\t}\n\n\t// The following formatting delegates have no in-class call sites (their\n\t// implementations moved to interactive-format.ts) but remain part of the\n\t// prototype contract, so they stay public instead of private.\n\n\tgetCompactPackageSourceLabel(sourceInfo?: SourceInfo): string {\n\t\treturn getCompactPackageSourceLabel(sourceInfo);\n\t}\n\n\tgetDisplaySourceInfo(sourceInfo?: SourceInfo): {\n\t\tlabel: string;\n\t\tscopeLabel?: string;\n\t\tcolor: \"accent\" | \"muted\";\n\t} {\n\t\treturn getDisplaySourceInfo(sourceInfo);\n\t}\n\n\tgetScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\" {\n\t\treturn getScopeGroup(sourceInfo);\n\t}\n\n\tisPackageSource(sourceInfo?: SourceInfo): boolean {\n\t\treturn isPackageSource(sourceInfo);\n\t}\n\n\tprivate buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n\t\tscope: \"user\" | \"project\" | \"path\";\n\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t}> {\n\t\treturn buildScopeGroups(items);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{\n\t\t\tscope: \"user\" | \"project\" | \"path\";\n\t\t\tpaths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n\t\t\tpackages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n\t\t}>,\n\t\toptions: {\n\t\t\tformatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n\t\t\tformatPackagePath: (item: { path: string; sourceInfo?: SourceInfo }, source: string) => string;\n\t\t},\n\t): string {\n\t\treturn formatScopeGroups(groups, options);\n\t}\n\n\tfindSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined {\n\t\treturn findSourceInfoForPath(p, sourceInfos);\n\t}\n\n\tformatPathWithSource(p: string, sourceInfo?: SourceInfo): string {\n\t\treturn formatPathWithSource(p, sourceInfo);\n\t}\n\n\tprivate formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string {\n\t\treturn formatDiagnostics(diagnostics, sourceInfos);\n\t}\n\n\tprivate showLoadedResources(options?: { force?: boolean; showDiagnosticsWhenQuiet?: boolean }): void {\n\t\t// Resource rendering is idempotent; chat clears no longer clear this separate container.\n\t\tthis.loadedResourcesContainer.clear();\n\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\t\tconst formatCompactList = (items: string[], options?: { sort?: boolean }): string => {\n\t\t\tconst labels = items.map((item) => item.trim()).filter((item) => item.length > 0);\n\t\t\tif (options?.sort !== false) {\n\t\t\t\tlabels.sort((a, b) => a.localeCompare(b));\n\t\t\t}\n\t\t\treturn theme.fg(\"dim\", ` ${labels.join(\", \")}`);\n\t\t};\n\t\tconst addLoadedSection = (\n\t\t\tname: string,\n\t\t\tcollapsedBody: string,\n\t\t\texpandedBody = collapsedBody,\n\t\t\tcolor: ThemeColor = \"mdHeading\",\n\t\t): void => {\n\t\t\tconst section = new ExpandableText(\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${collapsedBody}`,\n\t\t\t\t() => `${sectionHeader(name, color)}\\n${expandedBody}`,\n\t\t\t\tthis.getStartupExpansionState(),\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tthis.loadedResourcesContainer.addChild(section);\n\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t};\n\n\t\tconst skillsResult = this.facade.getSkills();\n\t\tconst promptsResult = this.facade.getPrompts();\n\t\tconst themesResult = this.facade.getThemes();\n\t\tconst sourceInfos = new Map<string, SourceInfo>();\n\t\tfor (const skill of skillsResult.skills) {\n\t\t\tif (skill.sourceInfo) {\n\t\t\t\tsourceInfos.set(skill.filePath, skill.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const prompt of promptsResult.prompts) {\n\t\t\tif (prompt.sourceInfo) {\n\t\t\t\tsourceInfos.set(prompt.filePath, prompt.sourceInfo);\n\t\t\t}\n\t\t}\n\t\tfor (const loadedTheme of themesResult.themes) {\n\t\t\tif (loadedTheme.sourcePath && loadedTheme.sourceInfo) {\n\t\t\t\tsourceInfos.set(loadedTheme.sourcePath, loadedTheme.sourceInfo);\n\t\t\t}\n\t\t}\n\n\t\tif (showListing) {\n\t\t\tconst systemPromptSource = this.facade.getSystemPromptSource();\n\t\t\tconst contextFiles = [\n\t\t\t\t...(systemPromptSource ? [systemPromptSource] : []),\n\t\t\t\t...this.facade.getAppendSystemPromptSources(),\n\t\t\t\t...this.facade.getAgentsFiles().agentsFiles,\n\t\t\t];\n\t\t\tif (contextFiles.length > 0) {\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t\tconst contextList = contextFiles\n\t\t\t\t\t.map((f) => theme.fg(\"dim\", ` ${this.formatDisplayPath(f.path)}`))\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst contextCompactList = formatCompactList(\n\t\t\t\t\tcontextFiles.map((contextFile) => this.formatContextPath(contextFile.path)),\n\t\t\t\t\t{ sort: false },\n\t\t\t\t);\n\t\t\t\taddLoadedSection(t(\"Context\"), contextCompactList, contextList);\n\t\t\t}\n\n\t\t\tconst skills = skillsResult.skills;\n\t\t\tif (skills.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tskills.map((skill) => ({ path: skill.filePath, sourceInfo: skill.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst skillList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst skillCompactList = formatCompactList(skills.map((skill) => skill.name));\n\t\t\t\taddLoadedSection(t(\"Skills\"), skillCompactList, skillList);\n\t\t\t}\n\n\t\t\tconst templates = this.facade.getPromptTemplates();\n\t\t\tif (templates.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\ttemplates.map((template) => ({ path: template.filePath, sourceInfo: template.sourceInfo })),\n\t\t\t\t);\n\t\t\t\tconst templateByPath = new Map(templates.map((t) => [t.filePath, t]));\n\t\t\t\tconst templateList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\t// v8 ignore next -- templateByPath is built from the same templates as the groups\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t\tformatPackagePath: (item) => {\n\t\t\t\t\t\tconst template = templateByPath.get(item.path);\n\t\t\t\t\t\t// v8 ignore next -- templateByPath is built from the same templates as the groups\n\t\t\t\t\t\treturn template ? `/${template.name}` : this.formatDisplayPath(item.path);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tconst promptCompactList = formatCompactList(templates.map((template) => `/${template.name}`));\n\t\t\t\taddLoadedSection(t(\"Prompts\"), promptCompactList, templateList);\n\t\t\t}\n\n\t\t\t// Show loaded themes (excluding built-in)\n\t\t\tconst loadedThemes = themesResult.themes;\n\t\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\t\tif (customThemes.length > 0) {\n\t\t\t\tconst groups = this.buildScopeGroups(\n\t\t\t\t\tcustomThemes.map((loadedTheme) => ({\n\t\t\t\t\t\tpath: loadedTheme.sourcePath!,\n\t\t\t\t\t\tsourceInfo: loadedTheme.sourceInfo,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t\tconst themeList = this.formatScopeGroups(groups, {\n\t\t\t\t\tformatPath: (item) => this.formatDisplayPath(item.path),\n\t\t\t\t\tformatPackagePath: (item) => this.getShortPath(item.path, item.sourceInfo),\n\t\t\t\t});\n\t\t\t\tconst themeCompactList = formatCompactList(\n\t\t\t\t\tcustomThemes.map(\n\t\t\t\t\t\t(loadedTheme) =>\n\t\t\t\t\t\t\tloadedTheme.name ?? this.getCompactPathLabel(loadedTheme.sourcePath!, loadedTheme.sourceInfo),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\taddLoadedSection(t(\"Themes\"), themeCompactList, themeList);\n\t\t\t}\n\t\t}\n\n\t\t// v8 ignore next -- showDiagnostics 为假时上方已提前返回,此处恒为真\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Skill conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Prompt conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, sourceInfos);\n\t\t\t\tthis.loadedResourcesContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", t(\"[Theme conflicts]\"))}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.loadedResourcesContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Run the session-start boundary for the current session (capability\n\t * session.start@1 dispatch + resource discovery pass) and refresh the\n\t * startup surfaces that read session resources.\n\t */\n\tprivate async bindCurrentSessionExtensions(): Promise<void> {\n\t\tawait this.session.startSession();\n\n\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.showLoadedResources({ force: false, showDiagnosticsWhenQuiet: true });\n\t\tthis.showStartupNoticesIfNeeded();\n\t}\n\n\tprivate applyFullscreenScrollbarSetting(): void {\n\t\tthis.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());\n\t}\n\n\tprivate applyRuntimeSettings(): void {\n\t\tsetI18nLanguage(this.settingsManager.getUiLanguage());\n\t\tsetCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());\n\t\tconfigureHttpDispatcher(this.settingsManager.getHttpIdleTimeoutMs());\n\t\tthis.applyFullscreenScrollbarSetting();\n\t\tif (this.renderer instanceof TuiAltScreen) {\n\t\t\tthis.renderer.setCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());\n\t\t\tthis.renderer.setWheelScrollLines(this.settingsManager.getFullscreenWheelScrollLines());\n\t\t}\n\t\tthis.footer.setSession(this.session);\n\t\tthis.footerDataProvider.setCwd(this.facade.getCwd());\n\t\t// The switched session carries its own failover snapshot history; re-check\n\t\t// whether the countdown ticker is needed.\n\t\tthis.failoverTicker?.refresh();\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\tconst clearOnShrink = this.settingsManager.getClearOnShrink();\n\t\tthis.ui.setClearOnShrink(clearOnShrink);\n\t\tif (!clearOnShrink && !this.activeStatusIndicator) {\n\t\t\tthis.statusContainer.clear();\n\t\t}\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t}\n\t}\n\n\tprivate async rebindCurrentSession(options: { renderBeforeBind?: boolean } = {}): Promise<void> {\n\t\tconst session = this.session;\n\n\t\tthis.unsubscribe?.();\n\t\tthis.unsubscribe = undefined;\n\t\tthis.applyRuntimeSettings();\n\n\t\tif (options.renderBeforeBind) {\n\t\t\tthis.renderCurrentSessionState();\n\t\t\tthis.subscribeToAgent();\n\t\t}\n\n\t\tawait this.bindCurrentSessionExtensions();\n\n\t\tif (this.session !== session) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!options.renderBeforeBind) {\n\t\t\tthis.subscribeToAgent();\n\t\t}\n\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.updateTerminalTitle();\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(\"transcript\");\n\t\tprocess.exit(1);\n\t}\n\n\tprivate renderCurrentSessionState(): void {\n\t\tthis.loadedResourcesContainer.clear();\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.renderInitialMessages();\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.facade.getToolDefinition(toolName);\n\t}\n\n\tprivate getMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn [this.mermaidMarkdownTransformer];\n\t}\n\n\tprivate showStatusIndicator(indicator: StatusIndicator): void {\n\t\tthis.activeStatusIndicator?.dispose();\n\t\tthis.activeStatusIndicator = indicator;\n\t\tthis.statusContainer.clear();\n\t\tthis.statusContainer.addChild(indicator);\n\t}\n\n\tprivate clearStatusIndicator(kind?: StatusIndicator[\"kind\"]): void {\n\t\tif (kind && this.activeStatusIndicator?.kind !== kind) {\n\t\t\treturn;\n\t\t}\n\t\tconst hadActiveStatusIndicator = this.activeStatusIndicator !== undefined;\n\t\tthis.activeStatusIndicator?.dispose();\n\t\tthis.activeStatusIndicator = undefined;\n\t\tthis.statusContainer.clear();\n\t\tif (hadActiveStatusIndicator && this.options.tuiMode === \"regular\" && this.ui.getClearOnShrink()) {\n\t\t\tthis.statusContainer.addChild(this.idleStatus);\n\t\t}\n\t}\n\n\tprivate showWorkingStatusIndicator(): void {\n\t\tthis.showStatusIndicator(\n\t\t\tnew WorkingStatusIndicator(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.workingMessage ?? this.defaultWorkingMessage,\n\t\t\t\tthis.workingIndicatorOptions,\n\t\t\t),\n\t\t);\n\t}\n\n\tsetWorkingVisible(visible: boolean): void {\n\t\tthis.workingVisible = visible;\n\t\tif (!visible) {\n\t\t\tthis.clearStatusIndicator(\"working\");\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif (this.facade.isStreaming() && this.activeStatusIndicator?.kind !== \"working\") {\n\t\t\tthis.showWorkingStatusIndicator();\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetWorkingIndicator(options?: WorkingIndicatorOptions): void {\n\t\tthis.workingIndicatorOptions = options;\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setIndicator(options);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetHiddenThinkingLabel(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\t/**\n\t * Set the working/loading message shown during streaming. Host entry wired\n\t * through ./interactive-dialog-ui.ts; restores the default when undefined.\n\t */\n\tsetWorkingMessage(message: string | undefined): void {\n\t\tthis.workingMessage = message;\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setMessage(message ?? this.defaultWorkingMessage);\n\t\t}\n\t}\n\n\tprivate resetDialogUI(): void {\n\t\tif (this.dialogSelector) {\n\t\t\tthis.hideDialogSelector();\n\t\t}\n\t\tif (this.dialogInput) {\n\t\t\tthis.hideDialogInput();\n\t\t}\n\t\tif (this.dialogEditor) {\n\t\t\tthis.hideDialogEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.footer.invalidate();\n\t\tthis.setupAutocompleteProvider();\n\t\tthis.updateTerminalTitle();\n\t\tthis.workingMessage = undefined;\n\t\tthis.workingVisible = true;\n\t\tthis.setWorkingIndicator();\n\t\tif (this.activeStatusIndicator?.kind === \"working\") {\n\t\t\tthis.activeStatusIndicator.setMessage(\n\t\t\t\t`${this.defaultWorkingMessage} ${t(\"({key} to interrupt)\", { key: keyText(\"app.interrupt\") })}`,\n\t\t\t);\n\t\t}\n\t\tthis.setHiddenThinkingLabel();\n\t}\n\n\t/**\n\t * Apply a theme request from the extension UI host (implemented by\n\t * ./interactive-dialog-ui.ts), keeping the theme controller and settings\n\t * persistence on the mode.\n\t */\n\tapplyExtensionTheme(themeOrName: string | Theme): { success: boolean; error?: string } {\n\t\tif (themeOrName instanceof Theme) {\n\t\t\treturn this.themeController.setThemeInstance(themeOrName);\n\t\t}\n\t\tconst result = this.themeController.setThemeName(themeOrName);\n\t\tif (result.success) {\n\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Interaction host for the versioned capability surface (1A.8): maps the\n\t * frozen InteractionHostV1 contract onto the legacy TUI dialogs. Cancellation\n\t * rides the existing dialog signal support; notify reuses the notify channel.\n\t */\n\tcreateInteractionHostV1(): InteractionHostV1 {\n\t\treturn createInteractionHostV1(this);\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tshowDialogSelector(title: string, options: string[], opts?: InteractionDialogOptions): Promise<string | undefined> {\n\t\treturn showDialogSelector(this, title, options, opts);\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\thideDialogSelector(): void {\n\t\thideDialogSelector(this);\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tasync showDialogConfirm(title: string, message: string, opts?: InteractionDialogOptions): Promise<boolean> {\n\t\treturn showDialogConfirm(this, title, message, opts);\n\t}\n\n\tprivate async promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined> {\n\t\tconst confirmed = await this.showDialogConfirm(\n\t\t\t\"Session cwd not found\",\n\t\t\tformatMissingSessionCwdPrompt(error.issue),\n\t\t);\n\t\treturn confirmed ? error.issue.fallbackCwd : undefined;\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tshowDialogInput(title: string, placeholder?: string, opts?: InteractionDialogOptions): Promise<string | undefined> {\n\t\treturn showDialogInput(this, title, placeholder, opts);\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\thideDialogInput(): void {\n\t\thideDialogInput(this);\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tshowDialogEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn showDialogEditor(this, title, prefill);\n\t}\n\n\t/**\n\t * External editor command for extension editors. Host entry for\n\t * ./interactive-dialog-ui.ts, keeping settings access on the mode.\n\t */\n\tgetExternalEditorCommand(): string {\n\t\treturn this.settingsManager.getExternalEditorCommand();\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\thideDialogEditor(): void {\n\t\thideDialogEditor(this);\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tshowDialogNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tshowDialogNotify(this, message, type);\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.facade.isStreaming()) {\n\t\t\t\t// 中断分级(设计 子代理运行时 §4.2,2026-10-02):Esc 只停当前\n\t\t\t\t// 回合,从不终止后台子代理(用户裁决:入口分离,同键不承载两\n\t\t\t\t// 个烈度)。仍有活跃子代理时状态行指路 /stop-agents。\n\t\t\t\tthis.restoreQueuedMessagesToEditor({ abort: true, cancelAgentTasks: false });\n\t\t\t\tconst activeAgents = this.facade.getActiveAgentTaskCount();\n\t\t\t\tif (activeAgents > 0) {\n\t\t\t\t\t// 单复数拆双 key 保 en 语法(批次⑩规则,同 handleStopAgentsCommand)。\n\t\t\t\t\tthis.showStatus(\n\t\t\t\t\t\tactiveAgents === 1\n\t\t\t\t\t\t\t? t(\"{count} subagent still running · /stop-agents stops all (Esc only stops the current turn)\", {\n\t\t\t\t\t\t\t\t\tcount: activeAgents,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t: t(\"{count} subagents still running · /stop-agents stops all (Esc only stops the current turn)\", {\n\t\t\t\t\t\t\t\t\tcount: activeAgents,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (this.facade.isBashRunning()) {\n\t\t\t\tthis.facade.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 or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action === \"tree\") {\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\tthis.showTreeSelector();\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.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"app.model.cycleBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"app.model.select\", () => this.showModelSelector());\n\t\tthis.defaultEditor.onAction(\"app.tools.expand\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"app.thinking.toggle\", () => this.toggleThinkingBlockVisibility());\n\t\t// Iron law (2026-10-02 复审): the main editor must not consume\n\t\t// ctrl+g/ctrl+x — /editor and /copy are the single entries here. The\n\t\t// bindings keep their defaults for the components that have no command\n\t\t// channel (dialog editors' external-editor entry, the tree view's\n\t\t// in-place copy).\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.handleClearCommand());\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\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}\n\t\t};\n\n\t\t// Handle clipboard paste (triggered on Ctrl+V). Images are attached by path;\n\t\t// otherwise, paste plain text from the system clipboard.\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tvoid this.handleClipboardPaste();\n\t\t};\n\t}\n\n\tprivate async handleRightClickPaste(): Promise<void> {\n\t\tconst target = this.renderer.getFocusedComponent();\n\t\tconst handleInput = target?.handleInput;\n\t\tif (!target || !handleInput) return;\n\t\ttry {\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (!text || this.renderer.getFocusedComponent() !== target) return;\n\t\t\thandleInput.call(target, `\\x1b[200~${text}\\x1b[201~`);\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\tprivate async handleClipboardPaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (image) {\n\t\t\t\tconst tmpDir = os.tmpdir();\n\t\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\t\tconst fileName = `agent-forge-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (text) {\n\t\t\t\tthis.editor.insertTextAtCursor?.(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\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// Startup-time submissions (prompts, \"/\" commands, and \"!\" bash inputs)\n\t// are all queued; the main loop dequeues them automatically once startup\n\t// completes. Commands and bash inputs replay through the normal submit\n\t// path (dispatch table / bash handling) because they need the\n\t// post-startup context — queueing is exactly what waits for it. Restoring\n\t// them into the editor instead proved hazardous: the restored text\n\t// concatenated with the user's next keystrokes and could be submitted to\n\t// the model as a literal prompt. Empty input is ignored.\n\tprivate handleStartupSubmit(text: string): void {\n\t\tif (!text.trim()) return;\n\t\tthis.pendingUserInputs.push(text);\n\t\tthis.showStatus(t(\"Startup in progress — input queued and will run when startup completes\"));\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (rawText: string) => {\n\t\t\tconst text = rawText.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle /commands and bash inputs (\"!\"/\"!!\"); this is the same path\n\t\t\t// the main loop uses to replay inputs queued during startup.\n\t\t\tif (await this.dispatchCommandOrBash(text)) return;\n\n\t\t\t// Queue input during compaction\n\t\t\tif (this.facade.isCompacting()) {\n\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\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.facade.isStreaming()) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.facade.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\t\tthis.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.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t} else {\n\t\t\t\tthis.pendingUserInputs.push(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\t/**\n\t * Shared \"/\"-command and bash (\"!\"/\"!!\") handling for the editor submit\n\t * path and the main-loop replay of inputs queued during startup. Returns\n\t * true when the input was handled as a command or bash invocation; false\n\t * means the caller should treat it as a normal prompt.\n\t */\n\tprivate async dispatchCommandOrBash(text: string): Promise<boolean> {\n\t\t// Handle /commands through the dispatch table (interactive-commands.ts)\n\t\tconst dispatched = this.dispatchEditorCommand(text);\n\t\tif (dispatched) {\n\t\t\tif (dispatched.pending) await dispatched.pending;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\tif (text.startsWith(\"!\")) {\n\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\tif (command) {\n\t\t\t\tif (this.facade.isBashRunning()) {\n\t\t\t\t\tthis.showWarning(t(\"A bash command is already running. Press Esc to cancel it first.\"));\n\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Run a /command through COMMAND_DISPATCH_ENTRIES. Returns undefined when\n\t * text is not a registered command; otherwise the command has been fully\n\t * dispatched (handler invoked, editor cleared in the original order) and\n\t * pending carries the async completion, if any.\n\t */\n\tprivate dispatchEditorCommand(text: string): { pending: Promise<void> | undefined } | undefined {\n\t\tconst match = matchCommandDispatchEntry(COMMAND_DISPATCH_ENTRIES, text);\n\t\tif (!match) return undefined;\n\t\tconst { entry, arg } = match;\n\t\tif (entry.clearEditorBeforeRun) this.setEditorText(\"\");\n\t\tconst result = entry.run(this, text, arg);\n\t\t// Clear the submitted command text after the run — but only while the\n\t\t// editor still holds it. Handlers that write their own content into\n\t\t// the editor (/dequeue restores the queue, /editor applies external\n\t\t// edits) must not have that wiped (review finding: the unconditional\n\t\t// clear lost the restored/edited content).\n\t\tconst clearIfUntouched = (): void => {\n\t\t\tif (this.editor.getText().trim() === text) this.setEditorText(\"\");\n\t\t};\n\t\tif (!(result instanceof Promise)) {\n\t\t\tif (!entry.clearEditorBeforeRun) clearIfUntouched();\n\t\t\treturn { pending: undefined };\n\t\t}\n\t\treturn {\n\t\t\tpending: entry.clearEditorBeforeRun ? result : result.then(clearIfUntouched),\n\t\t};\n\t}\n\n\tsetEditorText(text: string): void {\n\t\tthis.editor.setText(text);\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.facade.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\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\t\t// Failover snapshots land as entry_appended events; the ticker decides here\n\t\t// whether the per-second countdown re-render is needed (§4.7 Phase 3).\n\t\tthis.failoverTicker?.refresh();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\tthis.pendingTools.clear();\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\tbreak;\n\n\t\t\tcase \"turn_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\tif (this.workingVisible) {\n\t\t\t\t\tif (this.activeStatusIndicator?.kind !== \"working\") {\n\t\t\t\t\t\tthis.showWorkingStatusIndicator();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.clearStatusIndicator();\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.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"entry_appended\":\n\t\t\t\t// Custom entries have no renderer source since the legacy extension\n\t\t\t\t// surface was removed; nothing to append to the chat.\n\t\t\t\tbreak;\n\n\t\t\tcase \"session_info_changed\":\n\t\t\t\tthis.updateTerminalTitle();\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\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.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\t// D-083: a new assistant turn closes the previous turn's\n\t\t\t\t\t// tool-run group (tools executed between the turns) and\n\t\t\t\t\t// starts a fresh one on its first toolCall.\n\t\t\t\t\tthis.activeToolRunGroup?.markRunComplete();\n\t\t\t\t\tthis.activeToolRunGroup = undefined;\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\t);\n\t\t\t\t\t// D-083: components created after a ctrl+o toggle inherit the\n\t\t\t\t\t// current expansion so detail mode holds across turns.\n\t\t\t\t\tif (this.toolOutputExpanded) {\n\t\t\t\t\t\tthis.streamingComponent.setExpanded(true);\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\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.streamingComponent.updateContent(this.streamingMessage, true);\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},\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.facade.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.addToolToRunGroup(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\t// v8 ignore next -- has() 已确认键存在,get() 恒返回组件\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 (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.facade.getRetryAttempt();\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? retryAttempt === 1\n\t\t\t\t\t\t\t\t\t? t(\"Aborted after {count} retry attempt\", { count: retryAttempt })\n\t\t\t\t\t\t\t\t\t: t(\"Aborted after {count} retry attempts\", { count: retryAttempt })\n\t\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, false);\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 || t(\"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\tthis.activeToolRunGroup?.noteResult(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// No tool execution follows an aborted/errored message:\n\t\t\t\t\t\t// finalize the group marker here.\n\t\t\t\t\t\tthis.activeToolRunGroup?.markRunComplete();\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\tthis.maybeShowThinkingDropNotice(this.streamingMessage);\n\t\t\t\t\t\tthis.maybeShowCacheMissNotice(this.streamingMessage);\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\t// D-083: a toolUse stop reason is followed by tool execution\n\t\t\t\t\t// events (start/end arrive after message_end — the session\n\t\t\t\t\t// executes tools once the streamed message completes), so the\n\t\t\t\t\t// group stays open for setActiveTool/noteResult here and is\n\t\t\t\t\t// finalized at agent_end / the next message_start.\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 \"bash_execution_update\":\n\t\t\t\t// The bash execution callback handles TUI output rendering.\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},\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.facade.getCwd(),\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.addToolToRunGroup(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.activeToolRunGroup?.setActiveTool(event.toolName);\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.activeToolRunGroup?.noteResult(event.isError);\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\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 \"capability_command_result\": {\n\t\t\t\tconst links = event.result.links?.map((link) => `${link.label}: ${link.url}`) ?? [];\n\t\t\t\tconst message = [event.result.message, ...links].filter(Boolean).join(\"\\n\");\n\t\t\t\tif (event.result.status === \"error\") this.showError(message);\n\t\t\t\telse this.showStatus(message);\n\t\t\t\tthis.ui.requestRender();\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\tthis.clearStatusIndicator(\"working\");\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\t\t\t\t// D-083: the whole agent turn (messages + tool executions) is\n\t\t\t\t// over — finalize the last group's marker (count/sole-tool name\n\t\t\t\t// + failure count). Completed groups stay in the transcript.\n\t\t\t\tthis.activeToolRunGroup?.markRunComplete();\n\t\t\t\tthis.activeToolRunGroup = undefined;\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"agent_settled\":\n\t\t\t\tawait this.checkShutdownRequested();\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.facade.abortCompaction();\n\t\t\t\t};\n\t\t\t\tthis.showStatusIndicator(new CompactionStatusIndicator(this.ui, event.reason));\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\tthis.clearStatusIndicator(\"compaction\");\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\t\tthis.showError(t(\"Compaction cancelled\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showStatus(t(\"Auto-compaction cancelled\"));\n\t\t\t\t\t}\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\tconst entries = this.facade.getContextEntries();\n\t\t\t\t\tif (entries[0]?.type !== \"compaction\") {\n\t\t\t\t\t\tthrow new Error(t(\"Completed compaction is missing from the session context\"));\n\t\t\t\t\t}\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t// The latest compaction is prepended for model context; append it below at its chronological position.\n\t\t\t\t\tthis.renderSessionEntries(entries.slice(1));\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),\n\t\t\t\t\t);\n\t\t\t\t\tif (event.result.usage) {\n\t\t\t\t\t\tthis.addCompactionCostNotice({\n\t\t\t\t\t\t\ttype: \"compaction_cost\",\n\t\t\t\t\t\t\tkind: \"compaction\",\n\t\t\t\t\t\t\tusage: event.result.usage,\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.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 \"compaction_skipped\": {\n\t\t\t\tthis.showStatus(t(\"Auto-compaction skipped: nothing to compact\"));\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// 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.facade.abortRetry();\n\t\t\t\t};\n\t\t\t\tthis.showStatusIndicator(\n\t\t\t\t\tnew RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs),\n\t\t\t\t);\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\tthis.clearStatusIndicator(\"retry\");\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(\n\t\t\t\t\t\tt(\"Retry failed after {count} attempts: {error}\", {\n\t\t\t\t\t\t\tcount: event.attempt,\n\t\t\t\t\t\t\terror: event.finalError || t(\"Unknown error\"),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_scheduled\": {\n\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\tthis.showStatusIndicator(\n\t\t\t\t\tnew RetryStatusIndicator(this.ui, event.attempt, event.maxAttempts, event.delayMs),\n\t\t\t\t);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_attempt_start\": {\n\t\t\t\tthis.clearStatusIndicator(\"retry\");\n\t\t\t\tif (event.source === \"branchSummary\") {\n\t\t\t\t\tthis.showStatusIndicator(new BranchSummaryStatusIndicator(this.ui));\n\t\t\t\t} else {\n\t\t\t\t\tthis.showStatusIndicator(new CompactionStatusIndicator(this.ui, event.reason));\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"summarization_retry_finished\": {\n\t\t\t\tthis.clearStatusIndicator(\"retry\");\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/** Show a managed-tool status update in the chat. */\n\tprivate showManagedToolStatus(status: ToolStatus): void {\n\t\tif (!this.managedToolStatusStarted) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.managedToolStatusStarted = true;\n\t\t}\n\t\tconst message = status.type === \"warning\" ? t(\"Warning: {message}\", { message: status.message }) : status.message;\n\t\tconst color = status.type === \"warning\" ? \"warning\" : \"dim\";\n\t\tthis.chatContainer.addChild(new Text(theme.fg(color, message), 1, 0));\n\t\tthis.lastStatusSpacer = undefined;\n\t\tthis.lastStatusText = undefined;\n\t\tthis.ui.requestRender();\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\tshowStatus(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(theme.fg(\"dim\", 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(theme.fg(\"dim\", 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 = undefined;\n\t\t\t\t\tconst component = new CustomMessageComponent(\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\trenderer,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t);\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\tthis.chatContainer.addChild(new Spacer(1));\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\tthis.outputPad,\n\t\t\t\t\t\t\t\tthis.getMarkdownTransformers(),\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(\n\t\t\t\t\t\t\ttextContent,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\tthis.outputPad,\n\t\t\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\t\t);\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.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\tthis.outputPad,\n\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t);\n\t\t\t\t// D-083: restored/finished-turn thinking must follow detail mode\n\t\t\t\t// (ctrl+o) — the setToolsExpanded loop only reaches children on\n\t\t\t\t// toggle, not components created while already expanded.\n\t\t\t\tif (this.toolOutputExpanded) {\n\t\t\t\t\tassistantComponent.setExpanded(true);\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\t// v8 ignore next -- exhaustive over AgentMessage roles\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate renderSessionItems(\n\t\titems: readonly RenderSessionItem[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tconst renderedPendingTools = new Map<string, ToolExecutionComponent>();\n\t\t// Cache-miss notices are not persisted; re-derive them from the full entry\n\t\t// list and re-inject them after the assistant messages that paid for them.\n\t\tconst cacheMisses = this.settingsManager.getShowCacheMissNotices()\n\t\t\t? collectCacheMisses(this.facade.getEntries(), this.facade.getModelPriceSource())\n\t\t\t: new Map<AssistantMessage, CacheMiss>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const item of items) {\n\t\t\tif (isCustomSessionEntry(item)) {\n\t\t\t\t// No entry renderer source since the legacy extension surface was\n\t\t\t\t// removed; previously renderer-less entries were skipped as well.\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (isCompactionCostNotice(item)) {\n\t\t\t\tthis.addCompactionCostNotice(item);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst message = item;\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// No message_start on the restore path: reset the group pointer\n\t\t\t\t// so each assistant message forms its own tool-run group (D-083).\n\t\t\t\tthis.activeToolRunGroup = undefined;\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},\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.facade.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.addToolToRunGroup(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.facade.getRetryAttempt();\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? retryAttempt === 1\n\t\t\t\t\t\t\t\t\t\t\t? t(\"Aborted after {count} retry attempt\", { count: retryAttempt })\n\t\t\t\t\t\t\t\t\t\t\t: t(\"Aborted after {count} retry attempts\", { count: retryAttempt })\n\t\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 || t(\"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\tthis.noteResultInActiveToolRunGroup(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\tthis.markActiveToolRunGroupComplete();\n\t\t\t\tif (message.stopReason !== \"aborted\" && message.stopReason !== \"error\") {\n\t\t\t\t\tconst miss = cacheMisses.get(message);\n\t\t\t\t\tif (miss) this.addCacheMissNotice(miss);\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\t// Failure never goes silent (D-083): count it on the group\n\t\t\t\t\t// the restored tool call belongs to.\n\t\t\t\t\tthis.noteResultInActiveToolRunGroup(message.isError);\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\tfor (const [toolCallId, component] of renderedPendingTools) {\n\t\t\tthis.pendingTools.set(toolCallId, component);\n\t\t}\n\t\t// Groups stay in the transcript; reset the pointer so a live turn\n\t\t// starts a fresh group (D-083).\n\t\tthis.activeToolRunGroup = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Render session entries to chat. Used for initial load and rebuild after compaction.\n\t * @param entries Compaction-aware session entries 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 renderSessionEntries(\n\t\tentries: SessionEntry[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tconst items = entries.flatMap((entry): RenderSessionItem[] => {\n\t\t\tif (entry.type === \"custom\") {\n\t\t\t\treturn [entry];\n\t\t\t}\n\t\t\tconst messages = sessionEntryToContextMessages(entry);\n\t\t\tif ((entry.type === \"compaction\" || entry.type === \"branch_summary\") && entry.usage && messages.length > 0) {\n\t\t\t\treturn [...messages, { type: \"compaction_cost\", kind: entry.type, usage: entry.usage }];\n\t\t\t}\n\t\t\treturn messages;\n\t\t});\n\t\tthis.renderSessionItems(items, options);\n\t}\n\n\t/**\n\t * Render billing usage for a compaction or branch summary. The notice is derived\n\t * from persisted summary usage and is not stored as a separate session entry.\n\t */\n\tprivate addCompactionCostNotice(notice: CompactionCostNotice): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\tconst { usage } = notice;\n\t\tconst tokens = usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n\t\tconst cost = usage.cost.total >= 0.01 ? ` (~$${usage.cost.total.toFixed(2)})` : \"\";\n\t\tconst label = notice.kind === \"compaction\" ? t(\"Compaction\") : t(\"Branch summary\");\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\t`${label}: ${t(\"{tokens} tokens billed{cost}\", { tokens: formatTokens(tokens), cost })}`,\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate static countDroppedThinkingBlocks(message: AssistantMessage): number {\n\t\tlet count = 0;\n\t\tfor (const diagnostic of message.diagnostics ?? []) {\n\t\t\tif (diagnostic.type !== \"anthropic_input_transformations\") continue;\n\t\t\tconst transformations = diagnostic.details?.transformations;\n\t\t\tif (!Array.isArray(transformations)) continue;\n\t\t\tcount += transformations.filter(\n\t\t\t\t(transformation) =>\n\t\t\t\t\ttypeof transformation === \"object\" &&\n\t\t\t\t\ttransformation !== null &&\n\t\t\t\t\t(transformation as Record<string, unknown>).type === \"thinking_dropped\",\n\t\t\t).length;\n\t\t}\n\t\treturn count;\n\t}\n\n\tprivate maybeShowThinkingDropNotice(message: AssistantMessage): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\tconst droppedCount = InteractiveMode.countDroppedThinkingBlocks(message);\n\t\tif (droppedCount === 0) return;\n\n\t\tlet previousDroppedCount = 0;\n\t\t// message_end reaches the UI before the current message is persisted,\n\t\t// so the branch's last assistant message is the previous response.\n\t\tconst entries = this.facade.getEntries();\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\tpreviousDroppedCount = InteractiveMode.countDroppedThinkingBlocks(entry.message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (droppedCount <= previousDroppedCount) return;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.fg(\n\t\t\t\t\t\"warning\",\n\t\t\t\t\tt(\"Anthropic dropped {count} thinking blocks (details in session)\", { count: droppedCount }),\n\t\t\t\t),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Show a transcript notice when a completed assistant message paid for a\n\t * significant cache miss. Only states observable facts: the miss itself,\n\t * a model switch, or an idle gap past the cache TTL.\n\t */\n\tprivate maybeShowCacheMissNotice(message: AssistantMessage): void {\n\t\tif (!this.settingsManager.getShowCacheMissNotices()) return;\n\n\t\t// Entries don't contain `message` yet: message_end fires before persistence.\n\t\tconst miss = detectCacheMiss(this.facade.getEntries(), message, this.facade.getModelPriceSource());\n\t\tif (miss) this.addCacheMissNotice(miss);\n\t}\n\n\tprivate addCacheMissNotice(miss: CacheMiss): void {\n\t\tif (miss.missedTokens < 20_000 && miss.missedCost < 0.1) return;\n\n\t\tconst cost = miss.missedCost >= 0.01 ? ` (~$${miss.missedCost.toFixed(2)})` : \"\";\n\t\tconst reBilled = t(\"{tokens} tokens re-billed{cost}\", { tokens: formatTokens(miss.missedTokens), cost });\n\t\tlet label = t(\"Cache miss\");\n\t\tif (miss.modelChanged) {\n\t\t\tlabel = t(\"Cache miss after model switch\");\n\t\t} else if (miss.idleMs >= CACHE_TTL_MS) {\n\t\t\tlabel = t(\"Cache miss after {minutes}m idle\", { minutes: Math.round(miss.idleMs / 60_000) });\n\t\t}\n\t\tconst text = theme.fg(\"warning\", `${label}: ${reBilled}`);\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(text, 1, 0));\n\t}\n\n\trenderInitialMessages(): void {\n\t\tconst entries = this.facade.getContextEntries();\n\t\tthis.renderSessionEntries(entries, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.facade.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tthis.showStatus(\n\t\t\t\tcompactionCount === 1\n\t\t\t\t\t? t(\"Session compacted {count} time\", { count: compactionCount })\n\t\t\t\t\t: t(\"Session compacted {count} times\", { count: compactionCount }),\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\tconst queuedInput = this.pendingUserInputs.shift();\n\t\tif (queuedInput !== undefined) {\n\t\t\treturn queuedInput;\n\t\t}\n\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\tthis.renderSessionEntries(this.facade.getContextEntries());\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\tasync shutdown(options?: { fromSignal?: boolean }): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\t\t// Keep signal handlers registered until terminal cleanup has completed.\n\t\t// `signal-exit` checks the listener list during the same SIGTERM/SIGHUP\n\t\t// dispatch and re-sends the signal if only its own listeners remain.\n\n\t\tif (options?.fromSignal) {\n\t\t\t// Signal-triggered shutdown (SIGTERM/SIGHUP). Emit extension cleanup\n\t\t\t// (session_shutdown) BEFORE touching the terminal. Extension teardown\n\t\t\t// such as removing sockets does not write to the tty, so it must not be\n\t\t\t// skipped if a later terminal-restore write fails on a dead or stalled\n\t\t\t// terminal. If the terminal is gone, the restore writes below emit EIO,\n\t\t\t// which the stdout/stderr error handler turns into emergencyTerminalExit;\n\t\t\t// the render loop is already idle, so this cannot hot-spin (see #4144).\n\t\t\tawait this.runtimeFacade.dispose();\n\t\t\tthis.themeController.disableAutoSync();\n\t\t\tawait this.ui.terminal.drainInput(1000);\n\t\t\tthis.stop();\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// Interactive quit (Ctrl+D, Ctrl+C, /quit, extension shutdown()). Stop the\n\t\t// TUI before emitting shutdown events so extension UI cleanup cannot repaint\n\t\t// the final frame while the process is exiting.\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\tthis.themeController.disableAutoSync();\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tawait this.runtimeFacade.dispose();\n\n\t\tconst resumeCommand = formatResumeCommand(this.runtimeFacade);\n\t\tif (resumeCommand) {\n\t\t\tprocess.stdout.write(`${chalk.dim(t(\"To resume this session:\"))} ${resumeCommand}\\n`);\n\t\t}\n\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 * Last-resort handler for uncaught exceptions. The TUI puts stdin into raw\n\t * mode and hides the cursor; without this handler, an uncaught throw from\n\t * anywhere (e.g. an extension's async `ChildProcess.on(\"exit\")` callback)\n\t * tears down the process while leaving the terminal in raw mode with no\n\t * cursor, requiring `stty sane && reset` to recover.\n\t *\n\t * Unlike emergencyTerminalExit, the terminal is still alive here, so we\n\t * call ui.stop() to restore cooked mode, the cursor, and disable bracketed\n\t * paste / Kitty / modifyOtherKeys sequences.\n\t */\n\tprivate uncaughtCrash(error: Error): never {\n\t\tif (this.isShuttingDown) {\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tthis.isShuttingDown = true;\n\t\ttry {\n\t\t\tthis.unregisterSignalHandlers();\n\t\t} catch {}\n\t\ttry {\n\t\t\tkillTrackedDetachedChildren();\n\t\t} catch {}\n\t\ttry {\n\t\t\tthis.ui.stop();\n\t\t} catch {}\n\t\tconsole.error(t(\"{app} exiting due to uncaughtException:\", { app: APP_NAME }));\n\t\tconsole.error(error);\n\t\tprocess.exit(1);\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\t// SIGHUP no longer hard-exits: graceful shutdown emits session_shutdown\n\t\t\t\t// first, then attempts terminal restore. A genuinely dead terminal\n\t\t\t\t// surfaces as an EIO on the restore writes, which the stdout/stderr\n\t\t\t\t// error handler converts into emergencyTerminalExit (see #4144, #5080).\n\t\t\t\tkillTrackedDetachedChildren();\n\t\t\t\tvoid this.shutdown({ fromSignal: true });\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\n\t\t// Restore the terminal before the process dies on any uncaught throw.\n\t\t// Without this, an unhandled exception from extension code (or anywhere\n\t\t// in the application) leaves the terminal in raw mode with no cursor.\n\t\tconst uncaughtExceptionHandler = (error: Error) => this.uncaughtCrash(error);\n\t\tprocess.prependListener(\"uncaughtException\", uncaughtExceptionHandler);\n\t\tthis.signalCleanupHandlers.push(() => process.off(\"uncaughtException\", uncaughtExceptionHandler));\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(t(\"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(explicitText?: string): Promise<void> {\n\t\tconst text = (explicitText ?? 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.facade.isCompacting()) {\n\t\t\tthis.queueCompactionMessage(text, \"followUp\");\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.facade.isStreaming()) {\n\t\t\t// An explicit /queue <text> argument must not touch the editor draft.\n\t\t\tif (explicitText === undefined) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t}\n\t\t\tawait this.facade.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.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\tif (explicitText === undefined) this.editor.setText(\"\");\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(t(\"No queued messages to restore\"));\n\t\t} else if (restored === 1) {\n\t\t\tthis.showStatus(t(\"Restored {count} queued message to editor\", { count: restored }));\n\t\t} else {\n\t\t\tthis.showStatus(t(\"Restored {count} queued messages to editor\", { count: restored }));\n\t\t}\n\t}\n\n\t/** /queue command host face (single-entry iron law): queues the given text for after the current run. A bare /queue cannot mirror the keybinding — the editor buffer is cleared on submit before the command runs — so it prints usage instead of silently doing nothing. */\n\thandleQueueCommand(text: string | undefined): Promise<void> {\n\t\tif (text === undefined || text.trim() === \"\") {\n\t\t\tthis.showStatus(t(\"Usage: /queue <text>\"));\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\treturn this.handleFollowUp(text);\n\t}\n\n\t/** /dequeue command host face: restore queued messages back to the editor. */\n\thandleDequeueCommand(): void {\n\t\tthis.handleDequeue();\n\t}\n\n\t/** /queue-list command host face: open the queued-message manager selector. Both queues empty is a status message, not an empty overlay. */\n\thandleQueueListCommand(): void {\n\t\tconst steering = this.facade.getSteeringMessages();\n\t\tconst followUp = this.facade.getFollowUpMessages();\n\t\tif (steering.length === 0 && followUp.length === 0) {\n\t\t\tthis.showStatus(t(\"No queued messages to manage\"));\n\t\t\treturn;\n\t\t}\n\t\tselectorsFlow.showQueueManagerSelector(this);\n\t}\n\n\t/** /editor command host face: edit the current input in an external editor. */\n\thandleEditorCommand(): Promise<void> {\n\t\treturn this.handleOpenExternalEditor();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tupdateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.facade.getState().thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.facade.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(t(\"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(t(\"Thinking level: {level}\", { level: newLevel }));\n\t\t}\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.facade.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg =\n\t\t\t\t\tthis.facade.getScopedModels().length > 0 ? t(\"Only one model in scope\") : t(\"Only one model available\");\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\"\n\t\t\t\t\t\t? ` ${t(\"(thinking: {level})\", { level: result.thinkingLevel })}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\tthis.showStatus(\n\t\t\t\t\tt(\"Switched to {model}{thinking}\", {\n\t\t\t\t\t\tmodel: result.model.name || result.model.id,\n\t\t\t\t\t\tthinking: thinkingStr,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(result.model);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\ttoggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\t/**\n\t * D-083 quiet transcript: mount a tool component into the current\n\t * assistant turn's tool-run group (creating the group on first tool of\n\t * the turn) instead of the chat container directly. Collapsed groups\n\t * render one dim marker line for the whole turn.\n\t */\n\tprivate addToolToRunGroup(component: ToolExecutionComponent): void {\n\t\tif (!this.activeToolRunGroup) {\n\t\t\tthis.activeToolRunGroup = new ToolRunGroupComponent();\n\t\t\tthis.activeToolRunGroup.setExpanded(this.toolOutputExpanded);\n\t\t\tthis.chatContainer.addChild(this.activeToolRunGroup);\n\t\t}\n\t\tthis.activeToolRunGroup.addTool(component);\n\t}\n\n\t/**\n\t * Narrowing-safe faces for the active group inside renderSessionItems:\n\t * addToolToRunGroup may (re)assign this.activeToolRunGroup behind the\n\t * compiler's back, so group reads go through methods instead of the\n\t * narrowed property reference.\n\t */\n\tprivate noteResultInActiveToolRunGroup(isError: boolean): void {\n\t\tthis.activeToolRunGroup?.noteResult(isError);\n\t}\n\n\tprivate markActiveToolRunGroupComplete(): void {\n\t\tthis.activeToolRunGroup?.markRunComplete();\n\t}\n\n\tsetToolsExpanded(expanded: boolean): void {\n\t\tif (expanded === this.toolOutputExpanded) return;\n\n\t\tthis.toolOutputExpanded = expanded;\n\t\tconst activeHeader = this.builtInHeader;\n\t\tif (isExpandable(activeHeader)) {\n\t\t\tactiveHeader.setExpanded(expanded);\n\t\t}\n\t\tfor (const container of [this.loadedResourcesContainer, this.chatContainer]) {\n\t\t\tfor (const child of container.children) {\n\t\t\t\tif (isExpandable(child)) {\n\t\t\t\t\tchild.setExpanded(expanded);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.showStatus(expanded ? t(\"Tool output: expanded\") : t(\"Tool output: collapsed\"));\n\t}\n\n\t/** Update rendered assistant messages without rebuilding live tool components. */\n\tprivate updateThinkingBlockVisibility(): void {\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\tchild.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\t\tthis.updateThinkingBlockVisibility();\n\t\tthis.showStatus(this.hideThinkingBlock ? t(\"Thinking blocks: hidden\") : t(\"Thinking blocks: visible\"));\n\t}\n\n\tprivate async handleOpenExternalEditor(): Promise<void> {\n\t\tconst editorCmd = this.settingsManager.getExternalEditorCommand();\n\t\tconst content = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tthis.ui.stop();\n\t\ttry {\n\t\t\tconst result = await editInExternalEditor({\n\t\t\t\tcommand: editorCmd,\n\t\t\t\tcontent,\n\t\t\t});\n\t\t\tif (result.status === \"complete\") {\n\t\t\t\tthis.editor.setText(result.content);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.ui.start();\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\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"error\", t(\"Error: {message}\", { message: errorMessage })), this.outputPad, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"warning\", t(\"Warning: {message}\", { message: warningMessage })), 1, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(release: LatestRelease): void {\n\t\tconst action = theme.fg(\"accent\", `${APP_NAME} update`);\n\t\tconst updateInstruction =\n\t\t\ttheme.fg(\"muted\", `${t(\"New version {version} is available. Run\", { version: release.version })} `) + action;\n\t\tconst changelogUrl = process.env.AGENT_FORGE_CHANGELOG_URL;\n\t\tconst changelogLine = changelogUrl\n\t\t\t? theme.fg(\"muted\", `${t(\"Changelog:\")} `) +\n\t\t\t\t(getCapabilities().hyperlinks\n\t\t\t\t\t? hyperlink(theme.fg(\"accent\", changelogUrl), changelogUrl)\n\t\t\t\t\t: theme.fg(\"accent\", changelogUrl))\n\t\t\t: theme.fg(\"muted\", t(\"Changelog URL is not configured.\"));\n\t\tconst note = release.note?.trim();\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(`${theme.bold(theme.fg(\"warning\", t(\"Update Available\")))}\\n${updateInstruction}`, 1, 0),\n\t\t);\n\t\tif (note) {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Markdown(note, 1, 0, this.getMarkdownThemeWithSettings(), {\n\t\t\t\t\tcolor: (text) => theme.fg(\"muted\", text),\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t}\n\t\tthis.chatContainer.addChild(new Text(changelogLine, 1, 0));\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 --extensions`);\n\t\tconst updateInstruction = theme.fg(\"muted\", `${t(\"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\", t(\"Package Updates Available\")))}\\n${updateInstruction}\\n${theme.fg(\"muted\", `${t(\"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 * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.facade.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.facade.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\tconst { steering, followUp } = this.facade.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t};\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (queue manager close path). */\n\tupdatePendingMessagesDisplay(): void {\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst { steering: steeringMessages, followUp: followUpMessages } = this.getAllQueuedMessages();\n\t\tif (steeringMessages.length > 0 || followUpMessages.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", t(\"Steering: {message}\", { message }));\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text = theme.fg(\"dim\", t(\"Follow-up: {message}\", { message }));\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\t// The dequeue keybinding's shipped default was cleared (iron law):\n\t\t\t// /queue's sibling command is the discoverable entry.\n\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"app.message.dequeue\") || \"/dequeue\";\n\t\t\tconst hintText = theme.fg(\"dim\", t(\"↳ {key} to edit all queued messages\", { key: dequeueHint }));\n\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t}\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: {\n\t\tabort?: boolean;\n\t\t/** Interrupt grading (设计 子代理运行时 §4.2): false aborts the turn\n\t\t * without cancelling background agent tasks. */\n\t\tcancelAgentTasks?: boolean;\n\t\tcurrentText?: string;\n\t}): number {\n\t\tconst { steering, followUp } = this.clearAllQueues();\n\t\tconst allQueued = [...steering, ...followUp];\n\t\tconst abortOptions =\n\t\t\toptions?.abort === true\n\t\t\t\t? { ...(options.cancelAgentTasks === undefined ? {} : { cancelAgentTasks: options.cancelAgentTasks }) }\n\t\t\t\t: undefined;\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (abortOptions !== undefined) {\n\t\t\t\tvoid this.facade.abort(abortOptions);\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (abortOptions !== undefined) {\n\t\t\tvoid this.facade.abort(abortOptions);\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(t(\"Queued message for after compaction\"));\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.facade.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\tqueuedMessages.length > 1\n\t\t\t\t\t? t(\"Failed to send queued messages: {error}\", {\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t})\n\t\t\t\t\t: t(\"Failed to send queued message: {error}\", {\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t}),\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.facade.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.facade.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [firstPrompt, ...rest] = queuedMessages;\n\n\t\t\t// Start a prompt when idle, or queue it into a run still finishing compaction.\n\t\t\tconst promptPromise = this.facade\n\t\t\t\t.prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\trestoreQueue(error);\n\t\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.facade.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.facade.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// Suite/thinking/model/scoped-models/user-message-fork/clone selectors are\n\t// implemented in ./interactive-selectors.ts (S5 slice 5) behind the\n\t// SelectorsHost interface; same-name delegates below keep the command\n\t// dispatch and prototype-level tests bound to these names. The selector\n\t// infrastructure (showSelector/disposeActiveSelector), the settings/tree/\n\t// session selectors, and resume stay on the mode: the settings and tree\n\t// selectors assemble from broad private UI state, and the session/resume\n\t// path is the documented session-boundary carve-out (SessionManager\n\t// manager-level writes plus per-entry display reads).\n\t// =========================================================================\n\n\tdisposeActiveSelector(): void {\n\t\tconst dispose = this.activeSelectorDispose;\n\t\tthis.activeSelectorToken = undefined;\n\t\tthis.activeSelectorDispose = undefined;\n\t\tdispose?.();\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\tshowSelector(create: (done: () => void) => { component: Component; focus: Component; dispose?: () => void }): void {\n\t\tconst token = {};\n\t\tlet dispose: (() => void) | undefined;\n\t\tconst done = () => {\n\t\t\tdispose?.();\n\t\t\tif (this.activeSelectorToken !== token) return;\n\t\t\tthis.activeSelectorToken = undefined;\n\t\t\tthis.activeSelectorDispose = undefined;\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 created = create(done);\n\t\tdispose = created.dispose;\n\t\tthis.disposeActiveSelector();\n\t\tthis.activeSelectorToken = token;\n\t\tthis.activeSelectorDispose = dispose;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(created.component);\n\t\tthis.ui.setFocus(created.focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tlet selector: SettingsSelectorComponent | undefined;\n\t\t\tconst defaultProvider = this.settingsManager.getDefaultProvider();\n\t\t\tconst defaultModelId = this.settingsManager.getDefaultModel();\n\t\t\tconst defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t(\"not set\");\n\t\t\tselector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tdefaultModel,\n\t\t\t\t\tcurrentModel: this.facade.getModel(),\n\t\t\t\t\tavailableDefaultModels: this.facade.getAvailableModels(),\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\tsteeringMode: this.facade.getSteeringMode(),\n\t\t\t\t\tfollowUpMode: this.facade.getFollowUpMode(),\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\thttpIdleTimeoutMs: this.settingsManager.getHttpIdleTimeoutMs(),\n\t\t\t\t\tthinkingLevel: this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,\n\t\t\t\t\tavailableThinkingLevels: [...THINKING_LEVEL_OPTIONS],\n\t\t\t\t\tmodelThinkingLevels: this.settingsManager.getAllModelThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.themeController.getThemeSelection() || \"dark\",\n\t\t\t\t\tterminalTheme: this.themeController.getTerminalTheme(),\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tmermaidRenderingMode: this.settingsManager.getMermaidRenderingMode(),\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\tuiLanguage: this.settingsManager.getUiLanguage(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\tshowCacheMissNotices: this.settingsManager.getShowCacheMissNotices(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\toutputPad: this.settingsManager.getOutputPad(),\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\ttuiMode: this.ui.mode,\n\t\t\t\t\tfullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),\n\t\t\t\t\tfullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),\n\t\t\t\t\tfullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),\n\t\t\t\t\tfullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),\n\t\t\t\t\twarnings: this.settingsManager.getWarnings(),\n\t\t\t\t},\n\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\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.facade.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.facade.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.host.setTransport(transport);\n\t\t\t\t\t},\n\t\t\t\t\tonHttpIdleTimeoutMsChange: (timeoutMs) => {\n\t\t\t\t\t\tthis.settingsManager.setHttpIdleTimeoutMs(timeoutMs);\n\t\t\t\t\t\tconfigureHttpDispatcher(timeoutMs);\n\t\t\t\t\t\tthis.showStatus(t(\"HTTP idle timeout: {value}\", { value: formatHttpIdleTimeoutMs(timeoutMs) }));\n\t\t\t\t\t},\n\t\t\t\t\tonModelThinkingLevelChange: (provider, modelId, level) => {\n\t\t\t\t\t\tthis.settingsManager.setModelThinkingLevel(provider, modelId, level);\n\t\t\t\t\t\t// If the override is for the current model, apply it to the session too\n\t\t\t\t\t\tconst current = this.facade.getModel();\n\t\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\t\tthis.facade.setThinkingLevel(level);\n\t\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonModelThinkingLevelRemove: (provider, modelId) => {\n\t\t\t\t\t\tthis.settingsManager.removeModelThinkingLevel(provider, modelId);\n\t\t\t\t\t\t// If the override was for the current model, revert to global default\n\t\t\t\t\t\tconst current = this.facade.getModel();\n\t\t\t\t\t\tif (current && current.provider === provider && current.id === modelId) {\n\t\t\t\t\t\t\tconst globalDefault = this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t\t\t\t\t\t\tthis.facade.setThinkingLevel(globalDefault);\n\t\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeSetting) => {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeSetting);\n\t\t\t\t\t\tvoid this.themeController.setThemeSetting(themeSetting);\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => this.themeController.preview(themeName),\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\tthis.updateThinkingBlockVisibility();\n\t\t\t\t\t},\n\t\t\t\t\tonMermaidRenderingModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setMermaidRenderingMode(mode);\n\t\t\t\t\t\tthis.chatContainer.invalidate();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t\tonShowCacheMissNoticesChange: (shown) => {\n\t\t\t\t\t\tthis.settingsManager.setShowCacheMissNotices(shown);\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\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\tonUiLanguageChange: (language) => {\n\t\t\t\t\t\tthis.settingsManager.setUiLanguage(language);\n\t\t\t\t\t\tsetI18nLanguage(language);\n\t\t\t\t\t\tthis.ui.requestRender();\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\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\tonOutputPadChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setOutputPad(padding);\n\t\t\t\t\t\tthis.outputPad = padding;\n\t\t\t\t\t\tif (this.streamingComponent || this.facade.isStreaming()) {\n\t\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tchild instanceof AssistantMessageComponent ||\n\t\t\t\t\t\t\t\t\tchild instanceof CustomMessageComponent ||\n\t\t\t\t\t\t\t\t\tchild instanceof UserMessageComponent\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tchild.setOutputPad(padding);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\t\t\t\tthis.streamingComponent.setOutputPad(padding);\n\t\t\t\t\t\t\t}\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\t\t\t\t\t\tthis.rebuildChatFromMessages();\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\tif (!enabled && !this.activeStatusIndicator) {\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\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\tonTuiModeChange: (mode) => {\n\t\t\t\t\t\tif (!this.switchTuiMode(mode)) {\n\t\t\t\t\t\t\tselector?.getSettingsList().updateValue(\"tui-mode\", this.ui.mode);\n\t\t\t\t\t\t\tthis.showStatus(t(\"Close active overlays before changing TUI mode\"));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.settingsManager.setTuiMode(mode);\n\t\t\t\t\t\tif (!this.activeStatusIndicator) this.statusContainer.clear();\n\t\t\t\t\t\tthis.showStatus(t(\"TUI mode: {mode}\", { mode }));\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenExitOutputChange: (output) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenExitOutput(output);\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenScrollbarChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenScrollbar(mode);\n\t\t\t\t\t\tthis.applyFullscreenScrollbarSetting();\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenCopyOnSelectChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenCopyOnSelect(enabled);\n\t\t\t\t\t\tif (this.renderer instanceof TuiAltScreen) this.renderer.setCopyOnSelect(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonFullscreenWheelScrollLinesChange: (lines) => {\n\t\t\t\t\t\tthis.settingsManager.setFullscreenWheelScrollLines(lines);\n\t\t\t\t\t\tif (this.renderer instanceof TuiAltScreen) this.renderer.setWheelScrollLines(lines);\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\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\t/** /thinking command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\thandleThinkingCommand(searchTerm?: string): void {\n\t\tselectorsFlow.handleThinkingCommand(this, searchTerm);\n\t}\n\n\t/** Thinking level apply; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate selectThinkingLevel(level: ThinkingLevel, persist: boolean): void {\n\t\tselectorsFlow.selectThinkingLevel(this, level, persist);\n\t}\n\n\t/** Thinking level picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showThinkingSelector(): void {\n\t\tselectorsFlow.showThinkingSelector(this);\n\t}\n\n\t/**\n\t * Current session's suite id, read from the session custom entry recorded at\n\t * creation (设计 §10.1). Never inferred from settings or env; undefined when\n\t * the session carries no suite entry (e.g. resumed legacy sessions).\n\t * Internal collaboration surface; exposed for ./interactive-selectors.ts\n\t * (S5 slice 5) while the read stays on the mode (session-boundary carve-out).\n\t */\n\tgetCurrentSessionSuiteId(): string | undefined {\n\t\tconst entries = this.facade.getEntries();\n\t\tfor (let i = entries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.type !== \"custom\" || entry.customType !== SUITE_SESSION_ENTRY_TYPE) continue;\n\t\t\tconst suiteId = (entry.data as { suiteId?: unknown } | undefined)?.suiteId;\n\t\t\tif (typeof suiteId === \"string\" && suiteId.trim().length > 0) return suiteId;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate sessionSuiteIdCache: Map<string, string | undefined> | undefined;\n\n\t/** Host-visible for ./interactive-selectors.ts (S5 slice 5): narrow session read. */\n\tgetAvailableThinkingLevels(): ThinkingLevel[] {\n\t\treturn this.facade.getAvailableThinkingLevels();\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (S5 slice 5): narrow session read. */\n\tgetUserMessagesForForking(): Array<{ entryId: string; text: string; replySummary?: string }> {\n\t\treturn this.facade.getUserMessagesForForking();\n\t}\n\n\t/**\n\t * Bound suite id of a listed session (设计 §10.1), read from the session\n\t * file's binding entry and cached per path — the selector refilters the\n\t * list on every keystroke.\n\t */\n\tprivate readSessionSuiteId(sessionPath: string): string | undefined {\n\t\tthis.sessionSuiteIdCache ??= new Map();\n\t\tif (this.sessionSuiteIdCache.has(sessionPath)) return this.sessionSuiteIdCache.get(sessionPath);\n\t\tconst suiteId = readSessionSuiteIdFromFile(sessionPath);\n\t\tthis.sessionSuiteIdCache.set(sessionPath, suiteId);\n\t\treturn suiteId;\n\t}\n\n\t/** /suite command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\thandleSuiteCommand(suiteId?: string): void {\n\t\tselectorsFlow.handleSuiteCommand(this, suiteId);\n\t}\n\n\t/** Suite list overlay; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showSuiteSelector(availableSuites: readonly string[]): void {\n\t\tselectorsFlow.showSuiteSelector(this, availableSuites);\n\t}\n\n\t/**\n\t * Shared suite list overlay (设计 §9); implementation in\n\t * ./interactive-selectors.ts (S5 slice 5).\n\t */\n\tprivate openSuiteListSelector(callbacks: {\n\t\tavailableSuites: readonly string[];\n\t\t/** explanatory line under the title; defaults to the /suite wording */\n\t\tnote?: string;\n\t\tonSelect: (suiteId: string) => void;\n\t\tonCancel: () => void;\n\t}): void {\n\t\tselectorsFlow.openSuiteListSelector(this, callbacks);\n\t}\n\n\t/**\n\t * Interactive recovery for an unresolved startup suite id (设计 §9): pick a\n\t * suite, persist it as the project setting, then rebuild the session with\n\t * the selected suite via the same /new assembly path. Cancelling keeps the\n\t * fallback assembly the runtime started with.\n\t */\n\tprivate async showStartupSuiteSelector(pending: {\n\t\trequestedId: string;\n\t\tavailable: readonly string[];\n\t}): Promise<void> {\n\t\tconst selected = await new Promise<string | undefined>((resolve) => {\n\t\t\tthis.openSuiteListSelector({\n\t\t\t\tavailableSuites: pending.available,\n\t\t\t\tnote: t('Suite \"{id}\" was not found. The selected suite applies to the new session.', {\n\t\t\t\t\tid: pending.requestedId,\n\t\t\t\t}),\n\t\t\t\tonSelect: (suiteId) => resolve(suiteId),\n\t\t\t\tonCancel: () => resolve(undefined),\n\t\t\t});\n\t\t});\n\n\t\tif (selected === undefined) {\n\t\t\tthis.showWarning(\n\t\t\t\tt('Suite \"{id}\" was not found — continuing without a suite. Use /suite to choose one.', {\n\t\t\t\t\tid: pending.requestedId,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.settingsManager.setProjectSuite(selected);\n\t\ttry {\n\t\t\tawait this.runtimeFacade.newSession();\n\t\t\tthis.showStatus(t(\"Suite set to {id} — new session started\", { id: selected }));\n\t\t} catch (error) {\n\t\t\tawait this.handleFatalRuntimeError(t(\"Failed to create session\"), error);\n\t\t}\n\t}\n\n\t/** /model command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tasync handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tawait selectorsFlow.handleModelCommand(this, searchTerm);\n\t}\n\n\t/** Exact model lookup; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined> {\n\t\treturn selectorsFlow.findExactModelMatch(this, searchTerm);\n\t}\n\n\t/**\n\t * Update the footer's available provider count from the current snapshot without\n\t * refreshing catalogs. Host-visible for ./interactive-auth.ts (S5 slice 3).\n\t */\n\tupdateAvailableProviderCount(): void {\n\t\tconst models =\n\t\t\tthis.facade.getScopedModels().length > 0\n\t\t\t\t? this.facade.getScopedModels().map((scoped) => scoped.model)\n\t\t\t\t: this.facade.getAvailableModels();\n\t\tconst uniqueProviders = new Set(models.map((model) => model.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tasync maybeWarnAboutAnthropicSubscriptionAuth(\n\t\tmodel: Model<Api> | undefined = this.facade.getModel(),\n\t): Promise<void> {\n\t\tif (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.anthropicSubscriptionWarningShown) {\n\t\t\treturn;\n\t\t}\n\t\tif (!model || model.provider !== \"anthropic\") {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tif ((await this.facade.checkProviderAuth(\"anthropic\"))?.type === \"oauth\") {\n\t\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\t\tthis.showWarning(t(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst apiKey = (await this.facade.getProviderAuth(model.provider))?.auth.apiKey;\n\t\t\tif (!isAnthropicSubscriptionAuthKey(apiKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.anthropicSubscriptionWarningShown = true;\n\t\t\tthis.showWarning(t(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING));\n\t\t} catch {\n\t\t\t// Ignore auth lookup failures for warning-only checks.\n\t\t}\n\t}\n\n\t/** Model picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tprivate showModelSelector(initialSearchInput?: string): void {\n\t\tselectorsFlow.showModelSelector(this, initialSearchInput);\n\t}\n\n\t/** Scoped-models picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tshowModelsSelector(): void {\n\t\tselectorsFlow.showModelsSelector(this);\n\t}\n\n\t/** Fork picker; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tshowUserMessageSelector(): void {\n\t\tselectorsFlow.showUserMessageSelector(this);\n\t}\n\n\t/** /clone command entry; implementation in ./interactive-selectors.ts (S5 slice 5). */\n\tasync handleCloneCommand(): Promise<void> {\n\t\tawait selectorsFlow.handleCloneCommand(this);\n\t}\n\n\t/**\n\t * Workflow overlay (§9 L2/L3): read-only panorama + transition log from\n\t * `workflow.state`/`workflow.transition` entries. Actions are forwarded to\n\t * the editor as reviewable text; the main agent executes them via\n\t * workflow_advance (rendering and execution stay separated).\n\t */\n\tshowWorkflowView(): void {\n\t\tconst hasSnapshot = this.facade\n\t\t\t.getEntries()\n\t\t\t.some((entry) => entry.type === \"custom\" && entry.customType === \"workflow.state\");\n\t\tif (!hasSnapshot) {\n\t\t\tthis.showStatus(t(\"No workflow in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst view = new WorkflowViewComponent({\n\t\t\t\tgetEntries: () => this.facade.getEntries(),\n\t\t\t\tmaxRows: Math.max(6, Math.floor(this.ui.terminal.rows / 2)),\n\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t});\n\t\t\tview.onClose = done;\n\t\t\tview.onForwardAction = (text) => {\n\t\t\t\tdone();\n\t\t\t\tthis.editor.setText(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tthis.showStatus(t(\"Workflow action staged — review in the editor and submit\"));\n\t\t\t};\n\t\t\treturn { component: view, focus: view, dispose: () => view.dispose() };\n\t\t});\n\t}\n\n\t/**\n\t * Subagent session browser (/agents): read-only list + detail of this\n\t * session's subagent transcripts from the D-060 §3 on-disk store — the same\n\t * parent-scoped summary source as the subagent_list model tool (only this\n\t * session's children, newest first). Detail entries load lazily per\n\t * session; a failed load renders inside the view instead of throwing.\n\t */\n\tshowAgentsView(): void {\n\t\tconst agentDir = getAgentDir();\n\t\tconst sessions = listAgentSessions({ agentDir, parentAgentSession: this.facade.getSessionId() });\n\t\tif (sessions.length === 0) {\n\t\t\tthis.showStatus(t(\"No subagent sessions in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst view = new AgentsViewComponent({\n\t\t\t\tsessions,\n\t\t\t\tloadEntries: (sessionId) => readAgentSession({ agentDir, sessionId }),\n\t\t\t\tmaxRows: Math.max(6, Math.floor(this.ui.terminal.rows / 2)),\n\t\t\t\trequestRender: () => this.ui.requestRender(),\n\t\t\t});\n\t\t\tview.onClose = done;\n\t\t\treturn { component: view, focus: view };\n\t\t});\n\t}\n\n\tshowTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.facade.getTree();\n\t\tconst realLeafId = this.facade.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(t(\"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 === this.facade.getLeafId()) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(t(\"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.showDialogSelector(t(\"Summarize branch?\"), [\n\t\t\t\t\t\t\t\tt(\"No summary\"),\n\t\t\t\t\t\t\t\tt(\"Summarize\"),\n\t\t\t\t\t\t\t\tt(\"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 !== t(\"No summary\");\n\n\t\t\t\t\t\t\tif (summaryChoice === t(\"Summarize with custom prompt\")) {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showDialogEditor(t(\"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// The user committed to navigating: stop the active response first.\n\t\t\t\t\t// 中断分级:导航清场只停回合,不终止后台子代理(设计 §4.2)。\n\t\t\t\t\tif (this.facade.isStreaming()) {\n\t\t\t\t\t\tthis.restoreQueuedMessagesToEditor();\n\t\t\t\t\t\tawait this.facade.abort({ cancelAgentTasks: false });\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and status indicator if summarizing\n\t\t\t\t\tlet showingSummaryIndicator = false;\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.facade.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\tthis.showStatusIndicator(new BranchSummaryStatusIndicator(this.ui));\n\t\t\t\t\t\tshowingSummaryIndicator = true;\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.facade.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(t(\"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(t(\"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(t(\"Navigated to selected point\"));\n\t\t\t\t\t\tvoid this.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 (showingSummaryIndicator) {\n\t\t\t\t\t\t\tthis.clearStatusIndicator(\"branchSummary\");\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.facade.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\tselector.onCopy = async (text) => {\n\t\t\t\tif (!text) {\n\t\t\t\t\tthis.showError(t(\"Selected entry has no text to copy\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait copyToClipboard(text);\n\t\t\t\t\tthis.showStatus(t(\"Copied selected message to clipboard\"));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tshowSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress, signal) => this.runtimeFacade.listSessions(onProgress, signal),\n\t\t\t\t(onProgress, signal) => this.runtimeFacade.listAllSessions(onProgress, signal),\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(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\t// 会话选择器默认只列当前方案的会话;跨方案会话仅在显式\n\t\t\t\t\t// \"show all\" 后可见(设计 §10.1)。\n\t\t\t\t\tsuiteFilter: {\n\t\t\t\t\t\tcurrentSuiteId: this.getCurrentSessionSuiteId(),\n\t\t\t\t\t\tgetSessionSuiteId: (session) => this.readSessionSuiteId(session.path),\n\t\t\t\t\t},\n\t\t\t\t},\n\n\t\t\t\tthis.runtimeFacade.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?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\tthis.clearStatusIndicator();\n\t\ttry {\n\t\t\tconst result = await this.runtimeFacade.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.showStatus(t(\"Resumed session\"));\n\t\t\tthis.detectCrossSuiteResume();\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(t(\"Resume cancelled\"));\n\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeFacade.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.showStatus(t(\"Resumed session in current cwd\"));\n\t\t\t\tthis.detectCrossSuiteResume();\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn this.handleFatalRuntimeError(t(\"Failed to resume session\"), error);\n\t\t}\n\t}\n\n\t/**\n\t * Cross-suite resume detection (设计 §10.1 最小可用版): compare the loaded\n\t * session's original suite binding with the suite resolved from the current\n\t * settings/env — the id the resumed session was actually reassembled with\n\t * (assembly happens at session creation, so reassembly is the existing\n\t * behavior). On a mismatch, record the fact for later debugging: an info\n\t * status line plus a `suite_mismatch` custom entry on the session. No\n\t * context serialization or conversion is attempted.\n\t */\n\tprivate detectCrossSuiteResume(): void {\n\t\tconst originalSuiteId = this.getCurrentSessionSuiteId();\n\t\t// Pre-suite (legacy) sessions carry no binding; nothing to compare.\n\t\tif (originalSuiteId === undefined) return;\n\t\tconst currentSuiteId = resolveSuiteId({\n\t\t\tenvSuite: process.env[SUITE_ENV_VAR],\n\t\t\tsettings: this.settingsManager,\n\t\t\tagentDir: getAgentDir(),\n\t\t});\n\t\tif (currentSuiteId === originalSuiteId) return;\n\t\tthis.showStatus(\n\t\t\tt('Cross-suite compatible mode: session created with \"{from}\", assembling with \"{to}\"', {\n\t\t\t\tfrom: originalSuiteId,\n\t\t\t\tto: currentSuiteId,\n\t\t\t}),\n\t\t);\n\t\tthis.facade.recordSuiteMismatch(originalSuiteId, currentSuiteId);\n\t}\n\n\t// =========================================================================\n\t// Login/authentication (implementation in ./interactive-auth.ts, S5 slice 3)\n\t// Host-visible narrow accessors plus same-name delegates; prototype-level\n\t// tests and the command dispatch bind to these names.\n\t// =========================================================================\n\n\t/**\n\t * Host-visible for ./interactive-auth.ts (D-048): narrow credential/provider\n\t * auth projection of the session's ModelRuntime through the stable facade.\n\t * The full runtime never crosses the host boundary (D-047 裁决 3's\n\t * credential-management semantics stay open).\n\t */\n\tgetModelAuthRuntime(): ModelAuthRuntime {\n\t\treturn this.facade.getModelAuthRuntime();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (D-048): available model snapshot. */\n\tgetAvailableModels(): readonly Model<Api>[] {\n\t\treturn this.facade.getAvailableModels();\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (D-048): narrow catalog-refresh projection. */\n\tgetModelCatalog(): ModelCatalogRuntime {\n\t\treturn this.facade.getModelCatalog();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): opaque session identity. */\n\tgetSessionIdentity(): unknown {\n\t\treturn this.session;\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tisSameSessionIdentity(identity: unknown): boolean {\n\t\treturn this.session === identity;\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): stable facade read. */\n\tgetSelectedModel(): Model<Api> | undefined {\n\t\treturn this.facade.getModel();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3): stable facade write. */\n\tasync setSelectedModel(model: Model<Api>): Promise<void> {\n\t\tawait this.facade.setModel(model, { persist: true });\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tinvalidateFooter(): void {\n\t\tthis.footer.invalidate();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3); delegates to the selector area. */\n\tshowAuthSelector(\n\t\tcreate: (done: () => void) => { component: Component; focus: Component; dispose?: () => void },\n\t): void {\n\t\tthis.showSelector(create);\n\t}\n\n\t/** Login provider options; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tgetLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[] {\n\t\treturn authFlow.getLoginProviderOptions(this, authType);\n\t}\n\n\t/** Logout provider options; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync getLogoutProviderOptions(): Promise<AuthSelectorProvider[]> {\n\t\treturn authFlow.getLogoutProviderOptions(this);\n\t}\n\n\t/** Login provider lookup; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tfindLoginProviderOptions(providerRef: string): AuthSelectorProvider[] {\n\t\treturn authFlow.findLoginProviderOptions(this, providerRef);\n\t}\n\n\t/** /login command entry; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync handleLoginCommand(providerRef?: string): Promise<void> {\n\t\tawait authFlow.handleLoginCommand(this, providerRef);\n\t}\n\n\t/** Login branch by auth type; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync startProviderLogin(providerOption: AuthSelectorProvider): Promise<void> {\n\t\tawait authFlow.startProviderLogin(this, providerOption);\n\t}\n\n\t/** Auth type selector; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowLoginAuthTypeSelector(providerOptions?: AuthSelectorProvider[]): void {\n\t\tauthFlow.showLoginAuthTypeSelector(this, providerOptions);\n\t}\n\n\t/** Login provider selector; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowLoginProviderSelector(authType?: AuthSelectorProvider[\"authType\"], initialSearchInput?: string): void {\n\t\tauthFlow.showLoginProviderSelector(this, authType, initialSearchInput);\n\t}\n\n\t/** Login/logout selector entry; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tawait authFlow.showOAuthSelector(this, mode);\n\t}\n\n\t/** Post-login completion; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync completeProviderAuthentication(\n\t\tproviderId: string,\n\t\tproviderName: string,\n\t\tauthType: \"oauth\" | \"api_key\",\n\t\tpreviousModel: Model<Api> | undefined,\n\t): Promise<void> {\n\t\tawait authFlow.completeProviderAuthentication(this, providerId, providerName, authType, previousModel);\n\t}\n\n\t/** Ambient auth notice; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowAmbientAuthDialog(providerOption: AuthSelectorProvider): void {\n\t\tauthFlow.showAmbientAuthDialog(this, providerOption);\n\t}\n\n\t/** API key login dialog; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tawait authFlow.showApiKeyLoginDialog(this, providerId, providerName);\n\t}\n\n\t/** Auth select prompt; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tshowAuthSelect(dialog: LoginDialogComponent, prompt: Extract<AuthPrompt, { type: \"select\" }>): Promise<string> {\n\t\treturn authFlow.showAuthSelect(this, dialog, prompt);\n\t}\n\n\t/** Auth prompt plumbing; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showAuthPrompt(dialog: LoginDialogComponent, prompt: AuthPrompt): Promise<string> {\n\t\treturn authFlow.showAuthPrompt(this, dialog, prompt);\n\t}\n\n\t/** Auth event rendering; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tnotifyAuthDialog(dialog: LoginDialogComponent, event: AuthEvent): void {\n\t\tauthFlow.notifyAuthDialog(this, dialog, event);\n\t}\n\n\t/** Provider login call; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync loginProvider(dialog: LoginDialogComponent, providerId: string, method: \"api_key\" | \"oauth\"): Promise<void> {\n\t\tawait authFlow.loginProvider(this, dialog, providerId, method);\n\t}\n\n\t/** OAuth login dialog; implementation in ./interactive-auth.ts (S5 slice 3). */\n\tasync showLoginDialog(providerId: string, providerName: string): Promise<void> {\n\t\tawait authFlow.showLoginDialog(this, providerId, providerName);\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tasync handleReloadCommand(): Promise<void> {\n\t\tif (this.facade.isStreaming()) {\n\t\t\tthis.showWarning(t(\"Wait for the current response to finish before reloading.\"));\n\t\t\treturn;\n\t\t}\n\t\tif (this.facade.isCompacting()) {\n\t\t\tthis.showWarning(t(\"Wait for compaction to finish before reloading.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetDialogUI();\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\", t(\"Reloading keybindings, skills, prompts, themes, and context files...\")), 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\tlet chatRestoredBeforeSessionStart = false;\n\t\tlet reloadBoxDismissed = false;\n\t\tconst restoreChatBeforeSessionStart = () => {\n\t\t\tif (chatRestoredBeforeSessionStart) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tthis.outputPad = this.settingsManager.getOutputPad();\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tchatRestoredBeforeSessionStart = true;\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.facade.reload({ beforeSessionStart: restoreChatBeforeSessionStart });\n\t\t\trestoreChatBeforeSessionStart();\n\t\t\tthis.keybindings.reload();\n\t\t\tconst activeHeader = this.builtInHeader;\n\t\t\tif (isExpandable(activeHeader)) {\n\t\t\t\tactiveHeader.setExpanded(this.toolOutputExpanded);\n\t\t\t}\n\t\t\tsetRegisteredThemes(buildRegisteredThemes(this.facade.getThemes().themes));\n\t\t\tthis.applyRuntimeSettings();\n\t\t\tawait this.themeController.applyFromSettings();\n\t\t\tthis.setupAutocompleteProvider();\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.facade.getModelsError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(t(\"models.json error: {error}\", { error: modelsJsonError }));\n\t\t\t}\n\t\t\tthis.showStatus(t(\"Reloaded keybindings, skills, prompts, themes, and context files\"));\n\t\t\tdismissReloadBox(this.editor as Component);\n\t\t\treloadBoxDismissed = true;\n\t\t} catch (error) {\n\t\t\t// v8 ignore next -- reloadBoxDismissed 置位后 catch 前无可抛出点,恒走 dismiss 分支\n\t\t\tif (!reloadBoxDismissed) {\n\t\t\t\tdismissReloadBox(previousEditor as Component);\n\t\t\t}\n\t\t\tthis.showError(t(\"Reload failed: {error}\", { error: error instanceof Error ? error.message : String(error) }));\n\t\t}\n\t}\n\n\tasync handleExportCommand(text: string): Promise<void> {\n\t\tconst outputPath = this.getPathCommandArgument(text, \"/export\");\n\n\t\ttry {\n\t\t\tif (outputPath?.endsWith(\".jsonl\")) {\n\t\t\t\tconst filePath = this.facade.exportToJsonl(outputPath);\n\t\t\t\tthis.showStatus(t(\"Session exported to: {path}\", { path: filePath }));\n\t\t\t} else {\n\t\t\t\tconst filePath = await this.facade.exportToHtml(outputPath, {\n\t\t\t\t\tthemeName: theme.name,\n\t\t\t\t});\n\t\t\t\tthis.showStatus(t(\"Session exported to: {path}\", { path: filePath }));\n\t\t\t}\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(\n\t\t\t\tt(\"Failed to export session: {error}\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : t(\"Unknown error\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined {\n\t\tif (text === command) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (!text.startsWith(`${command} `)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst argsString = text.slice(command.length + 1).trimStart();\n\t\tif (!argsString) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst firstChar = argsString[0];\n\t\tif (firstChar === '\"' || firstChar === \"'\") {\n\t\t\tconst closingQuoteIndex = argsString.indexOf(firstChar, 1);\n\t\t\tif (closingQuoteIndex < 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn argsString.slice(1, closingQuoteIndex);\n\t\t}\n\n\t\tconst firstWhitespaceIndex = argsString.search(/\\s/);\n\t\tif (firstWhitespaceIndex < 0) {\n\t\t\treturn argsString;\n\t\t}\n\t\treturn argsString.slice(0, firstWhitespaceIndex);\n\t}\n\n\tasync handleImportCommand(text: string): Promise<void> {\n\t\tconst inputPath = this.getPathCommandArgument(text, \"/import\");\n\t\tif (!inputPath) {\n\t\t\tthis.showError(t(\"Usage: /import <path.jsonl>\"));\n\t\t\treturn;\n\t\t}\n\n\t\tconst confirmed = await this.showDialogConfirm(\n\t\t\tt(\"Import session\"),\n\t\t\tt(\"Replace current session with {path}?\", { path: inputPath }),\n\t\t);\n\t\tif (!confirmed) {\n\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.clearStatusIndicator();\n\t\t\tconst result = await this.runtimeFacade.importFromJsonl(inputPath);\n\t\t\tif (result.cancelled) {\n\t\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(t(\"Session imported from: {path}\", { path: inputPath }));\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(t(\"Import cancelled\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await this.runtimeFacade.importFromJsonl(inputPath, selectedCwd);\n\t\t\t\tif (result.cancelled) {\n\t\t\t\t\tthis.showStatus(t(\"Import cancelled\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showStatus(t(\"Session imported from: {path}\", { path: inputPath }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (error instanceof SessionImportFileNotFoundError) {\n\t\t\t\tthis.showError(t(\"Failed to import session: {error}\", { error: error.message }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.handleFatalRuntimeError(t(\"Failed to import session\"), error);\n\t\t}\n\t}\n\n\tasync handleCopyCommand(options: { flashConfirmation?: boolean; preferSelection?: boolean } = {}): Promise<void> {\n\t\tif (\n\t\t\toptions.preferSelection &&\n\t\t\tthis.ui instanceof TuiAltScreen &&\n\t\t\t!this.ui.getCopyOnSelect() &&\n\t\t\tthis.ui.hasActiveSelection()\n\t\t) {\n\t\t\tawait this.ui.copyActiveSelectionToClipboard();\n\t\t\treturn;\n\t\t}\n\n\t\tconst text = this.facade.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(t(\"No agent messages to copy yet.\"));\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait copyToClipboard(text);\n\t\t\tif (options.flashConfirmation && this.ui instanceof TuiAltScreen) {\n\t\t\t\tthis.ui.flash(t(\"Copied!\"));\n\t\t\t} else {\n\t\t\t\tthis.showStatus(t(\"Copied last agent message to clipboard\"));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\thandleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.facade.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(theme.fg(\"dim\", t(\"Session name: {name}\", { name: currentName })), 1, 0),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.showWarning(t(\"Usage: /name <name>\"));\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.facade.setSessionName(name);\n\t\tconst sessionName = this.facade.getSessionName();\n\t\tif (sessionName !== name) {\n\t\t\tthis.showWarning(\n\t\t\t\tt(\"Session name was normalized from {from} to {to}\", {\n\t\t\t\t\tfrom: JSON.stringify(name),\n\t\t\t\t\tto: JSON.stringify(sessionName),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(theme.fg(\"dim\", t(\"Session name set: {name}\", { name: sessionName ?? name })), 1, 0),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * 中断分级(设计 子代理运行时 §4.2,2026-10-02):/stop-agents 的唯一执行\n\t * 面——终止全部后台子代理(不触当前回合)。Esc 从不做这件事。\n\t */\n\thandleStopAgentsCommand(): void {\n\t\tconst active = this.facade.getActiveAgentTaskCount();\n\t\tif (active === 0) {\n\t\t\tthis.showStatus(t(\"No background subagents running\"));\n\t\t\treturn;\n\t\t}\n\t\tthis.facade.abortAgentTasks();\n\t\tthis.showStatus(\n\t\t\tactive === 1\n\t\t\t\t? t(\"Terminated {count} background subagent\", { count: active })\n\t\t\t\t: t(\"Terminated {count} background subagents\", { count: active }),\n\t\t);\n\t}\n\n\thandleSessionCommand(): void {\n\t\tconst stats = this.facade.getSessionStats();\n\t\tconst sessionName = this.facade.getSessionName();\n\t\tconst entries = this.facade.getEntries();\n\t\tconst cacheWaste = computeCacheWaste(entries, this.facade.getModelPriceSource());\n\n\t\t// Cost/token totals per provider/model actually used (e.g. OpenRouter `auto`\n\t\t// resolves to a concrete responseModel). Usage without model attribution is\n\t\t// grouped separately so the breakdown reconciles with the session total.\n\t\tconst usageBreakdown = getUsageCostBreakdown(entries);\n\n\t\tlet info = `${theme.bold(t(\"Session Info\"))}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", t(\"Name:\"))} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", t(\"File:\"))} ${stats.sessionFile ?? t(\"In-memory\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"ID:\"))} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(t(\"Messages\"))}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} ${stats.totalMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"User:\"))} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Assistant:\"))} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Tools:\"))} ${t(\"{calls} calls, {results} results\", {\n\t\t\tcalls: stats.toolCalls,\n\t\t\tresults: stats.toolResults,\n\t\t})}\\n\\n`;\n\t\tinfo += `${theme.bold(t(\"Tokens\"))}\\n`;\n\t\t// \"Input\" is the full prompt volume. With cache activity, split it into\n\t\t// cached (served from cache) vs uncached (everything else) - the only\n\t\t// provider-independent split. Cache writes, where reported, are a detail\n\t\t// of the uncached portion.\n\t\tconst { input, cacheRead, cacheWrite } = stats.tokens;\n\t\tconst promptTokens = input + cacheRead + cacheWrite;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Input:\"))} ${promptTokens.toLocaleString()}\\n`;\n\t\tif (promptTokens > 0 && (cacheRead > 0 || cacheWrite > 0)) {\n\t\t\tconst hitRate = theme.fg(\"dim\", `(${((cacheRead / promptTokens) * 100).toFixed(1)}%)`);\n\t\t\tinfo += ` ${theme.fg(\"dim\", t(\"Cached:\"))} ${cacheRead.toLocaleString()} ${hitRate}\\n`;\n\t\t\tconst written =\n\t\t\t\tcacheWrite > 0\n\t\t\t\t\t? ` ${theme.fg(\"dim\", t(\"({count} written to cache)\", { count: cacheWrite.toLocaleString() }))}`\n\t\t\t\t\t: \"\";\n\t\t\tinfo += ` ${theme.fg(\"dim\", t(\"Uncached:\"))} ${(input + cacheWrite).toLocaleString()}${written}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", t(\"Output:\"))} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\t// 双维度统计(用户裁决 2026-09-25):总计之外按供应商/模型分桶——缓存读/写、\n\t\t// 命中率、费用逐桶可见。此前该拆分门控在 cost>0 且多桶才渲染,单价为 0 的\n\t\t// 自定义供应商(如自建代理)永远看不到。\n\t\tif (usageBreakdown.length > 0) {\n\t\t\tinfo += `\\n${theme.bold(t(\"By Provider/Model\"))}\\n`;\n\t\t\tfor (const entry of usageBreakdown) {\n\t\t\t\tconst bucket = entry.totals;\n\t\t\t\tconst promptBucket = bucket.input + bucket.cacheRead + bucket.cacheWrite;\n\t\t\t\tlet line = ` ${theme.bold(entry.key)}`;\n\t\t\t\tif (promptBucket > 0) {\n\t\t\t\t\tline += `\\n ${theme.fg(\"dim\", t(\"Input:\"))} ${promptBucket.toLocaleString()}`;\n\t\t\t\t\tif (bucket.cacheRead > 0 || bucket.cacheWrite > 0) {\n\t\t\t\t\t\tconst rate = promptBucket > 0 ? ((bucket.cacheRead / promptBucket) * 100).toFixed(1) : \"0.0\";\n\t\t\t\t\t\tline += ` ${theme.fg(\"dim\", t(\"(cache {rate}%, W {written})\", { rate, written: bucket.cacheWrite.toLocaleString() }))}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (bucket.output > 0) line += `\\n ${theme.fg(\"dim\", t(\"Output:\"))} ${bucket.output.toLocaleString()}`;\n\t\t\t\tif (entry.cost > 0) line += ` ${theme.fg(\"dim\", `$${entry.cost.toFixed(3)}`)}`;\n\t\t\t\tinfo += `${line}\\n`;\n\t\t\t}\n\t\t}\n\n\t\tif (stats.cost > 0 || cacheWaste.missedTokens > 0) {\n\t\t\tinfo += `\\n${theme.bold(t(\"Cost\"))}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", t(\"Total:\"))} $${stats.cost.toFixed(3)}`;\n\t\t\tif (usageBreakdown.length > 1) {\n\t\t\t\tfor (const entry of usageBreakdown) {\n\t\t\t\t\tinfo += `\\n ${theme.fg(\"dim\", `${entry.key}:`)} $${entry.cost.toFixed(3)} ${theme.fg(\"dim\", t(\"({tokens} tokens)\", { tokens: formatTokens(entry.tokens) }))}`;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (cacheWaste.missedTokens > 0) {\n\t\t\t\tconst missLabel =\n\t\t\t\t\tcacheWaste.missCount === 1\n\t\t\t\t\t\t? t(\"{count} miss\", { count: cacheWaste.missCount })\n\t\t\t\t\t\t: t(\"{count} misses\", { count: cacheWaste.missCount });\n\t\t\t\tconst detail = t(\"{tokens} tokens, {misses}\", {\n\t\t\t\t\ttokens: cacheWaste.missedTokens.toLocaleString(),\n\t\t\t\t\tmisses: missLabel,\n\t\t\t\t});\n\t\t\t\tinfo +=\n\t\t\t\t\tcacheWaste.missedCost >= 0.0001\n\t\t\t\t\t\t? `\\n${theme.fg(\"dim\", t(\"Cache Re-billed:\"))} $${cacheWaste.missedCost.toFixed(3)} ${theme.fg(\"dim\", `(${detail})`)}`\n\t\t\t\t\t\t: `\\n${theme.fg(\"dim\", t(\"Cache Re-billed:\"))} ${detail}`;\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleMetricsCommand(turnsArg: string | undefined): void {\n\t\tconst provider = this.options.getMetrics;\n\t\tif (!provider) {\n\t\t\tthis.showWarning(t(\"Metrics are not available: the observability plugin is not mounted in this session\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet windowTurns: number | undefined;\n\t\tif (turnsArg !== undefined) {\n\t\t\tconst parsed = Number.parseInt(turnsArg, 10);\n\t\t\tif (!Number.isSafeInteger(parsed) || parsed < 1) {\n\t\t\t\tthis.showWarning(t(\"Invalid turns: {turns}. Usage: /metrics [turns]\", { turns: turnsArg }));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twindowTurns = parsed;\n\t\t}\n\n\t\tlet snapshot: MetricsSnapshotV1;\n\t\ttry {\n\t\t\tconst result = provider({ windowTurns });\n\t\t\tif (result === undefined) {\n\t\t\t\tthis.showWarning(t(\"Metrics are not available: the observability plugin is not mounted in this session\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsnapshot = result;\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\treturn;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(formatMetricsSnapshot(snapshot), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t\t.reverse()\n\t\t\t\t\t\t.map((e) => normalizeChangelogLinks(e.content, e))\n\t\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: t(\"No changelog entries found.\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"What's New\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppKeybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: Keybinding): string {\n\t\treturn keyDisplayText(action);\n\t}\n\n\thandleHelpCommand(): void {\n\t\tconst section = (title: string, rows: Array<{ name: string; hint?: string; description?: string }>) => {\n\t\t\tif (rows.length === 0) return \"\";\n\t\t\tlet table = `\\n**${title}**\\n| ${t(\"Command\")} | ${t(\"Description\")} |\\n|---------|-------------|\\n`;\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst command = row.hint ? `\\`/${row.name} ${row.hint}\\`` : `\\`/${row.name}\\``;\n\t\t\t\ttable += `| ${command} | ${row.description ?? \"\"} |\\n`;\n\t\t\t}\n\t\t\treturn table;\n\t\t};\n\n\t\tconst builtinRows = BUILTIN_SLASH_COMMANDS.map((command) => ({\n\t\t\tname: command.name,\n\t\t\thint: command.argumentHint,\n\t\t\tdescription: command.description,\n\t\t}));\n\t\tconst promptRows = this.facade.getPromptTemplates().map((template) => ({\n\t\t\tname: template.name,\n\t\t\thint: template.argumentHint,\n\t\t\tdescription: template.description,\n\t\t}));\n\t\tconst skillRows = this.facade.getSkills().skills.map((skill) => ({\n\t\t\tname: `skill:${skill.name}`,\n\t\t\tdescription: skill.description,\n\t\t}));\n\n\t\tconst help =\n\t\t\tsection(t(\"Built-in commands\"), builtinRows) +\n\t\t\tsection(t(\"Prompt templates\"), promptRows) +\n\t\t\tsection(t(\"Skills\"), skillRows) +\n\t\t\t`\\n${t(\"Type `/` for autocomplete. Use `/hotkeys` for keyboard shortcuts.\")}`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"Available Commands\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Markdown(help.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorUp = this.getEditorKeyDisplay(\"tui.editor.cursorUp\");\n\t\tconst cursorDown = this.getEditorKeyDisplay(\"tui.editor.cursorDown\");\n\t\tconst cursorLeft = this.getEditorKeyDisplay(\"tui.editor.cursorLeft\");\n\t\tconst cursorRight = this.getEditorKeyDisplay(\"tui.editor.cursorRight\");\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"tui.editor.cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"tui.editor.cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"tui.editor.cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"tui.editor.cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"tui.editor.jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"tui.editor.jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"tui.editor.pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"tui.editor.pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"tui.input.submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"tui.input.newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"tui.editor.deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"tui.editor.deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"tui.editor.deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"tui.editor.deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"tui.editor.yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"tui.editor.yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"tui.editor.undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tui.input.tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"app.interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"app.clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"app.exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"app.suspend\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"app.thinking.cycle\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"app.model.cycleForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"app.model.select\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"app.tools.expand\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"app.thinking.toggle\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"app.editor.external\");\n\t\tconst cycleModelBackward = this.getAppKeyDisplay(\"app.model.cycleBackward\");\n\t\tconst copyMessage = this.getAppKeyDisplay(\"app.message.copy\");\n\t\tconst followUp = this.getAppKeyDisplay(\"app.message.followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"app.message.dequeue\");\n\t\tconst pasteImage = this.getAppKeyDisplay(\"app.clipboard.pasteImage\");\n\t\t// Iron law (2026-10-01): these shipped defaults were cleared in favor of\n\t\t// the /model command; the row only appears when a user re-configures a key.\n\t\tconst selectModelRow = selectModel ? `| \\`${selectModel}\\` | ${t(\"Open model selector\")} |\\n` : \"\";\n\t\t// Iron law (2026-10-02 复审): ctrl+g/ctrl+x stay bound only for the\n\t\t// components without a command channel — the main editor ignores them\n\t\t// (/editor and /copy are its single entries), so the rows say where\n\t\t// each key actually acts.\n\t\tconst copyMessageRow = copyMessage ? `| \\`${copyMessage}\\` | ${t(\"Copy selection in /tree\")} |\\n` : \"\";\n\t\tconst externalEditorRow = externalEditor\n\t\t\t? `| \\`${externalEditor}\\` | ${t(\"External editor (inside dialog inputs)\")} |\\n`\n\t\t\t: \"\";\n\t\t// Iron law (2026-10-01): the message queue is the /queue and /dequeue\n\t\t// commands' feature; rows only appear when a user re-configures a key.\n\t\tconst followUpRow = followUp ? `| \\`${followUp}\\` | ${t(\"Queue follow-up message\")} |\\n` : \"\";\n\t\tconst dequeueRow = dequeue ? `| \\`${dequeue}\\` | ${t(\"Restore queued messages\")} |\\n` : \"\";\n\t\tconst cycleThinkingRow = cycleThinkingLevel\n\t\t\t? `| \\`${cycleThinkingLevel}\\` | ${t(\"Cycle thinking level\")} |\\n`\n\t\t\t: \"\";\n\t\tconst cycleModelsRow =\n\t\t\tcycleModelForward || cycleModelBackward\n\t\t\t\t? `| \\`${cycleModelForward}\\` / \\`${cycleModelBackward}\\` | ${t(\"Cycle models\")} |\\n`\n\t\t\t\t: \"\";\n\t\t// Suspend has no default key on native Windows; hide the row there.\n\t\tconst suspendRow = suspend ? `| \\`${suspend}\\` | ${t(\"Suspend to background\")} |\\n` : \"\";\n\n\t\tconst hotkeys = `\n**${t(\"Navigation\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${cursorUp}\\` / \\`${cursorDown}\\` / \\`${cursorLeft}\\` / \\`${cursorRight}\\` | ${t(\"Move cursor / browse history\")} |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | ${t(\"Move by word\")} |\n| \\`${cursorLineStart}\\` | ${t(\"Start of line\")} |\n| \\`${cursorLineEnd}\\` | ${t(\"End of line\")} |\n| \\`${jumpForward}\\` | ${t(\"Jump forward to character\")} |\n| \\`${jumpBackward}\\` | ${t(\"Jump backward to character\")} |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | ${t(\"Scroll by page\")} |\n\n**${t(\"Editing\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${submit}\\` | ${t(\"Send message\")} |\n| \\`${newLine}\\` | ${process.platform === \"win32\" ? t(\"New line (Ctrl+Enter on Windows Terminal)\") : t(\"New line\")} |\n| \\`${deleteWordBackward}\\` | ${t(\"Delete word backwards\")} |\n| \\`${deleteWordForward}\\` | ${t(\"Delete word forwards\")} |\n| \\`${deleteToLineStart}\\` | ${t(\"Delete to start of line\")} |\n| \\`${deleteToLineEnd}\\` | ${t(\"Delete to end of line\")} |\n| \\`${yank}\\` | ${t(\"Paste the most-recently-deleted text\")} |\n| \\`${yankPop}\\` | ${t(\"Cycle through the deleted text after pasting\")} |\n| \\`${undo}\\` | ${t(\"Undo\")} |\n\n**${t(\"Other\")}**\n| ${t(\"Key\")} | ${t(\"Action\")} |\n|-----|--------|\n| \\`${tab}\\` | ${t(\"Path completion / accept autocomplete\")} |\n| \\`${interrupt}\\` | ${t(\"Cancel autocomplete / abort streaming\")} |\n| \\`${clear}\\` | ${t(\"Clear editor (first) / exit (second)\")} |\n| \\`${exit}\\` | ${t(\"Exit (when editor is empty)\")} |\n${suspendRow}${cycleThinkingRow}${cycleModelsRow}${selectModelRow}| \\`${expandTools}\\` | ${t(\"Toggle tool output expansion\")} |\n| \\`${toggleThinking}\\` | ${t(\"Toggle thinking block visibility\")} |\n${externalEditorRow}${copyMessageRow}${followUpRow}${dequeueRow}\n| \\`${pasteImage}\\` | ${t(\"Paste image or text from clipboard\")} |\n| \\`/\\` | ${t(\"Slash commands\")} |\n| \\`!\\` | ${t(\"Run bash command\")} |\n| \\`!!\\` | ${t(\"Run bash command (excluded from context)\")} |\n`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", t(\"Keyboard Shortcuts\"))), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync handleClearCommand(): Promise<void> {\n\t\tthis.clearStatusIndicator();\n\t\ttry {\n\t\t\tconst result = await this.runtimeFacade.newSession();\n\t\t\tif (result.cancelled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", t(\"✓ New session started\"))}`, 1, 1));\n\t\t\tthis.ui.requestRender();\n\t\t} catch (error: unknown) {\n\t\t\tawait this.handleFatalRuntimeError(\"Failed to create session\", error);\n\t\t}\n\t}\n\n\thandleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\tt(\"Debug output at {date}\", { date: new Date().toISOString() }),\n\t\t\tt(\"Terminal: {columns}x{rows}\", { columns: width, rows: height }),\n\t\t\tt(\"Total lines: {count}\", { count: allLines.length }),\n\t\t\t\"\",\n\t\t\tt(\"=== All rendered lines with visible widths ===\"),\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\tt(\"=== Agent messages (JSONL) ===\"),\n\t\t\t...this.facade\n\t\t\t\t.getSessionAPI()\n\t\t\t\t.getMessages()\n\t\t\t\t.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", t(\"✓ Debug log written\"))}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\thandleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\t// Dispatch the user.bash lifecycle facts, then execute locally.\n\t\tthis.facade.emitUserBash(excludeFromContext);\n\n\t\t// Normal execution path\n\t\tconst isDeferred = this.facade.isStreaming();\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.facade.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(\n\t\t\t\tt(\"Bash command failed: {error}\", {\n\t\t\t\t\terror: error instanceof Error ? error.message : t(\"Unknown error\"),\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tthis.clearStatusIndicator();\n\n\t\ttry {\n\t\t\tawait this.facade.compact(customInstructions);\n\t\t} catch {\n\t\t\t// Ignore, will be emitted as an event\n\t\t}\n\t}\n\n\t/** /clean-sessions:会话清理两阶段流程;输出/确认走宿主既有机制(设计 §7)。 */\n\tasync handleCleanSessionsCommand(arg: string | undefined): Promise<void> {\n\t\tawait runCleanSessions(\n\t\t\t{\n\t\t\t\tshowMessage: (text) => this.showStatus(text),\n\t\t\t\tshowError: (text) => this.showError(text),\n\t\t\t\tconfirm: (title, message) => this.showDialogConfirm(title, message),\n\t\t\t},\n\t\t\targ,\n\t\t);\n\t}\n\n\tstop(fullscreenExitOutput = this.settingsManager.getFullscreenExitOutput()): void {\n\t\tthis.disposeActiveSelector();\n\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\tthis.ui.terminal.setProgress(false);\n\t\t}\n\t\tthis.clearStatusIndicator();\n\t\tthis.themeController.disableAutoSync();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tthis.failoverTicker?.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.stopInteractiveTui(fullscreenExitOutput);\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t\tthis.unregisterSignalHandlers();\n\t}\n}\n"]}
|