@bastani/atomic 0.9.5-alpha.6 → 0.9.5-alpha.8

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 (283) hide show
  1. package/CHANGELOG.md +35 -2
  2. package/dist/builtin/cursor/package.json +2 -2
  3. package/dist/builtin/intercom/CHANGELOG.md +17 -0
  4. package/dist/builtin/intercom/README.md +27 -21
  5. package/dist/builtin/intercom/broker/broker.ts +3 -6
  6. package/dist/builtin/intercom/broker/paths.ts +42 -5
  7. package/dist/builtin/intercom/broker/spawn.ts +78 -10
  8. package/dist/builtin/intercom/config.ts +6 -3
  9. package/dist/builtin/intercom/contact-supervisor-tool.ts +6 -4
  10. package/dist/builtin/intercom/index-heavy.ts +1 -1
  11. package/dist/builtin/intercom/index.ts +162 -130
  12. package/dist/builtin/intercom/intercom-tool.ts +9 -3
  13. package/dist/builtin/intercom/package.json +10 -1
  14. package/dist/builtin/intercom/result-renderers.ts +1 -1
  15. package/dist/builtin/intercom/ui/compose.ts +2 -2
  16. package/dist/builtin/intercom/ui/inline-message.ts +2 -2
  17. package/dist/builtin/intercom/ui/session-list.ts +2 -2
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  20. package/dist/builtin/subagents/package.json +1 -1
  21. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +15 -48
  22. package/dist/builtin/subagents/src/tui/render-layout.ts +9 -0
  23. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +27 -25
  24. package/dist/builtin/subagents/src/tui/render-widget.ts +46 -69
  25. package/dist/builtin/subagents/src/tui/render.ts +1 -1
  26. package/dist/builtin/web-access/package.json +1 -1
  27. package/dist/builtin/workflows/CHANGELOG.md +11 -0
  28. package/dist/builtin/workflows/README.md +3 -1
  29. package/dist/builtin/workflows/builtin/goal-artifacts.ts +3 -1
  30. package/dist/builtin/workflows/builtin/goal-prompts.ts +23 -2
  31. package/dist/builtin/workflows/builtin/goal-reducer.ts +21 -0
  32. package/dist/builtin/workflows/builtin/goal-review.ts +60 -6
  33. package/dist/builtin/workflows/builtin/goal-runner.ts +32 -21
  34. package/dist/builtin/workflows/builtin/goal-types.ts +7 -1
  35. package/dist/builtin/workflows/builtin/ralph-core.ts +52 -4
  36. package/dist/builtin/workflows/builtin/ralph-review-gate.ts +10 -3
  37. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +23 -2
  38. package/dist/builtin/workflows/builtin/ralph-runner.ts +38 -16
  39. package/dist/builtin/workflows/builtin/review-convergence.ts +111 -0
  40. package/dist/builtin/workflows/package.json +1 -1
  41. package/dist/builtin/workflows/skills/create-spec/SKILL.md +2 -0
  42. package/dist/builtin/workflows/src/durable/child-primitive.ts +12 -8
  43. package/dist/builtin/workflows/src/durable/dbos-backend.ts +47 -2
  44. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +28 -0
  45. package/dist/builtin/workflows/src/durable/stage-primitive.ts +165 -27
  46. package/dist/builtin/workflows/src/durable/types.ts +14 -1
  47. package/dist/builtin/workflows/src/engine/run.ts +12 -13
  48. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +2 -0
  49. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +13 -3
  50. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +1 -1
  51. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +18 -19
  52. package/dist/builtin/workflows/src/runs/foreground/stage-runner-unresolved-overflow.ts +38 -0
  53. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +18 -1
  54. package/dist/builtin/workflows/src/shared/persistence-restore.ts +23 -5
  55. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +4 -0
  56. package/dist/bun/internal-intercom-broker.d.ts +6 -0
  57. package/dist/bun/internal-intercom-broker.d.ts.map +1 -0
  58. package/dist/bun/internal-intercom-broker.js +39 -0
  59. package/dist/bun/internal-intercom-broker.js.map +1 -0
  60. package/dist/bun/split-loader.d.ts +2 -0
  61. package/dist/bun/split-loader.d.ts.map +1 -0
  62. package/dist/bun/split-loader.js +50 -0
  63. package/dist/bun/split-loader.js.map +1 -0
  64. package/dist/config.d.ts.map +1 -1
  65. package/dist/config.js +6 -4
  66. package/dist/config.js.map +1 -1
  67. package/dist/core/agent-session-auto-compaction.d.ts +7 -7
  68. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  69. package/dist/core/agent-session-auto-compaction.js +62 -16
  70. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  71. package/dist/core/agent-session-events.d.ts.map +1 -1
  72. package/dist/core/agent-session-events.js +3 -1
  73. package/dist/core/agent-session-events.js.map +1 -1
  74. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  75. package/dist/core/agent-session-extension-bindings.js +1 -1
  76. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  77. package/dist/core/agent-session-methods.d.ts +10 -4
  78. package/dist/core/agent-session-methods.d.ts.map +1 -1
  79. package/dist/core/agent-session-methods.js.map +1 -1
  80. package/dist/core/agent-session-models.d.ts +2 -2
  81. package/dist/core/agent-session-models.d.ts.map +1 -1
  82. package/dist/core/agent-session-models.js.map +1 -1
  83. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  84. package/dist/core/agent-session-prompt.js +1 -0
  85. package/dist/core/agent-session-prompt.js.map +1 -1
  86. package/dist/core/agent-session-retry.d.ts +2 -0
  87. package/dist/core/agent-session-retry.d.ts.map +1 -1
  88. package/dist/core/agent-session-retry.js +152 -4
  89. package/dist/core/agent-session-retry.js.map +1 -1
  90. package/dist/core/agent-session-services.d.ts +1 -0
  91. package/dist/core/agent-session-services.d.ts.map +1 -1
  92. package/dist/core/agent-session-services.js +1 -0
  93. package/dist/core/agent-session-services.js.map +1 -1
  94. package/dist/core/agent-session-types.d.ts +15 -1
  95. package/dist/core/agent-session-types.d.ts.map +1 -1
  96. package/dist/core/agent-session-types.js.map +1 -1
  97. package/dist/core/agent-session.d.ts +4 -0
  98. package/dist/core/agent-session.d.ts.map +1 -1
  99. package/dist/core/agent-session.js +4 -0
  100. package/dist/core/agent-session.js.map +1 -1
  101. package/dist/core/builtin-packages.d.ts.map +1 -1
  102. package/dist/core/builtin-packages.js +8 -4
  103. package/dist/core/builtin-packages.js.map +1 -1
  104. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -1
  105. package/dist/core/compaction/context-compaction-runner.js +36 -20
  106. package/dist/core/compaction/context-compaction-runner.js.map +1 -1
  107. package/dist/core/copilot-anthropic-sse-repair.d.ts +23 -0
  108. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +1 -0
  109. package/dist/core/copilot-anthropic-sse-repair.js +340 -0
  110. package/dist/core/copilot-anthropic-sse-repair.js.map +1 -0
  111. package/dist/core/copilot-gemini-reasoning.d.ts +16 -8
  112. package/dist/core/copilot-gemini-reasoning.d.ts.map +1 -1
  113. package/dist/core/copilot-gemini-reasoning.js +27 -22
  114. package/dist/core/copilot-gemini-reasoning.js.map +1 -1
  115. package/dist/core/copilot-hosts.d.ts +12 -0
  116. package/dist/core/copilot-hosts.d.ts.map +1 -0
  117. package/dist/core/copilot-hosts.js +33 -0
  118. package/dist/core/copilot-hosts.js.map +1 -0
  119. package/dist/core/copilot-model-catalog.d.ts.map +1 -1
  120. package/dist/core/copilot-model-catalog.js +3 -2
  121. package/dist/core/copilot-model-catalog.js.map +1 -1
  122. package/dist/core/extensions/agent-events.d.ts +1 -1
  123. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  124. package/dist/core/extensions/agent-events.js.map +1 -1
  125. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  126. package/dist/core/extensions/loader-virtual-modules.js +8 -3
  127. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  128. package/dist/core/http-dispatcher.d.ts.map +1 -1
  129. package/dist/core/http-dispatcher.js +5 -5
  130. package/dist/core/http-dispatcher.js.map +1 -1
  131. package/dist/core/openai-responses-payload-sanitizer.d.ts +6 -0
  132. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -0
  133. package/dist/core/openai-responses-payload-sanitizer.js +59 -0
  134. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -0
  135. package/dist/core/package-manager-auto-resources.d.ts +2 -2
  136. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  137. package/dist/core/package-manager-auto-resources.js +32 -52
  138. package/dist/core/package-manager-auto-resources.js.map +1 -1
  139. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  140. package/dist/core/package-manager-resolver.js +23 -14
  141. package/dist/core/package-manager-resolver.js.map +1 -1
  142. package/dist/core/package-manager-resource-collector.d.ts +3 -3
  143. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  144. package/dist/core/package-manager-resource-collector.js +76 -73
  145. package/dist/core/package-manager-resource-collector.js.map +1 -1
  146. package/dist/core/package-manager-resource-files.d.ts +9 -8
  147. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  148. package/dist/core/package-manager-resource-files.js +92 -81
  149. package/dist/core/package-manager-resource-files.js.map +1 -1
  150. package/dist/core/prompt-templates-async.d.ts +3 -0
  151. package/dist/core/prompt-templates-async.d.ts.map +1 -0
  152. package/dist/core/prompt-templates-async.js +118 -0
  153. package/dist/core/prompt-templates-async.js.map +1 -0
  154. package/dist/core/provider-context-usage.d.ts +11 -0
  155. package/dist/core/provider-context-usage.d.ts.map +1 -0
  156. package/dist/core/provider-context-usage.js +58 -0
  157. package/dist/core/provider-context-usage.js.map +1 -0
  158. package/dist/core/resource-loader-assets.d.ts +3 -3
  159. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  160. package/dist/core/resource-loader-assets.js +66 -83
  161. package/dist/core/resource-loader-assets.js.map +1 -1
  162. package/dist/core/resource-loader-core.d.ts +1 -1
  163. package/dist/core/resource-loader-core.d.ts.map +1 -1
  164. package/dist/core/resource-loader-core.js +5 -5
  165. package/dist/core/resource-loader-core.js.map +1 -1
  166. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  167. package/dist/core/resource-loader-reload.js +43 -7
  168. package/dist/core/resource-loader-reload.js.map +1 -1
  169. package/dist/core/resource-loader-types.d.ts +7 -1
  170. package/dist/core/resource-loader-types.d.ts.map +1 -1
  171. package/dist/core/resource-loader-types.js.map +1 -1
  172. package/dist/core/sdk-types.d.ts +2 -0
  173. package/dist/core/sdk-types.d.ts.map +1 -1
  174. package/dist/core/sdk-types.js.map +1 -1
  175. package/dist/core/sdk.d.ts.map +1 -1
  176. package/dist/core/sdk.js +7 -4
  177. package/dist/core/sdk.js.map +1 -1
  178. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  179. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  180. package/dist/core/settings-manager-basic-accessors.js +6 -0
  181. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  182. package/dist/core/settings-types.d.ts +1 -0
  183. package/dist/core/settings-types.d.ts.map +1 -1
  184. package/dist/core/settings-types.js.map +1 -1
  185. package/dist/core/skills-async.d.ts +3 -0
  186. package/dist/core/skills-async.d.ts.map +1 -0
  187. package/dist/core/skills-async.js +269 -0
  188. package/dist/core/skills-async.js.map +1 -0
  189. package/dist/index-extensions.d.ts +1 -1
  190. package/dist/index-extensions.d.ts.map +1 -1
  191. package/dist/index-extensions.js.map +1 -1
  192. package/dist/main-deferred-startup.d.ts +14 -0
  193. package/dist/main-deferred-startup.d.ts.map +1 -1
  194. package/dist/main-deferred-startup.js +23 -0
  195. package/dist/main-deferred-startup.js.map +1 -1
  196. package/dist/main-early-input.d.ts +41 -0
  197. package/dist/main-early-input.d.ts.map +1 -0
  198. package/dist/main-early-input.js +147 -0
  199. package/dist/main-early-input.js.map +1 -0
  200. package/dist/main.d.ts +0 -6
  201. package/dist/main.d.ts.map +1 -1
  202. package/dist/main.js +23 -17
  203. package/dist/main.js.map +1 -1
  204. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  205. package/dist/modes/interactive/components/chat-session-host-events.js +15 -0
  206. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  207. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  208. package/dist/modes/interactive/interactive-agent-events.js +34 -1
  209. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  210. package/dist/modes/interactive/interactive-deferred-startup.d.ts +6 -0
  211. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  212. package/dist/modes/interactive/interactive-deferred-startup.js +27 -13
  213. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  214. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -1
  215. package/dist/modes/interactive/interactive-editor-actions.js +13 -13
  216. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  217. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -1
  218. package/dist/modes/interactive/interactive-extension-runtime.js +16 -0
  219. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  220. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  221. package/dist/modes/interactive/interactive-input-handling.js +324 -178
  222. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  223. package/dist/modes/interactive/interactive-mode-base.d.ts +14 -0
  224. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  225. package/dist/modes/interactive/interactive-mode-base.js +41 -0
  226. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  227. package/dist/modes/interactive/interactive-mode-surface.d.ts +22 -6
  228. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  229. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  230. package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
  231. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  232. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  233. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  234. package/dist/modes/interactive/interactive-model-routing.js +3 -3
  235. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  236. package/dist/modes/interactive/interactive-onboarding.d.ts.map +1 -1
  237. package/dist/modes/interactive/interactive-onboarding.js +1 -0
  238. package/dist/modes/interactive/interactive-onboarding.js.map +1 -1
  239. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  240. package/dist/modes/interactive/interactive-process-lifecycle.js +43 -6
  241. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  242. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  243. package/dist/modes/interactive/interactive-render-chat.js +78 -9
  244. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  245. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -1
  246. package/dist/modes/interactive/interactive-resource-disclosure.js +3 -2
  247. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  248. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -1
  249. package/dist/modes/interactive/interactive-resource-rendering.js +10 -8
  250. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  251. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
  252. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  253. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  254. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  255. package/dist/modes/interactive/interactive-startup.js +65 -53
  256. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  257. package/dist/modes/interactive/theme/theme-loading.d.ts +1 -0
  258. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  259. package/dist/modes/interactive/theme/theme-loading.js +3 -0
  260. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  261. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  262. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  263. package/dist/modes/interactive/theme/theme.js +1 -1
  264. package/dist/modes/interactive/theme/theme.js.map +1 -1
  265. package/dist/utils/module-require.d.ts +11 -0
  266. package/dist/utils/module-require.d.ts.map +1 -1
  267. package/dist/utils/module-require.js +14 -1
  268. package/dist/utils/module-require.js.map +1 -1
  269. package/dist/utils/split-launcher.d.ts +38 -0
  270. package/dist/utils/split-launcher.d.ts.map +1 -0
  271. package/dist/utils/split-launcher.js +63 -0
  272. package/dist/utils/split-launcher.js.map +1 -0
  273. package/docs/compaction.md +7 -0
  274. package/docs/json.md +3 -1
  275. package/docs/keybindings.md +2 -2
  276. package/docs/providers.md +2 -1
  277. package/docs/rpc.md +3 -1
  278. package/docs/settings.md +28 -2
  279. package/docs/terminal-setup.md +4 -0
  280. package/docs/usage.md +3 -3
  281. package/docs/workflows.md +13 -3
  282. package/npm-shrinkwrap.json +513 -23
  283. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode-surface.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-surface.ts"],"names":[],"mappings":"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","sourcesContent":["/** Method surface installed onto InteractiveModeBase by sibling modules. */\nimport type { AgentMessage, Api, Message, Model, OAuthSelectPrompt, AutocompleteProvider, Keybinding, MarkdownTheme, OverlayHandle, OverlayOptions, Component, LoaderIndicatorOptions, AgentSession, AgentSessionEvent, EditorFactory, ExtensionCommandContext, ExtensionRunner, ExtensionUIContext, ExtensionUIDialogOptions, HostCustomUiState, HostCustomUiStateListener, ProjectTrustContext, ExtensionWidgetOptions, ReadonlyFooterDataProvider, AppKeybinding, ContextCompactionResult, ResourceDiagnostic, SessionContext, SourceInfo, ChatMessageEntry, ChatMessageRenderOptions, AuthSelectorProvider, Container, TUI, Theme, Loader, MissingSessionCwdError, KeybindingsManager, LoginDialogComponent } from \"./interactive-mode-deps.ts\";\n\ndeclare module \"./interactive-mode-base.ts\" {\n interface InteractiveModeBase {\n getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined;\n prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined;\n getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[];\n getCodexFastModeCandidateModels(): Model<Api>[];\n hasCodexFastModeSupportedModels(): boolean;\n createBaseAutocompleteProvider(): AutocompleteProvider;\n setupAutocompleteProvider(): void;\n showStartupNoticesIfNeeded(): void;\n hadLastChangelogVersionAtStartup: boolean;\n firstRunNoticeVisible: boolean;\n firstRunOnboardingNoticeComponents: Component[];\n initializeFirstRunOnboardingMarkers(): void;\n isFirstRunOnboardingEligible(): boolean;\n clearFirstRunOnboardingUi(): void;\n init(): Promise<void>;\n completeDeferredStartup(): Promise<void>;\n retryDeferredModelRestore(): Promise<void>;\n updateTerminalTitle(): void;\n run(): Promise<void>;\n checkForPackageUpdates(): Promise<string[]>;\n checkTmuxKeyboardSetup(): Promise<string | undefined>;\n getChangelogForDisplay(): string | undefined;\n reportInstallTelemetry(version: string): void;\n getMarkdownThemeWithSettings(): MarkdownTheme;\n formatDisplayPath(p: string): string;\n formatExtensionDisplayPath(path: string): string;\n formatContextPath(p: string): string;\n getStartupModelLabel(): string;\n getStartupIdentityText(): string;\n getAtomicAnsiMarkLines(): string[];\n getStartupExpansionState(): boolean;\n getShortPath(fullPath: string, sourceInfo?: SourceInfo): string;\n getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactPackageSourceLabel(sourceInfo?: SourceInfo): string;\n getCompactExtensionLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactDisplayPathSegments(resourcePath: string): string[];\n getCompactNonPackageExtensionLabel(resourcePath: string, index: number, allPaths: Array<{ path: string; segments: string[] }>): string;\n getCompactExtensionLabels(extensions: Array<{ path: string; sourceInfo?: SourceInfo }>): string[];\n getDisplaySourceInfo(sourceInfo?: SourceInfo): {\n label: string;\n scopeLabel?: string;\n color: \"accent\" | \"muted\";\n };\n getScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\";\n isPackageSource(sourceInfo?: SourceInfo): boolean;\n buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>;\n formatScopeGroups(groups: Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>, options: {\n formatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n formatPackagePath: (\n item: { path: string; sourceInfo?: SourceInfo },\n source: string,\n ) => string;\n }): string;\n findSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined;\n formatPathWithSource(p: string, sourceInfo?: SourceInfo): string;\n formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string;\n getResourceDiagnosticsTotal(values: ResourceDiagnostic[][]): number;\n formatResourceCount(count: number, singular: string, plural?: string): string | undefined;\n addResourceDisclosure(options: {\n contextFiles: ReadonlyArray<{ path: string }>;\n skills: ReadonlyArray<{ filePath: string; name: string }>;\n prompts: ReadonlyArray<{ filePath: string; name: string }>;\n templates: ReadonlyArray<{ filePath: string; name: string }>;\n extensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo }>;\n themes: ReadonlyArray<{ name?: string; sourcePath?: string }>;\n diagnosticsTotal: number;\n expandedBody: string;\n }): void;\n showLoadedResources(options?: {\n extensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n force?: boolean;\n showDiagnosticsWhenQuiet?: boolean;\n }): void;\n bindCurrentSessionExtensions(): Promise<void>;\n applyRuntimeSettings(): void;\n rebindCurrentSession(): Promise<void>;\n handleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n renderCurrentSessionState(): void;\n getRegisteredToolDefinition(toolName: string): ReturnType<AgentSession[\"getToolDefinition\"]>;\n setupExtensionShortcuts(extensionRunner: ExtensionRunner): void;\n setExtensionStatus(key: string, text: string | undefined): void;\n getWorkingLoaderMessage(): string;\n createWorkingLoader(): Loader;\n stopWorkingLoader(): void;\n setWorkingVisible(visible: boolean): void;\n setWorkingIndicator(options?: LoaderIndicatorOptions): void;\n setHiddenThinkingLabel(label?: string): void;\n setExtensionWidget(key: string, content: | string[]\n | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined, options?: ExtensionWidgetOptions): void;\n clearExtensionWidgets(): void;\n resetExtensionUI(): void;\n renderWidgets(): void;\n renderWidgetContainer(container: Container, widgets: Map<string, Component & { dispose?(): void }>, spacerWhenEmpty: boolean, leadingSpacer: boolean): void;\n setExtensionFooter(factory: | ((\n tui: TUI,\n thm: Theme,\n footerData: ReadonlyFooterDataProvider,\n ) => Component & { dispose?(): void })\n | undefined): void;\n setExtensionHeader(factory: | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined): void;\n addExtensionTerminalInputListener(handler: (data: string) => { consume?: boolean; data?: string } | undefined): () => void;\n clearExtensionTerminalInputListeners(): void;\n getHostCustomUiState(): HostCustomUiState;\n notifyHostCustomUiStateListeners(): void;\n beginHostInlineCustomUi(): () => void;\n beginInlineCustomUiFocusDeferral(): () => void;\n shouldDeferInlineCustomUiFocus(): boolean;\n focusHostInlineCustomUi(): boolean;\n onHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void;\n createProjectTrustContext(cwd: string): ProjectTrustContext;\n createExtensionUIContext(): ExtensionUIContext;\n showExtensionSelector(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionSelector(): void;\n showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n showExtensionInput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionInput(): void;\n showExtensionEditor(title: string, prefill?: string): Promise<string | undefined>;\n hideExtensionEditor(): void;\n setCustomEditorComponent(factory: EditorFactory | undefined): void;\n showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n showExtensionCustom<T>(factory: (\n tui: TUI,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (result: T) => void,\n ) =>\n | (Component & { dispose?(): void })\n | Promise<Component & { dispose?(): void }>, options?: {\n overlay?: boolean;\n deferInlineCustomUiFocus?: boolean;\n signal?: AbortSignal;\n overlayOptions?: OverlayOptions | (() => OverlayOptions);\n onHandle?: (handle: OverlayHandle) => void;\n }): Promise<T>;\n showExtensionError(extensionPath: string, error: string, stack?: string): void;\n setupKeyHandlers(): void;\n handleClipboardImagePaste(): Promise<void>;\n setupEditorSubmitHandler(): void;\n subscribeToAgent(): void;\n handleEvent(event: AgentSessionEvent): Promise<void>;\n getUserMessageText(message: Message): string;\n showStatus(message: string): void;\n chatMessageRenderOptions(): ChatMessageRenderOptions;\n addRenderedChatEntry(entry: ChatMessageEntry): Component;\n addContextCompactionSummaryToChat(result: ContextCompactionResult): void;\n addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void;\n renderSessionContext(sessionContext: SessionContext, options?: { updateFooter?: boolean; populateHistory?: boolean }): void;\n renderInitialMessages(): void;\n getUserInput(): Promise<string>;\n rebuildChatFromMessages(): void;\n handleCtrlC(): void;\n handleCtrlD(): void;\n shutdown(options?: { fromSignal?: boolean }): Promise<void>;\n emergencyTerminalExit(): never;\n uncaughtCrash(error: Error): never;\n checkShutdownRequested(): Promise<void>;\n registerSignalHandlers(): void;\n unregisterSignalHandlers(): void;\n handleCtrlZ(): void;\n handleFollowUp(): Promise<void>;\n handleDequeue(): void;\n refreshBuiltInHeader(): void;\n updateEditorBorderColor(): void;\n cycleThinkingLevel(): void;\n cycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n toggleToolOutputExpansion(): void;\n setToolsExpanded(expanded: boolean): void;\n toggleThinkingBlockVisibility(): void;\n openExternalEditor(): void;\n clearEditor(): void;\n showError(errorMessage: string): void;\n showWarning(warningMessage: string): void;\n showNewVersionNotification(newVersion: string): void;\n showPackageUpdateNotification(packages: string[]): void;\n getAllQueuedMessages(): { steering: string[]; followUp: string[] };\n clearAllQueues(): { steering: string[]; followUp: string[] };\n updatePendingMessagesDisplay(): void;\n restoreQueuedMessagesToEditor(options?: {\n abort?: boolean;\n currentText?: string;\n }): number;\n queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void;\n isExtensionCommand(text: string): boolean;\n flushCompactionQueue(options?: {\n willRetry?: boolean;\n }): Promise<void>;\n flushPendingBashComponents(): void;\n showSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n showFastModeSelector(): void;\n showSettingsSelector(): void;\n handleModelCommand(searchTerm?: string): Promise<void>;\n findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined>;\n getModelCandidates(): Promise<Model<Api>[]>;\n refreshCopilotModelCatalog(): Promise<void>;\n loadCopilotModelCatalog(): Promise<void>;\n updateAvailableProviderCount(): Promise<void>;\n maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined): Promise<void>;\n showModelSelector(initialSearchInput?: string): void;\n showContextWindowSelector(model: Model<Api>): void;\n showModelsSelector(): Promise<void>;\n showUserMessageSelector(): void;\n handleCloneCommand(): Promise<void>;\n maybeSaveImplicitProjectTrustAfterReload(): boolean;\n showTrustSelector(): void;\n showTreeSelector(initialSelectedId?: string): void;\n showSessionSelector(): void;\n handleResumeSession(sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }>;\n getLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[];\n getLogoutProviderOptions(): AuthSelectorProvider[];\n showLoginAuthTypeSelector(): void;\n showLoginProviderSelector(authType: \"oauth\" | \"api_key\"): void;\n showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void>;\n completeProviderAuthentication(providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void>;\n showBedrockSetupDialog(providerId: string, providerName: string): void;\n showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void>;\n showOAuthLoginSelect(dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined>;\n showLoginDialog(providerId: string, providerName: string): Promise<void>;\n handleReloadCommand(): Promise<void>;\n handleExportCommand(text: string): Promise<void>;\n getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined;\n handleImportCommand(text: string): Promise<void>;\n handleShareCommand(): Promise<void>;\n handleCopyCommand(): Promise<void>;\n handleNameCommand(text: string): void;\n handleSessionCommand(): void;\n handleChangelogCommand(): void;\n getAppKeyDisplay(action: AppKeybinding): string;\n getEditorKeyDisplay(action: Keybinding): string;\n handleHotkeysCommand(): void;\n handleClearCommand(): Promise<void>;\n handleDebugCommand(): void;\n handleArminSaysHi(): void;\n handleDementedDelves(): void;\n handleDaxnuts(): void;\n checkDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;\n handleCompactCommand(): Promise<void>;\n stop(): void;\n }\n}\n"]}
1
+ {"version":3,"file":"interactive-mode-surface.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-surface.ts"],"names":[],"mappings":"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","sourcesContent":["/** Method surface installed onto InteractiveModeBase by sibling modules. */\nimport type { AgentMessage, Api, Message, Model, OAuthSelectPrompt, AutocompleteProvider, Keybinding, MarkdownTheme, OverlayHandle, OverlayOptions, Component, LoaderIndicatorOptions, AgentSession, AgentSessionEvent, EditorFactory, ExtensionCommandContext, ExtensionRunner, ExtensionUIContext, ExtensionUIDialogOptions, HostCustomUiState, HostCustomUiStateListener, ProjectTrustContext, ExtensionWidgetOptions, ReadonlyFooterDataProvider, AppKeybinding, ContextCompactionResult, ResourceDiagnostic, SessionContext, SourceInfo, ChatMessageEntry, ChatMessageRenderOptions, AuthSelectorProvider, Container, TUI, Theme, Loader, MissingSessionCwdError, KeybindingsManager, LoginDialogComponent } from \"./interactive-mode-deps.ts\";\n\ndeclare module \"./interactive-mode-base.ts\" {\n interface InteractiveModeBase {\n getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined;\n prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined;\n getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[];\n getCodexFastModeCandidateModels(): Model<Api>[];\n hasCodexFastModeSupportedModels(): boolean;\n createBaseAutocompleteProvider(): AutocompleteProvider;\n setupAutocompleteProvider(): void;\n showStartupNoticesIfNeeded(targetContainer?: Container): void;\n hadLastChangelogVersionAtStartup: boolean;\n firstRunNoticeVisible: boolean;\n firstRunOnboardingNoticeComponents: Component[];\n initializeFirstRunOnboardingMarkers(): void;\n isFirstRunOnboardingEligible(): boolean;\n clearFirstRunOnboardingUi(): void;\n init(): Promise<void>;\n completeDeferredStartup(): Promise<void>;\n retryDeferredModelRestore(targetContainer?: Container): Promise<void>;\n updateTerminalTitle(): void;\n run(): Promise<void>;\n checkForPackageUpdates(): Promise<string[]>;\n checkTmuxKeyboardSetup(): Promise<string | undefined>;\n getChangelogForDisplay(): string | undefined;\n reportInstallTelemetry(version: string): void;\n getMarkdownThemeWithSettings(): MarkdownTheme;\n formatDisplayPath(p: string): string;\n formatExtensionDisplayPath(path: string): string;\n formatContextPath(p: string): string;\n getStartupModelLabel(): string;\n getStartupIdentityText(): string;\n getAtomicAnsiMarkLines(): string[];\n getStartupExpansionState(): boolean;\n getShortPath(fullPath: string, sourceInfo?: SourceInfo): string;\n getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactPackageSourceLabel(sourceInfo?: SourceInfo): string;\n getCompactExtensionLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactDisplayPathSegments(resourcePath: string): string[];\n getCompactNonPackageExtensionLabel(resourcePath: string, index: number, allPaths: Array<{ path: string; segments: string[] }>): string;\n getCompactExtensionLabels(extensions: Array<{ path: string; sourceInfo?: SourceInfo }>): string[];\n getDisplaySourceInfo(sourceInfo?: SourceInfo): {\n label: string;\n scopeLabel?: string;\n color: \"accent\" | \"muted\";\n };\n getScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\";\n isPackageSource(sourceInfo?: SourceInfo): boolean;\n buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>;\n formatScopeGroups(groups: Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>, options: {\n formatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n formatPackagePath: (\n item: { path: string; sourceInfo?: SourceInfo },\n source: string,\n ) => string;\n }): string;\n findSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined;\n formatPathWithSource(p: string, sourceInfo?: SourceInfo): string;\n formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string;\n getResourceDiagnosticsTotal(values: ResourceDiagnostic[][]): number;\n formatResourceCount(count: number, singular: string, plural?: string): string | undefined;\n addResourceDisclosure(options: {\n contextFiles: ReadonlyArray<{ path: string }>;\n skills: ReadonlyArray<{ filePath: string; name: string }>;\n prompts: ReadonlyArray<{ filePath: string; name: string }>;\n templates: ReadonlyArray<{ filePath: string; name: string }>;\n extensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo }>;\n themes: ReadonlyArray<{ name?: string; sourcePath?: string }>;\n diagnosticsTotal: number;\n expandedBody: string;\n targetContainer?: Container;\n }): void;\n showLoadedResources(options?: {\n extensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n force?: boolean;\n showDiagnosticsWhenQuiet?: boolean;\n targetContainer?: Container;\n }): void;\n bindCurrentSessionExtensions(): Promise<void>;\n applyRuntimeSettings(): void;\n rebindCurrentSession(): Promise<void>;\n handleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n renderCurrentSessionState(): void;\n getRegisteredToolDefinition(toolName: string): ReturnType<AgentSession[\"getToolDefinition\"]>;\n setupExtensionShortcuts(extensionRunner: ExtensionRunner): void;\n setExtensionStatus(key: string, text: string | undefined): void;\n getWorkingLoaderMessage(): string;\n createWorkingLoader(): Loader;\n stopWorkingLoader(): void;\n showWorkingLoaderNow(): void;\n setWorkingVisible(visible: boolean): void;\n setWorkingIndicator(options?: LoaderIndicatorOptions): void;\n setHiddenThinkingLabel(label?: string): void;\n setExtensionWidget(key: string, content: | string[]\n | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined, options?: ExtensionWidgetOptions): void;\n clearExtensionWidgets(): void;\n resetExtensionUI(): void;\n renderWidgets(): void;\n renderWidgetContainer(container: Container, widgets: Map<string, Component & { dispose?(): void }>, spacerWhenEmpty: boolean, leadingSpacer: boolean): void;\n setExtensionFooter(factory: | ((\n tui: TUI,\n thm: Theme,\n footerData: ReadonlyFooterDataProvider,\n ) => Component & { dispose?(): void })\n | undefined): void;\n setExtensionHeader(factory: | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined): void;\n addExtensionTerminalInputListener(handler: (data: string) => { consume?: boolean; data?: string } | undefined): () => void;\n clearExtensionTerminalInputListeners(): void;\n getHostCustomUiState(): HostCustomUiState;\n notifyHostCustomUiStateListeners(): void;\n beginHostInlineCustomUi(): () => void;\n beginInlineCustomUiFocusDeferral(): () => void;\n shouldDeferInlineCustomUiFocus(): boolean;\n focusHostInlineCustomUi(): boolean;\n onHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void;\n createProjectTrustContext(cwd: string): ProjectTrustContext;\n createExtensionUIContext(): ExtensionUIContext;\n showExtensionSelector(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionSelector(): void;\n showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n showExtensionInput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionInput(): void;\n showExtensionEditor(title: string, prefill?: string): Promise<string | undefined>;\n hideExtensionEditor(): void;\n setCustomEditorComponent(factory: EditorFactory | undefined): void;\n showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n showExtensionCustom<T>(factory: (\n tui: TUI,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (result: T) => void,\n ) =>\n | (Component & { dispose?(): void })\n | Promise<Component & { dispose?(): void }>, options?: {\n overlay?: boolean;\n deferInlineCustomUiFocus?: boolean;\n signal?: AbortSignal;\n overlayOptions?: OverlayOptions | (() => OverlayOptions);\n onHandle?: (handle: OverlayHandle) => void;\n }): Promise<T>;\n showExtensionError(extensionPath: string, error: string, stack?: string): void;\n setupKeyHandlers(): void;\n handleClipboardImagePaste(): Promise<void>;\n setupEditorSubmitHandler(): void;\n deliverStartupReplayPrompt(text: string): void;\n recoverCookedStartupInput(): boolean;\n drainStartupReplayCommands(): Promise<void>;\n advanceStartupInputReplay(submittedText: string): void;\n subscribeToAgent(): void;\n handleEvent(event: AgentSessionEvent): Promise<void>;\n getUserMessageText(message: Message): string;\n showStatus(message: string): void;\n chatMessageRenderOptions(): ChatMessageRenderOptions;\n addRenderedChatEntry(entry: ChatMessageEntry): Component;\n addContextCompactionSummaryToChat(result: ContextCompactionResult): void;\n addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void;\n renderSessionContext(sessionContext: SessionContext, options?: { updateFooter?: boolean; populateHistory?: boolean }): void;\n renderInitialMessages(): void;\n attachStartupNoticesContainer(options?: { resetDetached?: boolean }): void;\n getUserInput(): Promise<string>;\n runUserPromptTurn(userInput: string): Promise<void>;\n renderDeferredUserInput(text: string): void;\n consumeDeferredRenderedUserInput(text: string): boolean;\n discardDeferredRenderedUserInput(text: string): void;\n ensureDeferredStartupComplete(): Promise<void>;\n rebuildChatFromMessages(): void;\n handleCtrlC(): void;\n interruptActiveOperation(): boolean;\n handleCtrlD(): void;\n shutdown(options?: { fromSignal?: boolean }): Promise<void>;\n emergencyTerminalExit(): never;\n uncaughtCrash(error: Error): never;\n checkShutdownRequested(): Promise<void>;\n registerSignalHandlers(): void;\n unregisterSignalHandlers(): void;\n handleCtrlZ(): void;\n handleFollowUp(): Promise<void>;\n handleDequeue(): void;\n refreshBuiltInHeader(): void;\n updateEditorBorderColor(): void;\n cycleThinkingLevel(): void;\n cycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n toggleToolOutputExpansion(): void;\n setToolsExpanded(expanded: boolean): void;\n toggleThinkingBlockVisibility(): void;\n openExternalEditor(): void;\n clearEditor(): void;\n showError(errorMessage: string): void;\n showWarning(warningMessage: string, targetContainer?: Container): void;\n showNewVersionNotification(newVersion: string, targetContainer?: Container): void;\n showPackageUpdateNotification(packages: string[], targetContainer?: Container): void;\n getAllQueuedMessages(): { steering: string[]; followUp: string[] };\n clearAllQueues(): { steering: string[]; followUp: string[] };\n updatePendingMessagesDisplay(): void;\n restoreQueuedMessagesToEditor(options?: {\n abort?: boolean;\n currentText?: string;\n }): number;\n queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void;\n isExtensionCommand(text: string): boolean;\n flushCompactionQueue(options?: {\n willRetry?: boolean;\n }): Promise<void>;\n flushPendingBashComponents(): void;\n showSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n showFastModeSelector(): void;\n showSettingsSelector(): void;\n handleModelCommand(searchTerm?: string): Promise<void>;\n findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined>;\n getModelCandidates(): Promise<Model<Api>[]>;\n refreshCopilotModelCatalog(): Promise<void>;\n loadCopilotModelCatalog(): Promise<void>;\n updateAvailableProviderCount(): Promise<void>;\n maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined, targetContainer?: Container): Promise<void>;\n showModelSelector(initialSearchInput?: string): void;\n showContextWindowSelector(model: Model<Api>): void;\n showModelsSelector(): Promise<void>;\n showUserMessageSelector(): void;\n handleCloneCommand(): Promise<void>;\n maybeSaveImplicitProjectTrustAfterReload(): boolean;\n showTrustSelector(): void;\n showTreeSelector(initialSelectedId?: string): void;\n showSessionSelector(): void;\n handleResumeSession(sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }>;\n getLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[];\n getLogoutProviderOptions(): AuthSelectorProvider[];\n showLoginAuthTypeSelector(): void;\n showLoginProviderSelector(authType: \"oauth\" | \"api_key\"): void;\n showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void>;\n completeProviderAuthentication(providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void>;\n showBedrockSetupDialog(providerId: string, providerName: string): void;\n showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void>;\n showOAuthLoginSelect(dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined>;\n showLoginDialog(providerId: string, providerName: string): Promise<void>;\n handleReloadCommand(): Promise<void>;\n handleExportCommand(text: string): Promise<void>;\n getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined;\n handleImportCommand(text: string): Promise<void>;\n handleShareCommand(): Promise<void>;\n handleCopyCommand(): Promise<void>;\n handleNameCommand(text: string): void;\n handleSessionCommand(): void;\n handleChangelogCommand(): void;\n getAppKeyDisplay(action: AppKeybinding): string;\n getEditorKeyDisplay(action: Keybinding): string;\n handleHotkeysCommand(): void;\n handleClearCommand(): Promise<void>;\n handleDebugCommand(): void;\n handleArminSaysHi(): void;\n handleDementedDelves(): void;\n handleDaxnuts(): void;\n checkDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;\n handleCompactCommand(): Promise<void>;\n stop(): void;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode-surface.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-surface.ts"],"names":[],"mappings":"","sourcesContent":["/** Method surface installed onto InteractiveModeBase by sibling modules. */\nimport type { AgentMessage, Api, Message, Model, OAuthSelectPrompt, AutocompleteProvider, Keybinding, MarkdownTheme, OverlayHandle, OverlayOptions, Component, LoaderIndicatorOptions, AgentSession, AgentSessionEvent, EditorFactory, ExtensionCommandContext, ExtensionRunner, ExtensionUIContext, ExtensionUIDialogOptions, HostCustomUiState, HostCustomUiStateListener, ProjectTrustContext, ExtensionWidgetOptions, ReadonlyFooterDataProvider, AppKeybinding, ContextCompactionResult, ResourceDiagnostic, SessionContext, SourceInfo, ChatMessageEntry, ChatMessageRenderOptions, AuthSelectorProvider, Container, TUI, Theme, Loader, MissingSessionCwdError, KeybindingsManager, LoginDialogComponent } from \"./interactive-mode-deps.ts\";\n\ndeclare module \"./interactive-mode-base.ts\" {\n interface InteractiveModeBase {\n getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined;\n prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined;\n getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[];\n getCodexFastModeCandidateModels(): Model<Api>[];\n hasCodexFastModeSupportedModels(): boolean;\n createBaseAutocompleteProvider(): AutocompleteProvider;\n setupAutocompleteProvider(): void;\n showStartupNoticesIfNeeded(): void;\n hadLastChangelogVersionAtStartup: boolean;\n firstRunNoticeVisible: boolean;\n firstRunOnboardingNoticeComponents: Component[];\n initializeFirstRunOnboardingMarkers(): void;\n isFirstRunOnboardingEligible(): boolean;\n clearFirstRunOnboardingUi(): void;\n init(): Promise<void>;\n completeDeferredStartup(): Promise<void>;\n retryDeferredModelRestore(): Promise<void>;\n updateTerminalTitle(): void;\n run(): Promise<void>;\n checkForPackageUpdates(): Promise<string[]>;\n checkTmuxKeyboardSetup(): Promise<string | undefined>;\n getChangelogForDisplay(): string | undefined;\n reportInstallTelemetry(version: string): void;\n getMarkdownThemeWithSettings(): MarkdownTheme;\n formatDisplayPath(p: string): string;\n formatExtensionDisplayPath(path: string): string;\n formatContextPath(p: string): string;\n getStartupModelLabel(): string;\n getStartupIdentityText(): string;\n getAtomicAnsiMarkLines(): string[];\n getStartupExpansionState(): boolean;\n getShortPath(fullPath: string, sourceInfo?: SourceInfo): string;\n getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactPackageSourceLabel(sourceInfo?: SourceInfo): string;\n getCompactExtensionLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactDisplayPathSegments(resourcePath: string): string[];\n getCompactNonPackageExtensionLabel(resourcePath: string, index: number, allPaths: Array<{ path: string; segments: string[] }>): string;\n getCompactExtensionLabels(extensions: Array<{ path: string; sourceInfo?: SourceInfo }>): string[];\n getDisplaySourceInfo(sourceInfo?: SourceInfo): {\n label: string;\n scopeLabel?: string;\n color: \"accent\" | \"muted\";\n };\n getScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\";\n isPackageSource(sourceInfo?: SourceInfo): boolean;\n buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>;\n formatScopeGroups(groups: Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>, options: {\n formatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n formatPackagePath: (\n item: { path: string; sourceInfo?: SourceInfo },\n source: string,\n ) => string;\n }): string;\n findSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined;\n formatPathWithSource(p: string, sourceInfo?: SourceInfo): string;\n formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string;\n getResourceDiagnosticsTotal(values: ResourceDiagnostic[][]): number;\n formatResourceCount(count: number, singular: string, plural?: string): string | undefined;\n addResourceDisclosure(options: {\n contextFiles: ReadonlyArray<{ path: string }>;\n skills: ReadonlyArray<{ filePath: string; name: string }>;\n prompts: ReadonlyArray<{ filePath: string; name: string }>;\n templates: ReadonlyArray<{ filePath: string; name: string }>;\n extensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo }>;\n themes: ReadonlyArray<{ name?: string; sourcePath?: string }>;\n diagnosticsTotal: number;\n expandedBody: string;\n }): void;\n showLoadedResources(options?: {\n extensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n force?: boolean;\n showDiagnosticsWhenQuiet?: boolean;\n }): void;\n bindCurrentSessionExtensions(): Promise<void>;\n applyRuntimeSettings(): void;\n rebindCurrentSession(): Promise<void>;\n handleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n renderCurrentSessionState(): void;\n getRegisteredToolDefinition(toolName: string): ReturnType<AgentSession[\"getToolDefinition\"]>;\n setupExtensionShortcuts(extensionRunner: ExtensionRunner): void;\n setExtensionStatus(key: string, text: string | undefined): void;\n getWorkingLoaderMessage(): string;\n createWorkingLoader(): Loader;\n stopWorkingLoader(): void;\n setWorkingVisible(visible: boolean): void;\n setWorkingIndicator(options?: LoaderIndicatorOptions): void;\n setHiddenThinkingLabel(label?: string): void;\n setExtensionWidget(key: string, content: | string[]\n | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined, options?: ExtensionWidgetOptions): void;\n clearExtensionWidgets(): void;\n resetExtensionUI(): void;\n renderWidgets(): void;\n renderWidgetContainer(container: Container, widgets: Map<string, Component & { dispose?(): void }>, spacerWhenEmpty: boolean, leadingSpacer: boolean): void;\n setExtensionFooter(factory: | ((\n tui: TUI,\n thm: Theme,\n footerData: ReadonlyFooterDataProvider,\n ) => Component & { dispose?(): void })\n | undefined): void;\n setExtensionHeader(factory: | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined): void;\n addExtensionTerminalInputListener(handler: (data: string) => { consume?: boolean; data?: string } | undefined): () => void;\n clearExtensionTerminalInputListeners(): void;\n getHostCustomUiState(): HostCustomUiState;\n notifyHostCustomUiStateListeners(): void;\n beginHostInlineCustomUi(): () => void;\n beginInlineCustomUiFocusDeferral(): () => void;\n shouldDeferInlineCustomUiFocus(): boolean;\n focusHostInlineCustomUi(): boolean;\n onHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void;\n createProjectTrustContext(cwd: string): ProjectTrustContext;\n createExtensionUIContext(): ExtensionUIContext;\n showExtensionSelector(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionSelector(): void;\n showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n showExtensionInput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionInput(): void;\n showExtensionEditor(title: string, prefill?: string): Promise<string | undefined>;\n hideExtensionEditor(): void;\n setCustomEditorComponent(factory: EditorFactory | undefined): void;\n showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n showExtensionCustom<T>(factory: (\n tui: TUI,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (result: T) => void,\n ) =>\n | (Component & { dispose?(): void })\n | Promise<Component & { dispose?(): void }>, options?: {\n overlay?: boolean;\n deferInlineCustomUiFocus?: boolean;\n signal?: AbortSignal;\n overlayOptions?: OverlayOptions | (() => OverlayOptions);\n onHandle?: (handle: OverlayHandle) => void;\n }): Promise<T>;\n showExtensionError(extensionPath: string, error: string, stack?: string): void;\n setupKeyHandlers(): void;\n handleClipboardImagePaste(): Promise<void>;\n setupEditorSubmitHandler(): void;\n subscribeToAgent(): void;\n handleEvent(event: AgentSessionEvent): Promise<void>;\n getUserMessageText(message: Message): string;\n showStatus(message: string): void;\n chatMessageRenderOptions(): ChatMessageRenderOptions;\n addRenderedChatEntry(entry: ChatMessageEntry): Component;\n addContextCompactionSummaryToChat(result: ContextCompactionResult): void;\n addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void;\n renderSessionContext(sessionContext: SessionContext, options?: { updateFooter?: boolean; populateHistory?: boolean }): void;\n renderInitialMessages(): void;\n getUserInput(): Promise<string>;\n rebuildChatFromMessages(): void;\n handleCtrlC(): void;\n handleCtrlD(): void;\n shutdown(options?: { fromSignal?: boolean }): Promise<void>;\n emergencyTerminalExit(): never;\n uncaughtCrash(error: Error): never;\n checkShutdownRequested(): Promise<void>;\n registerSignalHandlers(): void;\n unregisterSignalHandlers(): void;\n handleCtrlZ(): void;\n handleFollowUp(): Promise<void>;\n handleDequeue(): void;\n refreshBuiltInHeader(): void;\n updateEditorBorderColor(): void;\n cycleThinkingLevel(): void;\n cycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n toggleToolOutputExpansion(): void;\n setToolsExpanded(expanded: boolean): void;\n toggleThinkingBlockVisibility(): void;\n openExternalEditor(): void;\n clearEditor(): void;\n showError(errorMessage: string): void;\n showWarning(warningMessage: string): void;\n showNewVersionNotification(newVersion: string): void;\n showPackageUpdateNotification(packages: string[]): void;\n getAllQueuedMessages(): { steering: string[]; followUp: string[] };\n clearAllQueues(): { steering: string[]; followUp: string[] };\n updatePendingMessagesDisplay(): void;\n restoreQueuedMessagesToEditor(options?: {\n abort?: boolean;\n currentText?: string;\n }): number;\n queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void;\n isExtensionCommand(text: string): boolean;\n flushCompactionQueue(options?: {\n willRetry?: boolean;\n }): Promise<void>;\n flushPendingBashComponents(): void;\n showSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n showFastModeSelector(): void;\n showSettingsSelector(): void;\n handleModelCommand(searchTerm?: string): Promise<void>;\n findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined>;\n getModelCandidates(): Promise<Model<Api>[]>;\n refreshCopilotModelCatalog(): Promise<void>;\n loadCopilotModelCatalog(): Promise<void>;\n updateAvailableProviderCount(): Promise<void>;\n maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined): Promise<void>;\n showModelSelector(initialSearchInput?: string): void;\n showContextWindowSelector(model: Model<Api>): void;\n showModelsSelector(): Promise<void>;\n showUserMessageSelector(): void;\n handleCloneCommand(): Promise<void>;\n maybeSaveImplicitProjectTrustAfterReload(): boolean;\n showTrustSelector(): void;\n showTreeSelector(initialSelectedId?: string): void;\n showSessionSelector(): void;\n handleResumeSession(sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }>;\n getLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[];\n getLogoutProviderOptions(): AuthSelectorProvider[];\n showLoginAuthTypeSelector(): void;\n showLoginProviderSelector(authType: \"oauth\" | \"api_key\"): void;\n showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void>;\n completeProviderAuthentication(providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void>;\n showBedrockSetupDialog(providerId: string, providerName: string): void;\n showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void>;\n showOAuthLoginSelect(dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined>;\n showLoginDialog(providerId: string, providerName: string): Promise<void>;\n handleReloadCommand(): Promise<void>;\n handleExportCommand(text: string): Promise<void>;\n getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined;\n handleImportCommand(text: string): Promise<void>;\n handleShareCommand(): Promise<void>;\n handleCopyCommand(): Promise<void>;\n handleNameCommand(text: string): void;\n handleSessionCommand(): void;\n handleChangelogCommand(): void;\n getAppKeyDisplay(action: AppKeybinding): string;\n getEditorKeyDisplay(action: Keybinding): string;\n handleHotkeysCommand(): void;\n handleClearCommand(): Promise<void>;\n handleDebugCommand(): void;\n handleArminSaysHi(): void;\n handleDementedDelves(): void;\n handleDaxnuts(): void;\n checkDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;\n handleCompactCommand(): Promise<void>;\n stop(): void;\n }\n}\n"]}
1
+ {"version":3,"file":"interactive-mode-surface.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-surface.ts"],"names":[],"mappings":"","sourcesContent":["/** Method surface installed onto InteractiveModeBase by sibling modules. */\nimport type { AgentMessage, Api, Message, Model, OAuthSelectPrompt, AutocompleteProvider, Keybinding, MarkdownTheme, OverlayHandle, OverlayOptions, Component, LoaderIndicatorOptions, AgentSession, AgentSessionEvent, EditorFactory, ExtensionCommandContext, ExtensionRunner, ExtensionUIContext, ExtensionUIDialogOptions, HostCustomUiState, HostCustomUiStateListener, ProjectTrustContext, ExtensionWidgetOptions, ReadonlyFooterDataProvider, AppKeybinding, ContextCompactionResult, ResourceDiagnostic, SessionContext, SourceInfo, ChatMessageEntry, ChatMessageRenderOptions, AuthSelectorProvider, Container, TUI, Theme, Loader, MissingSessionCwdError, KeybindingsManager, LoginDialogComponent } from \"./interactive-mode-deps.ts\";\n\ndeclare module \"./interactive-mode-base.ts\" {\n interface InteractiveModeBase {\n getAutocompleteSourceTag(sourceInfo?: SourceInfo): string | undefined;\n prefixAutocompleteDescription(description: string | undefined, sourceInfo?: SourceInfo): string | undefined;\n getBuiltInCommandConflictDiagnostics(extensionRunner: ExtensionRunner): ResourceDiagnostic[];\n getCodexFastModeCandidateModels(): Model<Api>[];\n hasCodexFastModeSupportedModels(): boolean;\n createBaseAutocompleteProvider(): AutocompleteProvider;\n setupAutocompleteProvider(): void;\n showStartupNoticesIfNeeded(targetContainer?: Container): void;\n hadLastChangelogVersionAtStartup: boolean;\n firstRunNoticeVisible: boolean;\n firstRunOnboardingNoticeComponents: Component[];\n initializeFirstRunOnboardingMarkers(): void;\n isFirstRunOnboardingEligible(): boolean;\n clearFirstRunOnboardingUi(): void;\n init(): Promise<void>;\n completeDeferredStartup(): Promise<void>;\n retryDeferredModelRestore(targetContainer?: Container): Promise<void>;\n updateTerminalTitle(): void;\n run(): Promise<void>;\n checkForPackageUpdates(): Promise<string[]>;\n checkTmuxKeyboardSetup(): Promise<string | undefined>;\n getChangelogForDisplay(): string | undefined;\n reportInstallTelemetry(version: string): void;\n getMarkdownThemeWithSettings(): MarkdownTheme;\n formatDisplayPath(p: string): string;\n formatExtensionDisplayPath(path: string): string;\n formatContextPath(p: string): string;\n getStartupModelLabel(): string;\n getStartupIdentityText(): string;\n getAtomicAnsiMarkLines(): string[];\n getStartupExpansionState(): boolean;\n getShortPath(fullPath: string, sourceInfo?: SourceInfo): string;\n getCompactPathLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactPackageSourceLabel(sourceInfo?: SourceInfo): string;\n getCompactExtensionLabel(resourcePath: string, sourceInfo?: SourceInfo): string;\n getCompactDisplayPathSegments(resourcePath: string): string[];\n getCompactNonPackageExtensionLabel(resourcePath: string, index: number, allPaths: Array<{ path: string; segments: string[] }>): string;\n getCompactExtensionLabels(extensions: Array<{ path: string; sourceInfo?: SourceInfo }>): string[];\n getDisplaySourceInfo(sourceInfo?: SourceInfo): {\n label: string;\n scopeLabel?: string;\n color: \"accent\" | \"muted\";\n };\n getScopeGroup(sourceInfo?: SourceInfo): \"user\" | \"project\" | \"path\";\n isPackageSource(sourceInfo?: SourceInfo): boolean;\n buildScopeGroups(items: Array<{ path: string; sourceInfo?: SourceInfo }>): Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>;\n formatScopeGroups(groups: Array<{\n scope: \"user\" | \"project\" | \"path\";\n paths: Array<{ path: string; sourceInfo?: SourceInfo }>;\n packages: Map<string, Array<{ path: string; sourceInfo?: SourceInfo }>>;\n }>, options: {\n formatPath: (item: { path: string; sourceInfo?: SourceInfo }) => string;\n formatPackagePath: (\n item: { path: string; sourceInfo?: SourceInfo },\n source: string,\n ) => string;\n }): string;\n findSourceInfoForPath(p: string, sourceInfos: Map<string, SourceInfo>): SourceInfo | undefined;\n formatPathWithSource(p: string, sourceInfo?: SourceInfo): string;\n formatDiagnostics(diagnostics: readonly ResourceDiagnostic[], sourceInfos: Map<string, SourceInfo>): string;\n getResourceDiagnosticsTotal(values: ResourceDiagnostic[][]): number;\n formatResourceCount(count: number, singular: string, plural?: string): string | undefined;\n addResourceDisclosure(options: {\n contextFiles: ReadonlyArray<{ path: string }>;\n skills: ReadonlyArray<{ filePath: string; name: string }>;\n prompts: ReadonlyArray<{ filePath: string; name: string }>;\n templates: ReadonlyArray<{ filePath: string; name: string }>;\n extensions: ReadonlyArray<{ path: string; sourceInfo?: SourceInfo }>;\n themes: ReadonlyArray<{ name?: string; sourcePath?: string }>;\n diagnosticsTotal: number;\n expandedBody: string;\n targetContainer?: Container;\n }): void;\n showLoadedResources(options?: {\n extensions?: Array<{ path: string; sourceInfo?: SourceInfo }>;\n force?: boolean;\n showDiagnosticsWhenQuiet?: boolean;\n targetContainer?: Container;\n }): void;\n bindCurrentSessionExtensions(): Promise<void>;\n applyRuntimeSettings(): void;\n rebindCurrentSession(): Promise<void>;\n handleFatalRuntimeError(prefix: string, error: unknown): Promise<never>;\n renderCurrentSessionState(): void;\n getRegisteredToolDefinition(toolName: string): ReturnType<AgentSession[\"getToolDefinition\"]>;\n setupExtensionShortcuts(extensionRunner: ExtensionRunner): void;\n setExtensionStatus(key: string, text: string | undefined): void;\n getWorkingLoaderMessage(): string;\n createWorkingLoader(): Loader;\n stopWorkingLoader(): void;\n showWorkingLoaderNow(): void;\n setWorkingVisible(visible: boolean): void;\n setWorkingIndicator(options?: LoaderIndicatorOptions): void;\n setHiddenThinkingLabel(label?: string): void;\n setExtensionWidget(key: string, content: | string[]\n | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined, options?: ExtensionWidgetOptions): void;\n clearExtensionWidgets(): void;\n resetExtensionUI(): void;\n renderWidgets(): void;\n renderWidgetContainer(container: Container, widgets: Map<string, Component & { dispose?(): void }>, spacerWhenEmpty: boolean, leadingSpacer: boolean): void;\n setExtensionFooter(factory: | ((\n tui: TUI,\n thm: Theme,\n footerData: ReadonlyFooterDataProvider,\n ) => Component & { dispose?(): void })\n | undefined): void;\n setExtensionHeader(factory: | ((tui: TUI, thm: Theme) => Component & { dispose?(): void })\n | undefined): void;\n addExtensionTerminalInputListener(handler: (data: string) => { consume?: boolean; data?: string } | undefined): () => void;\n clearExtensionTerminalInputListeners(): void;\n getHostCustomUiState(): HostCustomUiState;\n notifyHostCustomUiStateListeners(): void;\n beginHostInlineCustomUi(): () => void;\n beginInlineCustomUiFocusDeferral(): () => void;\n shouldDeferInlineCustomUiFocus(): boolean;\n focusHostInlineCustomUi(): boolean;\n onHostCustomUiStateChange(listener: HostCustomUiStateListener): () => void;\n createProjectTrustContext(cwd: string): ProjectTrustContext;\n createExtensionUIContext(): ExtensionUIContext;\n showExtensionSelector(title: string, options: string[], opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionSelector(): void;\n showExtensionConfirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;\n promptForMissingSessionCwd(error: MissingSessionCwdError): Promise<string | undefined>;\n showExtensionInput(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions): Promise<string | undefined>;\n hideExtensionInput(): void;\n showExtensionEditor(title: string, prefill?: string): Promise<string | undefined>;\n hideExtensionEditor(): void;\n setCustomEditorComponent(factory: EditorFactory | undefined): void;\n showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n showExtensionCustom<T>(factory: (\n tui: TUI,\n theme: Theme,\n keybindings: KeybindingsManager,\n done: (result: T) => void,\n ) =>\n | (Component & { dispose?(): void })\n | Promise<Component & { dispose?(): void }>, options?: {\n overlay?: boolean;\n deferInlineCustomUiFocus?: boolean;\n signal?: AbortSignal;\n overlayOptions?: OverlayOptions | (() => OverlayOptions);\n onHandle?: (handle: OverlayHandle) => void;\n }): Promise<T>;\n showExtensionError(extensionPath: string, error: string, stack?: string): void;\n setupKeyHandlers(): void;\n handleClipboardImagePaste(): Promise<void>;\n setupEditorSubmitHandler(): void;\n deliverStartupReplayPrompt(text: string): void;\n recoverCookedStartupInput(): boolean;\n drainStartupReplayCommands(): Promise<void>;\n advanceStartupInputReplay(submittedText: string): void;\n subscribeToAgent(): void;\n handleEvent(event: AgentSessionEvent): Promise<void>;\n getUserMessageText(message: Message): string;\n showStatus(message: string): void;\n chatMessageRenderOptions(): ChatMessageRenderOptions;\n addRenderedChatEntry(entry: ChatMessageEntry): Component;\n addContextCompactionSummaryToChat(result: ContextCompactionResult): void;\n addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void;\n renderSessionContext(sessionContext: SessionContext, options?: { updateFooter?: boolean; populateHistory?: boolean }): void;\n renderInitialMessages(): void;\n attachStartupNoticesContainer(options?: { resetDetached?: boolean }): void;\n getUserInput(): Promise<string>;\n runUserPromptTurn(userInput: string): Promise<void>;\n renderDeferredUserInput(text: string): void;\n consumeDeferredRenderedUserInput(text: string): boolean;\n discardDeferredRenderedUserInput(text: string): void;\n ensureDeferredStartupComplete(): Promise<void>;\n rebuildChatFromMessages(): void;\n handleCtrlC(): void;\n interruptActiveOperation(): boolean;\n handleCtrlD(): void;\n shutdown(options?: { fromSignal?: boolean }): Promise<void>;\n emergencyTerminalExit(): never;\n uncaughtCrash(error: Error): never;\n checkShutdownRequested(): Promise<void>;\n registerSignalHandlers(): void;\n unregisterSignalHandlers(): void;\n handleCtrlZ(): void;\n handleFollowUp(): Promise<void>;\n handleDequeue(): void;\n refreshBuiltInHeader(): void;\n updateEditorBorderColor(): void;\n cycleThinkingLevel(): void;\n cycleModel(direction: \"forward\" | \"backward\"): Promise<void>;\n toggleToolOutputExpansion(): void;\n setToolsExpanded(expanded: boolean): void;\n toggleThinkingBlockVisibility(): void;\n openExternalEditor(): void;\n clearEditor(): void;\n showError(errorMessage: string): void;\n showWarning(warningMessage: string, targetContainer?: Container): void;\n showNewVersionNotification(newVersion: string, targetContainer?: Container): void;\n showPackageUpdateNotification(packages: string[], targetContainer?: Container): void;\n getAllQueuedMessages(): { steering: string[]; followUp: string[] };\n clearAllQueues(): { steering: string[]; followUp: string[] };\n updatePendingMessagesDisplay(): void;\n restoreQueuedMessagesToEditor(options?: {\n abort?: boolean;\n currentText?: string;\n }): number;\n queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\"): void;\n isExtensionCommand(text: string): boolean;\n flushCompactionQueue(options?: {\n willRetry?: boolean;\n }): Promise<void>;\n flushPendingBashComponents(): void;\n showSelector(create: (done: () => void) => { component: Component; focus: Component }): void;\n showFastModeSelector(): void;\n showSettingsSelector(): void;\n handleModelCommand(searchTerm?: string): Promise<void>;\n findExactModelMatch(searchTerm: string): Promise<Model<Api> | undefined>;\n getModelCandidates(): Promise<Model<Api>[]>;\n refreshCopilotModelCatalog(): Promise<void>;\n loadCopilotModelCatalog(): Promise<void>;\n updateAvailableProviderCount(): Promise<void>;\n maybeWarnAboutAnthropicSubscriptionAuth(model?: Model<Api> | undefined, targetContainer?: Container): Promise<void>;\n showModelSelector(initialSearchInput?: string): void;\n showContextWindowSelector(model: Model<Api>): void;\n showModelsSelector(): Promise<void>;\n showUserMessageSelector(): void;\n handleCloneCommand(): Promise<void>;\n maybeSaveImplicitProjectTrustAfterReload(): boolean;\n showTrustSelector(): void;\n showTreeSelector(initialSelectedId?: string): void;\n showSessionSelector(): void;\n handleResumeSession(sessionPath: string, options?: Parameters<ExtensionCommandContext[\"switchSession\"]>[1]): Promise<{ cancelled: boolean }>;\n getLoginProviderOptions(authType?: \"oauth\" | \"api_key\"): AuthSelectorProvider[];\n getLogoutProviderOptions(): AuthSelectorProvider[];\n showLoginAuthTypeSelector(): void;\n showLoginProviderSelector(authType: \"oauth\" | \"api_key\"): void;\n showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void>;\n completeProviderAuthentication(providerId: string, providerName: string, authType: \"oauth\" | \"api_key\", previousModel: Model<Api> | undefined): Promise<void>;\n showBedrockSetupDialog(providerId: string, providerName: string): void;\n showApiKeyLoginDialog(providerId: string, providerName: string): Promise<void>;\n showOAuthLoginSelect(dialog: LoginDialogComponent, prompt: OAuthSelectPrompt): Promise<string | undefined>;\n showLoginDialog(providerId: string, providerName: string): Promise<void>;\n handleReloadCommand(): Promise<void>;\n handleExportCommand(text: string): Promise<void>;\n getPathCommandArgument(text: string, command: \"/export\" | \"/import\"): string | undefined;\n handleImportCommand(text: string): Promise<void>;\n handleShareCommand(): Promise<void>;\n handleCopyCommand(): Promise<void>;\n handleNameCommand(text: string): void;\n handleSessionCommand(): void;\n handleChangelogCommand(): void;\n getAppKeyDisplay(action: AppKeybinding): string;\n getEditorKeyDisplay(action: Keybinding): string;\n handleHotkeysCommand(): void;\n handleClearCommand(): Promise<void>;\n handleDebugCommand(): void;\n handleArminSaysHi(): void;\n handleDementedDelves(): void;\n handleDaxnuts(): void;\n checkDaxnutsEasterEgg(model: { provider: string; id: string }): void;\n handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;\n handleCompactCommand(): Promise<void>;\n stop(): void;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { ImageContent } from "./interactive-mode-deps.ts";
2
+ import type { EarlyInputCapture } from "../../main-early-input.ts";
2
3
  /** Interface for components that can be expanded/collapsed. */
3
4
  export interface Expandable {
4
5
  setExpanded(expanded: boolean): void;
@@ -31,5 +32,7 @@ export interface InteractiveModeOptions {
31
32
  deferredModelScopePatterns?: string[];
32
33
  /** Preserve an explicit CLI thinking level when applying deferred model-scope suffixes. */
33
34
  deferredModelScopePreserveThinking?: boolean;
35
+ /** Raw terminal input capture active until the TUI prompt is ready to take over stdin. */
36
+ startupInputCapture?: EarlyInputCapture;
34
37
  }
35
38
  //# sourceMappingURL=interactive-mode-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode-types.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qHAAqH;IACrH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,6FAA6F;IAC7F,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;IACtC,2FAA2F;IAC3F,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C","sourcesContent":["import type { ImageContent } from \"./interactive-mode-deps.ts\";\n\n/** Interface for components that can be expanded/collapsed. */\nexport interface Expandable {\n setExpanded(expanded: boolean): void;\n}\n\nexport type CompactionQueuedMessage = {\n text: string;\n mode: \"steer\" | \"followUp\";\n};\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n /** Providers that were migrated to auth.json (shows warning) */\n migratedProviders?: string[];\n /** Warning message if session model couldn't be restored */\n modelFallbackMessage?: string;\n /** Cwd to persist as trusted after reload/shutdown if it gains trust inputs during an implicitly trusted session. */\n autoTrustOnReloadCwd?: string;\n /** Initial message to send on startup (can include @file content) */\n initialMessage?: string;\n /** Images to attach to the initial message */\n initialImages?: ImageContent[];\n /** Additional messages to send after the initial message */\n initialMessages?: string[];\n /** Force verbose startup (overrides quietStartup setting) */\n verbose?: boolean;\n /** Runtime was created without extension code; finish loading in the background after first paint. */\n deferredExtensionLoad?: boolean;\n /** Model scope patterns resolved again after deferred extension load registers providers. */\n deferredModelScopePatterns?: string[];\n /** Preserve an explicit CLI thinking level when applying deferred model-scope suffixes. */\n deferredModelScopePreserveThinking?: boolean;\n}\n"]}
1
+ {"version":3,"file":"interactive-mode-types.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,+DAA+D;AAC/D,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qHAAqH;IACrH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,6FAA6F;IAC7F,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;IACtC,2FAA2F;IAC3F,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;CACzC","sourcesContent":["import type { ImageContent } from \"./interactive-mode-deps.ts\";\nimport type { EarlyInputCapture } from \"../../main-early-input.ts\";\n\n/** Interface for components that can be expanded/collapsed. */\nexport interface Expandable {\n setExpanded(expanded: boolean): void;\n}\n\nexport type CompactionQueuedMessage = {\n text: string;\n mode: \"steer\" | \"followUp\";\n};\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n /** Providers that were migrated to auth.json (shows warning) */\n migratedProviders?: string[];\n /** Warning message if session model couldn't be restored */\n modelFallbackMessage?: string;\n /** Cwd to persist as trusted after reload/shutdown if it gains trust inputs during an implicitly trusted session. */\n autoTrustOnReloadCwd?: string;\n /** Initial message to send on startup (can include @file content) */\n initialMessage?: string;\n /** Images to attach to the initial message */\n initialImages?: ImageContent[];\n /** Additional messages to send after the initial message */\n initialMessages?: string[];\n /** Force verbose startup (overrides quietStartup setting) */\n verbose?: boolean;\n /** Runtime was created without extension code; finish loading in the background after first paint. */\n deferredExtensionLoad?: boolean;\n /** Model scope patterns resolved again after deferred extension load registers providers. */\n deferredModelScopePatterns?: string[];\n /** Preserve an explicit CLI thinking level when applying deferred model-scope suffixes. */\n deferredModelScopePreserveThinking?: boolean;\n /** Raw terminal input capture active until the TUI prompt is ready to take over stdin. */\n startupInputCapture?: EarlyInputCapture;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode-types.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageContent } from \"./interactive-mode-deps.ts\";\n\n/** Interface for components that can be expanded/collapsed. */\nexport interface Expandable {\n setExpanded(expanded: boolean): void;\n}\n\nexport type CompactionQueuedMessage = {\n text: string;\n mode: \"steer\" | \"followUp\";\n};\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n /** Providers that were migrated to auth.json (shows warning) */\n migratedProviders?: string[];\n /** Warning message if session model couldn't be restored */\n modelFallbackMessage?: string;\n /** Cwd to persist as trusted after reload/shutdown if it gains trust inputs during an implicitly trusted session. */\n autoTrustOnReloadCwd?: string;\n /** Initial message to send on startup (can include @file content) */\n initialMessage?: string;\n /** Images to attach to the initial message */\n initialImages?: ImageContent[];\n /** Additional messages to send after the initial message */\n initialMessages?: string[];\n /** Force verbose startup (overrides quietStartup setting) */\n verbose?: boolean;\n /** Runtime was created without extension code; finish loading in the background after first paint. */\n deferredExtensionLoad?: boolean;\n /** Model scope patterns resolved again after deferred extension load registers providers. */\n deferredModelScopePatterns?: string[];\n /** Preserve an explicit CLI thinking level when applying deferred model-scope suffixes. */\n deferredModelScopePreserveThinking?: boolean;\n}\n"]}
1
+ {"version":3,"file":"interactive-mode-types.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ImageContent } from \"./interactive-mode-deps.ts\";\nimport type { EarlyInputCapture } from \"../../main-early-input.ts\";\n\n/** Interface for components that can be expanded/collapsed. */\nexport interface Expandable {\n setExpanded(expanded: boolean): void;\n}\n\nexport type CompactionQueuedMessage = {\n text: string;\n mode: \"steer\" | \"followUp\";\n};\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n /** Providers that were migrated to auth.json (shows warning) */\n migratedProviders?: string[];\n /** Warning message if session model couldn't be restored */\n modelFallbackMessage?: string;\n /** Cwd to persist as trusted after reload/shutdown if it gains trust inputs during an implicitly trusted session. */\n autoTrustOnReloadCwd?: string;\n /** Initial message to send on startup (can include @file content) */\n initialMessage?: string;\n /** Images to attach to the initial message */\n initialImages?: ImageContent[];\n /** Additional messages to send after the initial message */\n initialMessages?: string[];\n /** Force verbose startup (overrides quietStartup setting) */\n verbose?: boolean;\n /** Runtime was created without extension code; finish loading in the background after first paint. */\n deferredExtensionLoad?: boolean;\n /** Model scope patterns resolved again after deferred extension load registers providers. */\n deferredModelScopePatterns?: string[];\n /** Preserve an explicit CLI thinking level when applying deferred model-scope suffixes. */\n deferredModelScopePreserveThinking?: boolean;\n /** Raw terminal input capture active until the TUI prompt is ready to take over stdin. */\n startupInputCapture?: EarlyInputCapture;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-model-routing.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-model-routing.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, getAgentDir, findExactModelReferenceMatch, resolveModelScope, ContextWindowSelectorComponent, formatContextWindow, copilotApiBaseUrlFromToken, copilotCatalogCacheHost, copilotCatalogCachePath, fetchCopilotModelCatalog, readCopilotCatalogCache, setActiveCopilotModelCatalog, writeCopilotCatalogCache, ModelSelectorComponent, ScopedModelsSelectorComponent, UserMessageSelectorComponent } from \"./interactive-mode-deps.ts\";\nimport { ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, isAnthropicSubscriptionAuthKey } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.handleModelCommand = async function(this: InteractiveModeBase, searchTerm?: string): Promise<void> {\n if (!searchTerm) {\n this.showModelSelector();\n return;\n }\n\n const model = await this.findExactModelMatch(searchTerm);\n if (model) {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n this.showStatus(`Model: ${model.id}`);\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n } catch (error) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n return;\n }\n\n this.showModelSelector(searchTerm);\n };\n\nInteractiveModeBase.prototype.findExactModelMatch = async function(this: InteractiveModeBase, searchTerm: string): Promise<Model<Api> | undefined> {\n const models = await this.getModelCandidates();\n return findExactModelReferenceMatch(searchTerm, models);\n };\n\nInteractiveModeBase.prototype.getModelCandidates = async function(this: InteractiveModeBase): Promise<Model<Api>[]> {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels.map((scoped) => scoped.model);\n }\n\n await this.refreshCopilotModelCatalog();\n this.session.modelRegistry.refresh();\n try {\n return await this.session.modelRegistry.getAvailable();\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.refreshCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n if (this.copilotCatalogApplied) return;\n if (!this.copilotCatalogInFlight) {\n this.copilotCatalogInFlight = this.loadCopilotModelCatalog();\n }\n try {\n await this.copilotCatalogInFlight;\n } finally {\n this.copilotCatalogInFlight = undefined;\n }\n };\n\nInteractiveModeBase.prototype.loadCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n const registry = this.session.modelRegistry;\n // Gate: do nothing unless the user has a Copilot token, including COPILOT_GITHUB_TOKEN env auth.\n try {\n const token = await registry.getApiKeyForProvider(\"github-copilot\");\n if (!token) return;\n const baseUrl = copilotApiBaseUrlFromToken(token);\n const cachePath = copilotCatalogCachePath(getAgentDir());\n let catalog = readCopilotCatalogCache(cachePath, { host: copilotCatalogCacheHost(baseUrl) });\n if (!catalog) {\n catalog = await fetchCopilotModelCatalog({ token, baseUrl });\n writeCopilotCatalogCache(cachePath, baseUrl, catalog);\n }\n setActiveCopilotModelCatalog(catalog);\n registry.refresh();\n this.session.refreshCurrentModelFromRegistry();\n this.copilotCatalogApplied = true;\n } catch {\n // Best-effort: leave the active catalog as-is on any failure (offline, auth, parse).\n }\n };\n\nInteractiveModeBase.prototype.updateAvailableProviderCount = async function(this: InteractiveModeBase): Promise<void> {\n const models = await this.getModelCandidates();\n const uniqueProviders = new Set(models.map((m) => m.provider));\n this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n };\n\nInteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function(this: InteractiveModeBase, model: Model<Api> | undefined = this.session.model): Promise<void> {\n if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n return;\n }\n if (this.anthropicSubscriptionWarningShown) {\n return;\n }\n if (!model || model.provider !== \"anthropic\") {\n return;\n }\n\n const storedCredential =\n this.session.modelRegistry.authStorage.get(\"anthropic\");\n if (storedCredential?.type === \"oauth\") {\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n return;\n }\n\n try {\n const apiKey = await this.session.modelRegistry.getApiKeyForProvider(\n model.provider,\n );\n if (!isAnthropicSubscriptionAuthKey(apiKey)) {\n return;\n }\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n } catch {\n // Ignore auth lookup failures for warning-only checks.\n }\n };\n\nInteractiveModeBase.prototype.showModelSelector = function(this: InteractiveModeBase, initialSearchInput?: string): void {\n this.showSelector((done) => {\n const selector = new ModelSelectorComponent(\n this.ui,\n this.session.model,\n this.settingsManager,\n this.session.modelRegistry,\n this.session.scopedModels,\n async (model) => {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n done();\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n if (this.session.supportsContextWindowSelection()) {\n this.showContextWindowSelector(model);\n } else {\n this.showStatus(`Model: ${model.id}`);\n }\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSearchInput,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showContextWindowSelector = function(this: InteractiveModeBase, model: Model<Api>): void {\n const availableContextWindows = this.session.getAvailableContextWindows();\n const currentContextWindow =\n this.session.model?.contextWindow ?? availableContextWindows[0] ?? 0;\n this.showSelector((done) => {\n const selector = new ContextWindowSelectorComponent(\n model.name ?? model.id,\n availableContextWindows,\n currentContextWindow,\n async (contextWindow) => {\n try {\n this.session.setContextWindow(contextWindow, {\n persistDefault: true,\n });\n this.footer.invalidate();\n this.usageMeter.invalidate();\n this.updateEditorBorderColor();\n done();\n this.showStatus(\n `Model: ${model.id} \\u00b7 ${formatContextWindow(contextWindow)} context`,\n );\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.showStatus(`Model: ${model.id}`);\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showModelsSelector = async function(this: InteractiveModeBase): Promise<void> {\n // Get all available models\n this.session.modelRegistry.refresh();\n const allModels = this.session.modelRegistry.getAvailable();\n\n if (allModels.length === 0) {\n this.showStatus(\"No models available\");\n return;\n }\n\n // Check if session has scoped models (from previous session-only changes or CLI --models)\n const sessionScopedModels = this.session.scopedModels;\n const hasSessionScope = sessionScopedModels.length > 0;\n\n // Build enabled model IDs from session state or settings\n let currentEnabledIds: string[] | null = null;\n\n if (hasSessionScope) {\n // Use current session's scoped models\n currentEnabledIds = sessionScopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n } else {\n // Fall back to settings\n const patterns = this.settingsManager.getEnabledModels();\n if (patterns !== undefined && patterns.length > 0) {\n const scopedModels = await resolveModelScope(\n patterns,\n this.session.modelRegistry,\n );\n currentEnabledIds = scopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n }\n }\n\n // Helper to update session's scoped models (session-only, no persist)\n const updateSessionModels = async (enabledIds: string[] | null) => {\n currentEnabledIds = enabledIds === null ? null : [...enabledIds];\n if (\n enabledIds &&\n enabledIds.length > 0 &&\n enabledIds.length < allModels.length\n ) {\n const newScopedModels = await resolveModelScope(\n enabledIds,\n this.session.modelRegistry,\n );\n this.session.setScopedModels(\n newScopedModels.map((sm) => ({\n model: sm.model,\n thinkingLevel: sm.thinkingLevel,\n })),\n );\n } else {\n // All enabled or none enabled = no filter\n this.session.setScopedModels([]);\n }\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.ui.requestRender();\n };\n\n this.showSelector((done) => {\n const selector = new ScopedModelsSelectorComponent(\n {\n allModels,\n enabledModelIds: currentEnabledIds,\n },\n {\n onChange: async (enabledIds) => {\n await updateSessionModels(enabledIds);\n },\n onPersist: (enabledIds) => {\n // Persist to settings\n const newPatterns =\n enabledIds === null || enabledIds.length === allModels.length\n ? undefined // All enabled = clear filter\n : enabledIds;\n this.settingsManager.setEnabledModels(\n newPatterns ? [...newPatterns] : undefined,\n );\n this.showStatus(\"Model selection saved to settings\");\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showUserMessageSelector = function(this: InteractiveModeBase): void {\n const userMessages = this.session.getUserMessagesForForking();\n\n if (userMessages.length === 0) {\n this.showStatus(\"No messages to fork from\");\n return;\n }\n\n const initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n this.showSelector((done) => {\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n try {\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n done();\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n done();\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSelectedId,\n );\n return { component: selector, focus: selector.getMessageList() };\n });\n };\n"]}
1
+ {"version":3,"file":"interactive-model-routing.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-model-routing.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, getAgentDir, findExactModelReferenceMatch, resolveModelScope, ContextWindowSelectorComponent, formatContextWindow, copilotApiBaseUrlFromToken, copilotCatalogCacheHost, copilotCatalogCachePath, fetchCopilotModelCatalog, readCopilotCatalogCache, setActiveCopilotModelCatalog, writeCopilotCatalogCache, ModelSelectorComponent, ScopedModelsSelectorComponent, UserMessageSelectorComponent } from \"./interactive-mode-deps.ts\";\nimport { ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, isAnthropicSubscriptionAuthKey } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.handleModelCommand = async function(this: InteractiveModeBase, searchTerm?: string): Promise<void> {\n if (!searchTerm) {\n this.showModelSelector();\n return;\n }\n\n const model = await this.findExactModelMatch(searchTerm);\n if (model) {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n this.showStatus(`Model: ${model.id}`);\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n } catch (error) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n return;\n }\n\n this.showModelSelector(searchTerm);\n };\n\nInteractiveModeBase.prototype.findExactModelMatch = async function(this: InteractiveModeBase, searchTerm: string): Promise<Model<Api> | undefined> {\n const models = await this.getModelCandidates();\n return findExactModelReferenceMatch(searchTerm, models);\n };\n\nInteractiveModeBase.prototype.getModelCandidates = async function(this: InteractiveModeBase): Promise<Model<Api>[]> {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels.map((scoped) => scoped.model);\n }\n\n await this.refreshCopilotModelCatalog();\n this.session.modelRegistry.refresh();\n try {\n return await this.session.modelRegistry.getAvailable();\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.refreshCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n if (this.copilotCatalogApplied) return;\n if (!this.copilotCatalogInFlight) {\n this.copilotCatalogInFlight = this.loadCopilotModelCatalog();\n }\n try {\n await this.copilotCatalogInFlight;\n } finally {\n this.copilotCatalogInFlight = undefined;\n }\n };\n\nInteractiveModeBase.prototype.loadCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n const registry = this.session.modelRegistry;\n // Gate: do nothing unless the user has a Copilot token, including COPILOT_GITHUB_TOKEN env auth.\n try {\n const token = await registry.getApiKeyForProvider(\"github-copilot\");\n if (!token) return;\n const baseUrl = copilotApiBaseUrlFromToken(token);\n const cachePath = copilotCatalogCachePath(getAgentDir());\n let catalog = readCopilotCatalogCache(cachePath, { host: copilotCatalogCacheHost(baseUrl) });\n if (!catalog) {\n catalog = await fetchCopilotModelCatalog({ token, baseUrl });\n writeCopilotCatalogCache(cachePath, baseUrl, catalog);\n }\n setActiveCopilotModelCatalog(catalog);\n registry.refresh();\n this.session.refreshCurrentModelFromRegistry();\n this.copilotCatalogApplied = true;\n } catch {\n // Best-effort: leave the active catalog as-is on any failure (offline, auth, parse).\n }\n };\n\nInteractiveModeBase.prototype.updateAvailableProviderCount = async function(this: InteractiveModeBase): Promise<void> {\n const models = await this.getModelCandidates();\n const uniqueProviders = new Set(models.map((m) => m.provider));\n this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n };\n\nInteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function(this: InteractiveModeBase, model: Model<Api> | undefined = this.session.model, targetContainer = this.chatContainer): Promise<void> {\n if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n return;\n }\n if (this.anthropicSubscriptionWarningShown) {\n return;\n }\n if (!model || model.provider !== \"anthropic\") {\n return;\n }\n\n const storedCredential =\n this.session.modelRegistry.authStorage.get(\"anthropic\");\n if (storedCredential?.type === \"oauth\") {\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);\n return;\n }\n\n try {\n const apiKey = await this.session.modelRegistry.getApiKeyForProvider(\n model.provider,\n );\n if (!isAnthropicSubscriptionAuthKey(apiKey)) {\n return;\n }\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);\n } catch {\n // Ignore auth lookup failures for warning-only checks.\n }\n };\n\nInteractiveModeBase.prototype.showModelSelector = function(this: InteractiveModeBase, initialSearchInput?: string): void {\n this.showSelector((done) => {\n const selector = new ModelSelectorComponent(\n this.ui,\n this.session.model,\n this.settingsManager,\n this.session.modelRegistry,\n this.session.scopedModels,\n async (model) => {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n done();\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n if (this.session.supportsContextWindowSelection()) {\n this.showContextWindowSelector(model);\n } else {\n this.showStatus(`Model: ${model.id}`);\n }\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSearchInput,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showContextWindowSelector = function(this: InteractiveModeBase, model: Model<Api>): void {\n const availableContextWindows = this.session.getAvailableContextWindows();\n const currentContextWindow =\n this.session.model?.contextWindow ?? availableContextWindows[0] ?? 0;\n this.showSelector((done) => {\n const selector = new ContextWindowSelectorComponent(\n model.name ?? model.id,\n availableContextWindows,\n currentContextWindow,\n async (contextWindow) => {\n try {\n this.session.setContextWindow(contextWindow, {\n persistDefault: true,\n });\n this.footer.invalidate();\n this.usageMeter.invalidate();\n this.updateEditorBorderColor();\n done();\n this.showStatus(\n `Model: ${model.id} \\u00b7 ${formatContextWindow(contextWindow)} context`,\n );\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.showStatus(`Model: ${model.id}`);\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showModelsSelector = async function(this: InteractiveModeBase): Promise<void> {\n // Get all available models\n this.session.modelRegistry.refresh();\n const allModels = this.session.modelRegistry.getAvailable();\n\n if (allModels.length === 0) {\n this.showStatus(\"No models available\");\n return;\n }\n\n // Check if session has scoped models (from previous session-only changes or CLI --models)\n const sessionScopedModels = this.session.scopedModels;\n const hasSessionScope = sessionScopedModels.length > 0;\n\n // Build enabled model IDs from session state or settings\n let currentEnabledIds: string[] | null = null;\n\n if (hasSessionScope) {\n // Use current session's scoped models\n currentEnabledIds = sessionScopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n } else {\n // Fall back to settings\n const patterns = this.settingsManager.getEnabledModels();\n if (patterns !== undefined && patterns.length > 0) {\n const scopedModels = await resolveModelScope(\n patterns,\n this.session.modelRegistry,\n );\n currentEnabledIds = scopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n }\n }\n\n // Helper to update session's scoped models (session-only, no persist)\n const updateSessionModels = async (enabledIds: string[] | null) => {\n currentEnabledIds = enabledIds === null ? null : [...enabledIds];\n if (\n enabledIds &&\n enabledIds.length > 0 &&\n enabledIds.length < allModels.length\n ) {\n const newScopedModels = await resolveModelScope(\n enabledIds,\n this.session.modelRegistry,\n );\n this.session.setScopedModels(\n newScopedModels.map((sm) => ({\n model: sm.model,\n thinkingLevel: sm.thinkingLevel,\n })),\n );\n } else {\n // All enabled or none enabled = no filter\n this.session.setScopedModels([]);\n }\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.ui.requestRender();\n };\n\n this.showSelector((done) => {\n const selector = new ScopedModelsSelectorComponent(\n {\n allModels,\n enabledModelIds: currentEnabledIds,\n },\n {\n onChange: async (enabledIds) => {\n await updateSessionModels(enabledIds);\n },\n onPersist: (enabledIds) => {\n // Persist to settings\n const newPatterns =\n enabledIds === null || enabledIds.length === allModels.length\n ? undefined // All enabled = clear filter\n : enabledIds;\n this.settingsManager.setEnabledModels(\n newPatterns ? [...newPatterns] : undefined,\n );\n this.showStatus(\"Model selection saved to settings\");\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showUserMessageSelector = function(this: InteractiveModeBase): void {\n const userMessages = this.session.getUserMessagesForForking();\n\n if (userMessages.length === 0) {\n this.showStatus(\"No messages to fork from\");\n return;\n }\n\n const initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n this.showSelector((done) => {\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n try {\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n done();\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n done();\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSelectedId,\n );\n return { component: selector, focus: selector.getMessageList() };\n });\n };\n"]}
@@ -81,7 +81,7 @@ InteractiveModeBase.prototype.updateAvailableProviderCount = async function () {
81
81
  const uniqueProviders = new Set(models.map((m) => m.provider));
82
82
  this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);
83
83
  };
84
- InteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function (model = this.session.model) {
84
+ InteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function (model = this.session.model, targetContainer = this.chatContainer) {
85
85
  if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {
86
86
  return;
87
87
  }
@@ -94,7 +94,7 @@ InteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async fu
94
94
  const storedCredential = this.session.modelRegistry.authStorage.get("anthropic");
95
95
  if (storedCredential?.type === "oauth") {
96
96
  this.anthropicSubscriptionWarningShown = true;
97
- this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
97
+ this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);
98
98
  return;
99
99
  }
100
100
  try {
@@ -103,7 +103,7 @@ InteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async fu
103
103
  return;
104
104
  }
105
105
  this.anthropicSubscriptionWarningShown = true;
106
- this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);
106
+ this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);
107
107
  }
108
108
  catch {
109
109
  // Ignore auth lookup failures for warning-only checks.
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-model-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-model-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, getAgentDir, findExactModelReferenceMatch, resolveModelScope, ContextWindowSelectorComponent, formatContextWindow, copilotApiBaseUrlFromToken, copilotCatalogCacheHost, copilotCatalogCachePath, fetchCopilotModelCatalog, readCopilotCatalogCache, setActiveCopilotModelCatalog, writeCopilotCatalogCache, ModelSelectorComponent, ScopedModelsSelectorComponent, UserMessageSelectorComponent } from \"./interactive-mode-deps.ts\";\nimport { ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, isAnthropicSubscriptionAuthKey } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.handleModelCommand = async function(this: InteractiveModeBase, searchTerm?: string): Promise<void> {\n if (!searchTerm) {\n this.showModelSelector();\n return;\n }\n\n const model = await this.findExactModelMatch(searchTerm);\n if (model) {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n this.showStatus(`Model: ${model.id}`);\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n } catch (error) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n return;\n }\n\n this.showModelSelector(searchTerm);\n };\n\nInteractiveModeBase.prototype.findExactModelMatch = async function(this: InteractiveModeBase, searchTerm: string): Promise<Model<Api> | undefined> {\n const models = await this.getModelCandidates();\n return findExactModelReferenceMatch(searchTerm, models);\n };\n\nInteractiveModeBase.prototype.getModelCandidates = async function(this: InteractiveModeBase): Promise<Model<Api>[]> {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels.map((scoped) => scoped.model);\n }\n\n await this.refreshCopilotModelCatalog();\n this.session.modelRegistry.refresh();\n try {\n return await this.session.modelRegistry.getAvailable();\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.refreshCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n if (this.copilotCatalogApplied) return;\n if (!this.copilotCatalogInFlight) {\n this.copilotCatalogInFlight = this.loadCopilotModelCatalog();\n }\n try {\n await this.copilotCatalogInFlight;\n } finally {\n this.copilotCatalogInFlight = undefined;\n }\n };\n\nInteractiveModeBase.prototype.loadCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n const registry = this.session.modelRegistry;\n // Gate: do nothing unless the user has a Copilot token, including COPILOT_GITHUB_TOKEN env auth.\n try {\n const token = await registry.getApiKeyForProvider(\"github-copilot\");\n if (!token) return;\n const baseUrl = copilotApiBaseUrlFromToken(token);\n const cachePath = copilotCatalogCachePath(getAgentDir());\n let catalog = readCopilotCatalogCache(cachePath, { host: copilotCatalogCacheHost(baseUrl) });\n if (!catalog) {\n catalog = await fetchCopilotModelCatalog({ token, baseUrl });\n writeCopilotCatalogCache(cachePath, baseUrl, catalog);\n }\n setActiveCopilotModelCatalog(catalog);\n registry.refresh();\n this.session.refreshCurrentModelFromRegistry();\n this.copilotCatalogApplied = true;\n } catch {\n // Best-effort: leave the active catalog as-is on any failure (offline, auth, parse).\n }\n };\n\nInteractiveModeBase.prototype.updateAvailableProviderCount = async function(this: InteractiveModeBase): Promise<void> {\n const models = await this.getModelCandidates();\n const uniqueProviders = new Set(models.map((m) => m.provider));\n this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n };\n\nInteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function(this: InteractiveModeBase, model: Model<Api> | undefined = this.session.model): Promise<void> {\n if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n return;\n }\n if (this.anthropicSubscriptionWarningShown) {\n return;\n }\n if (!model || model.provider !== \"anthropic\") {\n return;\n }\n\n const storedCredential =\n this.session.modelRegistry.authStorage.get(\"anthropic\");\n if (storedCredential?.type === \"oauth\") {\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n return;\n }\n\n try {\n const apiKey = await this.session.modelRegistry.getApiKeyForProvider(\n model.provider,\n );\n if (!isAnthropicSubscriptionAuthKey(apiKey)) {\n return;\n }\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING);\n } catch {\n // Ignore auth lookup failures for warning-only checks.\n }\n };\n\nInteractiveModeBase.prototype.showModelSelector = function(this: InteractiveModeBase, initialSearchInput?: string): void {\n this.showSelector((done) => {\n const selector = new ModelSelectorComponent(\n this.ui,\n this.session.model,\n this.settingsManager,\n this.session.modelRegistry,\n this.session.scopedModels,\n async (model) => {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n done();\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n if (this.session.supportsContextWindowSelection()) {\n this.showContextWindowSelector(model);\n } else {\n this.showStatus(`Model: ${model.id}`);\n }\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSearchInput,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showContextWindowSelector = function(this: InteractiveModeBase, model: Model<Api>): void {\n const availableContextWindows = this.session.getAvailableContextWindows();\n const currentContextWindow =\n this.session.model?.contextWindow ?? availableContextWindows[0] ?? 0;\n this.showSelector((done) => {\n const selector = new ContextWindowSelectorComponent(\n model.name ?? model.id,\n availableContextWindows,\n currentContextWindow,\n async (contextWindow) => {\n try {\n this.session.setContextWindow(contextWindow, {\n persistDefault: true,\n });\n this.footer.invalidate();\n this.usageMeter.invalidate();\n this.updateEditorBorderColor();\n done();\n this.showStatus(\n `Model: ${model.id} \\u00b7 ${formatContextWindow(contextWindow)} context`,\n );\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.showStatus(`Model: ${model.id}`);\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showModelsSelector = async function(this: InteractiveModeBase): Promise<void> {\n // Get all available models\n this.session.modelRegistry.refresh();\n const allModels = this.session.modelRegistry.getAvailable();\n\n if (allModels.length === 0) {\n this.showStatus(\"No models available\");\n return;\n }\n\n // Check if session has scoped models (from previous session-only changes or CLI --models)\n const sessionScopedModels = this.session.scopedModels;\n const hasSessionScope = sessionScopedModels.length > 0;\n\n // Build enabled model IDs from session state or settings\n let currentEnabledIds: string[] | null = null;\n\n if (hasSessionScope) {\n // Use current session's scoped models\n currentEnabledIds = sessionScopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n } else {\n // Fall back to settings\n const patterns = this.settingsManager.getEnabledModels();\n if (patterns !== undefined && patterns.length > 0) {\n const scopedModels = await resolveModelScope(\n patterns,\n this.session.modelRegistry,\n );\n currentEnabledIds = scopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n }\n }\n\n // Helper to update session's scoped models (session-only, no persist)\n const updateSessionModels = async (enabledIds: string[] | null) => {\n currentEnabledIds = enabledIds === null ? null : [...enabledIds];\n if (\n enabledIds &&\n enabledIds.length > 0 &&\n enabledIds.length < allModels.length\n ) {\n const newScopedModels = await resolveModelScope(\n enabledIds,\n this.session.modelRegistry,\n );\n this.session.setScopedModels(\n newScopedModels.map((sm) => ({\n model: sm.model,\n thinkingLevel: sm.thinkingLevel,\n })),\n );\n } else {\n // All enabled or none enabled = no filter\n this.session.setScopedModels([]);\n }\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.ui.requestRender();\n };\n\n this.showSelector((done) => {\n const selector = new ScopedModelsSelectorComponent(\n {\n allModels,\n enabledModelIds: currentEnabledIds,\n },\n {\n onChange: async (enabledIds) => {\n await updateSessionModels(enabledIds);\n },\n onPersist: (enabledIds) => {\n // Persist to settings\n const newPatterns =\n enabledIds === null || enabledIds.length === allModels.length\n ? undefined // All enabled = clear filter\n : enabledIds;\n this.settingsManager.setEnabledModels(\n newPatterns ? [...newPatterns] : undefined,\n );\n this.showStatus(\"Model selection saved to settings\");\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showUserMessageSelector = function(this: InteractiveModeBase): void {\n const userMessages = this.session.getUserMessagesForForking();\n\n if (userMessages.length === 0) {\n this.showStatus(\"No messages to fork from\");\n return;\n }\n\n const initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n this.showSelector((done) => {\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n try {\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n done();\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n done();\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSelectedId,\n );\n return { component: selector, focus: selector.getMessageList() };\n });\n };\n"]}
1
+ {"version":3,"file":"interactive-model-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-model-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { type Api, type Model, getAgentDir, findExactModelReferenceMatch, resolveModelScope, ContextWindowSelectorComponent, formatContextWindow, copilotApiBaseUrlFromToken, copilotCatalogCacheHost, copilotCatalogCachePath, fetchCopilotModelCatalog, readCopilotCatalogCache, setActiveCopilotModelCatalog, writeCopilotCatalogCache, ModelSelectorComponent, ScopedModelsSelectorComponent, UserMessageSelectorComponent } from \"./interactive-mode-deps.ts\";\nimport { ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, isAnthropicSubscriptionAuthKey } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.handleModelCommand = async function(this: InteractiveModeBase, searchTerm?: string): Promise<void> {\n if (!searchTerm) {\n this.showModelSelector();\n return;\n }\n\n const model = await this.findExactModelMatch(searchTerm);\n if (model) {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n this.showStatus(`Model: ${model.id}`);\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n } catch (error) {\n this.showError(error instanceof Error ? error.message : String(error));\n }\n return;\n }\n\n this.showModelSelector(searchTerm);\n };\n\nInteractiveModeBase.prototype.findExactModelMatch = async function(this: InteractiveModeBase, searchTerm: string): Promise<Model<Api> | undefined> {\n const models = await this.getModelCandidates();\n return findExactModelReferenceMatch(searchTerm, models);\n };\n\nInteractiveModeBase.prototype.getModelCandidates = async function(this: InteractiveModeBase): Promise<Model<Api>[]> {\n if (this.session.scopedModels.length > 0) {\n return this.session.scopedModels.map((scoped) => scoped.model);\n }\n\n await this.refreshCopilotModelCatalog();\n this.session.modelRegistry.refresh();\n try {\n return await this.session.modelRegistry.getAvailable();\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.refreshCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n if (this.copilotCatalogApplied) return;\n if (!this.copilotCatalogInFlight) {\n this.copilotCatalogInFlight = this.loadCopilotModelCatalog();\n }\n try {\n await this.copilotCatalogInFlight;\n } finally {\n this.copilotCatalogInFlight = undefined;\n }\n };\n\nInteractiveModeBase.prototype.loadCopilotModelCatalog = async function(this: InteractiveModeBase): Promise<void> {\n const registry = this.session.modelRegistry;\n // Gate: do nothing unless the user has a Copilot token, including COPILOT_GITHUB_TOKEN env auth.\n try {\n const token = await registry.getApiKeyForProvider(\"github-copilot\");\n if (!token) return;\n const baseUrl = copilotApiBaseUrlFromToken(token);\n const cachePath = copilotCatalogCachePath(getAgentDir());\n let catalog = readCopilotCatalogCache(cachePath, { host: copilotCatalogCacheHost(baseUrl) });\n if (!catalog) {\n catalog = await fetchCopilotModelCatalog({ token, baseUrl });\n writeCopilotCatalogCache(cachePath, baseUrl, catalog);\n }\n setActiveCopilotModelCatalog(catalog);\n registry.refresh();\n this.session.refreshCurrentModelFromRegistry();\n this.copilotCatalogApplied = true;\n } catch {\n // Best-effort: leave the active catalog as-is on any failure (offline, auth, parse).\n }\n };\n\nInteractiveModeBase.prototype.updateAvailableProviderCount = async function(this: InteractiveModeBase): Promise<void> {\n const models = await this.getModelCandidates();\n const uniqueProviders = new Set(models.map((m) => m.provider));\n this.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n };\n\nInteractiveModeBase.prototype.maybeWarnAboutAnthropicSubscriptionAuth = async function(this: InteractiveModeBase, model: Model<Api> | undefined = this.session.model, targetContainer = this.chatContainer): Promise<void> {\n if (this.settingsManager.getWarnings().anthropicExtraUsage === false) {\n return;\n }\n if (this.anthropicSubscriptionWarningShown) {\n return;\n }\n if (!model || model.provider !== \"anthropic\") {\n return;\n }\n\n const storedCredential =\n this.session.modelRegistry.authStorage.get(\"anthropic\");\n if (storedCredential?.type === \"oauth\") {\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);\n return;\n }\n\n try {\n const apiKey = await this.session.modelRegistry.getApiKeyForProvider(\n model.provider,\n );\n if (!isAnthropicSubscriptionAuthKey(apiKey)) {\n return;\n }\n this.anthropicSubscriptionWarningShown = true;\n this.showWarning(ANTHROPIC_SUBSCRIPTION_AUTH_WARNING, targetContainer);\n } catch {\n // Ignore auth lookup failures for warning-only checks.\n }\n };\n\nInteractiveModeBase.prototype.showModelSelector = function(this: InteractiveModeBase, initialSearchInput?: string): void {\n this.showSelector((done) => {\n const selector = new ModelSelectorComponent(\n this.ui,\n this.session.model,\n this.settingsManager,\n this.session.modelRegistry,\n this.session.scopedModels,\n async (model) => {\n try {\n await this.session.setModel(model);\n this.footer.invalidate();\n this.updateEditorBorderColor();\n done();\n void this.maybeWarnAboutAnthropicSubscriptionAuth(model);\n this.checkDaxnutsEasterEgg(model);\n if (this.session.supportsContextWindowSelection()) {\n this.showContextWindowSelector(model);\n } else {\n this.showStatus(`Model: ${model.id}`);\n }\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSearchInput,\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showContextWindowSelector = function(this: InteractiveModeBase, model: Model<Api>): void {\n const availableContextWindows = this.session.getAvailableContextWindows();\n const currentContextWindow =\n this.session.model?.contextWindow ?? availableContextWindows[0] ?? 0;\n this.showSelector((done) => {\n const selector = new ContextWindowSelectorComponent(\n model.name ?? model.id,\n availableContextWindows,\n currentContextWindow,\n async (contextWindow) => {\n try {\n this.session.setContextWindow(contextWindow, {\n persistDefault: true,\n });\n this.footer.invalidate();\n this.usageMeter.invalidate();\n this.updateEditorBorderColor();\n done();\n this.showStatus(\n `Model: ${model.id} \\u00b7 ${formatContextWindow(contextWindow)} context`,\n );\n } catch (error) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.showStatus(`Model: ${model.id}`);\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showModelsSelector = async function(this: InteractiveModeBase): Promise<void> {\n // Get all available models\n this.session.modelRegistry.refresh();\n const allModels = this.session.modelRegistry.getAvailable();\n\n if (allModels.length === 0) {\n this.showStatus(\"No models available\");\n return;\n }\n\n // Check if session has scoped models (from previous session-only changes or CLI --models)\n const sessionScopedModels = this.session.scopedModels;\n const hasSessionScope = sessionScopedModels.length > 0;\n\n // Build enabled model IDs from session state or settings\n let currentEnabledIds: string[] | null = null;\n\n if (hasSessionScope) {\n // Use current session's scoped models\n currentEnabledIds = sessionScopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n } else {\n // Fall back to settings\n const patterns = this.settingsManager.getEnabledModels();\n if (patterns !== undefined && patterns.length > 0) {\n const scopedModels = await resolveModelScope(\n patterns,\n this.session.modelRegistry,\n );\n currentEnabledIds = scopedModels.map(\n (scoped) => `${scoped.model.provider}/${scoped.model.id}`,\n );\n }\n }\n\n // Helper to update session's scoped models (session-only, no persist)\n const updateSessionModels = async (enabledIds: string[] | null) => {\n currentEnabledIds = enabledIds === null ? null : [...enabledIds];\n if (\n enabledIds &&\n enabledIds.length > 0 &&\n enabledIds.length < allModels.length\n ) {\n const newScopedModels = await resolveModelScope(\n enabledIds,\n this.session.modelRegistry,\n );\n this.session.setScopedModels(\n newScopedModels.map((sm) => ({\n model: sm.model,\n thinkingLevel: sm.thinkingLevel,\n })),\n );\n } else {\n // All enabled or none enabled = no filter\n this.session.setScopedModels([]);\n }\n await this.updateAvailableProviderCount();\n this.setupAutocompleteProvider();\n this.ui.requestRender();\n };\n\n this.showSelector((done) => {\n const selector = new ScopedModelsSelectorComponent(\n {\n allModels,\n enabledModelIds: currentEnabledIds,\n },\n {\n onChange: async (enabledIds) => {\n await updateSessionModels(enabledIds);\n },\n onPersist: (enabledIds) => {\n // Persist to settings\n const newPatterns =\n enabledIds === null || enabledIds.length === allModels.length\n ? undefined // All enabled = clear filter\n : enabledIds;\n this.settingsManager.setEnabledModels(\n newPatterns ? [...newPatterns] : undefined,\n );\n this.showStatus(\"Model selection saved to settings\");\n },\n onCancel: () => {\n done();\n this.ui.requestRender();\n },\n },\n );\n return { component: selector, focus: selector };\n });\n };\n\nInteractiveModeBase.prototype.showUserMessageSelector = function(this: InteractiveModeBase): void {\n const userMessages = this.session.getUserMessagesForForking();\n\n if (userMessages.length === 0) {\n this.showStatus(\"No messages to fork from\");\n return;\n }\n\n const initialSelectedId = userMessages[userMessages.length - 1]?.entryId;\n\n this.showSelector((done) => {\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n try {\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n done();\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n done();\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n done();\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n done();\n this.ui.requestRender();\n },\n initialSelectedId,\n );\n return { component: selector, focus: selector.getMessageList() };\n });\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-onboarding.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-onboarding.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,QAWhB,CAAC","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\n\nexport const ONBOARDING_COPY = [\n \"Atomic is a verifiable coding agent runtime for building and running\",\n \"agent workflows you can feel confident in.\",\n \"Use it to implement tickets, research a codebase, design a UI,\",\n \"or build and run your own loops.\",\n \"Run dynamic workflows and save the ones you like for future use.\",\n \"Start building a verifiable software factory.\",\n \"\",\n \"Type a message or slash command below to continue normally.\",\n \"If you have not connected a provider yet, run `/login` first.\",\n \"Run `/atomic` for guides or `/workflow list` to see built-in workflows.\",\n].join(\"\\n\");\n\nInteractiveModeBase.prototype.initializeFirstRunOnboardingMarkers = function(this: InteractiveModeBase): void {\n if (\n this.session.state.messages.length !== 0\n || this.settingsManager.getFirstRunOnboardingStartedVersion()\n || this.settingsManager.getOnboardedVersion()\n ) {\n return;\n }\n\n if (this.hadLastChangelogVersionAtStartup) {\n this.settingsManager.setOnboardedVersion(this.version);\n } else {\n this.settingsManager.setFirstRunOnboardingStartedVersion(this.version);\n }\n};\n\nInteractiveModeBase.prototype.isFirstRunOnboardingEligible = function(this: InteractiveModeBase): boolean {\n const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);\n return this.session.state.messages.length === 0\n && !hasInitialInput\n && !this.settingsManager.getOnboardedVersion()\n && Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());\n};\n\nInteractiveModeBase.prototype.clearFirstRunOnboardingUi = function(this: InteractiveModeBase): void {\n this.firstRunNoticeVisible = false;\n if (this.firstRunOnboardingNoticeComponents.length > 0) {\n this.chatContainer.children = this.chatContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.firstRunOnboardingNoticeComponents = [];\n }\n this.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-onboarding.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-onboarding.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,QAWhB,CAAC","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\n\nexport const ONBOARDING_COPY = [\n \"Atomic is a verifiable coding agent runtime for building and running\",\n \"agent workflows you can feel confident in.\",\n \"Use it to implement tickets, research a codebase, design a UI,\",\n \"or build and run your own loops.\",\n \"Run dynamic workflows and save the ones you like for future use.\",\n \"Start building a verifiable software factory.\",\n \"\",\n \"Type a message or slash command below to continue normally.\",\n \"If you have not connected a provider yet, run `/login` first.\",\n \"Run `/atomic` for guides or `/workflow list` to see built-in workflows.\",\n].join(\"\\n\");\n\nInteractiveModeBase.prototype.initializeFirstRunOnboardingMarkers = function(this: InteractiveModeBase): void {\n if (\n this.session.state.messages.length !== 0\n || this.settingsManager.getFirstRunOnboardingStartedVersion()\n || this.settingsManager.getOnboardedVersion()\n ) {\n return;\n }\n\n if (this.hadLastChangelogVersionAtStartup) {\n this.settingsManager.setOnboardedVersion(this.version);\n } else {\n this.settingsManager.setFirstRunOnboardingStartedVersion(this.version);\n }\n};\n\nInteractiveModeBase.prototype.isFirstRunOnboardingEligible = function(this: InteractiveModeBase): boolean {\n const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);\n return this.session.state.messages.length === 0\n && !hasInitialInput\n && !this.settingsManager.getOnboardedVersion()\n && Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());\n};\n\nInteractiveModeBase.prototype.clearFirstRunOnboardingUi = function(this: InteractiveModeBase): void {\n this.firstRunNoticeVisible = false;\n if (this.firstRunOnboardingNoticeComponents.length > 0) {\n this.chatContainer.children = this.chatContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.startupNoticesContainer.children = this.startupNoticesContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.firstRunOnboardingNoticeComponents = [];\n }\n this.ui.requestRender();\n};\n"]}
@@ -35,6 +35,7 @@ InteractiveModeBase.prototype.clearFirstRunOnboardingUi = function () {
35
35
  this.firstRunNoticeVisible = false;
36
36
  if (this.firstRunOnboardingNoticeComponents.length > 0) {
37
37
  this.chatContainer.children = this.chatContainer.children.filter((child) => !this.firstRunOnboardingNoticeComponents.includes(child));
38
+ this.startupNoticesContainer.children = this.startupNoticesContainer.children.filter((child) => !this.firstRunOnboardingNoticeComponents.includes(child));
38
39
  this.firstRunOnboardingNoticeComponents = [];
39
40
  }
40
41
  this.ui.requestRender();
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-onboarding.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,sEAAsE;IACtE,4CAA4C;IAC5C,gEAAgE;IAChE,kCAAkC;IAClC,kEAAkE;IAClE,+CAA+C;IAC/C,EAAE;IACF,6DAA6D;IAC7D,+DAA+D;IAC/D,yEAAyE;CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,mBAAmB,CAAC,SAAS,CAAC,mCAAmC,GAAG;IAClE,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;WACrC,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE;WAC1D,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAC7C,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,CAAC,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,4BAA4B,GAAG;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9G,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;WAC1C,CAAC,eAAe;WAChB,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;WAC3C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,yBAAyB,GAAG;IACxD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACnC,IAAI,IAAI,CAAC,kCAAkC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAC9D,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpE,CAAC;QACF,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AAC1B,CAAC,CAAC","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\n\nexport const ONBOARDING_COPY = [\n \"Atomic is a verifiable coding agent runtime for building and running\",\n \"agent workflows you can feel confident in.\",\n \"Use it to implement tickets, research a codebase, design a UI,\",\n \"or build and run your own loops.\",\n \"Run dynamic workflows and save the ones you like for future use.\",\n \"Start building a verifiable software factory.\",\n \"\",\n \"Type a message or slash command below to continue normally.\",\n \"If you have not connected a provider yet, run `/login` first.\",\n \"Run `/atomic` for guides or `/workflow list` to see built-in workflows.\",\n].join(\"\\n\");\n\nInteractiveModeBase.prototype.initializeFirstRunOnboardingMarkers = function(this: InteractiveModeBase): void {\n if (\n this.session.state.messages.length !== 0\n || this.settingsManager.getFirstRunOnboardingStartedVersion()\n || this.settingsManager.getOnboardedVersion()\n ) {\n return;\n }\n\n if (this.hadLastChangelogVersionAtStartup) {\n this.settingsManager.setOnboardedVersion(this.version);\n } else {\n this.settingsManager.setFirstRunOnboardingStartedVersion(this.version);\n }\n};\n\nInteractiveModeBase.prototype.isFirstRunOnboardingEligible = function(this: InteractiveModeBase): boolean {\n const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);\n return this.session.state.messages.length === 0\n && !hasInitialInput\n && !this.settingsManager.getOnboardedVersion()\n && Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());\n};\n\nInteractiveModeBase.prototype.clearFirstRunOnboardingUi = function(this: InteractiveModeBase): void {\n this.firstRunNoticeVisible = false;\n if (this.firstRunOnboardingNoticeComponents.length > 0) {\n this.chatContainer.children = this.chatContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.firstRunOnboardingNoticeComponents = [];\n }\n this.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-onboarding.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,sEAAsE;IACtE,4CAA4C;IAC5C,gEAAgE;IAChE,kCAAkC;IAClC,kEAAkE;IAClE,+CAA+C;IAC/C,EAAE;IACF,6DAA6D;IAC7D,+DAA+D;IAC/D,yEAAyE;CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,mBAAmB,CAAC,SAAS,CAAC,mCAAmC,GAAG;IAClE,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;WACrC,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE;WAC1D,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAC7C,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,CAAC,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,4BAA4B,GAAG;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9G,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;WAC1C,CAAC,eAAe;WAChB,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;WAC3C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,mCAAmC,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,yBAAyB,GAAG;IACxD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACnC,IAAI,IAAI,CAAC,kCAAkC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAC9D,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpE,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAClF,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpE,CAAC;QACF,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AAC1B,CAAC,CAAC","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\n\nexport const ONBOARDING_COPY = [\n \"Atomic is a verifiable coding agent runtime for building and running\",\n \"agent workflows you can feel confident in.\",\n \"Use it to implement tickets, research a codebase, design a UI,\",\n \"or build and run your own loops.\",\n \"Run dynamic workflows and save the ones you like for future use.\",\n \"Start building a verifiable software factory.\",\n \"\",\n \"Type a message or slash command below to continue normally.\",\n \"If you have not connected a provider yet, run `/login` first.\",\n \"Run `/atomic` for guides or `/workflow list` to see built-in workflows.\",\n].join(\"\\n\");\n\nInteractiveModeBase.prototype.initializeFirstRunOnboardingMarkers = function(this: InteractiveModeBase): void {\n if (\n this.session.state.messages.length !== 0\n || this.settingsManager.getFirstRunOnboardingStartedVersion()\n || this.settingsManager.getOnboardedVersion()\n ) {\n return;\n }\n\n if (this.hadLastChangelogVersionAtStartup) {\n this.settingsManager.setOnboardedVersion(this.version);\n } else {\n this.settingsManager.setFirstRunOnboardingStartedVersion(this.version);\n }\n};\n\nInteractiveModeBase.prototype.isFirstRunOnboardingEligible = function(this: InteractiveModeBase): boolean {\n const hasInitialInput = Boolean(this.options.initialMessage) || Boolean(this.options.initialMessages?.length);\n return this.session.state.messages.length === 0\n && !hasInitialInput\n && !this.settingsManager.getOnboardedVersion()\n && Boolean(this.settingsManager.getFirstRunOnboardingStartedVersion());\n};\n\nInteractiveModeBase.prototype.clearFirstRunOnboardingUi = function(this: InteractiveModeBase): void {\n this.firstRunNoticeVisible = false;\n if (this.firstRunOnboardingNoticeComponents.length > 0) {\n this.chatContainer.children = this.chatContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.startupNoticesContainer.children = this.startupNoticesContainer.children.filter(\n (child) => !this.firstRunOnboardingNoticeComponents.includes(child),\n );\n this.firstRunOnboardingNoticeComponents = [];\n }\n this.ui.requestRender();\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-process-lifecycle.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { chalk, killTrackedDetachedChildren } from \"./interactive-mode-deps.ts\";\nimport { formatResumeCommand, isDeadTerminalError } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.handleCtrlC = function(this: InteractiveModeBase): void {\n const now = Date.now();\n if (now - this.lastSigintTime < 500) {\n void this.shutdown();\n } else {\n this.clearEditor();\n this.lastSigintTime = now;\n }\n };\n\nInteractiveModeBase.prototype.handleCtrlD = function(this: InteractiveModeBase): void {\n // Only called when editor is empty (enforced by CustomEditor)\n void this.shutdown();\n };\n\nInteractiveModeBase.prototype.shutdown = async function(this: InteractiveModeBase, options?: { fromSignal?: boolean }): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n // Keep signal handlers registered until terminal cleanup has completed.\n // `signal-exit` checks the listener list during the same SIGTERM/SIGHUP\n // dispatch and re-sends the signal if only its own listeners remain.\n\n if (options?.fromSignal) {\n await this.runtimeHost.dispose();\n this.themeController.disableAutoSync();\n // Drain any in-flight Kitty key release events before stopping.\n // This prevents escape sequences from leaking to the parent shell over slow SSH.\n await this.ui.terminal.drainInput(1000);\n this.stop();\n process.exit(0);\n }\n\n // Drain any in-flight Kitty key release events before stopping.\n // This prevents escape sequences from leaking to the parent shell over slow SSH.\n this.themeController.disableAutoSync();\n await this.ui.terminal.drainInput(1000);\n\n this.stop();\n await this.runtimeHost.dispose();\n const resumeCommand = formatResumeCommand(this.sessionManager);\n if (resumeCommand) {\n process.stdout.write(`${chalk.dim(\"To resume this session:\")} ${resumeCommand}\\n`);\n }\n process.exit(0);\n };\n\nInteractiveModeBase.prototype.emergencyTerminalExit = function(this: InteractiveModeBase): never {\n this.isShuttingDown = true;\n this.unregisterSignalHandlers();\n killTrackedDetachedChildren();\n // The terminal is gone. Do not run normal shutdown because TUI and\n // extension cleanup can write restore sequences and re-trigger EIO.\n process.exit(129);\n };\n\nInteractiveModeBase.prototype.uncaughtCrash = function(this: InteractiveModeBase, error: Error): never {\n if (this.isShuttingDown) {\n process.exit(1);\n }\n this.isShuttingDown = true;\n try {\n this.unregisterSignalHandlers();\n } catch {}\n try {\n killTrackedDetachedChildren();\n } catch {}\n try {\n this.ui.stop();\n } catch {}\n console.error(\"pi exiting due to uncaughtException:\");\n console.error(error);\n process.exit(1);\n };\n\nInteractiveModeBase.prototype.checkShutdownRequested = async function(this: InteractiveModeBase): Promise<void> {\n if (!this.shutdownRequested) return;\n await this.shutdown();\n };\n\nInteractiveModeBase.prototype.registerSignalHandlers = function(this: InteractiveModeBase): void {\n this.unregisterSignalHandlers();\n\n const signals: NodeJS.Signals[] = [\"SIGTERM\"];\n if (process.platform !== \"win32\") {\n signals.push(\"SIGHUP\");\n }\n\n for (const signal of signals) {\n const handler = () => {\n killTrackedDetachedChildren();\n void this.shutdown({ fromSignal: true });\n };\n process.prependListener(signal, handler);\n this.signalCleanupHandlers.push(() => process.off(signal, handler));\n }\n\n const terminalErrorHandler = (error: Error) => {\n if (isDeadTerminalError(error)) {\n this.emergencyTerminalExit();\n }\n throw error;\n };\n process.stdout.on(\"error\", terminalErrorHandler);\n process.stderr.on(\"error\", terminalErrorHandler);\n this.signalCleanupHandlers.push(() =>\n process.stdout.off(\"error\", terminalErrorHandler),\n );\n this.signalCleanupHandlers.push(() =>\n process.stderr.off(\"error\", terminalErrorHandler),\n );\n\n // Restore the terminal before the process dies on any uncaught throw.\n // Without this, an unhandled exception from extension code (or anywhere\n // in pi) leaves the terminal in raw mode with no cursor.\n const uncaughtExceptionHandler = (error: Error) =>\n this.uncaughtCrash(error);\n process.prependListener(\"uncaughtException\", uncaughtExceptionHandler);\n this.signalCleanupHandlers.push(() =>\n process.off(\"uncaughtException\", uncaughtExceptionHandler),\n );\n };\n\nInteractiveModeBase.prototype.unregisterSignalHandlers = function(this: InteractiveModeBase): void {\n for (const cleanup of this.signalCleanupHandlers) {\n cleanup();\n }\n this.signalCleanupHandlers = [];\n };\n\nInteractiveModeBase.prototype.handleCtrlZ = function(this: InteractiveModeBase): void {\n if (process.platform === \"win32\") {\n this.showStatus(\"Suspend to background is not supported on Windows\");\n return;\n }\n\n // Keep the event loop alive while suspended. Without this, stopping the TUI\n // can leave Node with no ref'ed handles, causing the process to exit on fg\n // before the SIGCONT handler gets a chance to restore the terminal.\n const suspendKeepAlive = setInterval(() => {}, 2 ** 30);\n\n // Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n // kill the backgrounded process. The handler is removed on resume.\n const ignoreSigint = () => {};\n process.on(\"SIGINT\", ignoreSigint);\n\n // Set up handler to restore TUI when resumed\n process.once(\"SIGCONT\", () => {\n clearInterval(suspendKeepAlive);\n process.removeListener(\"SIGINT\", ignoreSigint);\n this.ui.start();\n this.ui.requestRender(true);\n });\n\n try {\n // Stop the TUI (restore terminal to normal mode)\n this.ui.stop();\n\n // Send SIGTSTP to process group (pid=0 means all processes in group)\n process.kill(0, \"SIGTSTP\");\n } catch (error) {\n clearInterval(suspendKeepAlive);\n process.removeListener(\"SIGINT\", ignoreSigint);\n throw error;\n }\n };\n\nInteractiveModeBase.prototype.handleFollowUp = async function(this: InteractiveModeBase): Promise<void> {\n const text = (\n this.editor.getExpandedText?.() ?? this.editor.getText()\n ).trim();\n if (!text) return;\n\n // Queue input during compaction (extension commands execute immediately)\n if (this.session.isCompacting) {\n if (this.isExtensionCommand(text)) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text);\n } else {\n this.queueCompactionMessage(text, \"followUp\");\n }\n return;\n }\n\n // Alt+Enter queues a follow-up message (waits until agent finishes)\n // This handles extension commands (execute immediately), prompt template expansion, and queueing\n if (this.session.isStreaming) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text, { streamingBehavior: \"followUp\" });\n this.updatePendingMessagesDisplay();\n this.ui.requestRender();\n }\n // If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n else if (this.editor.onSubmit) {\n this.editor.setText(\"\");\n this.editor.onSubmit(text);\n }\n };\n\nInteractiveModeBase.prototype.handleDequeue = function(this: InteractiveModeBase): void {\n const restored = this.restoreQueuedMessagesToEditor();\n if (restored === 0) {\n this.showStatus(\"No queued messages to restore\");\n } else {\n this.showStatus(\n `Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`,\n );\n }\n };\n"]}
1
+ {"version":3,"file":"interactive-process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-process-lifecycle.ts"],"names":[],"mappings":"","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { chalk, killTrackedDetachedChildren } from \"./interactive-mode-deps.ts\";\nimport { formatResumeCommand, isDeadTerminalError } from \"./interactive-mode-helpers.ts\";\n\nconst SHUTDOWN_INPUT_DRAIN_MAX_MS = 250;\nconst SHUTDOWN_INPUT_DRAIN_IDLE_MS = 50;\n\nInteractiveModeBase.prototype.handleCtrlC = function(this: InteractiveModeBase): void {\n // When the agent is doing work, Ctrl+C interrupts it (matching Escape and\n // common CLI muscle memory) instead of clearing/exiting the editor. Only\n // fall back to the clear / double-press-exit behavior when idle.\n if (this.interruptActiveOperation()) {\n // Reset the double-press window so a follow-up Ctrl+C after the abort\n // does not immediately exit.\n this.lastSigintTime = 0;\n return;\n }\n const now = Date.now();\n if (now - this.lastSigintTime < 500) {\n void this.shutdown();\n } else {\n this.clearEditor();\n this.lastSigintTime = now;\n }\n };\n\nInteractiveModeBase.prototype.interruptActiveOperation = function(this: InteractiveModeBase): boolean {\n // Mirror the Escape interrupt paths so Ctrl+C aborts whichever operation is\n // currently running. Returns true when something was aborted.\n if (this.session.isStreaming) {\n this.restoreQueuedMessagesToEditor({ abort: true });\n return true;\n }\n if (this.session.isBashRunning) {\n this.session.abortBash();\n return true;\n }\n if (this.session.isCompacting) {\n this.session.abortCompaction();\n return true;\n }\n if (this.session.isRetrying) {\n this.session.abortRetry();\n return true;\n }\n return false;\n };\n\nInteractiveModeBase.prototype.handleCtrlD = function(this: InteractiveModeBase): void {\n // Only called when editor is empty (enforced by CustomEditor)\n void this.shutdown();\n };\n\nInteractiveModeBase.prototype.shutdown = async function(this: InteractiveModeBase, options?: { fromSignal?: boolean }): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n // Keep signal handlers registered until terminal cleanup has completed.\n // `signal-exit` checks the listener list during the same SIGTERM/SIGHUP\n // dispatch and re-sends the signal if only its own listeners remain.\n\n if (options?.fromSignal) {\n await this.runtimeHost.dispose();\n this.themeController.disableAutoSync();\n // Drain any in-flight Kitty key release events briefly before stopping.\n // Keep this bounded so Ctrl+C exits do not feel stalled on Windows.\n await this.ui.terminal.drainInput(SHUTDOWN_INPUT_DRAIN_MAX_MS, SHUTDOWN_INPUT_DRAIN_IDLE_MS);\n this.stop();\n process.exit(0);\n }\n\n // Drain any in-flight Kitty key release events briefly before stopping.\n // Keep this bounded so Ctrl+C exits do not feel stalled on Windows.\n this.themeController.disableAutoSync();\n await this.ui.terminal.drainInput(SHUTDOWN_INPUT_DRAIN_MAX_MS, SHUTDOWN_INPUT_DRAIN_IDLE_MS);\n\n this.stop();\n await this.runtimeHost.dispose();\n const resumeCommand = formatResumeCommand(this.sessionManager);\n if (resumeCommand) {\n process.stdout.write(`${chalk.dim(\"To resume this session:\")} ${resumeCommand}\\n`);\n }\n process.exit(0);\n };\n\nInteractiveModeBase.prototype.emergencyTerminalExit = function(this: InteractiveModeBase): never {\n this.isShuttingDown = true;\n this.unregisterSignalHandlers();\n killTrackedDetachedChildren();\n // The terminal is gone. Do not run normal shutdown because TUI and\n // extension cleanup can write restore sequences and re-trigger EIO.\n process.exit(129);\n };\n\nInteractiveModeBase.prototype.uncaughtCrash = function(this: InteractiveModeBase, error: Error): never {\n if (this.isShuttingDown) {\n process.exit(1);\n }\n this.isShuttingDown = true;\n try {\n this.unregisterSignalHandlers();\n } catch {}\n try {\n killTrackedDetachedChildren();\n } catch {}\n try {\n this.ui.stop();\n } catch {}\n console.error(\"pi exiting due to uncaughtException:\");\n console.error(error);\n process.exit(1);\n };\n\nInteractiveModeBase.prototype.checkShutdownRequested = async function(this: InteractiveModeBase): Promise<void> {\n if (!this.shutdownRequested) return;\n await this.shutdown();\n };\n\nInteractiveModeBase.prototype.registerSignalHandlers = function(this: InteractiveModeBase): void {\n this.unregisterSignalHandlers();\n\n const signals: NodeJS.Signals[] = [\"SIGTERM\"];\n if (process.platform !== \"win32\") {\n signals.push(\"SIGHUP\");\n }\n\n for (const signal of signals) {\n const handler = () => {\n killTrackedDetachedChildren();\n void this.shutdown({ fromSignal: true });\n };\n process.prependListener(signal, handler);\n this.signalCleanupHandlers.push(() => process.off(signal, handler));\n }\n\n const sigintHandler = () => {\n this.handleCtrlC();\n };\n process.prependListener(\"SIGINT\", sigintHandler);\n this.signalCleanupHandlers.push(() => process.off(\"SIGINT\", sigintHandler));\n\n const terminalErrorHandler = (error: Error) => {\n if (isDeadTerminalError(error)) {\n this.emergencyTerminalExit();\n }\n throw error;\n };\n process.stdout.on(\"error\", terminalErrorHandler);\n process.stderr.on(\"error\", terminalErrorHandler);\n this.signalCleanupHandlers.push(() =>\n process.stdout.off(\"error\", terminalErrorHandler),\n );\n this.signalCleanupHandlers.push(() =>\n process.stderr.off(\"error\", terminalErrorHandler),\n );\n\n // Restore the terminal before the process dies on any uncaught throw.\n // Without this, an unhandled exception from extension code (or anywhere\n // in pi) leaves the terminal in raw mode with no cursor.\n const uncaughtExceptionHandler = (error: Error) =>\n this.uncaughtCrash(error);\n process.prependListener(\"uncaughtException\", uncaughtExceptionHandler);\n this.signalCleanupHandlers.push(() =>\n process.off(\"uncaughtException\", uncaughtExceptionHandler),\n );\n };\n\nInteractiveModeBase.prototype.unregisterSignalHandlers = function(this: InteractiveModeBase): void {\n for (const cleanup of this.signalCleanupHandlers) {\n cleanup();\n }\n this.signalCleanupHandlers = [];\n };\n\nInteractiveModeBase.prototype.handleCtrlZ = function(this: InteractiveModeBase): void {\n if (process.platform === \"win32\") {\n this.showStatus(\"Suspend to background is not supported on Windows\");\n return;\n }\n\n // Keep the event loop alive while suspended. Without this, stopping the TUI\n // can leave Node with no ref'ed handles, causing the process to exit on fg\n // before the SIGCONT handler gets a chance to restore the terminal.\n const suspendKeepAlive = setInterval(() => {}, 2 ** 30);\n\n // Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n // kill the backgrounded process. The handler is removed on resume.\n const ignoreSigint = () => {};\n process.on(\"SIGINT\", ignoreSigint);\n\n // Set up handler to restore TUI when resumed\n process.once(\"SIGCONT\", () => {\n clearInterval(suspendKeepAlive);\n process.removeListener(\"SIGINT\", ignoreSigint);\n this.ui.start();\n this.ui.requestRender(true);\n });\n\n try {\n // Stop the TUI (restore terminal to normal mode)\n this.ui.stop();\n\n // Send SIGTSTP to process group (pid=0 means all processes in group)\n process.kill(0, \"SIGTSTP\");\n } catch (error) {\n clearInterval(suspendKeepAlive);\n process.removeListener(\"SIGINT\", ignoreSigint);\n throw error;\n }\n };\n\nInteractiveModeBase.prototype.handleFollowUp = async function(this: InteractiveModeBase): Promise<void> {\n const text = (\n this.editor.getExpandedText?.() ?? this.editor.getText()\n ).trim();\n if (!text) return;\n\n // Queue input during compaction (extension commands execute immediately)\n if (this.session.isCompacting) {\n if (this.isExtensionCommand(text)) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text);\n } else {\n this.queueCompactionMessage(text, \"followUp\");\n }\n return;\n }\n\n // Alt+Enter queues a follow-up message (waits until agent finishes)\n // This handles extension commands (execute immediately), prompt template expansion, and queueing\n if (this.session.isStreaming) {\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n await this.session.prompt(text, { streamingBehavior: \"followUp\" });\n this.updatePendingMessagesDisplay();\n this.ui.requestRender();\n }\n // If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n else if (this.editor.onSubmit) {\n this.editor.setText(\"\");\n this.editor.onSubmit(text);\n }\n };\n\nInteractiveModeBase.prototype.handleDequeue = function(this: InteractiveModeBase): void {\n const restored = this.restoreQueuedMessagesToEditor();\n if (restored === 0) {\n this.showStatus(\"No queued messages to restore\");\n } else {\n this.showStatus(\n `Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`,\n );\n }\n };\n"]}