@ai-agent-forge/agent-forge 0.88.5 → 0.88.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
  3. package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
  4. package/bundled-plugins/alignment/agent-forge.json +19 -0
  5. package/bundled-plugins/alignment/dist/baseline.d.ts +12 -0
  6. package/bundled-plugins/alignment/dist/baseline.d.ts.map +1 -0
  7. package/bundled-plugins/alignment/dist/baseline.js +68 -0
  8. package/bundled-plugins/alignment/dist/baseline.js.map +1 -0
  9. package/bundled-plugins/alignment/dist/engine.d.ts +102 -0
  10. package/bundled-plugins/alignment/dist/engine.d.ts.map +1 -0
  11. package/bundled-plugins/alignment/dist/engine.js +654 -0
  12. package/bundled-plugins/alignment/dist/engine.js.map +1 -0
  13. package/bundled-plugins/alignment/dist/entry.d.ts +14 -0
  14. package/bundled-plugins/alignment/dist/entry.d.ts.map +1 -0
  15. package/bundled-plugins/alignment/dist/entry.js +23 -0
  16. package/bundled-plugins/alignment/dist/entry.js.map +1 -0
  17. package/bundled-plugins/alignment/dist/export.d.ts +15 -0
  18. package/bundled-plugins/alignment/dist/export.d.ts.map +1 -0
  19. package/bundled-plugins/alignment/dist/export.js +122 -0
  20. package/bundled-plugins/alignment/dist/export.js.map +1 -0
  21. package/bundled-plugins/alignment/dist/http-server.d.ts +33 -0
  22. package/bundled-plugins/alignment/dist/http-server.d.ts.map +1 -0
  23. package/bundled-plugins/alignment/dist/http-server.js +119 -0
  24. package/bundled-plugins/alignment/dist/http-server.js.map +1 -0
  25. package/bundled-plugins/alignment/dist/index.d.ts +24 -0
  26. package/bundled-plugins/alignment/dist/index.d.ts.map +1 -0
  27. package/bundled-plugins/alignment/dist/index.js +719 -0
  28. package/bundled-plugins/alignment/dist/index.js.map +1 -0
  29. package/bundled-plugins/alignment/dist/page.d.ts +15 -0
  30. package/bundled-plugins/alignment/dist/page.d.ts.map +1 -0
  31. package/bundled-plugins/alignment/dist/page.js +832 -0
  32. package/bundled-plugins/alignment/dist/page.js.map +1 -0
  33. package/bundled-plugins/alignment/dist/render.d.ts +40 -0
  34. package/bundled-plugins/alignment/dist/render.d.ts.map +1 -0
  35. package/bundled-plugins/alignment/dist/render.js +194 -0
  36. package/bundled-plugins/alignment/dist/render.js.map +1 -0
  37. package/bundled-plugins/alignment/dist/types.d.ts +217 -0
  38. package/bundled-plugins/alignment/dist/types.d.ts.map +1 -0
  39. package/bundled-plugins/alignment/dist/types.js +30 -0
  40. package/bundled-plugins/alignment/dist/types.js.map +1 -0
  41. package/bundled-plugins/alignment/plugin.json +12 -0
  42. package/bundled-plugins/browser-playwright/MANUAL.md +60 -0
  43. package/bundled-plugins/browser-playwright/agent-forge.json +25 -0
  44. package/bundled-plugins/browser-playwright/dist/capability.d.ts +25 -0
  45. package/bundled-plugins/browser-playwright/dist/capability.d.ts.map +1 -0
  46. package/bundled-plugins/browser-playwright/dist/capability.js +612 -0
  47. package/bundled-plugins/browser-playwright/dist/capability.js.map +1 -0
  48. package/bundled-plugins/browser-playwright/dist/entry.d.ts +13 -0
  49. package/bundled-plugins/browser-playwright/dist/entry.d.ts.map +1 -0
  50. package/bundled-plugins/browser-playwright/dist/entry.js +14 -0
  51. package/bundled-plugins/browser-playwright/dist/entry.js.map +1 -0
  52. package/bundled-plugins/browser-playwright/dist/index.d.ts +7 -0
  53. package/bundled-plugins/browser-playwright/dist/index.d.ts.map +1 -0
  54. package/bundled-plugins/browser-playwright/dist/index.js +5 -0
  55. package/bundled-plugins/browser-playwright/dist/index.js.map +1 -0
  56. package/bundled-plugins/browser-playwright/dist/operations.d.ts +69 -0
  57. package/bundled-plugins/browser-playwright/dist/operations.d.ts.map +1 -0
  58. package/bundled-plugins/browser-playwright/dist/operations.js +149 -0
  59. package/bundled-plugins/browser-playwright/dist/operations.js.map +1 -0
  60. package/bundled-plugins/browser-playwright/dist/playwright-driver.d.ts +275 -0
  61. package/bundled-plugins/browser-playwright/dist/playwright-driver.d.ts.map +1 -0
  62. package/bundled-plugins/browser-playwright/dist/playwright-driver.js +953 -0
  63. package/bundled-plugins/browser-playwright/dist/playwright-driver.js.map +1 -0
  64. package/bundled-plugins/browser-playwright/dist/setup.d.ts +88 -0
  65. package/bundled-plugins/browser-playwright/dist/setup.d.ts.map +1 -0
  66. package/bundled-plugins/browser-playwright/dist/setup.js +252 -0
  67. package/bundled-plugins/browser-playwright/dist/setup.js.map +1 -0
  68. package/bundled-plugins/browser-playwright/dist/types.d.ts +270 -0
  69. package/bundled-plugins/browser-playwright/dist/types.d.ts.map +1 -0
  70. package/bundled-plugins/browser-playwright/dist/types.js +2 -0
  71. package/bundled-plugins/browser-playwright/dist/types.js.map +1 -0
  72. package/bundled-plugins/browser-playwright/plugin.json +20 -0
  73. package/bundled-plugins/coding-tools/agent-forge.json +1 -1
  74. package/bundled-plugins/coding-tools/dist/bash.d.ts +2 -7
  75. package/bundled-plugins/coding-tools/dist/bash.d.ts.map +1 -1
  76. package/bundled-plugins/coding-tools/dist/bash.js +2 -34
  77. package/bundled-plugins/coding-tools/dist/bash.js.map +1 -1
  78. package/bundled-plugins/coding-tools/plugin.json +1 -1
  79. package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
  80. package/bundled-plugins/compaction-policy/plugin.json +1 -1
  81. package/bundled-plugins/mcp-http/dist/mcp-http.d.ts.map +1 -1
  82. package/bundled-plugins/mcp-http/dist/mcp-http.js +84 -31
  83. package/bundled-plugins/mcp-http/dist/mcp-http.js.map +1 -1
  84. package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
  85. package/bundled-plugins/overflow-policy/plugin.json +1 -1
  86. package/bundled-plugins/provider-failover/agent-forge.json +1 -1
  87. package/bundled-plugins/provider-failover/plugin.json +1 -1
  88. package/bundled-plugins/retry-policy/agent-forge.json +1 -1
  89. package/bundled-plugins/retry-policy/plugin.json +1 -1
  90. package/dist/bundle/.build-manifest.json +60 -58
  91. package/dist/bundle/chunks/{anthropic-messages-3FJHRAJL.js → anthropic-messages-NL4Y6WPB.js} +1 -1
  92. package/dist/bundle/chunks/{azure-openai-responses-GCL47IDS.js → azure-openai-responses-CPXC42HO.js} +1 -1
  93. package/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
  94. package/dist/bundle/chunks/chunk-5LRQFZFE.js +2 -0
  95. package/dist/bundle/chunks/{chunk-HTEVUY7F.js → chunk-7HSJPQKN.js} +1 -1
  96. package/dist/bundle/chunks/{chunk-AC2FIS4G.js → chunk-EDO7Q6XR.js} +1 -1
  97. package/dist/bundle/chunks/{chunk-755VNWIF.js → chunk-ISLHFRER.js} +6 -6
  98. package/dist/bundle/chunks/{chunk-HV64ASMT.js → chunk-K3S6GTL7.js} +1 -1
  99. package/dist/bundle/chunks/{chunk-HEL6TAWE.js → chunk-POLDAUYA.js} +37 -36
  100. package/dist/bundle/chunks/{chunk-V3ACW7VD.js → chunk-WJSKB3FC.js} +1 -1
  101. package/dist/bundle/chunks/{chunk-32YDZI4J.js → chunk-ZS5JEI76.js} +1 -1
  102. package/dist/bundle/chunks/{google-generative-ai-6BMXWA44.js → google-generative-ai-UMZ53EFA.js} +1 -1
  103. package/dist/bundle/chunks/{google-vertex-6H7NLRTK.js → google-vertex-ZNR5NS6H.js} +1 -1
  104. package/dist/bundle/chunks/image-resize-worker.js +1 -1
  105. package/dist/bundle/chunks/{mistral-conversations-IXUHSFSJ.js → mistral-conversations-IT66WUNN.js} +1 -1
  106. package/dist/bundle/chunks/{openai-codex-responses-YHUAEVCM.js → openai-codex-responses-FOVCVG6I.js} +1 -1
  107. package/dist/bundle/chunks/{openai-completions-ULQCFC72.js → openai-completions-FLQ7CBOL.js} +1 -1
  108. package/dist/bundle/chunks/{openai-responses-NLLAJDPS.js → openai-responses-ABGYHS2T.js} +1 -1
  109. package/dist/bundle/chunks/{pi-messages-EJTI2EJ3.js → pi-messages-6K5W6LUN.js} +1 -1
  110. package/dist/bundle/chunks/{virtual-modules-TQWEGNNZ.js → virtual-modules-2QGILFV7.js} +1 -1
  111. package/dist/bundle/cli.js +1 -1
  112. package/dist/bundle/client.js +1 -1
  113. package/dist/bundle/index.js +1 -1
  114. package/dist/bundle/rpc-entry.js +1 -1
  115. package/dist/client/remote-session.d.ts.map +1 -1
  116. package/dist/client/remote-session.js +65 -6
  117. package/dist/client/remote-session.js.map +1 -1
  118. package/dist/core/agent-session-store.d.ts.map +1 -1
  119. package/dist/core/agent-session-store.js +20 -3
  120. package/dist/core/agent-session-store.js.map +1 -1
  121. package/dist/core/extensions/agent-composition.d.ts.map +1 -1
  122. package/dist/core/extensions/agent-composition.js +20 -1
  123. package/dist/core/extensions/agent-composition.js.map +1 -1
  124. package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -1
  125. package/dist/core/i18n/locales/zh-cn/core-errors.js +1 -0
  126. package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
  127. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
  128. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +10 -3
  129. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
  130. package/dist/core/keybindings.d.ts +35 -0
  131. package/dist/core/keybindings.d.ts.map +1 -1
  132. package/dist/core/keybindings.js +34 -0
  133. package/dist/core/keybindings.js.map +1 -1
  134. package/dist/core/sdk.d.ts.map +1 -1
  135. package/dist/core/sdk.js +62 -15
  136. package/dist/core/sdk.js.map +1 -1
  137. package/dist/core/session-manager.d.ts.map +1 -1
  138. package/dist/core/session-manager.js +11 -3
  139. package/dist/core/session-manager.js.map +1 -1
  140. package/dist/core/system-prompt.d.ts.map +1 -1
  141. package/dist/core/system-prompt.js +2 -2
  142. package/dist/core/system-prompt.js.map +1 -1
  143. package/dist/core/tools/capability-mount.d.ts.map +1 -1
  144. package/dist/core/tools/capability-mount.js +4 -21
  145. package/dist/core/tools/capability-mount.js.map +1 -1
  146. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  147. package/dist/modes/interactive/components/assistant-message.js +2 -2
  148. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  149. package/dist/modes/interactive/components/bash-execution.d.ts +2 -0
  150. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  151. package/dist/modes/interactive/components/bash-execution.js +25 -0
  152. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  153. package/dist/modes/interactive/components/changelog-pager.d.ts +53 -0
  154. package/dist/modes/interactive/components/changelog-pager.d.ts.map +1 -0
  155. package/dist/modes/interactive/components/changelog-pager.js +239 -0
  156. package/dist/modes/interactive/components/changelog-pager.js.map +1 -0
  157. package/dist/modes/interactive/components/tool-execution.d.ts +6 -0
  158. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  159. package/dist/modes/interactive/components/tool-execution.js +12 -0
  160. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  161. package/dist/modes/interactive/components/tool-run-group.d.ts +41 -11
  162. package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -1
  163. package/dist/modes/interactive/components/tool-run-group.js +126 -14
  164. package/dist/modes/interactive/components/tool-run-group.js.map +1 -1
  165. package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
  166. package/dist/modes/interactive/interactive-commands.js +23 -13
  167. package/dist/modes/interactive/interactive-commands.js.map +1 -1
  168. package/dist/modes/interactive/interactive-events.d.ts +14 -4
  169. package/dist/modes/interactive/interactive-events.d.ts.map +1 -1
  170. package/dist/modes/interactive/interactive-events.js +94 -12
  171. package/dist/modes/interactive/interactive-events.js.map +1 -1
  172. package/dist/modes/interactive/interactive-mode.d.ts +6 -1
  173. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  174. package/dist/modes/interactive/interactive-mode.js +21 -5
  175. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  176. package/dist/plugins/ecosystem/node-local-package-source.d.ts +2 -1
  177. package/dist/plugins/ecosystem/node-local-package-source.d.ts.map +1 -1
  178. package/dist/plugins/ecosystem/node-local-package-source.js +110 -4
  179. package/dist/plugins/ecosystem/node-local-package-source.js.map +1 -1
  180. package/dist/plugins/ecosystem/node-package-install-host.d.ts.map +1 -1
  181. package/dist/plugins/ecosystem/node-package-install-host.js +106 -39
  182. package/dist/plugins/ecosystem/node-package-install-host.js.map +1 -1
  183. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  184. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +59 -2
  185. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  186. package/dist/suites/builtin-suites.d.ts.map +1 -1
  187. package/dist/suites/builtin-suites.js +2 -2
  188. package/dist/suites/builtin-suites.js.map +1 -1
  189. package/dist/utils/changelog.d.ts +27 -0
  190. package/dist/utils/changelog.d.ts.map +1 -1
  191. package/dist/utils/changelog.js +110 -0
  192. package/dist/utils/changelog.js.map +1 -1
  193. package/docs/keybindings.md +14 -0
  194. package/examples/extensions/with-deps/package-lock.json +2 -2
  195. package/examples/extensions/with-deps/package.json +1 -1
  196. package/examples/extensions/with-deps/plugin.json +1 -1
  197. package/package.json +1 -1
  198. package/dist/bundle/chunks/chunk-A3JYRWB6.js +0 -2
@@ -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 } 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\ttype TUI,\n\tTuiAltScreen,\n\tTuiMainScreen,\n} from \"@agent-forge/tui\";\nimport { APP_NAME, APP_TITLE, getAgentDir, VERSION } from \"../../config.ts\";\nimport type { AgentSession, AgentSessionEvent } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime, ReplacedSessionContext } from \"../../core/agent-session-runtime.ts\";\nimport type { AgentSessionRuntimeDiagnostic } from \"../../core/agent-session-services.ts\";\nimport type { CacheMiss } from \"../../core/cache-stats.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 } from \"../../core/http-dispatcher.ts\";\nimport { setI18nLanguage, t } from \"../../core/i18n/index.ts\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.ts\";\nimport { formatMissingSessionCwdPrompt, type MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport type { SessionEntry } 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 { ModelCatalogRuntime } from \"../../host/model-catalog-refresh.ts\";\nimport type { MetricsSnapshotV1, ObservabilityMetricsOptions } from \"../../plugins/observability-types.ts\";\nimport { listSuiteIds, resolveSuiteId, SUITE_ENV_VAR, SUITE_SESSION_ENTRY_TYPE } from \"../../suites/suite-loader.ts\";\nimport {\n\tgetEditorTheme,\n\tgetMarkdownTheme,\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\";\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 { loadAllHighlightLanguages } from \"../../utils/syntax-highlight.ts\";\nimport { ensureTool, type ToolStatus } from \"../../utils/tools-manager.ts\";\nimport type { LatestRelease } from \"../../utils/version-check.ts\";\nimport { kickMemoryModelPreheat } from \"../memory-preheat.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport type { BashExecutionComponent } from \"./components/bash-execution.ts\";\nimport { CustomEditor } from \"./components/custom-editor.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 } from \"./components/footer.ts\";\nimport { formatKeyText, 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 } from \"./components/session-selector.ts\";\nimport {\n\tIdleStatus,\n\ttype StatusIndicator,\n\ttype WorkingIndicatorOptions,\n\tWorkingStatusIndicator,\n} from \"./components/status-indicator.ts\";\nimport type { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport type { ToolRunGroupComponent } from \"./components/tool-run-group.ts\";\nimport { editInExternalEditor } from \"./external-editor.ts\";\nimport * as authFlow from \"./interactive-auth.ts\";\nimport {\n\tbuildRegisteredThemes,\n\tCOMMAND_DISPATCH_ENTRIES,\n\ttype CommandHandlersHost,\n\tcheckDaxnutsEasterEgg,\n\tfilterCapabilityCommandsForCompletions,\n\tgetAppKeyDisplay,\n\tgetEditorKeyDisplay,\n\tgetPathCommandArgument,\n\thandleArminSaysHi,\n\thandleBashCommand,\n\thandleChangelogCommand,\n\thandleCleanSessionsCommand,\n\thandleClearCommand,\n\thandleCompactCommand,\n\thandleCopyCommand,\n\thandleDaxnuts,\n\thandleDebugCommand,\n\thandleExportCommand,\n\thandleHelpCommand,\n\thandleHotkeysCommand,\n\thandleImportCommand,\n\thandleMetricsCommand,\n\thandleNameCommand,\n\thandleReloadCommand,\n\thandleSessionCommand,\n\thandleStopAgentsCommand,\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 * as eventsFlow from \"./interactive-events.ts\";\nimport {\n\tbuildScopeGroups,\n\tfindSourceInfoForPath,\n\tformatContextPath,\n\tformatDiagnostics,\n\tformatDisplayPath,\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\tquoteIfNeeded,\n} from \"./interactive-helpers.ts\";\nimport * as lifecycleFlow from \"./interactive-lifecycle.ts\";\nimport * as queuesFlow from \"./interactive-queues.ts\";\nimport * as selectorsFlow from \"./interactive-selectors.ts\";\nimport { getModelSearchText } from \"./model-search.ts\";\nimport { type StartupBackgroundCheckHost, startStartupBackgroundChecks } from \"./startup-services.ts\";\n\n// Re-exported for existing consumers of the interactive mode module; the\n// implementation moved to ./interactive-commands.ts with the command handlers\n// (拆分 slice 1).\nexport { buildRegisteredThemes } from \"./interactive-commands.ts\";\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\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\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 */\nexport interface 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\n\timplements\n\t\tDialogUiHost,\n\t\tauthFlow.AuthUiHost,\n\t\tselectorsFlow.SelectorsHost,\n\t\tStartupBackgroundCheckHost,\n\t\tCommandHandlersHost,\n\t\tqueuesFlow.QueuesHost,\n\t\tlifecycleFlow.LifecycleHost,\n\t\teventsFlow.EventsHost\n{\n\tprivate runtimeHost: AgentSessionRuntime;\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\trenderer: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tpendingMessagesContainer: Container;\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tstatusContainer: 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5): per-event refresh.\n\t */\n\tfailoverTicker: 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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tisInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate pendingUserInputs: string[] = [];\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tactiveStatusIndicator: StatusIndicator | undefined = undefined;\n\tprivate readonly idleStatus = new IdleStatus();\n\tprivate workingMessage: string | undefined = undefined;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tworkingVisible = true;\n\tprivate workingIndicatorOptions: WorkingIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = t(\"Working...\");\n\tprivate readonly defaultHiddenThinkingLabel = t(\"Thinking...\");\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\thiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): double-Ctrl+C exit window. */\n\tlastSigintTime = 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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tstreamingComponent: AssistantMessageComponent | undefined = undefined;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tstreamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tpendingTools = 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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tactiveToolRunGroup: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\thideThinkingBlock = false;\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\toutputPad = 1;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\treadonly mermaidMarkdownTransformer: MarkdownTransformer = createMermaidMarkdownTransformer({\n\t\tgetMode: () => this.settingsManager.getMermaidRenderingMode(),\n\t\ttheme,\n\t});\n\n\t// Agent subscription unsubscribe function\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tunsubscribe?: () => void;\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4). */\n\tsignalCleanupHandlers: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tbashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tpendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tautoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tretryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\t/** Host-visible for ./interactive-queues.ts (拆分 slice 3). */\n\tcompactionQueuedMessages: queuesFlow.CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4). */\n\tshutdownRequested = false;\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): reentrancy guard. */\n\tisShuttingDown = 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\toptions: InteractiveModeOptions;\n\tprivate readonly onRightClickPaste = (): void => {\n\t\tvoid this.handleRightClickPaste();\n\t};\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tthemeController: InteractiveThemeController;\n\n\t// Convenience accessors\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2): only the curated AgentSessionHostSurface (setTransport) is consumed there. */\n\tget 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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tswitchTuiMode(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\tupdateTerminalTitle(): 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/** Host-visible for ./startup-services.ts. */\n\tgetVersion(): string {\n\t\treturn this.version;\n\t}\n\n\t/** Narrow cwd projection for startup background checks (D-048). */\n\tgetCwd(): string {\n\t\treturn this.facade.getCwd();\n\t}\n\n\t/** Live initialization read for late-arriving background checks. */\n\thasInitialized(): boolean {\n\t\treturn this.isInitialized;\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Fire-and-forget startup background checks (catalog refresh, version\n\t\t// check, package updates, tmux probe); scheduling lives in\n\t\t// ./startup-services.ts.\n\t\tstartStartupBackgroundChecks(this);\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\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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tgetMarkdownThemeWithSettings(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tshowLoadedResources(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\tkickMemoryModelPreheat(this.session);\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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tapplyFullscreenScrollbarSetting(): void {\n\t\tthis.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());\n\t}\n\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tapplyRuntimeSettings(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tasync 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5).\n\t */\n\tgetRegisteredToolDefinition(toolName: string) {\n\t\treturn eventsFlow.getRegisteredToolDefinition(this, toolName);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn eventsFlow.getMarkdownTransformers(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tshowStatusIndicator(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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tclearStatusIndicator(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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5): turn_start working indicator. */\n\tshowWorkingStatusIndicator(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tresetDialogUI(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tasync 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\t// =========================================================================\n\t// Agent event bridge and transcript rendering — implementation in\n\t// ./interactive-events.ts (拆分 slice 5) behind the EventsHost interface;\n\t// same-name delegates keep the rebind/subscribe flow and prototype-level\n\t// tests bound to these names. showManagedToolStatus, showStatus, and\n\t// getUserInput stay on the mode (startup/footer/main-loop faces).\n\t// =========================================================================\n\n\t/** Session subscription; implementation in ./interactive-events.ts (拆分 slice 5). */\n\tprivate subscribeToAgent(): void {\n\t\teventsFlow.subscribeToAgent(this);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tasync handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\treturn eventsFlow.handleEvent(this, event);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tgetUserMessageText(message: Message): string {\n\t\treturn eventsFlow.getUserMessageText(message);\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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\taddMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\teventsFlow.addMessageToChat(this, message, options);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\trenderSessionItems(\n\t\titems: readonly eventsFlow.RenderSessionItem[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\teventsFlow.renderSessionItems(this, items, options);\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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\trenderSessionEntries(\n\t\tentries: SessionEntry[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\teventsFlow.renderSessionEntries(this, entries, 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\taddCompactionCostNotice(notice: eventsFlow.CompactionCostNotice): void {\n\t\teventsFlow.addCompactionCostNotice(this, notice);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tmaybeShowThinkingDropNotice(message: AssistantMessage): void {\n\t\teventsFlow.maybeShowThinkingDropNotice(this, message);\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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\tmaybeShowCacheMissNotice(message: AssistantMessage): void {\n\t\teventsFlow.maybeShowCacheMissNotice(this, message);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\taddCacheMissNotice(miss: CacheMiss): void {\n\t\teventsFlow.addCacheMissNotice(this, miss);\n\t}\n\n\trenderInitialMessages(): void {\n\t\teventsFlow.renderInitialMessages(this);\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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1); implementation in ./interactive-events.ts (拆分 slice 5). */\n\trebuildChatFromMessages(): void {\n\t\teventsFlow.rebuildChatFromMessages(this);\n\t}\n\n\t// =========================================================================\n\t// Exit and signal lifecycle (implementation in ./interactive-lifecycle.ts,\n\t// 拆分 slice 4) — same-name delegates keep the editor key wiring, init/stop,\n\t// and prototype-level tests bound to these names. The main loop and the TUI\n\t// teardown (stop) stay on the mode, as does formatResumeCommand (D-041 §3.5).\n\t// =========================================================================\n\n\t/** Ctrl+C interrupt/exit grading; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlC(): void {\n\t\tlifecycleFlow.handleCtrlC(this);\n\t}\n\n\t/** Ctrl+D exit on empty editor; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlD(): void {\n\t\tlifecycleFlow.handleCtrlD(this);\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; implementation in\n\t * ./interactive-lifecycle.ts (拆分 slice 4).\n\t */\n\tasync shutdown(options?: { fromSignal?: boolean }): Promise<void> {\n\t\treturn lifecycleFlow.shutdown(this, options);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): dead-terminal emergency exit. */\n\temergencyTerminalExit(): never {\n\t\tlifecycleFlow.emergencyTerminalExit(this);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): uncaught-exception crash handler. */\n\tuncaughtCrash(error: Error): never {\n\t\tlifecycleFlow.uncaughtCrash(this, error);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tasync checkShutdownRequested(): Promise<void> {\n\t\treturn lifecycleFlow.checkShutdownRequested(this);\n\t}\n\n\t/** Signal/stderr/uncaught registration; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate registerSignalHandlers(): void {\n\t\tlifecycleFlow.registerSignalHandlers(this);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): also called by the mode's stop(). */\n\tunregisterSignalHandlers(): void {\n\t\tlifecycleFlow.unregisterSignalHandlers(this);\n\t}\n\n\t/** Suspend to background (Ctrl+Z); implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlZ(): void {\n\t\tlifecycleFlow.handleCtrlZ(this);\n\t}\n\n\t/**\n\t * Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): the function\n\t * stays resident in this module (D-041 §3.5 — resume hints are host TUI\n\t * behavior, not a facade contract).\n\t */\n\tformatResumeCommand(session: ResumeCommandSessionReads): string | undefined {\n\t\treturn formatResumeCommand(session);\n\t}\n\n\t/** Follow-up queue entry (Alt+Enter / /queue); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleFollowUp(explicitText?: string): Promise<void> {\n\t\treturn queuesFlow.handleFollowUp(this, explicitText);\n\t}\n\n\t/** Dequeue restore (keybinding / /dequeue); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleDequeue(): void {\n\t\tqueuesFlow.handleDequeue(this);\n\t}\n\n\t/** /queue command host face (single-entry iron law); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleQueueCommand(text: string | undefined): Promise<void> {\n\t\treturn queuesFlow.handleQueueCommand(this, text);\n\t}\n\n\t/** /dequeue command host face; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleDequeueCommand(): void {\n\t\tqueuesFlow.handleDequeueCommand(this);\n\t}\n\n\t/** /queue-list command host face; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleQueueListCommand(): void {\n\t\tqueuesFlow.handleQueueListCommand(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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\taddToolToRunGroup(component: ToolExecutionComponent): void {\n\t\teventsFlow.addToolToRunGroup(this, 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\tnoteResultInActiveToolRunGroup(isError: boolean): void {\n\t\teventsFlow.noteResultInActiveToolRunGroup(this, isError);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tmarkActiveToolRunGroupComplete(): void {\n\t\teventsFlow.markActiveToolRunGroupComplete(this);\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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tupdateThinkingBlockVisibility(): 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\t * Host-visible for ./interactive-queues.ts (拆分 slice 3): the merged read\n\t * behind the pending-messages display.\n\t */\n\tgetAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn queuesFlow.getAllQueuedMessages(this);\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue; implementation in\n\t * ./interactive-queues.ts (拆分 slice 3). Stays reachable from the mode's\n\t * restoreQueuedMessagesToEditor.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\treturn queuesFlow.clearAllQueues(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (queue manager close path) and ./interactive-events.ts (拆分 slice 3); implementation in ./interactive-queues.ts. */\n\tupdatePendingMessagesDisplay(): void {\n\t\tqueuesFlow.updatePendingMessagesDisplay(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\trestoreQueuedMessagesToEditor(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\t/** Host-visible for ./interactive-queues.ts (拆分 slice 3); implementation in ./interactive-queues.ts. */\n\tqueueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tqueuesFlow.queueCompactionMessage(this, text, mode);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2) and ./interactive-events.ts; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\tasync flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\treturn queuesFlow.flushCompactionQueue(this, options);\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// All selector/view implementations — the S5 slice 5 suite/thinking/model/\n\t// scoped-models/user-message-fork/clone selectors and the 拆分 slice 2\n\t// settings/workflow/agents/tree/session selectors, resume, and the\n\t// startup-suite recovery — live in ./interactive-selectors.ts 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) and the shared\n\t// detectCrossSuiteResume helper stay on the mode.\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\t/** Settings selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowSettingsSelector(): void {\n\t\tselectorsFlow.showSettingsSelector(this);\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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\treadSessionSuiteId(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); the\n\t * implementation is in ./interactive-selectors.ts (拆分 slice 2). The\n\t * startup path on the mode calls this delegate.\n\t */\n\tprivate async showStartupSuiteSelector(pending: {\n\t\trequestedId: string;\n\t\tavailable: readonly string[];\n\t}): Promise<void> {\n\t\treturn selectorsFlow.showStartupSuiteSelector(this, pending);\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/** Workflow overlay; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowWorkflowView(): void {\n\t\tselectorsFlow.showWorkflowView(this);\n\t}\n\n\t/** Subagent session browser; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowAgentsView(): void {\n\t\tselectorsFlow.showAgentsView(this);\n\t}\n\n\t/** Tree selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowTreeSelector(initialSelectedId?: string): void {\n\t\tselectorsFlow.showTreeSelector(this, initialSelectedId);\n\t}\n\n\t/** Session selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowSessionSelector(): void {\n\t\tselectorsFlow.showSessionSelector(this);\n\t}\n\n\t/** Queue manager overlay; implementation in ./interactive-selectors.ts (S5 slice 5). Host-visible for ./interactive-queues.ts (拆分 slice 3). */\n\tshowQueueManagerSelector(): void {\n\t\tselectorsFlow.showQueueManagerSelector(this);\n\t}\n\n\t/**\n\t * Session resume; implementation in ./interactive-selectors.ts (拆分 slice\n\t * 2). Kept as a delegate for the prototype-level test bindings.\n\t */\n\tprivate async handleResumeSession(\n\t\tsessionPath: string,\n\t\toptions?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn selectorsFlow.handleResumeSession(this, sessionPath, options);\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\t * Host-visible for ./interactive-selectors.ts (拆分 slice 2): also called\n\t * from the startup/resume path on the mode, so it stays here.\n\t */\n\tdetectCrossSuiteResume(): 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\treturn handleReloadCommand(this);\n\t}\n\n\tasync handleExportCommand(text: string): Promise<void> {\n\t\treturn handleExportCommand(this, text);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: prototype-level test bindings call this delegate; implementation in ./interactive-commands.ts\n\tprivate getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined {\n\t\treturn getPathCommandArgument(text, command);\n\t}\n\n\tasync handleImportCommand(text: string): Promise<void> {\n\t\treturn handleImportCommand(this, text);\n\t}\n\n\tasync handleCopyCommand(options: { flashConfirmation?: boolean; preferSelection?: boolean } = {}): Promise<void> {\n\t\treturn handleCopyCommand(this, options);\n\t}\n\n\thandleNameCommand(text: string): void {\n\t\thandleNameCommand(this, text);\n\t}\n\n\t/**\n\t * 中断分级(设计 子代理运行时 §4.2,2026-10-02):/stop-agents 的唯一执行\n\t * 面——终止全部后台子代理(不触当前回合)。Esc 从不做这件事。\n\t */\n\thandleStopAgentsCommand(): void {\n\t\thandleStopAgentsCommand(this);\n\t}\n\n\thandleSessionCommand(): void {\n\t\thandleSessionCommand(this);\n\t}\n\n\thandleMetricsCommand(turnsArg: string | undefined): void {\n\t\thandleMetricsCommand(this, turnsArg);\n\t}\n\n\thandleChangelogCommand(): void {\n\t\thandleChangelogCommand(this);\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t *\n\t * Host-visible for ./interactive-queues.ts (拆分 slice 3): the dequeue hint\n\t * in the pending-messages display.\n\t */\n\tgetAppKeyDisplay(action: AppKeybinding): string {\n\t\treturn getAppKeyDisplay(action);\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: thin delegate kept per 拆分计划 rule 2; implementation in ./interactive-commands.ts\n\tprivate getEditorKeyDisplay(action: Keybinding): string {\n\t\treturn getEditorKeyDisplay(action);\n\t}\n\n\thandleHelpCommand(): void {\n\t\thandleHelpCommand(this);\n\t}\n\n\thandleHotkeysCommand(): void {\n\t\thandleHotkeysCommand(this);\n\t}\n\n\tasync handleClearCommand(): Promise<void> {\n\t\treturn handleClearCommand(this);\n\t}\n\n\thandleDebugCommand(): void {\n\t\thandleDebugCommand(this);\n\t}\n\n\thandleArminSaysHi(): void {\n\t\thandleArminSaysHi(this);\n\t}\n\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\thandleDaxnuts(): void {\n\t\thandleDaxnuts(this);\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tcheckDaxnutsEasterEgg(this, model);\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tawait handleBashCommand(this, command, excludeFromContext);\n\t}\n\n\tasync handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\treturn handleCompactCommand(this, customInstructions);\n\t}\n\n\t/** /clean-sessions:会话清理两阶段流程;输出/确认走宿主既有机制(设计 §7)。 */\n\tasync handleCleanSessionsCommand(arg: string | undefined): Promise<void> {\n\t\treturn handleCleanSessionsCommand(this, arg);\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 } 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\ttype TUI,\n\tTuiAltScreen,\n\tTuiMainScreen,\n} from \"@agent-forge/tui\";\nimport { APP_NAME, APP_TITLE, getAgentDir, VERSION } from \"../../config.ts\";\nimport type { AgentSession, AgentSessionEvent } from \"../../core/agent-session.ts\";\nimport type { AgentSessionRuntime, ReplacedSessionContext } from \"../../core/agent-session-runtime.ts\";\nimport type { AgentSessionRuntimeDiagnostic } from \"../../core/agent-session-services.ts\";\nimport type { CacheMiss } from \"../../core/cache-stats.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 } from \"../../core/http-dispatcher.ts\";\nimport { setI18nLanguage, t } from \"../../core/i18n/index.ts\";\nimport { type AppKeybinding, KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.ts\";\nimport { formatMissingSessionCwdPrompt, type MissingSessionCwdError } from \"../../core/session-cwd.ts\";\nimport type { SessionEntry } 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 { ModelCatalogRuntime } from \"../../host/model-catalog-refresh.ts\";\nimport type { MetricsSnapshotV1, ObservabilityMetricsOptions } from \"../../plugins/observability-types.ts\";\nimport { listSuiteIds, resolveSuiteId, SUITE_ENV_VAR, SUITE_SESSION_ENTRY_TYPE } from \"../../suites/suite-loader.ts\";\nimport {\n\tgetEditorTheme,\n\tgetMarkdownTheme,\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\";\nimport {\n\tcondenseChangelogEntriesV1,\n\tgetChangelogPath,\n\tgetNewEntries,\n\tnormalizeChangelogLinks,\n\tparseChangelog,\n} 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 { loadAllHighlightLanguages } from \"../../utils/syntax-highlight.ts\";\nimport { ensureTool, type ToolStatus } from \"../../utils/tools-manager.ts\";\nimport type { LatestRelease } from \"../../utils/version-check.ts\";\nimport { kickMemoryModelPreheat } from \"../memory-preheat.ts\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.ts\";\nimport type { BashExecutionComponent } from \"./components/bash-execution.ts\";\nimport { CustomEditor } from \"./components/custom-editor.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 } from \"./components/footer.ts\";\nimport { formatKeyText, 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 } from \"./components/session-selector.ts\";\nimport {\n\tIdleStatus,\n\ttype StatusIndicator,\n\ttype WorkingIndicatorOptions,\n\tWorkingStatusIndicator,\n} from \"./components/status-indicator.ts\";\nimport type { ToolExecutionComponent } from \"./components/tool-execution.ts\";\nimport type { ToolRunGroupComponent } from \"./components/tool-run-group.ts\";\nimport { editInExternalEditor } from \"./external-editor.ts\";\nimport * as authFlow from \"./interactive-auth.ts\";\nimport {\n\tbuildRegisteredThemes,\n\tCOMMAND_DISPATCH_ENTRIES,\n\ttype CommandHandlersHost,\n\tcheckDaxnutsEasterEgg,\n\tfilterCapabilityCommandsForCompletions,\n\tgetAppKeyDisplay,\n\tgetEditorKeyDisplay,\n\tgetPathCommandArgument,\n\thandleArminSaysHi,\n\thandleBashCommand,\n\thandleChangelogCommand,\n\thandleCleanSessionsCommand,\n\thandleClearCommand,\n\thandleCompactCommand,\n\thandleCopyCommand,\n\thandleDaxnuts,\n\thandleDebugCommand,\n\thandleExportCommand,\n\thandleHelpCommand,\n\thandleHotkeysCommand,\n\thandleImportCommand,\n\thandleMetricsCommand,\n\thandleNameCommand,\n\thandleReloadCommand,\n\thandleSessionCommand,\n\thandleStopAgentsCommand,\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 * as eventsFlow from \"./interactive-events.ts\";\nimport {\n\tbuildScopeGroups,\n\tfindSourceInfoForPath,\n\tformatContextPath,\n\tformatDiagnostics,\n\tformatDisplayPath,\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\tquoteIfNeeded,\n} from \"./interactive-helpers.ts\";\nimport * as lifecycleFlow from \"./interactive-lifecycle.ts\";\nimport * as queuesFlow from \"./interactive-queues.ts\";\nimport * as selectorsFlow from \"./interactive-selectors.ts\";\nimport { getModelSearchText } from \"./model-search.ts\";\nimport { type StartupBackgroundCheckHost, startStartupBackgroundChecks } from \"./startup-services.ts\";\n\n// Re-exported for existing consumers of the interactive mode module; the\n// implementation moved to ./interactive-commands.ts with the command handlers\n// (拆分 slice 1).\nexport { buildRegisteredThemes } from \"./interactive-commands.ts\";\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\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\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 */\nexport interface 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\n\timplements\n\t\tDialogUiHost,\n\t\tauthFlow.AuthUiHost,\n\t\tselectorsFlow.SelectorsHost,\n\t\tStartupBackgroundCheckHost,\n\t\tCommandHandlersHost,\n\t\tqueuesFlow.QueuesHost,\n\t\tlifecycleFlow.LifecycleHost,\n\t\teventsFlow.EventsHost\n{\n\tprivate runtimeHost: AgentSessionRuntime;\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\trenderer: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tpendingMessagesContainer: Container;\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tstatusContainer: 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5): per-event refresh.\n\t */\n\tfailoverTicker: 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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tisInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate pendingUserInputs: string[] = [];\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tactiveStatusIndicator: StatusIndicator | undefined = undefined;\n\tprivate readonly idleStatus = new IdleStatus();\n\tprivate workingMessage: string | undefined = undefined;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tworkingVisible = true;\n\tprivate workingIndicatorOptions: WorkingIndicatorOptions | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = t(\"Working...\");\n\tprivate readonly defaultHiddenThinkingLabel = t(\"Thinking...\");\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\thiddenThinkingLabel = this.defaultHiddenThinkingLabel;\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): double-Ctrl+C exit window. */\n\tlastSigintTime = 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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tstreamingComponent: AssistantMessageComponent | undefined = undefined;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tstreamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tpendingTools = 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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tactiveToolRunGroup: ToolRunGroupComponent | undefined = undefined;\n\n\t// D-083 跨回合合并: the last sealed group; an adjacent run with no visible\n\t// content between may merge back into it.\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tlastCompletedToolRunGroup: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\thideThinkingBlock = false;\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\toutputPad = 1;\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\treadonly mermaidMarkdownTransformer: MarkdownTransformer = createMermaidMarkdownTransformer({\n\t\tgetMode: () => this.settingsManager.getMermaidRenderingMode(),\n\t\ttheme,\n\t});\n\n\t// Agent subscription unsubscribe function\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tunsubscribe?: () => void;\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4). */\n\tsignalCleanupHandlers: 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tbashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tpendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tautoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tretryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\t/** Host-visible for ./interactive-queues.ts (拆分 slice 3). */\n\tcompactionQueuedMessages: queuesFlow.CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4). */\n\tshutdownRequested = false;\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): reentrancy guard. */\n\tisShuttingDown = 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\toptions: InteractiveModeOptions;\n\tprivate readonly onRightClickPaste = (): void => {\n\t\tvoid this.handleRightClickPaste();\n\t};\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tthemeController: InteractiveThemeController;\n\n\t// Convenience accessors\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2): only the curated AgentSessionHostSurface (setTransport) is consumed there. */\n\tget 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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tswitchTuiMode(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\tupdateTerminalTitle(): 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/** Host-visible for ./startup-services.ts. */\n\tgetVersion(): string {\n\t\treturn this.version;\n\t}\n\n\t/** Narrow cwd projection for startup background checks (D-048). */\n\tgetCwd(): string {\n\t\treturn this.facade.getCwd();\n\t}\n\n\t/** Live initialization read for late-arriving background checks. */\n\thasInitialized(): boolean {\n\t\treturn this.isInitialized;\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Fire-and-forget startup background checks (catalog refresh, version\n\t\t// check, package updates, tmux probe); scheduling lives in\n\t\t// ./startup-services.ts.\n\t\tstartStartupBackgroundChecks(this);\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\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\t// 紧凑摘要而非全文(设计 docs/design/版本新特性面板与Changelog分页.md):\n\t\t\t// 面板只承载首句级信息,全量历史走 /changelog 分页器。\n\t\t\tconst digest = condenseChangelogEntriesV1(newEntries);\n\t\t\tif (digest === \"\") return undefined;\n\t\t\treturn normalizeChangelogLinks(digest, newEntries[0]);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tgetMarkdownThemeWithSettings(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tshowLoadedResources(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\tkickMemoryModelPreheat(this.session);\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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tapplyFullscreenScrollbarSetting(): void {\n\t\tthis.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());\n\t}\n\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tapplyRuntimeSettings(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tasync 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5).\n\t */\n\tgetRegisteredToolDefinition(toolName: string) {\n\t\treturn eventsFlow.getRegisteredToolDefinition(this, toolName);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5). */\n\tgetMarkdownTransformers(): MarkdownTransformer[] {\n\t\treturn eventsFlow.getMarkdownTransformers(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tshowStatusIndicator(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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tclearStatusIndicator(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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5): turn_start working indicator. */\n\tshowWorkingStatusIndicator(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tresetDialogUI(): 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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\tasync 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// /promote has no dispatch-table entry: its execution face is the memory\n\t\t// plugin's capability command (the completion list advertises the builtin\n\t\t// entry from BUILTIN_SLASH_COMMANDS). When that face is absent, fail\n\t\t// locally instead of letting the literal text reach the model as a prompt.\n\t\tif (/^\\/promote(?:\\s|$)/.test(text) && !this.session.getCapabilityRuntime().hasCommand(\"promote\")) {\n\t\t\tthis.showError(t(\"/promote requires the memory plugin's command face, which is not enabled\"));\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\t// =========================================================================\n\t// Agent event bridge and transcript rendering — implementation in\n\t// ./interactive-events.ts (拆分 slice 5) behind the EventsHost interface;\n\t// same-name delegates keep the rebind/subscribe flow and prototype-level\n\t// tests bound to these names. showManagedToolStatus, showStatus, and\n\t// getUserInput stay on the mode (startup/footer/main-loop faces).\n\t// =========================================================================\n\n\t/** Session subscription; implementation in ./interactive-events.ts (拆分 slice 5). */\n\tprivate subscribeToAgent(): void {\n\t\teventsFlow.subscribeToAgent(this);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tasync handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\treturn eventsFlow.handleEvent(this, event);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tgetUserMessageText(message: Message): string {\n\t\treturn eventsFlow.getUserMessageText(message);\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\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\taddMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\teventsFlow.addMessageToChat(this, message, options);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\trenderSessionItems(\n\t\titems: readonly eventsFlow.RenderSessionItem[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\teventsFlow.renderSessionItems(this, items, options);\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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\trenderSessionEntries(\n\t\tentries: SessionEntry[],\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\teventsFlow.renderSessionEntries(this, entries, 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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\taddCompactionCostNotice(notice: eventsFlow.CompactionCostNotice): void {\n\t\teventsFlow.addCompactionCostNotice(this, notice);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tmaybeShowThinkingDropNotice(message: AssistantMessage): void {\n\t\teventsFlow.maybeShowThinkingDropNotice(this, message);\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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\tmaybeShowCacheMissNotice(message: AssistantMessage): void {\n\t\teventsFlow.maybeShowCacheMissNotice(this, message);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\taddCacheMissNotice(miss: CacheMiss): void {\n\t\teventsFlow.addCacheMissNotice(this, miss);\n\t}\n\n\trenderInitialMessages(): void {\n\t\teventsFlow.renderInitialMessages(this);\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\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1); implementation in ./interactive-events.ts (拆分 slice 5). */\n\trebuildChatFromMessages(): void {\n\t\teventsFlow.rebuildChatFromMessages(this);\n\t}\n\n\t// =========================================================================\n\t// Exit and signal lifecycle (implementation in ./interactive-lifecycle.ts,\n\t// 拆分 slice 4) — same-name delegates keep the editor key wiring, init/stop,\n\t// and prototype-level tests bound to these names. The main loop and the TUI\n\t// teardown (stop) stay on the mode, as does formatResumeCommand (D-041 §3.5).\n\t// =========================================================================\n\n\t/** Ctrl+C interrupt/exit grading; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlC(): void {\n\t\tlifecycleFlow.handleCtrlC(this);\n\t}\n\n\t/** Ctrl+D exit on empty editor; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlD(): void {\n\t\tlifecycleFlow.handleCtrlD(this);\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; implementation in\n\t * ./interactive-lifecycle.ts (拆分 slice 4).\n\t */\n\tasync shutdown(options?: { fromSignal?: boolean }): Promise<void> {\n\t\treturn lifecycleFlow.shutdown(this, options);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): dead-terminal emergency exit. */\n\temergencyTerminalExit(): never {\n\t\tlifecycleFlow.emergencyTerminalExit(this);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): uncaught-exception crash handler. */\n\tuncaughtCrash(error: Error): never {\n\t\tlifecycleFlow.uncaughtCrash(this, error);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tasync checkShutdownRequested(): Promise<void> {\n\t\treturn lifecycleFlow.checkShutdownRequested(this);\n\t}\n\n\t/** Signal/stderr/uncaught registration; implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate registerSignalHandlers(): void {\n\t\tlifecycleFlow.registerSignalHandlers(this);\n\t}\n\n\t/** Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): also called by the mode's stop(). */\n\tunregisterSignalHandlers(): void {\n\t\tlifecycleFlow.unregisterSignalHandlers(this);\n\t}\n\n\t/** Suspend to background (Ctrl+Z); implementation in ./interactive-lifecycle.ts (拆分 slice 4). */\n\tprivate handleCtrlZ(): void {\n\t\tlifecycleFlow.handleCtrlZ(this);\n\t}\n\n\t/**\n\t * Host-visible for ./interactive-lifecycle.ts (拆分 slice 4): the function\n\t * stays resident in this module (D-041 §3.5 — resume hints are host TUI\n\t * behavior, not a facade contract).\n\t */\n\tformatResumeCommand(session: ResumeCommandSessionReads): string | undefined {\n\t\treturn formatResumeCommand(session);\n\t}\n\n\t/** Follow-up queue entry (Alt+Enter / /queue); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleFollowUp(explicitText?: string): Promise<void> {\n\t\treturn queuesFlow.handleFollowUp(this, explicitText);\n\t}\n\n\t/** Dequeue restore (keybinding / /dequeue); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleDequeue(): void {\n\t\tqueuesFlow.handleDequeue(this);\n\t}\n\n\t/** /queue command host face (single-entry iron law); implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleQueueCommand(text: string | undefined): Promise<void> {\n\t\treturn queuesFlow.handleQueueCommand(this, text);\n\t}\n\n\t/** /dequeue command host face; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleDequeueCommand(): void {\n\t\tqueuesFlow.handleDequeueCommand(this);\n\t}\n\n\t/** /queue-list command host face; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\thandleQueueListCommand(): void {\n\t\tqueuesFlow.handleQueueListCommand(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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\taddToolToRunGroup(\n\t\tcomponent: ToolExecutionComponent,\n\t\tctx?: { messageComponent?: Component; message?: AssistantMessage },\n\t): void {\n\t\teventsFlow.addToolToRunGroup(this, component, ctx);\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\t * Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in\n\t * ./interactive-events.ts.\n\t */\n\tnoteResultInActiveToolRunGroup(isError: boolean): void {\n\t\teventsFlow.noteResultInActiveToolRunGroup(this, isError);\n\t}\n\n\t/** Host-visible for ./interactive-events.ts (拆分 slice 5); implementation in ./interactive-events.ts. */\n\tmarkActiveToolRunGroupComplete(): void {\n\t\teventsFlow.markActiveToolRunGroupComplete(this);\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}\n\n\t/** Update rendered assistant messages without rebuilding live tool components. */\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\tupdateThinkingBlockVisibility(): 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\t * Host-visible for ./interactive-queues.ts (拆分 slice 3): the merged read\n\t * behind the pending-messages display.\n\t */\n\tgetAllQueuedMessages(): { steering: string[]; followUp: string[] } {\n\t\treturn queuesFlow.getAllQueuedMessages(this);\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue; implementation in\n\t * ./interactive-queues.ts (拆分 slice 3). Stays reachable from the mode's\n\t * restoreQueuedMessagesToEditor.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[] } {\n\t\treturn queuesFlow.clearAllQueues(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (queue manager close path) and ./interactive-events.ts (拆分 slice 3); implementation in ./interactive-queues.ts. */\n\tupdatePendingMessagesDisplay(): void {\n\t\tqueuesFlow.updatePendingMessagesDisplay(this);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\trestoreQueuedMessagesToEditor(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\t/** Host-visible for ./interactive-queues.ts (拆分 slice 3); implementation in ./interactive-queues.ts. */\n\tqueueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void {\n\t\tqueuesFlow.queueCompactionMessage(this, text, mode);\n\t}\n\n\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2) and ./interactive-events.ts; implementation in ./interactive-queues.ts (拆分 slice 3). */\n\tasync flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\treturn queuesFlow.flushCompactionQueue(this, options);\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// All selector/view implementations — the S5 slice 5 suite/thinking/model/\n\t// scoped-models/user-message-fork/clone selectors and the 拆分 slice 2\n\t// settings/workflow/agents/tree/session selectors, resume, and the\n\t// startup-suite recovery — live in ./interactive-selectors.ts 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) and the shared\n\t// detectCrossSuiteResume helper stay on the mode.\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\t/** Settings selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowSettingsSelector(): void {\n\t\tselectorsFlow.showSettingsSelector(this);\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\t/** Host-visible for ./interactive-selectors.ts (拆分 slice 2). */\n\treadSessionSuiteId(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); the\n\t * implementation is in ./interactive-selectors.ts (拆分 slice 2). The\n\t * startup path on the mode calls this delegate.\n\t */\n\tprivate async showStartupSuiteSelector(pending: {\n\t\trequestedId: string;\n\t\tavailable: readonly string[];\n\t}): Promise<void> {\n\t\treturn selectorsFlow.showStartupSuiteSelector(this, pending);\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/** Workflow overlay; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowWorkflowView(): void {\n\t\tselectorsFlow.showWorkflowView(this);\n\t}\n\n\t/** Subagent session browser; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowAgentsView(): void {\n\t\tselectorsFlow.showAgentsView(this);\n\t}\n\n\t/** Tree selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowTreeSelector(initialSelectedId?: string): void {\n\t\tselectorsFlow.showTreeSelector(this, initialSelectedId);\n\t}\n\n\t/** Session selector; implementation in ./interactive-selectors.ts (拆分 slice 2). */\n\tshowSessionSelector(): void {\n\t\tselectorsFlow.showSessionSelector(this);\n\t}\n\n\t/** Queue manager overlay; implementation in ./interactive-selectors.ts (S5 slice 5). Host-visible for ./interactive-queues.ts (拆分 slice 3). */\n\tshowQueueManagerSelector(): void {\n\t\tselectorsFlow.showQueueManagerSelector(this);\n\t}\n\n\t/**\n\t * Session resume; implementation in ./interactive-selectors.ts (拆分 slice\n\t * 2). Kept as a delegate for the prototype-level test bindings.\n\t */\n\tprivate async handleResumeSession(\n\t\tsessionPath: string,\n\t\toptions?: { withSession?: (ctx: ReplacedSessionContext) => Promise<void> },\n\t): Promise<{ cancelled: boolean }> {\n\t\treturn selectorsFlow.handleResumeSession(this, sessionPath, options);\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\t * Host-visible for ./interactive-selectors.ts (拆分 slice 2): also called\n\t * from the startup/resume path on the mode, so it stays here.\n\t */\n\tdetectCrossSuiteResume(): 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\treturn handleReloadCommand(this);\n\t}\n\n\tasync handleExportCommand(text: string): Promise<void> {\n\t\treturn handleExportCommand(this, text);\n\t}\n\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: prototype-level test bindings call this delegate; implementation in ./interactive-commands.ts\n\tprivate getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined {\n\t\treturn getPathCommandArgument(text, command);\n\t}\n\n\tasync handleImportCommand(text: string): Promise<void> {\n\t\treturn handleImportCommand(this, text);\n\t}\n\n\tasync handleCopyCommand(options: { flashConfirmation?: boolean; preferSelection?: boolean } = {}): Promise<void> {\n\t\treturn handleCopyCommand(this, options);\n\t}\n\n\thandleNameCommand(text: string): void {\n\t\thandleNameCommand(this, text);\n\t}\n\n\t/**\n\t * 中断分级(设计 子代理运行时 §4.2,2026-10-02):/stop-agents 的唯一执行\n\t * 面——终止全部后台子代理(不触当前回合)。Esc 从不做这件事。\n\t */\n\thandleStopAgentsCommand(): void {\n\t\thandleStopAgentsCommand(this);\n\t}\n\n\thandleSessionCommand(): void {\n\t\thandleSessionCommand(this);\n\t}\n\n\thandleMetricsCommand(turnsArg: string | undefined): void {\n\t\thandleMetricsCommand(this, turnsArg);\n\t}\n\n\thandleChangelogCommand(): void {\n\t\thandleChangelogCommand(this);\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t *\n\t * Host-visible for ./interactive-queues.ts (拆分 slice 3): the dequeue hint\n\t * in the pending-messages display.\n\t */\n\tgetAppKeyDisplay(action: AppKeybinding): string {\n\t\treturn getAppKeyDisplay(action);\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: thin delegate kept per 拆分计划 rule 2; implementation in ./interactive-commands.ts\n\tprivate getEditorKeyDisplay(action: Keybinding): string {\n\t\treturn getEditorKeyDisplay(action);\n\t}\n\n\thandleHelpCommand(): void {\n\t\thandleHelpCommand(this);\n\t}\n\n\thandleHotkeysCommand(): void {\n\t\thandleHotkeysCommand(this);\n\t}\n\n\tasync handleClearCommand(): Promise<void> {\n\t\treturn handleClearCommand(this);\n\t}\n\n\thandleDebugCommand(): void {\n\t\thandleDebugCommand(this);\n\t}\n\n\thandleArminSaysHi(): void {\n\t\thandleArminSaysHi(this);\n\t}\n\n\t/** Host-visible for ./interactive-commands.ts (拆分 slice 1). */\n\thandleDaxnuts(): void {\n\t\thandleDaxnuts(this);\n\t}\n\n\t/** Host-visible for ./interactive-auth.ts (S5 slice 3). */\n\tcheckDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tcheckDaxnutsEasterEgg(this, model);\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tawait handleBashCommand(this, command, excludeFromContext);\n\t}\n\n\tasync handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\treturn handleCompactCommand(this, customInstructions);\n\t}\n\n\t/** /clean-sessions:会话清理两阶段流程;输出/确认走宿主既有机制(设计 §7)。 */\n\tasync handleCleanSessionsCommand(arg: string | undefined): Promise<void> {\n\t\treturn handleCleanSessionsCommand(this, arg);\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"]}