@bastani/atomic 0.9.10 → 0.9.11-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/builtin/cursor/CHANGELOG.md +6 -0
  3. package/dist/builtin/cursor/package.json +3 -3
  4. package/dist/builtin/intercom/CHANGELOG.md +6 -0
  5. package/dist/builtin/intercom/package.json +3 -3
  6. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  7. package/dist/builtin/mcp/package.json +3 -3
  8. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  9. package/dist/builtin/subagents/package.json +4 -4
  10. package/dist/builtin/web-access/CHANGELOG.md +6 -0
  11. package/dist/builtin/web-access/package.json +2 -2
  12. package/dist/builtin/workflows/CHANGELOG.md +23 -0
  13. package/dist/builtin/workflows/README.md +8 -3
  14. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +1 -1
  15. package/dist/builtin/workflows/package.json +2 -2
  16. package/dist/builtin/workflows/src/durable/backend.ts +2 -2
  17. package/dist/builtin/workflows/src/durable/child-primitive.ts +3 -0
  18. package/dist/builtin/workflows/src/durable/completed-catalog.ts +182 -33
  19. package/dist/builtin/workflows/src/durable/completed-inspection.ts +9 -4
  20. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres-root.ts +173 -0
  21. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +36 -12
  22. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +31 -8
  23. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +9 -3
  24. package/dist/builtin/workflows/src/durable/factory.ts +35 -6
  25. package/dist/builtin/workflows/src/durable/local-command.ts +11 -2
  26. package/dist/builtin/workflows/src/durable/resume-runtime.ts +6 -2
  27. package/dist/builtin/workflows/src/durable/stage-primitive.ts +48 -10
  28. package/dist/builtin/workflows/src/durable/types.ts +11 -0
  29. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +9 -9
  30. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +89 -0
  31. package/dist/builtin/workflows/src/engine/run.ts +18 -16
  32. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +14 -2
  33. package/dist/builtin/workflows/src/extension/public-types.ts +3 -4
  34. package/dist/builtin/workflows/src/extension/render-call.ts +4 -0
  35. package/dist/builtin/workflows/src/extension/render-result.ts +31 -1
  36. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  37. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +5 -2
  38. package/dist/builtin/workflows/src/extension/workflow-schema.ts +3 -2
  39. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +1 -0
  40. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +88 -2
  41. package/dist/builtin/workflows/src/extension/workflow-tool.ts +13 -0
  42. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +3 -0
  43. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +6 -3
  44. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +2 -2
  45. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +4 -1
  46. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +2 -3
  47. package/dist/cli/args.d.ts.map +1 -1
  48. package/dist/cli/args.js +2 -0
  49. package/dist/cli/args.js.map +1 -1
  50. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  51. package/dist/core/agent-session-compaction.js +7 -1
  52. package/dist/core/agent-session-compaction.js.map +1 -1
  53. package/dist/core/agent-session-events.d.ts.map +1 -1
  54. package/dist/core/agent-session-events.js +2 -1
  55. package/dist/core/agent-session-events.js.map +1 -1
  56. package/dist/core/agent-session-retry.d.ts.map +1 -1
  57. package/dist/core/agent-session-retry.js +7 -0
  58. package/dist/core/agent-session-retry.js.map +1 -1
  59. package/dist/core/agent-session-runtime.d.ts +13 -0
  60. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  61. package/dist/core/agent-session-runtime.js +12 -0
  62. package/dist/core/agent-session-runtime.js.map +1 -1
  63. package/dist/core/agent-session-services.d.ts.map +1 -1
  64. package/dist/core/agent-session-services.js +3 -0
  65. package/dist/core/agent-session-services.js.map +1 -1
  66. package/dist/core/agent-session-tree.d.ts.map +1 -1
  67. package/dist/core/agent-session-tree.js +4 -1
  68. package/dist/core/agent-session-tree.js.map +1 -1
  69. package/dist/core/agent-session-types.d.ts +15 -0
  70. package/dist/core/agent-session-types.d.ts.map +1 -1
  71. package/dist/core/agent-session-types.js.map +1 -1
  72. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  73. package/dist/core/atomic-guide-command.js +2 -0
  74. package/dist/core/atomic-guide-command.js.map +1 -1
  75. package/dist/core/auth-storage-backends.d.ts +4 -0
  76. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  77. package/dist/core/auth-storage-backends.js +48 -3
  78. package/dist/core/auth-storage-backends.js.map +1 -1
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +27 -11
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/codex-errors.d.ts +3 -0
  83. package/dist/core/codex-errors.d.ts.map +1 -0
  84. package/dist/core/codex-errors.js +12 -0
  85. package/dist/core/codex-errors.js.map +1 -0
  86. package/dist/core/compaction/branch-summarization.d.ts +5 -1
  87. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  88. package/dist/core/compaction/branch-summarization.js +7 -8
  89. package/dist/core/compaction/branch-summarization.js.map +1 -1
  90. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  91. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  92. package/dist/core/compaction/compaction-runner.js +6 -1
  93. package/dist/core/compaction/compaction-runner.js.map +1 -1
  94. package/dist/core/compaction/range-planner.d.ts +3 -0
  95. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  96. package/dist/core/compaction/range-planner.js +2 -1
  97. package/dist/core/compaction/range-planner.js.map +1 -1
  98. package/dist/core/model-registry.js +2 -2
  99. package/dist/core/model-registry.js.map +1 -1
  100. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  101. package/dist/core/model-resolver-defaults.js +2 -0
  102. package/dist/core/model-resolver-defaults.js.map +1 -1
  103. package/dist/core/prompt-templates.d.ts +1 -0
  104. package/dist/core/prompt-templates.d.ts.map +1 -1
  105. package/dist/core/prompt-templates.js +6 -4
  106. package/dist/core/prompt-templates.js.map +1 -1
  107. package/dist/core/remote-catalog-provider.d.ts +1 -1
  108. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  109. package/dist/core/remote-catalog-provider.js +25 -6
  110. package/dist/core/remote-catalog-provider.js.map +1 -1
  111. package/dist/core/sdk-exports.d.ts +1 -1
  112. package/dist/core/sdk-exports.d.ts.map +1 -1
  113. package/dist/core/sdk-exports.js.map +1 -1
  114. package/dist/core/sdk.d.ts.map +1 -1
  115. package/dist/core/sdk.js +4 -1
  116. package/dist/core/sdk.js.map +1 -1
  117. package/dist/core/session-manager-core.d.ts +1 -0
  118. package/dist/core/session-manager-core.d.ts.map +1 -1
  119. package/dist/core/session-manager-core.js +7 -4
  120. package/dist/core/session-manager-core.js.map +1 -1
  121. package/dist/core/session-manager-validation.d.ts.map +1 -1
  122. package/dist/core/session-manager-validation.js +3 -16
  123. package/dist/core/session-manager-validation.js.map +1 -1
  124. package/dist/core/slash-commands.js +1 -1
  125. package/dist/core/slash-commands.js.map +1 -1
  126. package/dist/core/summarization-retry.d.ts +11 -0
  127. package/dist/core/summarization-retry.d.ts.map +1 -0
  128. package/dist/core/summarization-retry.js +21 -0
  129. package/dist/core/summarization-retry.js.map +1 -0
  130. package/dist/core/tools/read.js +1 -1
  131. package/dist/core/tools/read.js.map +1 -1
  132. package/dist/index.d.ts +1 -1
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/main.d.ts.map +1 -1
  136. package/dist/main.js +2 -0
  137. package/dist/main.js.map +1 -1
  138. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  139. package/dist/modes/interactive/components/chat-session-host-events.js +16 -0
  140. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  141. package/dist/modes/interactive/components/footer.js +2 -2
  142. package/dist/modes/interactive/components/footer.js.map +1 -1
  143. package/dist/modes/interactive/interactive-agent-events.js +6 -0
  144. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  145. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -1
  146. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  147. package/dist/modes/interactive/interactive-auth-routing.js +10 -5
  148. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  149. package/dist/modes/interactive/interactive-autocomplete.js +12 -2
  150. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  151. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +13 -0
  152. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -0
  153. package/dist/modes/interactive/interactive-model-catalog-startup.js +24 -0
  154. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -0
  155. package/dist/modes/interactive/interactive-model-routing.js +4 -3
  156. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  157. package/dist/modes/interactive/interactive-queueing.js +3 -2
  158. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  159. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  160. package/dist/modes/interactive/interactive-startup.js +4 -7
  161. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  162. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +8 -0
  163. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -0
  164. package/dist/modes/interactive/interactive-summarization-retry-events.js +40 -0
  165. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -0
  166. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  167. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  168. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  169. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  170. package/dist/modes/interactive-engine/isolated-runtime.d.ts +4 -5
  171. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  172. package/dist/modes/interactive-engine/isolated-runtime.js +14 -24
  173. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  174. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +15 -0
  175. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -0
  176. package/dist/modes/interactive-engine/remote-model-catalog.js +67 -0
  177. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -0
  178. package/dist/modes/rpc/rpc-client-api.d.ts +9 -1
  179. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  180. package/dist/modes/rpc/rpc-client-api.js +12 -0
  181. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  182. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  183. package/dist/modes/rpc/rpc-command-handler.js +35 -0
  184. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  185. package/dist/modes/rpc/rpc-types.d.ts +78 -7
  186. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  187. package/dist/modes/rpc/rpc-types.js.map +1 -1
  188. package/docs/docs.json +9 -1
  189. package/docs/extensions.md +3 -3
  190. package/docs/json.md +7 -1
  191. package/docs/models/artificial-analysis-index.md +82 -0
  192. package/docs/models/model-selection.md +63 -0
  193. package/docs/models/pareto-efficiency.md +64 -0
  194. package/docs/prompt-templates.md +1 -0
  195. package/docs/providers.md +9 -1
  196. package/docs/quickstart.md +1 -1
  197. package/docs/rpc.md +76 -0
  198. package/docs/sdk.md +3 -0
  199. package/docs/tui.md +2 -2
  200. package/docs/workflows.md +26 -13
  201. package/examples/extensions/README.md +1 -1
  202. package/examples/extensions/sandbox/package-lock.json +3 -3
  203. package/npm-shrinkwrap.json +37 -37
  204. package/package.json +7 -7
@@ -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\";\nimport { isOfflineModeEnabled } from \"../../core/package-manager-env.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 const allowNetwork = !isOfflineModeEnabled();\n if (allowNetwork) await this.refreshCopilotModelCatalog();\n await this.session.modelRegistry.refresh({ allowNetwork });\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 await 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\tawait this.session.modelRegistry.refresh({ allowNetwork: !isOfflineModeEnabled() });\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 = async function(this: InteractiveModeBase): Promise<void> {\n await this.ensureDeferredStartupComplete();\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 let selectionHandled = false;\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n if (selectionHandled) return;\n selectionHandled = true;\n done();\n try {\n await this.ensureDeferredStartupComplete();\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n if (selectionHandled) return;\n selectionHandled = true;\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":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAwB,WAAW,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACnc,OAAO,EAAE,mCAAmC,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AACpH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,mBAAmB,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK,WAAqC,UAAmB;IAC5G,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,uCAAuC,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,mBAAmB,GAAG,KAAK,WAAqC,UAAkB;IAC5G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC/C,OAAO,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK;IACpD,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,oBAAoB,EAAE,CAAC;IAC7C,IAAI,YAAY;QAAE,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,0BAA0B,GAAG,KAAK;IAC5D,IAAI,IAAI,CAAC,qBAAqB;QAAE,OAAO;IACvC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,sBAAsB,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,uBAAuB,GAAG,KAAK;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5C,iGAAiG;IACjG,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,GAAG,uBAAuB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,MAAM,wBAAwB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,wBAAwB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QACD,4BAA4B,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC;QAC/C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,qFAAqF;IACvF,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,4BAA4B,GAAG,KAAK;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACzD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAC7C,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxG,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,uCAAuC,GAAG,KAAK,WAAqC,KAAK,GAA2B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC,aAAa;IACtM,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;QACrE,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1D,IAAI,gBAAgB,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,mCAAmC,EAAE,eAAe,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAClE,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,mCAAmC,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;AACH,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAoC,kBAA2B;IAC7G,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CACzC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,IAAI,CAAC,OAAO,CAAC,YAAY,EACzB,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,EAAE,CAAC;gBACP,KAAK,IAAI,CAAC,uCAAuC,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;oBAClD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,SAAS,CACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC,EACD,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,EACD,kBAAkB,CACnB,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,yBAAyB,GAAG,UAAoC,KAAiB;IAC3G,MAAM,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAC1E,MAAM,oBAAoB,GACxB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,IAAI,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,8BAA8B,CACjD,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,KAAK,EAAE,aAAa,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE;oBAC3C,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,UAAU,CACb,UAAU,KAAK,CAAC,EAAE,WAAW,mBAAmB,CAAC,aAAa,CAAC,UAAU,CAC1E,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,SAAS,CACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC,EACD,GAAG,EAAE;YACH,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC,CACF,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK;IACpD,2BAA2B;IAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;IAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,0FAA0F;IAC1F,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACtD,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvD,yDAAyD;IACzD,IAAI,iBAAiB,GAAoB,IAAI,CAAC;IAE9C,IAAI,eAAe,EAAE,CAAC;QACpB,sCAAsC;QACtC,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CACzC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAC1D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;QACzD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAC1C,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3B,CAAC;YACF,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAClC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,mBAAmB,GAAG,KAAK,EAAE,UAA2B,EAAE,EAAE;QAChE,iBAAiB,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QACjE,IACE,UAAU;YACV,UAAU,CAAC,MAAM,GAAG,CAAC;YACrB,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EACxC,CAAC;YACG,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAC7C,UAAU,EACV,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3B,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,eAAe,CAC1B,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3B,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,aAAa,EAAE,EAAE,CAAC,aAAa;aAChC,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAC1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAChD;YACE,SAAS;YACT,eAAe,EAAE,iBAAiB;SACnC,EACD;YACE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBAC7B,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;YACD,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE;gBACxB,sBAAsB;gBACtB,MAAM,WAAW,GACf,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;oBAC3D,CAAC,CAAC,SAAS,CAAC,6BAA6B;oBACzC,CAAC,CAAC,UAAU,CAAC;gBACjB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACnC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAC1B,CAAC;SACF,CACF,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEJ,mBAAmB,CAAC,SAAS,CAAC,uBAAuB,GAAG,KAAK;IACzD,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;IAEzE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,4BAA4B,CAC/C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1D,KAAK,EAAE,OAAO,EAAE,EAAE;YAChB,IAAI,gBAAgB;gBAAE,OAAO;YAC7B,gBAAgB,GAAG,IAAI,CAAC;YACxB,IAAI,EAAE,CAAC;YACP,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC,EACD,GAAG,EAAE;YACH,IAAI,gBAAgB;gBAAE,OAAO;YAC7B,gBAAgB,GAAG,IAAI,CAAC;YACxB,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,EACD,iBAAiB,CAClB,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","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\";\nimport { isOfflineModeEnabled } from \"../../core/package-manager-env.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 const allowNetwork = !isOfflineModeEnabled();\n if (allowNetwork) await this.refreshCopilotModelCatalog();\n await this.session.modelRegistry.refresh({ allowNetwork });\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 await 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\tconst models = this.session.scopedModels.length > 0\n\t\t? this.session.scopedModels.map((scoped) => scoped.model)\n\t\t: this.session.modelRegistry.getAvailable();\n\tthis.footerDataProvider.setAvailableProviderCount(new Set(models.map((model) => model.provider)).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\tawait this.session.modelRegistry.refresh({ allowNetwork: !isOfflineModeEnabled() });\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 = async function(this: InteractiveModeBase): Promise<void> {\n await this.ensureDeferredStartupComplete();\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 let selectionHandled = false;\n const selector = new UserMessageSelectorComponent(\n userMessages.map((m) => ({ id: m.entryId, text: m.text })),\n async (entryId) => {\n if (selectionHandled) return;\n selectionHandled = true;\n done();\n try {\n await this.ensureDeferredStartupComplete();\n const result = await this.runtimeHost.fork(entryId);\n if (result.cancelled) {\n this.ui.requestRender();\n return;\n }\n\n this.renderCurrentSessionState();\n this.editor.setText(result.selectedText ?? \"\");\n this.showStatus(\"Forked to new session\");\n } catch (error: unknown) {\n this.showError(\n error instanceof Error ? error.message : String(error),\n );\n }\n },\n () => {\n if (selectionHandled) return;\n selectionHandled = true;\n done();\n this.ui.requestRender();\n },\n initialSelectedId,\n );\n return { component: selector, focus: selector.getMessageList() };\n });\n };\n"]}
@@ -128,9 +128,10 @@ InteractiveModeBase.prototype.flushCompactionQueue = async function (options) {
128
128
  for (const message of preCommands) {
129
129
  await this.session.prompt(message.text);
130
130
  }
131
- // Send first prompt (starts streaming)
131
+ // Start a prompt when idle, or preserve its delivery mode if a run is
132
+ // still winding down after compaction.
132
133
  const promptPromise = this.session
133
- .prompt(firstPrompt.text)
134
+ .prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })
134
135
  .catch((error) => {
135
136
  restoreQueue(error);
136
137
  });
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-queueing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-queueing.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { Spacer, TruncatedText, combineQueuedMessagesForEditor, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.getAllQueuedMessages = function(this: InteractiveModeBase): { steering: string[]; followUp: string[] } {\n return {\n steering: [\n ...this.session.getSteeringMessages(),\n ...this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"steer\")\n .map((msg) => msg.text),\n ],\n followUp: [\n ...this.session.getFollowUpMessages(),\n ...this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"followUp\")\n .map((msg) => msg.text),\n ],\n };\n };\n\nInteractiveModeBase.prototype.clearAllQueues = function(this: InteractiveModeBase): { steering: string[]; followUp: string[] } {\n const { steering, followUp } = this.session.clearQueue();\n const compactionSteering = this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"steer\")\n .map((msg) => msg.text);\n const compactionFollowUp = this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"followUp\")\n .map((msg) => msg.text);\n this.compactionQueuedMessages = [];\n return {\n steering: [...steering, ...compactionSteering],\n followUp: [...followUp, ...compactionFollowUp],\n };\n };\n\nInteractiveModeBase.prototype.updatePendingMessagesDisplay = function(this: InteractiveModeBase): void {\n this.pendingMessagesContainer.clear();\n const { steering: steeringMessages, followUp: followUpMessages } =\n this.getAllQueuedMessages();\n if (steeringMessages.length > 0 || followUpMessages.length > 0) {\n this.pendingMessagesContainer.addChild(new Spacer(1));\n for (const message of steeringMessages) {\n const text = theme.fg(\"dim\", `Steering: ${message}`);\n this.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n }\n for (const message of followUpMessages) {\n const text = theme.fg(\"dim\", `Follow-up: ${message}`);\n this.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n }\n const dequeueHint = this.getAppKeyDisplay(\"app.message.dequeue\");\n const hintText = theme.fg(\n \"dim\",\n `↳ ${dequeueHint} to edit all queued messages`,\n );\n this.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n }\n };\n\nInteractiveModeBase.prototype.restoreQueuedMessagesToEditor = function(this: InteractiveModeBase, options?: {\n abort?: boolean;\n currentText?: string;\n }): number {\n const { steering, followUp } = this.clearAllQueues();\n const allQueued = [...steering, ...followUp];\n if (allQueued.length === 0) {\n this.updatePendingMessagesDisplay();\n if (options?.abort) {\n void this.session.abort();\n }\n return 0;\n }\n const currentText = options?.currentText ?? this.editor.getText();\n const combinedText = combineQueuedMessagesForEditor(allQueued, currentText);\n this.editor.setText(combinedText);\n this.updatePendingMessagesDisplay();\n if (options?.abort) {\n void this.session.abort();\n }\n return allQueued.length;\n };\n\nInteractiveModeBase.prototype.queueCompactionMessage = function(this: InteractiveModeBase, text: string, mode: \"steer\" | \"followUp\"): void {\n this.compactionQueuedMessages.push({ text, mode });\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n this.updatePendingMessagesDisplay();\n this.showStatus(\"Queued message for after compaction\");\n };\n\nInteractiveModeBase.prototype.isExtensionCommand = function(this: InteractiveModeBase, text: string): boolean {\n if (!text.startsWith(\"/\")) return false;\n\n const extensionRunner = this.session.extensionRunner;\n\n const spaceIndex = text.indexOf(\" \");\n const commandName =\n spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n return !!extensionRunner.getCommand(commandName);\n };\n\nInteractiveModeBase.prototype.flushCompactionQueue = async function(this: InteractiveModeBase, options?: {\n willRetry?: boolean;\n }): Promise<void> {\n if (this.compactionQueuedMessages.length === 0) {\n return;\n }\n\n const queuedMessages = [...this.compactionQueuedMessages];\n this.compactionQueuedMessages = [];\n this.updatePendingMessagesDisplay();\n\n const restoreQueue = (error: unknown) => {\n this.session.clearQueue();\n this.compactionQueuedMessages = queuedMessages;\n this.updatePendingMessagesDisplay();\n this.showError(\n `Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n };\n\n try {\n if (options?.willRetry) {\n // When retry is pending, queue messages for the retry turn\n for (const message of queuedMessages) {\n if (this.isExtensionCommand(message.text)) {\n await this.session.prompt(message.text);\n } else if (message.mode === \"followUp\") {\n await this.session.followUp(message.text);\n } else {\n await this.session.steer(message.text);\n }\n }\n this.updatePendingMessagesDisplay();\n return;\n }\n\n // Find first non-extension-command message to use as prompt\n const firstPromptIndex = queuedMessages.findIndex(\n (message) => !this.isExtensionCommand(message.text),\n );\n if (firstPromptIndex === -1) {\n // All extension commands - execute them all\n for (const message of queuedMessages) {\n await this.session.prompt(message.text);\n }\n return;\n }\n\n // Execute any extension commands before the first prompt\n const preCommands = queuedMessages.slice(0, firstPromptIndex);\n const firstPrompt = queuedMessages[firstPromptIndex];\n const rest = queuedMessages.slice(firstPromptIndex + 1);\n\n for (const message of preCommands) {\n await this.session.prompt(message.text);\n }\n\n // Send first prompt (starts streaming)\n const promptPromise = this.session\n .prompt(firstPrompt.text)\n .catch((error) => {\n restoreQueue(error);\n });\n\n // Queue remaining messages\n for (const message of rest) {\n if (this.isExtensionCommand(message.text)) {\n await this.session.prompt(message.text);\n } else if (message.mode === \"followUp\") {\n await this.session.followUp(message.text);\n } else {\n await this.session.steer(message.text);\n }\n }\n this.updatePendingMessagesDisplay();\n void promptPromise;\n } catch (error) {\n restoreQueue(error);\n }\n };\n\nInteractiveModeBase.prototype.flushPendingBashComponents = function(this: InteractiveModeBase): void {\n for (const component of this.pendingBashComponents) {\n this.pendingMessagesContainer.removeChild(component);\n this.chatContainer.addChild(component);\n }\n this.pendingBashComponents = [];\n };\n"]}
1
+ {"version":3,"file":"interactive-queueing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-queueing.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport { Spacer, TruncatedText, combineQueuedMessagesForEditor, theme } from \"./interactive-mode-deps.ts\";\n\nInteractiveModeBase.prototype.getAllQueuedMessages = function(this: InteractiveModeBase): { steering: string[]; followUp: string[] } {\n return {\n steering: [\n ...this.session.getSteeringMessages(),\n ...this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"steer\")\n .map((msg) => msg.text),\n ],\n followUp: [\n ...this.session.getFollowUpMessages(),\n ...this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"followUp\")\n .map((msg) => msg.text),\n ],\n };\n };\n\nInteractiveModeBase.prototype.clearAllQueues = function(this: InteractiveModeBase): { steering: string[]; followUp: string[] } {\n const { steering, followUp } = this.session.clearQueue();\n const compactionSteering = this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"steer\")\n .map((msg) => msg.text);\n const compactionFollowUp = this.compactionQueuedMessages\n .filter((msg) => msg.mode === \"followUp\")\n .map((msg) => msg.text);\n this.compactionQueuedMessages = [];\n return {\n steering: [...steering, ...compactionSteering],\n followUp: [...followUp, ...compactionFollowUp],\n };\n };\n\nInteractiveModeBase.prototype.updatePendingMessagesDisplay = function(this: InteractiveModeBase): void {\n this.pendingMessagesContainer.clear();\n const { steering: steeringMessages, followUp: followUpMessages } =\n this.getAllQueuedMessages();\n if (steeringMessages.length > 0 || followUpMessages.length > 0) {\n this.pendingMessagesContainer.addChild(new Spacer(1));\n for (const message of steeringMessages) {\n const text = theme.fg(\"dim\", `Steering: ${message}`);\n this.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n }\n for (const message of followUpMessages) {\n const text = theme.fg(\"dim\", `Follow-up: ${message}`);\n this.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n }\n const dequeueHint = this.getAppKeyDisplay(\"app.message.dequeue\");\n const hintText = theme.fg(\n \"dim\",\n `↳ ${dequeueHint} to edit all queued messages`,\n );\n this.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n }\n };\n\nInteractiveModeBase.prototype.restoreQueuedMessagesToEditor = function(this: InteractiveModeBase, options?: {\n abort?: boolean;\n currentText?: string;\n }): number {\n const { steering, followUp } = this.clearAllQueues();\n const allQueued = [...steering, ...followUp];\n if (allQueued.length === 0) {\n this.updatePendingMessagesDisplay();\n if (options?.abort) {\n void this.session.abort();\n }\n return 0;\n }\n const currentText = options?.currentText ?? this.editor.getText();\n const combinedText = combineQueuedMessagesForEditor(allQueued, currentText);\n this.editor.setText(combinedText);\n this.updatePendingMessagesDisplay();\n if (options?.abort) {\n void this.session.abort();\n }\n return allQueued.length;\n };\n\nInteractiveModeBase.prototype.queueCompactionMessage = function(this: InteractiveModeBase, text: string, mode: \"steer\" | \"followUp\"): void {\n this.compactionQueuedMessages.push({ text, mode });\n this.editor.addToHistory?.(text);\n this.editor.setText(\"\");\n this.updatePendingMessagesDisplay();\n this.showStatus(\"Queued message for after compaction\");\n };\n\nInteractiveModeBase.prototype.isExtensionCommand = function(this: InteractiveModeBase, text: string): boolean {\n if (!text.startsWith(\"/\")) return false;\n\n const extensionRunner = this.session.extensionRunner;\n\n const spaceIndex = text.indexOf(\" \");\n const commandName =\n spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n return !!extensionRunner.getCommand(commandName);\n };\n\nInteractiveModeBase.prototype.flushCompactionQueue = async function(this: InteractiveModeBase, options?: {\n willRetry?: boolean;\n }): Promise<void> {\n if (this.compactionQueuedMessages.length === 0) {\n return;\n }\n\n const queuedMessages = [...this.compactionQueuedMessages];\n this.compactionQueuedMessages = [];\n this.updatePendingMessagesDisplay();\n\n const restoreQueue = (error: unknown) => {\n this.session.clearQueue();\n this.compactionQueuedMessages = queuedMessages;\n this.updatePendingMessagesDisplay();\n this.showError(\n `Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n };\n\n try {\n if (options?.willRetry) {\n // When retry is pending, queue messages for the retry turn\n for (const message of queuedMessages) {\n if (this.isExtensionCommand(message.text)) {\n await this.session.prompt(message.text);\n } else if (message.mode === \"followUp\") {\n await this.session.followUp(message.text);\n } else {\n await this.session.steer(message.text);\n }\n }\n this.updatePendingMessagesDisplay();\n return;\n }\n\n // Find first non-extension-command message to use as prompt\n const firstPromptIndex = queuedMessages.findIndex(\n (message) => !this.isExtensionCommand(message.text),\n );\n if (firstPromptIndex === -1) {\n // All extension commands - execute them all\n for (const message of queuedMessages) {\n await this.session.prompt(message.text);\n }\n return;\n }\n\n // Execute any extension commands before the first prompt\n const preCommands = queuedMessages.slice(0, firstPromptIndex);\n const firstPrompt = queuedMessages[firstPromptIndex];\n const rest = queuedMessages.slice(firstPromptIndex + 1);\n\n for (const message of preCommands) {\n await this.session.prompt(message.text);\n }\n\n // Start a prompt when idle, or preserve its delivery mode if a run is\n // still winding down after compaction.\n const promptPromise = this.session\n .prompt(firstPrompt.text, { streamingBehavior: firstPrompt.mode })\n .catch((error) => {\n restoreQueue(error);\n });\n\n // Queue remaining messages\n for (const message of rest) {\n if (this.isExtensionCommand(message.text)) {\n await this.session.prompt(message.text);\n } else if (message.mode === \"followUp\") {\n await this.session.followUp(message.text);\n } else {\n await this.session.steer(message.text);\n }\n }\n this.updatePendingMessagesDisplay();\n void promptPromise;\n } catch (error) {\n restoreQueue(error);\n }\n };\n\nInteractiveModeBase.prototype.flushPendingBashComponents = function(this: InteractiveModeBase): void {\n for (const component of this.pendingBashComponents) {\n this.pendingMessagesContainer.removeChild(component);\n this.chatContainer.addChild(component);\n }\n this.pendingBashComponents = [];\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,oCAAoC,QAAO,OAAkC,CAAC"}
1
+ {"version":3,"file":"interactive-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,oCAAoC,QAAO,OAAkC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { InteractiveModeBase, seedStartupInput } from "./interactive-mode-base.js";
2
2
  import { os, path, Markdown, Spacer, Text, spawn, APP_NAME, APP_TITLE, ENV_OFFLINE, getEnvValue, getAgentDir, VERSION, formatCodexFastModeModelLabel, shouldApplyCodexFastMode, DefaultPackageManager, isInstallTelemetryEnabled, getChangelogPath, getEntriesForVersion, getNewEntries, normalizeChangelogLinks, parseChangelog, getCwdRelativePath, getPiUserAgent, recordTimeSinceReset, ensureTool, checkForNewPiVersion, renderAtomicAnsiBanner, composeStartupIdentity, DynamicBorder, getMarkdownTheme, onThemeChange, theme } from "./interactive-mode-deps.js";
3
3
  import { ExpandableText } from "./interactive-mode-helpers.js";
4
+ import { refreshCatalogsAfterTuiStartup, updateProviderCountFromSnapshot } from "./interactive-model-catalog-startup.js";
4
5
  import { ONBOARDING_COPY } from "./interactive-onboarding.js";
5
6
  import { onInteractiveEngineRemoteCommandsChanged, waitForInteractiveEngineBound } from "../interactive-engine/extension-ui-bridge.js";
6
7
  import { restoreTerminalTitleAfterPackageCheck } from "./interactive-terminal-title.js";
@@ -154,11 +155,7 @@ InteractiveModeBase.prototype.init = async function () {
154
155
  this.updateEditorBorderColor();
155
156
  this.ui.requestRender();
156
157
  });
157
- // Initialize available provider count for footer display without delaying first-frame startup.
158
- void this.updateAvailableProviderCount().catch((error) => {
159
- const message = error instanceof Error ? error.message : String(error);
160
- console.error(`Failed to update provider count: ${message}`);
161
- });
158
+ updateProviderCountFromSnapshot(this);
162
159
  };
163
160
  InteractiveModeBase.prototype.updateTerminalTitle = function () {
164
161
  const cwdBasename = path.basename(this.sessionManager.getCwd());
@@ -172,9 +169,9 @@ InteractiveModeBase.prototype.updateTerminalTitle = function () {
172
169
  };
173
170
  InteractiveModeBase.prototype.run = async function () {
174
171
  await this.init();
172
+ if (shouldRefreshCopilotCatalogOnStartup())
173
+ void refreshCatalogsAfterTuiStartup(this);
175
174
  setTimeout(() => {
176
- if (shouldRefreshCopilotCatalogOnStartup())
177
- void this.refreshCopilotModelCatalog();
178
175
  const startupNoticesContainer = this.startupNoticesContainer;
179
176
  checkForNewPiVersion(this.version).then((newVersion) => {
180
177
  if (newVersion)
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-startup.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase, seedStartupInput } from \"./interactive-mode-base.ts\";\nimport { type Container, type MarkdownTheme, os, path, Markdown, Spacer, Text, spawn, APP_NAME, APP_TITLE, ENV_OFFLINE, getEnvValue, getAgentDir, VERSION, formatCodexFastModeModelLabel, shouldApplyCodexFastMode, DefaultPackageManager, isInstallTelemetryEnabled, getChangelogPath, getEntriesForVersion, getNewEntries, normalizeChangelogLinks, parseChangelog, getCwdRelativePath, getPiUserAgent, recordTimeSinceReset, ensureTool, checkForNewPiVersion, renderAtomicAnsiBanner, composeStartupIdentity, DynamicBorder, getMarkdownTheme, onThemeChange, theme } from \"./interactive-mode-deps.ts\";\nimport { ExpandableText } from \"./interactive-mode-helpers.ts\";\nimport { ONBOARDING_COPY } from \"./interactive-onboarding.ts\";\nimport { onInteractiveEngineRemoteCommandsChanged, waitForInteractiveEngineBound } from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { restoreTerminalTitleAfterPackageCheck } from \"./interactive-terminal-title.ts\";\nimport { isOfflineModeEnabled } from \"../../core/package-manager-env.ts\";\n\nexport const shouldRefreshCopilotCatalogOnStartup = (): boolean => !isOfflineModeEnabled();\n\nfunction prepareStartupNotices(mode: InteractiveModeBase): void {\n if (mode.startupNoticesPrepared) return;\n mode.startupNoticesPrepared = true;\n mode.hadLastChangelogVersionAtStartup = Boolean(mode.settingsManager.getLastChangelogVersion?.());\n if (mode.changelogMarkdown === undefined) {\n mode.changelogMarkdown = mode.getChangelogForDisplay?.();\n }\n mode.initializeFirstRunOnboardingMarkers?.();\n if (!mode.firstRunNoticeVisible) {\n mode.firstRunNoticeVisible = mode.isFirstRunOnboardingEligible?.() ?? false;\n }\n }\n\nInteractiveModeBase.prototype.showStartupNoticesIfNeeded = function(this: InteractiveModeBase, targetContainer: Container = this.chatContainer): void {\n if (this.startupNoticesShown) {\n return;\n }\n prepareStartupNotices(this);\n this.startupNoticesShown = true;\n\n const changelogMarkdown = this.changelogMarkdown;\n if (!changelogMarkdown && !this.firstRunNoticeVisible) {\n return;\n }\n\n if (changelogMarkdown) {\n if (targetContainer.children.length > 0) {\n targetContainer.addChild(new Spacer(1));\n }\n targetContainer.addChild(new DynamicBorder());\n if (this.settingsManager.getCollapseChangelog()) {\n const versionMatch = changelogMarkdown.match(\n /##\\s+\\[?((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-(?:alpha\\.)?(?:0|[1-9]\\d*))?)\\]?/,\n );\n const latestVersion = versionMatch ? versionMatch[1] : this.version;\n const condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n targetContainer.addChild(new Text(condensedText, 1, 0));\n } else {\n targetContainer.addChild(\n new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0),\n );\n targetContainer.addChild(new Spacer(1));\n targetContainer.addChild(\n new Markdown(\n changelogMarkdown.trim(),\n 1,\n 0,\n this.getMarkdownThemeWithSettings(),\n ),\n );\n targetContainer.addChild(new Spacer(1));\n }\n targetContainer.addChild(new DynamicBorder());\n }\n\n if (this.firstRunNoticeVisible) {\n this.firstRunOnboardingNoticeComponents = [];\n if (targetContainer.children.length > 0) {\n this.firstRunOnboardingNoticeComponents.push(new Spacer(1));\n }\n this.firstRunOnboardingNoticeComponents.push(\n new DynamicBorder(),\n new Text(ONBOARDING_COPY, 1, 0),\n new DynamicBorder(),\n new Spacer(1),\n );\n for (const component of this.firstRunOnboardingNoticeComponents) {\n targetContainer.addChild(component);\n }\n // Mark completion only after queueing the notice in the chat canvas so\n // launches that skip rendering retry the first-run notice next time.\n this.settingsManager.setOnboardedVersion(this.version);\n }\n\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.init = async function(this: InteractiveModeBase): Promise<void> {\n if (this.isInitialized) return;\n\n this.registerSignalHandlers();\n\n // Changelog and first-run onboarding are prepared lazily after first paint.\n\n // Add header container as first child. Populate it after theme initialization.\n this.ui.addChild(this.headerContainer);\n\n this.ui.addChild(this.chatContainer);\n this.ui.addChild(this.pendingMessagesContainer);\n this.ui.addChild(this.statusContainer);\n this.renderWidgets(); // Initialize with default spacer\n this.ui.addChild(this.widgetContainerAbove);\n this.ui.addChild(this.usageMeter);\n this.ui.addChild(this.editorContainer);\n // Footer (persistent model + cwd identity) stays pinned directly under the\n // editor; below-editor widgets render after it, at the very bottom. This\n // keeps the session identity line attached to the input and places\n // transient run status (e.g. the workflow companion counter) beneath it.\n // Rendering below-editor widgets last also keeps a live widget at the\n // absolute bottom of the buffer (always within the viewport), so its\n // per-tick updates never sit above the fold — preserving the #1109\n // resize-flicker fix.\n this.ui.addChild(this.footer);\n this.ui.addChild(this.widgetContainerBelow);\n this.ui.setFocus(this.editor);\n\n this.setupKeyHandlers();\n this.setupEditorSubmitHandler();\n // Rebuild autocomplete whenever the engine child's command catalog arrives or\n // changes (initial bind, engine restart, reload, new/resume/fork). Subscribed\n // before bind so the first async catalog fetch can never be missed. No-op when\n // the host is not isolated.\n onInteractiveEngineRemoteCommandsChanged(this.runtimeHost, () => {\n this.setupAutocompleteProvider();\n });\n\n seedStartupInput(\n this.pendingUserInputs,\n this.defaultEditor,\n this.options.startupInputCapture?.consume(),\n this.startupReplayInputs,\n (text) => {\n this.startupDraftText = text;\n },\n (text) => {\n this.startupReplayActiveInput = text;\n },\n );\n\n // Start UI before extension/session work; fd/rg readiness and git watching move after first paint.\n this.ui.start();\n await waitForInteractiveEngineBound(this.runtimeHost);\n recordTimeSinceReset(\"time-to-first-frame\");\n this.footerDataProvider.onBranchChange(() => {\n this.ui.requestRender();\n });\n this.isInitialized = true;\n\n await this.themeController.applyFromSettings();\n\n // Add the quiet startup identity unless silenced.\n if (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n this.builtInHeader = new ExpandableText(\n (width) => this.getStartupIdentityText(width),\n (width) => this.getStartupIdentityText(width),\n this.getStartupExpansionState(),\n 1,\n 0,\n );\n\n this.headerContainer.addChild(new Spacer(1));\n this.headerContainer.addChild(this.builtInHeader);\n this.headerContainer.addChild(new Spacer(1));\n } else {\n // Minimal header when silenced\n this.builtInHeader = new Text(\"\", 0, 0);\n this.headerContainer.addChild(this.builtInHeader);\n }\n this.ui.requestRender();\n\n void Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")])\n .then(([fdPath]) => {\n this.fdPath = fdPath;\n this.setupAutocompleteProvider();\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Tool readiness check failed: ${message}`);\n });\n\n // When startup resources are deferred, keep the already-painted editor responsive.\n // Extension UI bindings are installed at the deferred reload boundary, not here,\n // so no post-paint resource work can block visible typing.\n if (this.deferredStartupPending) {\n this.applyRuntimeSettings();\n this.subscribeToAgent();\n this.updateEditorBorderColor();\n this.updateTerminalTitle();\n } else {\n await this.rebindCurrentSession();\n }\n\n this.attachStartupNoticesContainer();\n // Render initial messages AFTER the initial session binding is in place.\n this.renderInitialMessages();\n // Set up theme file watcher\n onThemeChange(() => {\n this.ui.invalidate();\n this.updateEditorBorderColor();\n this.ui.requestRender();\n });\n\n // Initialize available provider count for footer display without delaying first-frame startup.\n void this.updateAvailableProviderCount().catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Failed to update provider count: ${message}`);\n });\n };\n\nInteractiveModeBase.prototype.updateTerminalTitle = function(this: InteractiveModeBase): void {\n const cwdBasename = path.basename(this.sessionManager.getCwd());\n const sessionName = this.sessionManager.getSessionName();\n if (sessionName) {\n this.ui.terminal.setTitle(\n `${APP_TITLE} - ${sessionName} - ${cwdBasename}`,\n );\n } else {\n this.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);\n }\n };\n\nInteractiveModeBase.prototype.run = async function(this: InteractiveModeBase): Promise<void> {\n await this.init();\n\n\tsetTimeout(() => {\n\t\tif (shouldRefreshCopilotCatalogOnStartup()) void this.refreshCopilotModelCatalog();\n const startupNoticesContainer = this.startupNoticesContainer;\n\t\tcheckForNewPiVersion(this.version).then((newVersion) => {\n\t\t\tif (newVersion) this.showNewVersionNotification(newVersion, startupNoticesContainer);\n\t\t});\n\t\trestoreTerminalTitleAfterPackageCheck(this.checkForPackageUpdates(), {\n\t\t\tinitialized: () => this.isInitialized,\n\t\t\trestore: () => this.updateTerminalTitle(),\n\t\t}).then((updates) => {\n\t\t\tif (updates.length > 0) this.showPackageUpdateNotification(updates, startupNoticesContainer);\n\t\t});\n\t\tthis.checkTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) this.showWarning(warning, startupNoticesContainer);\n\t\t});\n\t\t// When startup is deferred, the RESOURCES disclosure renders after the\n\t\t// deferred extension load; hold the subscription warning until then so\n\t\t// the disclosure always appears first.\n\t\tif (!this.deferredStartupPending && !this.deferredStartupPromise && !this.pendingLoadedResourcesDisclosure) {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, startupNoticesContainer);\n\t\t}\n\t}, 500);\n\n // Show startup warnings\n const {\n migratedProviders,\n modelFallbackMessage,\n initialMessage,\n initialImages,\n initialMessages,\n } = this.options;\n\n if (migratedProviders && migratedProviders.length > 0) {\n this.showWarning(\n `Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`,\n );\n }\n\n const modelsJsonError = this.session.modelRegistry.getError();\n if (modelsJsonError) {\n this.showError(`models.json error: ${modelsJsonError}`);\n }\n\n if (modelFallbackMessage && !this.deferredStartupPending) {\n this.showWarning(modelFallbackMessage, this.startupNoticesContainer);\n }\n\n // CLI-provided startup prompts need extension tools/resources; wait before sending them,\n // but do not block the normal no-prompt input loop from becoming ready.\n if (this.deferredStartupPending && (initialMessage || (initialMessages && initialMessages.length > 0))) {\n await this.ensureDeferredStartupComplete();\n }\n\n // Process initial messages\n if (initialMessage) {\n try {\n await this.session.prompt(initialMessage, { images: initialImages });\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.showError(errorMessage);\n }\n }\n\n if (initialMessages) {\n for (const message of initialMessages) {\n try {\n await this.session.prompt(message);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.showError(errorMessage);\n }\n }\n }\n\n // Main interactive loop\n while (true) {\n const userInput = await this.getUserInput();\n await this.runUserPromptTurn(userInput);\n }\n };\n\nInteractiveModeBase.prototype.checkForPackageUpdates = async function(this: InteractiveModeBase): Promise<string[]> {\n if (getEnvValue(ENV_OFFLINE)) {\n return [];\n }\n\n try {\n const packageManager = new DefaultPackageManager({\n cwd: this.sessionManager.getCwd(),\n agentDir: getAgentDir(),\n settingsManager: this.settingsManager,\n });\n const updates = await packageManager.checkForAvailableUpdates();\n return updates.map((update) => update.displayName);\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.checkTmuxKeyboardSetup = async function(this: InteractiveModeBase): Promise<string | undefined> {\n if (!process.env.TMUX) return undefined;\n\n const runTmuxShow = (option: string): Promise<string | undefined> => {\n return new Promise((resolve) => {\n const proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n let stdout = \"\";\n const timer = setTimeout(() => {\n proc.kill();\n resolve(undefined);\n }, 2000);\n\n proc.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.on(\"error\", () => {\n clearTimeout(timer);\n resolve(undefined);\n });\n proc.on(\"close\", (code) => {\n clearTimeout(timer);\n resolve(code === 0 ? stdout.trim() : undefined);\n });\n });\n };\n\n const [extendedKeys, extendedKeysFormat] = await Promise.all([\n runTmuxShow(\"extended-keys\"),\n runTmuxShow(\"extended-keys-format\"),\n ]);\n\n // If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n if (extendedKeys === undefined) return undefined;\n\n if (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n return \"tmux extended-keys is off. Modified enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\";\n }\n\n if (extendedKeysFormat === \"xterm\") {\n return \"tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\";\n }\n\n return undefined;\n };\n\nInteractiveModeBase.prototype.getChangelogForDisplay = function(this: InteractiveModeBase): string | undefined {\n // Skip changelog for resumed/continued sessions (already have messages)\n if (this.session.state.messages.length > 0) {\n return undefined;\n }\n\n const lastVersion = this.settingsManager.getLastChangelogVersion();\n const changelogPath = getChangelogPath();\n const entries = parseChangelog(changelogPath);\n\n if (!lastVersion) {\n // Fresh install - record the version, send telemetry, don't show changelog\n this.settingsManager.setLastChangelogVersion(VERSION);\n this.reportInstallTelemetry(VERSION);\n return undefined;\n }\n\n const newEntries = getNewEntries(entries, lastVersion, VERSION);\n const currentEntries = getEntriesForVersion(newEntries, VERSION);\n if (currentEntries.length > 0) {\n this.settingsManager.setLastChangelogVersion(VERSION);\n this.reportInstallTelemetry(VERSION);\n return currentEntries.map((e) => normalizeChangelogLinks(e.content, e)).join(\"\\n\\n\");\n }\n\n return undefined;\n };\n\nInteractiveModeBase.prototype.reportInstallTelemetry = function(this: InteractiveModeBase, version: string): void {\n if (getEnvValue(ENV_OFFLINE)) {\n return;\n }\n\n if (!isInstallTelemetryEnabled(this.settingsManager)) {\n return;\n }\n\n void fetch(\n `https://pi.dev/api/report-install?version=${encodeURIComponent(version)}`,\n {\n headers: {\n \"User-Agent\": getPiUserAgent(version),\n },\n signal: AbortSignal.timeout(5000),\n },\n )\n .then(() => undefined)\n .catch(() => undefined);\n };\n\nInteractiveModeBase.prototype.getMarkdownThemeWithSettings = function(this: InteractiveModeBase): MarkdownTheme {\n return {\n ...getMarkdownTheme(),\n codeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n };\n };\n\nInteractiveModeBase.prototype.formatDisplayPath = function(this: InteractiveModeBase, p: string): string {\n const home = os.homedir();\n let result = p;\n\n // Replace home directory with ~\n if (result.startsWith(home)) {\n result = `~${result.slice(home.length)}`;\n }\n\n return result;\n };\n\nInteractiveModeBase.prototype.formatExtensionDisplayPath = function(this: InteractiveModeBase, path: string): string {\n let result = this.formatDisplayPath(path);\n result = result.replace(/\\/index\\.ts$/, \"\").replace(/\\/index\\.js$/, \"\");\n return result;\n };\n\nInteractiveModeBase.prototype.formatContextPath = function(this: InteractiveModeBase, p: string): string {\n const cwd = path.resolve(this.sessionManager.getCwd());\n const absolutePath = path.isAbsolute(p)\n ? path.resolve(p)\n : path.resolve(cwd, p);\n const relativePath = getCwdRelativePath(absolutePath, cwd);\n if (relativePath !== undefined) {\n return relativePath;\n }\n\n return this.formatDisplayPath(absolutePath);\n };\n\nInteractiveModeBase.prototype.getStartupModelLabel = function(this: InteractiveModeBase): string {\n const model = this.session.state.model;\n let modelLabel = model?.id ?? \"no-model\";\n\n if (model?.reasoning) {\n modelLabel = `${modelLabel} ${this.session.thinkingLevel || \"off\"}`;\n }\n\n if (!model) {\n return modelLabel;\n }\n\n const fastModeEnabled = shouldApplyCodexFastMode(\n model,\n this.session.settingsManager.getCodexFastModeSettings(),\n this.session.orchestrationContext,\n );\n return formatCodexFastModeModelLabel(modelLabel, fastModeEnabled);\n };\n\nInteractiveModeBase.prototype.getStartupIdentityText = function(this: InteractiveModeBase, maxWidth?: number): string {\n const appLabel = APP_NAME.length > 0\n ? `${APP_NAME[0]!.toUpperCase()}${APP_NAME.slice(1)}`\n : \"Atomic\";\n const title = `${theme.bold(theme.fg(\"text\", appLabel))} ${theme.fg(\"muted\", `v${this.version}`)}`;\n const model = this.session.state.model;\n const provider = model ? theme.fg(\"dim\", `(${model.provider})`) : theme.fg(\"dim\", \"(no-provider)\");\n const modelLine = `${provider} ${theme.fg(\"muted\", this.getStartupModelLabel())}`;\n const cwd = theme.fg(\"muted\", this.formatDisplayPath(this.sessionManager.getCwd()));\n const metaLines = [title, modelLine, cwd];\n return composeStartupIdentity(this.getAtomicAnsiMarkLines(), metaLines, maxWidth);\n };\n\nInteractiveModeBase.prototype.getAtomicAnsiMarkLines = function(this: InteractiveModeBase): string[] {\n return renderAtomicAnsiBanner(theme, this.session.thinkingLevel || \"off\");\n };\n\nInteractiveModeBase.prototype.getStartupExpansionState = function(this: InteractiveModeBase): boolean {\n return this.options.verbose || this.toolOutputExpanded;\n };\n"]}
1
+ {"version":3,"file":"interactive-startup.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { InteractiveModeBase, seedStartupInput } from \"./interactive-mode-base.ts\";\nimport { type Container, type MarkdownTheme, os, path, Markdown, Spacer, Text, spawn, APP_NAME, APP_TITLE, ENV_OFFLINE, getEnvValue, getAgentDir, VERSION, formatCodexFastModeModelLabel, shouldApplyCodexFastMode, DefaultPackageManager, isInstallTelemetryEnabled, getChangelogPath, getEntriesForVersion, getNewEntries, normalizeChangelogLinks, parseChangelog, getCwdRelativePath, getPiUserAgent, recordTimeSinceReset, ensureTool, checkForNewPiVersion, renderAtomicAnsiBanner, composeStartupIdentity, DynamicBorder, getMarkdownTheme, onThemeChange, theme } from \"./interactive-mode-deps.ts\";\nimport { ExpandableText } from \"./interactive-mode-helpers.ts\";\nimport { refreshCatalogsAfterTuiStartup, updateProviderCountFromSnapshot } from \"./interactive-model-catalog-startup.ts\";\nimport { ONBOARDING_COPY } from \"./interactive-onboarding.ts\";\nimport { onInteractiveEngineRemoteCommandsChanged, waitForInteractiveEngineBound } from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { restoreTerminalTitleAfterPackageCheck } from \"./interactive-terminal-title.ts\";\nimport { isOfflineModeEnabled } from \"../../core/package-manager-env.ts\";\n\nexport const shouldRefreshCopilotCatalogOnStartup = (): boolean => !isOfflineModeEnabled();\n\nfunction prepareStartupNotices(mode: InteractiveModeBase): void {\n if (mode.startupNoticesPrepared) return;\n mode.startupNoticesPrepared = true;\n mode.hadLastChangelogVersionAtStartup = Boolean(mode.settingsManager.getLastChangelogVersion?.());\n if (mode.changelogMarkdown === undefined) {\n mode.changelogMarkdown = mode.getChangelogForDisplay?.();\n }\n mode.initializeFirstRunOnboardingMarkers?.();\n if (!mode.firstRunNoticeVisible) {\n mode.firstRunNoticeVisible = mode.isFirstRunOnboardingEligible?.() ?? false;\n }\n }\n\nInteractiveModeBase.prototype.showStartupNoticesIfNeeded = function(this: InteractiveModeBase, targetContainer: Container = this.chatContainer): void {\n if (this.startupNoticesShown) {\n return;\n }\n prepareStartupNotices(this);\n this.startupNoticesShown = true;\n\n const changelogMarkdown = this.changelogMarkdown;\n if (!changelogMarkdown && !this.firstRunNoticeVisible) {\n return;\n }\n\n if (changelogMarkdown) {\n if (targetContainer.children.length > 0) {\n targetContainer.addChild(new Spacer(1));\n }\n targetContainer.addChild(new DynamicBorder());\n if (this.settingsManager.getCollapseChangelog()) {\n const versionMatch = changelogMarkdown.match(\n /##\\s+\\[?((?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-(?:alpha\\.)?(?:0|[1-9]\\d*))?)\\]?/,\n );\n const latestVersion = versionMatch ? versionMatch[1] : this.version;\n const condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n targetContainer.addChild(new Text(condensedText, 1, 0));\n } else {\n targetContainer.addChild(\n new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0),\n );\n targetContainer.addChild(new Spacer(1));\n targetContainer.addChild(\n new Markdown(\n changelogMarkdown.trim(),\n 1,\n 0,\n this.getMarkdownThemeWithSettings(),\n ),\n );\n targetContainer.addChild(new Spacer(1));\n }\n targetContainer.addChild(new DynamicBorder());\n }\n\n if (this.firstRunNoticeVisible) {\n this.firstRunOnboardingNoticeComponents = [];\n if (targetContainer.children.length > 0) {\n this.firstRunOnboardingNoticeComponents.push(new Spacer(1));\n }\n this.firstRunOnboardingNoticeComponents.push(\n new DynamicBorder(),\n new Text(ONBOARDING_COPY, 1, 0),\n new DynamicBorder(),\n new Spacer(1),\n );\n for (const component of this.firstRunOnboardingNoticeComponents) {\n targetContainer.addChild(component);\n }\n // Mark completion only after queueing the notice in the chat canvas so\n // launches that skip rendering retry the first-run notice next time.\n this.settingsManager.setOnboardedVersion(this.version);\n }\n\n this.ui.requestRender();\n };\n\nInteractiveModeBase.prototype.init = async function(this: InteractiveModeBase): Promise<void> {\n if (this.isInitialized) return;\n\n this.registerSignalHandlers();\n\n // Changelog and first-run onboarding are prepared lazily after first paint.\n\n // Add header container as first child. Populate it after theme initialization.\n this.ui.addChild(this.headerContainer);\n\n this.ui.addChild(this.chatContainer);\n this.ui.addChild(this.pendingMessagesContainer);\n this.ui.addChild(this.statusContainer);\n this.renderWidgets(); // Initialize with default spacer\n this.ui.addChild(this.widgetContainerAbove);\n this.ui.addChild(this.usageMeter);\n this.ui.addChild(this.editorContainer);\n // Footer (persistent model + cwd identity) stays pinned directly under the\n // editor; below-editor widgets render after it, at the very bottom. This\n // keeps the session identity line attached to the input and places\n // transient run status (e.g. the workflow companion counter) beneath it.\n // Rendering below-editor widgets last also keeps a live widget at the\n // absolute bottom of the buffer (always within the viewport), so its\n // per-tick updates never sit above the fold — preserving the #1109\n // resize-flicker fix.\n this.ui.addChild(this.footer);\n this.ui.addChild(this.widgetContainerBelow);\n this.ui.setFocus(this.editor);\n\n this.setupKeyHandlers();\n this.setupEditorSubmitHandler();\n // Rebuild autocomplete whenever the engine child's command catalog arrives or\n // changes (initial bind, engine restart, reload, new/resume/fork). Subscribed\n // before bind so the first async catalog fetch can never be missed. No-op when\n // the host is not isolated.\n onInteractiveEngineRemoteCommandsChanged(this.runtimeHost, () => {\n this.setupAutocompleteProvider();\n });\n\n seedStartupInput(\n this.pendingUserInputs,\n this.defaultEditor,\n this.options.startupInputCapture?.consume(),\n this.startupReplayInputs,\n (text) => {\n this.startupDraftText = text;\n },\n (text) => {\n this.startupReplayActiveInput = text;\n },\n );\n\n // Start UI before extension/session work; fd/rg readiness and git watching move after first paint.\n this.ui.start();\n await waitForInteractiveEngineBound(this.runtimeHost);\n recordTimeSinceReset(\"time-to-first-frame\");\n this.footerDataProvider.onBranchChange(() => {\n this.ui.requestRender();\n });\n this.isInitialized = true;\n\n await this.themeController.applyFromSettings();\n\n // Add the quiet startup identity unless silenced.\n if (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n this.builtInHeader = new ExpandableText(\n (width) => this.getStartupIdentityText(width),\n (width) => this.getStartupIdentityText(width),\n this.getStartupExpansionState(),\n 1,\n 0,\n );\n\n this.headerContainer.addChild(new Spacer(1));\n this.headerContainer.addChild(this.builtInHeader);\n this.headerContainer.addChild(new Spacer(1));\n } else {\n // Minimal header when silenced\n this.builtInHeader = new Text(\"\", 0, 0);\n this.headerContainer.addChild(this.builtInHeader);\n }\n this.ui.requestRender();\n\n void Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")])\n .then(([fdPath]) => {\n this.fdPath = fdPath;\n this.setupAutocompleteProvider();\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.error(`Tool readiness check failed: ${message}`);\n });\n\n // When startup resources are deferred, keep the already-painted editor responsive.\n // Extension UI bindings are installed at the deferred reload boundary, not here,\n // so no post-paint resource work can block visible typing.\n if (this.deferredStartupPending) {\n this.applyRuntimeSettings();\n this.subscribeToAgent();\n this.updateEditorBorderColor();\n this.updateTerminalTitle();\n } else {\n await this.rebindCurrentSession();\n }\n\n this.attachStartupNoticesContainer();\n // Render initial messages AFTER the initial session binding is in place.\n this.renderInitialMessages();\n // Set up theme file watcher\n onThemeChange(() => {\n this.ui.invalidate();\n this.updateEditorBorderColor();\n this.ui.requestRender();\n });\n\n\tupdateProviderCountFromSnapshot(this);\n };\n\nInteractiveModeBase.prototype.updateTerminalTitle = function(this: InteractiveModeBase): void {\n const cwdBasename = path.basename(this.sessionManager.getCwd());\n const sessionName = this.sessionManager.getSessionName();\n if (sessionName) {\n this.ui.terminal.setTitle(\n `${APP_TITLE} - ${sessionName} - ${cwdBasename}`,\n );\n } else {\n this.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);\n }\n };\n\nInteractiveModeBase.prototype.run = async function(this: InteractiveModeBase): Promise<void> {\n await this.init();\n\n\tif (shouldRefreshCopilotCatalogOnStartup()) void refreshCatalogsAfterTuiStartup(this);\n\n\tsetTimeout(() => {\n const startupNoticesContainer = this.startupNoticesContainer;\n\t\tcheckForNewPiVersion(this.version).then((newVersion) => {\n\t\t\tif (newVersion) this.showNewVersionNotification(newVersion, startupNoticesContainer);\n\t\t});\n\t\trestoreTerminalTitleAfterPackageCheck(this.checkForPackageUpdates(), {\n\t\t\tinitialized: () => this.isInitialized,\n\t\t\trestore: () => this.updateTerminalTitle(),\n\t\t}).then((updates) => {\n\t\t\tif (updates.length > 0) this.showPackageUpdateNotification(updates, startupNoticesContainer);\n\t\t});\n\t\tthis.checkTmuxKeyboardSetup().then((warning) => {\n\t\t\tif (warning) this.showWarning(warning, startupNoticesContainer);\n\t\t});\n\t\t// When startup is deferred, the RESOURCES disclosure renders after the\n\t\t// deferred extension load; hold the subscription warning until then so\n\t\t// the disclosure always appears first.\n\t\tif (!this.deferredStartupPending && !this.deferredStartupPromise && !this.pendingLoadedResourcesDisclosure) {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(undefined, startupNoticesContainer);\n\t\t}\n\t}, 500);\n\n // Show startup warnings\n const {\n migratedProviders,\n modelFallbackMessage,\n initialMessage,\n initialImages,\n initialMessages,\n } = this.options;\n\n if (migratedProviders && migratedProviders.length > 0) {\n this.showWarning(\n `Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`,\n );\n }\n\n const modelsJsonError = this.session.modelRegistry.getError();\n if (modelsJsonError) {\n this.showError(`models.json error: ${modelsJsonError}`);\n }\n\n if (modelFallbackMessage && !this.deferredStartupPending) {\n this.showWarning(modelFallbackMessage, this.startupNoticesContainer);\n }\n\n // CLI-provided startup prompts need extension tools/resources; wait before sending them,\n // but do not block the normal no-prompt input loop from becoming ready.\n if (this.deferredStartupPending && (initialMessage || (initialMessages && initialMessages.length > 0))) {\n await this.ensureDeferredStartupComplete();\n }\n\n // Process initial messages\n if (initialMessage) {\n try {\n await this.session.prompt(initialMessage, { images: initialImages });\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.showError(errorMessage);\n }\n }\n\n if (initialMessages) {\n for (const message of initialMessages) {\n try {\n await this.session.prompt(message);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.showError(errorMessage);\n }\n }\n }\n\n // Main interactive loop\n while (true) {\n const userInput = await this.getUserInput();\n await this.runUserPromptTurn(userInput);\n }\n };\n\nInteractiveModeBase.prototype.checkForPackageUpdates = async function(this: InteractiveModeBase): Promise<string[]> {\n if (getEnvValue(ENV_OFFLINE)) {\n return [];\n }\n\n try {\n const packageManager = new DefaultPackageManager({\n cwd: this.sessionManager.getCwd(),\n agentDir: getAgentDir(),\n settingsManager: this.settingsManager,\n });\n const updates = await packageManager.checkForAvailableUpdates();\n return updates.map((update) => update.displayName);\n } catch {\n return [];\n }\n };\n\nInteractiveModeBase.prototype.checkTmuxKeyboardSetup = async function(this: InteractiveModeBase): Promise<string | undefined> {\n if (!process.env.TMUX) return undefined;\n\n const runTmuxShow = (option: string): Promise<string | undefined> => {\n return new Promise((resolve) => {\n const proc = spawn(\"tmux\", [\"show\", \"-gv\", option], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n let stdout = \"\";\n const timer = setTimeout(() => {\n proc.kill();\n resolve(undefined);\n }, 2000);\n\n proc.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n proc.on(\"error\", () => {\n clearTimeout(timer);\n resolve(undefined);\n });\n proc.on(\"close\", (code) => {\n clearTimeout(timer);\n resolve(code === 0 ? stdout.trim() : undefined);\n });\n });\n };\n\n const [extendedKeys, extendedKeysFormat] = await Promise.all([\n runTmuxShow(\"extended-keys\"),\n runTmuxShow(\"extended-keys-format\"),\n ]);\n\n // If we couldn't query tmux (timeout, sandbox, etc.), don't warn\n if (extendedKeys === undefined) return undefined;\n\n if (extendedKeys !== \"on\" && extendedKeys !== \"always\") {\n return \"tmux extended-keys is off. Modified enter keys may not work. Add `set -g extended-keys on` to ~/.tmux.conf and restart tmux.\";\n }\n\n if (extendedKeysFormat === \"xterm\") {\n return \"tmux extended-keys-format is xterm. Pi works best with csi-u. Add `set -g extended-keys-format csi-u` to ~/.tmux.conf and restart tmux.\";\n }\n\n return undefined;\n };\n\nInteractiveModeBase.prototype.getChangelogForDisplay = function(this: InteractiveModeBase): string | undefined {\n // Skip changelog for resumed/continued sessions (already have messages)\n if (this.session.state.messages.length > 0) {\n return undefined;\n }\n\n const lastVersion = this.settingsManager.getLastChangelogVersion();\n const changelogPath = getChangelogPath();\n const entries = parseChangelog(changelogPath);\n\n if (!lastVersion) {\n // Fresh install - record the version, send telemetry, don't show changelog\n this.settingsManager.setLastChangelogVersion(VERSION);\n this.reportInstallTelemetry(VERSION);\n return undefined;\n }\n\n const newEntries = getNewEntries(entries, lastVersion, VERSION);\n const currentEntries = getEntriesForVersion(newEntries, VERSION);\n if (currentEntries.length > 0) {\n this.settingsManager.setLastChangelogVersion(VERSION);\n this.reportInstallTelemetry(VERSION);\n return currentEntries.map((e) => normalizeChangelogLinks(e.content, e)).join(\"\\n\\n\");\n }\n\n return undefined;\n };\n\nInteractiveModeBase.prototype.reportInstallTelemetry = function(this: InteractiveModeBase, version: string): void {\n if (getEnvValue(ENV_OFFLINE)) {\n return;\n }\n\n if (!isInstallTelemetryEnabled(this.settingsManager)) {\n return;\n }\n\n void fetch(\n `https://pi.dev/api/report-install?version=${encodeURIComponent(version)}`,\n {\n headers: {\n \"User-Agent\": getPiUserAgent(version),\n },\n signal: AbortSignal.timeout(5000),\n },\n )\n .then(() => undefined)\n .catch(() => undefined);\n };\n\nInteractiveModeBase.prototype.getMarkdownThemeWithSettings = function(this: InteractiveModeBase): MarkdownTheme {\n return {\n ...getMarkdownTheme(),\n codeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n };\n };\n\nInteractiveModeBase.prototype.formatDisplayPath = function(this: InteractiveModeBase, p: string): string {\n const home = os.homedir();\n let result = p;\n\n // Replace home directory with ~\n if (result.startsWith(home)) {\n result = `~${result.slice(home.length)}`;\n }\n\n return result;\n };\n\nInteractiveModeBase.prototype.formatExtensionDisplayPath = function(this: InteractiveModeBase, path: string): string {\n let result = this.formatDisplayPath(path);\n result = result.replace(/\\/index\\.ts$/, \"\").replace(/\\/index\\.js$/, \"\");\n return result;\n };\n\nInteractiveModeBase.prototype.formatContextPath = function(this: InteractiveModeBase, p: string): string {\n const cwd = path.resolve(this.sessionManager.getCwd());\n const absolutePath = path.isAbsolute(p)\n ? path.resolve(p)\n : path.resolve(cwd, p);\n const relativePath = getCwdRelativePath(absolutePath, cwd);\n if (relativePath !== undefined) {\n return relativePath;\n }\n\n return this.formatDisplayPath(absolutePath);\n };\n\nInteractiveModeBase.prototype.getStartupModelLabel = function(this: InteractiveModeBase): string {\n const model = this.session.state.model;\n let modelLabel = model?.id ?? \"no-model\";\n\n if (model?.reasoning) {\n modelLabel = `${modelLabel} ${this.session.thinkingLevel || \"off\"}`;\n }\n\n if (!model) {\n return modelLabel;\n }\n\n const fastModeEnabled = shouldApplyCodexFastMode(\n model,\n this.session.settingsManager.getCodexFastModeSettings(),\n this.session.orchestrationContext,\n );\n return formatCodexFastModeModelLabel(modelLabel, fastModeEnabled);\n };\n\nInteractiveModeBase.prototype.getStartupIdentityText = function(this: InteractiveModeBase, maxWidth?: number): string {\n const appLabel = APP_NAME.length > 0\n ? `${APP_NAME[0]!.toUpperCase()}${APP_NAME.slice(1)}`\n : \"Atomic\";\n const title = `${theme.bold(theme.fg(\"text\", appLabel))} ${theme.fg(\"muted\", `v${this.version}`)}`;\n const model = this.session.state.model;\n const provider = model ? theme.fg(\"dim\", `(${model.provider})`) : theme.fg(\"dim\", \"(no-provider)\");\n const modelLine = `${provider} ${theme.fg(\"muted\", this.getStartupModelLabel())}`;\n const cwd = theme.fg(\"muted\", this.formatDisplayPath(this.sessionManager.getCwd()));\n const metaLines = [title, modelLine, cwd];\n return composeStartupIdentity(this.getAtomicAnsiMarkLines(), metaLines, maxWidth);\n };\n\nInteractiveModeBase.prototype.getAtomicAnsiMarkLines = function(this: InteractiveModeBase): string[] {\n return renderAtomicAnsiBanner(theme, this.session.thinkingLevel || \"off\");\n };\n\nInteractiveModeBase.prototype.getStartupExpansionState = function(this: InteractiveModeBase): boolean {\n return this.options.verbose || this.toolOutputExpanded;\n };\n"]}
@@ -0,0 +1,8 @@
1
+ import type { AgentSessionEvent } from "./interactive-mode-deps.ts";
2
+ import type { InteractiveModeBase } from "./interactive-mode-base.ts";
3
+ type RetryEvent = Extract<AgentSessionEvent, {
4
+ type: `summarization_retry_${string}`;
5
+ }>;
6
+ export declare function handleSummarizationRetryEvent(mode: InteractiveModeBase, event: RetryEvent): void;
7
+ export {};
8
+ //# sourceMappingURL=interactive-summarization-retry-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-summarization-retry-events.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-summarization-retry-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,KAAK,UAAU,GAAG,OAAO,CAAC,iBAAiB,EAAE;IAAE,IAAI,EAAE,uBAAuB,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAGxF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAkChG"}
@@ -0,0 +1,40 @@
1
+ import { CountdownTimer, Loader, theme } from "./interactive-mode-deps.js";
2
+ const activeSources = new WeakMap();
3
+ export function handleSummarizationRetryEvent(mode, event) {
4
+ if (event.type === "summarization_retry_scheduled") {
5
+ mode.showError(event.errorMessage);
6
+ mode.statusContainer.clear();
7
+ mode.autoCompactionLoader?.stop();
8
+ mode.autoCompactionLoader = undefined;
9
+ mode.retryCountdown?.dispose();
10
+ const retryMessage = (seconds) => `Retrying summary (${event.attempt}/${event.maxAttempts}) in ${seconds}s...`;
11
+ mode.retryLoader = new Loader(mode.ui, (spinner) => theme.fg("warning", spinner), (text) => theme.fg("muted", text), retryMessage(Math.ceil(event.delayMs / 1000)));
12
+ mode.retryCountdown = new CountdownTimer(event.delayMs, mode.ui, (seconds) => mode.retryLoader?.setMessage(retryMessage(seconds)), () => { mode.retryCountdown = undefined; });
13
+ mode.statusContainer.addChild(mode.retryLoader);
14
+ }
15
+ else if (event.type === "summarization_retry_attempt_start") {
16
+ activeSources.set(mode, event.source);
17
+ mode.retryCountdown?.dispose();
18
+ mode.retryCountdown = undefined;
19
+ mode.retryLoader?.stop();
20
+ mode.retryLoader = undefined;
21
+ mode.statusContainer.clear();
22
+ const message = event.source === "branchSummary" ? "Summarizing branch..." : event.reason === "manual" ? "Compacting context..." : "Auto-compacting...";
23
+ mode.autoCompactionLoader = new Loader(mode.ui, (spinner) => theme.fg("accent", spinner), (text) => theme.fg("muted", text), message);
24
+ mode.statusContainer.addChild(mode.autoCompactionLoader);
25
+ }
26
+ else {
27
+ mode.retryCountdown?.dispose();
28
+ mode.retryCountdown = undefined;
29
+ mode.retryLoader?.stop();
30
+ mode.retryLoader = undefined;
31
+ if (activeSources.get(mode) === "branchSummary") {
32
+ mode.autoCompactionLoader?.stop();
33
+ mode.autoCompactionLoader = undefined;
34
+ mode.statusContainer.clear();
35
+ }
36
+ activeSources.delete(mode);
37
+ }
38
+ mode.ui.requestRender();
39
+ }
40
+ //# sourceMappingURL=interactive-summarization-retry-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-summarization-retry-events.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-summarization-retry-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentSessionEvent } from \"./interactive-mode-deps.ts\";\nimport { CountdownTimer, Loader, theme } from \"./interactive-mode-deps.ts\";\nimport type { InteractiveModeBase } from \"./interactive-mode-base.ts\";\n\ntype RetryEvent = Extract<AgentSessionEvent, { type: `summarization_retry_${string}` }>;\nconst activeSources = new WeakMap<InteractiveModeBase, \"branchSummary\" | \"compaction\">();\n\nexport function handleSummarizationRetryEvent(mode: InteractiveModeBase, event: RetryEvent): void {\n\tif (event.type === \"summarization_retry_scheduled\") {\n\t\tmode.showError(event.errorMessage);\n\t\tmode.statusContainer.clear();\n\t\tmode.autoCompactionLoader?.stop();\n\t\tmode.autoCompactionLoader = undefined;\n\t\tmode.retryCountdown?.dispose();\n\t\tconst retryMessage = (seconds: number) => `Retrying summary (${event.attempt}/${event.maxAttempts}) in ${seconds}s...`;\n\t\tmode.retryLoader = new Loader(mode.ui, (spinner) => theme.fg(\"warning\", spinner), (text) => theme.fg(\"muted\", text), retryMessage(Math.ceil(event.delayMs / 1000)));\n\t\tmode.retryCountdown = new CountdownTimer(event.delayMs, mode.ui, (seconds) => mode.retryLoader?.setMessage(retryMessage(seconds)), () => { mode.retryCountdown = undefined; });\n\t\tmode.statusContainer.addChild(mode.retryLoader);\n\t} else if (event.type === \"summarization_retry_attempt_start\") {\n\t\tactiveSources.set(mode, event.source);\n\t\tmode.retryCountdown?.dispose();\n\t\tmode.retryCountdown = undefined;\n\t\tmode.retryLoader?.stop();\n\t\tmode.retryLoader = undefined;\n\t\tmode.statusContainer.clear();\n\t\tconst message = event.source === \"branchSummary\" ? \"Summarizing branch...\" : event.reason === \"manual\" ? \"Compacting context...\" : \"Auto-compacting...\";\n\t\tmode.autoCompactionLoader = new Loader(mode.ui, (spinner) => theme.fg(\"accent\", spinner), (text) => theme.fg(\"muted\", text), message);\n\t\tmode.statusContainer.addChild(mode.autoCompactionLoader);\n\t} else {\n\t\tmode.retryCountdown?.dispose();\n\t\tmode.retryCountdown = undefined;\n\t\tmode.retryLoader?.stop();\n\t\tmode.retryLoader = undefined;\n\t\tif (activeSources.get(mode) === \"branchSummary\") {\n\t\t\tmode.autoCompactionLoader?.stop();\n\t\t\tmode.autoCompactionLoader = undefined;\n\t\t\tmode.statusContainer.clear();\n\t\t}\n\t\tactiveSources.delete(mode);\n\t}\n\tmode.ui.requestRender();\n}\n"]}
@@ -3,7 +3,7 @@ import type { KeybindingsManager } from "../../core/keybindings.ts";
3
3
  import type { ExtensionUIContext } from "../../core/extensions/index.ts";
4
4
  import type { ActivityWatchdogDiagnostic } from "./activity-watchdog.ts";
5
5
  import type { EngineKeybindingState, InteractiveEngineMessage } from "./protocol.ts";
6
- import type { RpcSlashCommand } from "../rpc/rpc-types.ts";
6
+ import type { RpcAutocompleteItem, RpcSlashCommand } from "../rpc/rpc-types.ts";
7
7
  interface EngineMessageSource {
8
8
  onEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;
9
9
  onKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;
@@ -17,6 +17,8 @@ export declare function interruptBlockedInteractiveEngine(runtime: AgentSessionR
17
17
  * empty list for non-isolated runtimes so callers can merge unconditionally.
18
18
  */
19
19
  export declare function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[];
20
+ /** Evaluate an engine-child command's live argument completions. */
21
+ export declare function getInteractiveEngineRemoteCommandCompletions(runtime: AgentSessionRuntime, commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null>;
20
22
  /** Subscribe to engine-child command catalog changes. No-op when not isolated. */
21
23
  export declare function onInteractiveEngineRemoteCommandsChanged(runtime: AgentSessionRuntime, listener: (commands: readonly RpcSlashCommand[]) => void): () => void;
22
24
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAA2B,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAK9G,OAAO,KAAK,EAAiD,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+C1G,UAAU,mBAAmB;IAC5B,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnF,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACjF;AAED,wBAAgB,qCAAqC,CACpD,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAC9C,MAAM,IAAI,CASZ;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,IAAI,EAC9D,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAChF,WAAW,CAAC,EAAE,kBAAkB,GAC9B,MAAM,IAAI,CA2CZ;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAEvF;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,eAAe,EAAE,CAE3G;AAED,kFAAkF;AAClF,wBAAgB,wCAAwC,CACvD,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,GACtD,MAAM,IAAI,CAEZ"}
1
+ {"version":3,"file":"extension-ui-bridge.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAA2B,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAK9G,OAAO,KAAK,EAAE,mBAAmB,EAAiD,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+C/H,UAAU,mBAAmB;IAC5B,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnF,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACjF;AAED,wBAAgB,qCAAqC,CACpD,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAC9C,MAAM,IAAI,CASZ;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,EAAE,EAAE,kBAAkB,EACtB,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,KAAK,IAAI,EAC9D,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAChF,WAAW,CAAC,EAAE,kBAAkB,GAC9B,MAAM,IAAI,CA2CZ;AAED,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAEvF;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,eAAe,EAAE,CAE3G;AAED,oEAAoE;AACpE,wBAAgB,4CAA4C,CAC3D,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAIvC;AAED,kFAAkF;AAClF,wBAAgB,wCAAwC,CACvD,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,KAAK,IAAI,GACtD,MAAM,IAAI,CAEZ"}
@@ -119,6 +119,12 @@ export function interruptBlockedInteractiveEngine(runtime) {
119
119
  export function getInteractiveEngineRemoteCommands(runtime) {
120
120
  return runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];
121
121
  }
122
+ /** Evaluate an engine-child command's live argument completions. */
123
+ export function getInteractiveEngineRemoteCommandCompletions(runtime, commandName, argumentPrefix) {
124
+ return runtime instanceof IsolatedInteractiveRuntime
125
+ ? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)
126
+ : Promise.resolve(null);
127
+ }
122
128
  /** Subscribe to engine-child command catalog changes. No-op when not isolated. */
123
129
  export function onInteractiveEngineRemoteCommandsChanged(runtime, listener) {
124
130
  return runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => { };
@@ -1 +1 @@
1
- {"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { matchesKey, type KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.ts\";\nimport { RemoteComponentController } from \"./remote-component.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\nimport type { RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\n\nasync function handleRequest(\n\tui: ExtensionUIContext,\n\trequest: RpcExtensionUIRequest,\n): Promise<RpcExtensionUIResponse | undefined> {\n\tswitch (request.method) {\n\t\tcase \"select\": {\n\t\t\tconst value = await ui.select(request.title, request.options, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"confirm\": {\n\t\t\tconst confirmed = await ui.confirm(request.title, request.message, { timeout: request.timeout });\n\t\t\treturn { type: \"extension_ui_response\", id: request.id, confirmed };\n\t\t}\n\t\tcase \"input\": {\n\t\t\tconst value = await ui.input(request.title, request.placeholder, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"editor\": {\n\t\t\tconst value = await ui.editor(request.title, request.prefill);\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"notify\":\n\t\t\tui.notify(request.message, request.notifyType);\n\t\t\treturn undefined;\n\t\tcase \"setStatus\":\n\t\t\tui.setStatus(request.statusKey, request.statusText);\n\t\t\treturn undefined;\n\t\tcase \"setWidget\":\n\t\t\tui.setWidget(request.widgetKey, request.widgetLines, { placement: request.widgetPlacement });\n\t\t\treturn undefined;\n\t\tcase \"setTitle\":\n\t\t\tui.setTitle(request.title);\n\t\t\treturn undefined;\n\t\tcase \"set_editor_text\":\n\t\t\tui.setEditorText(request.text);\n\t\t\treturn undefined;\n\t}\n}\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => void | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\tconst disposeExtensionUi = runtime.setExtensionUIHandler((request) => handleRequest(ui, request));\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(({ key }) => matchesKey(data, key as KeyId));\n\t\tif (!shortcut) return false;\n\t\tvoid runtime.invokeRemoteShortcut(shortcut.key).catch((error: Error) =>\n\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }));\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdisposeExtensionUi();\n\t\tdisposeDiagnostic();\n\t};\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n"]}
1
+ {"version":3,"file":"extension-ui-bridge.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/extension-ui-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { matchesKey, type KeyId } from \"@earendil-works/pi-tui\";\nimport type { AgentSessionRuntime } from \"../../core/agent-session-runtime.ts\";\nimport type { KeybindingsManager } from \"../../core/keybindings.ts\";\nimport type { ExtensionUIContext } from \"../../core/extensions/index.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"./activity-watchdog.ts\";\nimport type { EngineExtensionShortcut, EngineKeybindingState, InteractiveEngineMessage } from \"./protocol.ts\";\nimport { IsolatedInteractiveRuntime } from \"./isolated-runtime.ts\";\nimport { RemoteComponentController } from \"./remote-component.ts\";\nimport { InputFormHostController } from \"./input-form-host.ts\";\nimport { SessionPickerHostController } from \"./session-picker-host.ts\";\nimport type { RpcAutocompleteItem, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSlashCommand } from \"../rpc/rpc-types.ts\";\n\nasync function handleRequest(\n\tui: ExtensionUIContext,\n\trequest: RpcExtensionUIRequest,\n): Promise<RpcExtensionUIResponse | undefined> {\n\tswitch (request.method) {\n\t\tcase \"select\": {\n\t\t\tconst value = await ui.select(request.title, request.options, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"confirm\": {\n\t\t\tconst confirmed = await ui.confirm(request.title, request.message, { timeout: request.timeout });\n\t\t\treturn { type: \"extension_ui_response\", id: request.id, confirmed };\n\t\t}\n\t\tcase \"input\": {\n\t\t\tconst value = await ui.input(request.title, request.placeholder, { timeout: request.timeout });\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"editor\": {\n\t\t\tconst value = await ui.editor(request.title, request.prefill);\n\t\t\treturn value === undefined\n\t\t\t\t? { type: \"extension_ui_response\", id: request.id, cancelled: true }\n\t\t\t\t: { type: \"extension_ui_response\", id: request.id, value };\n\t\t}\n\t\tcase \"notify\":\n\t\t\tui.notify(request.message, request.notifyType);\n\t\t\treturn undefined;\n\t\tcase \"setStatus\":\n\t\t\tui.setStatus(request.statusKey, request.statusText);\n\t\t\treturn undefined;\n\t\tcase \"setWidget\":\n\t\t\tui.setWidget(request.widgetKey, request.widgetLines, { placement: request.widgetPlacement });\n\t\t\treturn undefined;\n\t\tcase \"setTitle\":\n\t\t\tui.setTitle(request.title);\n\t\t\treturn undefined;\n\t\tcase \"set_editor_text\":\n\t\t\tui.setEditorText(request.text);\n\t\t\treturn undefined;\n\t}\n}\n\ninterface EngineMessageSource {\n\tonEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void;\n\tonKeybindingState?(listener: (state: EngineKeybindingState) => void): () => void;\n}\n\nexport function attachInteractiveEngineKeybindingSync(\n\truntime: EngineMessageSource,\n\tkeybindings: KeybindingsManager,\n\tonState?: (state: EngineKeybindingState) => void,\n): () => void {\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tkeybindings.setUserBindings(state.userBindings);\n\t\tonState?.(state);\n\t};\n\tif (runtime.onKeybindingState) return runtime.onKeybindingState(applyState);\n\treturn runtime.onEngineMessage((message) => {\n\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t});\n}\n\nexport function attachInteractiveEngineHost(\n\truntime: AgentSessionRuntime,\n\tui: ExtensionUIContext,\n\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void,\n\tsetShortcutHandler?: (handler: (data: string) => boolean) => void | (() => void),\n\tkeybindings?: KeybindingsManager,\n): () => void {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return () => {};\n\tconst disposeDiagnostic = runtime.onDiagnostic(onDiagnostic);\n\tconst disposeExtensionUi = runtime.setExtensionUIHandler((request) => handleRequest(ui, request));\n\tlet shortcuts: EngineExtensionShortcut[] = [];\n\tconst dispatchShortcut = (data: string): boolean => {\n\t\tconst shortcut = shortcuts.find(({ key }) => matchesKey(data, key as KeyId));\n\t\tif (!shortcut) return false;\n\t\tvoid runtime.invokeRemoteShortcut(shortcut.key).catch((error: Error) =>\n\t\t\tonDiagnostic({ activity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message }));\n\t\treturn true;\n\t};\n\tlet disposeShortcutHandler: (() => void) | undefined;\n\tconst installShortcutHandler = (): void => {\n\t\tdisposeShortcutHandler?.();\n\t\tconst dispose = setShortcutHandler?.(dispatchShortcut);\n\t\tdisposeShortcutHandler = typeof dispose === \"function\" ? dispose : undefined;\n\t};\n\tconst applyState = (state: EngineKeybindingState): void => {\n\t\tshortcuts = [...state.shortcuts];\n\t\tinstallShortcutHandler();\n\t};\n\tinstallShortcutHandler();\n\tconst disposeKeybindings = keybindings\n\t\t? attachInteractiveEngineKeybindingSync(runtime, keybindings, applyState)\n\t\t: runtime.onEngineMessage((message) => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") applyState(message.state);\n\t\t});\n\tconst remoteComponents = new RemoteComponentController(runtime, ui);\n\tconst sessionPicker = new SessionPickerHostController(runtime, ui);\n\tconst inputForm = new InputFormHostController(runtime, ui);\n\tlet disposed = false;\n\treturn () => {\n\t\tif (disposed) return;\n\t\tdisposed = true;\n\t\tdisposeShortcutHandler?.();\n\t\tdisposeKeybindings();\n\t\tremoteComponents.dispose();\n\t\tsessionPicker.dispose();\n\t\tinputForm.dispose();\n\t\tdisposeExtensionUi();\n\t\tdisposeDiagnostic();\n\t};\n}\n\nexport async function waitForInteractiveEngineBound(runtime: AgentSessionRuntime): Promise<void> {\n\tif (!(runtime instanceof IsolatedInteractiveRuntime)) return;\n\tawait runtime.waitUntilBound();\n\tawait runtime.initializeFromEngine();\n}\n\nexport function interruptBlockedInteractiveEngine(runtime: AgentSessionRuntime): boolean {\n\treturn runtime instanceof IsolatedInteractiveRuntime && runtime.interruptBlockedCallback();\n}\n\n/**\n * Command catalog the engine child exposes to the isolated host. Returns an\n * empty list for non-isolated runtimes so callers can merge unconditionally.\n */\nexport function getInteractiveEngineRemoteCommands(runtime: AgentSessionRuntime): readonly RpcSlashCommand[] {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.getRemoteCommands() : [];\n}\n\n/** Evaluate an engine-child command's live argument completions. */\nexport function getInteractiveEngineRemoteCommandCompletions(\n\truntime: AgentSessionRuntime,\n\tcommandName: string,\n\targumentPrefix: string,\n): Promise<RpcAutocompleteItem[] | null> {\n\treturn runtime instanceof IsolatedInteractiveRuntime\n\t\t? runtime.getRemoteCommandCompletions(commandName, argumentPrefix)\n\t\t: Promise.resolve(null);\n}\n\n/** Subscribe to engine-child command catalog changes. No-op when not isolated. */\nexport function onInteractiveEngineRemoteCommandsChanged(\n\truntime: AgentSessionRuntime,\n\tlistener: (commands: readonly RpcSlashCommand[]) => void,\n): () => void {\n\treturn runtime instanceof IsolatedInteractiveRuntime ? runtime.onRemoteCommandsChanged(listener) : () => {};\n}\n"]}