@bastani/atomic 0.9.40 → 0.9.41-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 (323) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +1 -1
  3. package/dist/builtin/intercom/CHANGELOG.md +12 -0
  4. package/dist/builtin/intercom/README.md +1 -1
  5. package/dist/builtin/intercom/broker/broker.ts +24 -21
  6. package/dist/builtin/intercom/broker/client.ts +97 -6
  7. package/dist/builtin/intercom/broker/list-reply.ts +53 -0
  8. package/dist/builtin/intercom/index.bundle.mjs +278 -46
  9. package/dist/builtin/intercom/package.json +2 -2
  10. package/dist/builtin/intercom/recoverable-disconnect.ts +27 -1
  11. package/dist/builtin/intercom/types.ts +8 -1
  12. package/dist/builtin/mcp/package.json +1 -1
  13. package/dist/builtin/subagents/CHANGELOG.md +14 -0
  14. package/dist/builtin/subagents/README.md +14 -0
  15. package/dist/builtin/subagents/package.json +3 -3
  16. package/dist/builtin/subagents/src/extension/index.bundle.mjs +99 -19
  17. package/dist/builtin/web-access/package.json +2 -2
  18. package/dist/builtin/workflows/CHANGELOG.md +33 -0
  19. package/dist/builtin/workflows/README.md +2 -0
  20. package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
  21. package/dist/builtin/workflows/builtin/{chunk-qjqn389g.js → chunk-2jfst7e4.js} +72 -10
  22. package/dist/builtin/workflows/builtin/{chunk-4bwtzyjq.js → chunk-49kkbdpr.js} +1 -1
  23. package/dist/builtin/workflows/builtin/{chunk-qdd897wm.js → chunk-apagcs4r.js} +1 -1
  24. package/dist/builtin/workflows/builtin/{chunk-454hz1qt.js → chunk-dcxscfnb.js} +1 -1
  25. package/dist/builtin/workflows/builtin/{chunk-bjva9j5k.js → chunk-hx8v4p97.js} +1 -1
  26. package/dist/builtin/workflows/builtin/{chunk-85mx6wcf.js → chunk-k5q3t7je.js} +1 -1
  27. package/dist/builtin/workflows/builtin/{chunk-8kkv04hz.js → chunk-n2gkzkty.js} +1 -1
  28. package/dist/builtin/workflows/builtin/{chunk-y45tkftg.js → chunk-txbc93t6.js} +1 -1
  29. package/dist/builtin/workflows/builtin/{chunk-x0vvjyzg.js → chunk-w4xp1w1f.js} +1 -1
  30. package/dist/builtin/workflows/builtin/{chunk-5eh0brtd.js → chunk-z3pajrfs.js} +1 -1
  31. package/dist/builtin/workflows/builtin/classify-and-act.js +2 -2
  32. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +2 -2
  33. package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
  34. package/dist/builtin/workflows/builtin/goal.js +2 -2
  35. package/dist/builtin/workflows/builtin/index.js +10 -10
  36. package/dist/builtin/workflows/builtin/loop-until-done.js +2 -2
  37. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  38. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  39. package/dist/builtin/workflows/builtin/tournament.js +2 -2
  40. package/dist/builtin/workflows/package.json +2 -2
  41. package/dist/builtin/workflows/src/authoring.d.ts +1 -1
  42. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +16 -0
  43. package/dist/builtin/workflows/src/durable/journal/legacy-journal-tables.d.ts +9 -0
  44. package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +6 -0
  45. package/dist/builtin/workflows/src/extension/index.bundle.mjs +950 -116
  46. package/dist/builtin/workflows/src/index.js +806 -131
  47. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +17 -1
  48. package/dist/cli/credential-print.d.ts.map +1 -1
  49. package/dist/cli/credential-print.js +1 -1
  50. package/dist/cli/credential-print.js.map +1 -1
  51. package/dist/config.d.ts +1 -0
  52. package/dist/config.d.ts.map +1 -1
  53. package/dist/config.js +1 -0
  54. package/dist/config.js.map +1 -1
  55. package/dist/core/agent-session-extension-bindings.d.ts +2 -1
  56. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  57. package/dist/core/agent-session-extension-bindings.js +33 -18
  58. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  59. package/dist/core/agent-session-methods.d.ts +2 -1
  60. package/dist/core/agent-session-methods.d.ts.map +1 -1
  61. package/dist/core/agent-session-methods.js.map +1 -1
  62. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  63. package/dist/core/agent-session-prompt.js +114 -21
  64. package/dist/core/agent-session-prompt.js.map +1 -1
  65. package/dist/core/agent-session-runtime.d.ts +1 -1
  66. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  67. package/dist/core/agent-session-runtime.js +6 -0
  68. package/dist/core/agent-session-runtime.js.map +1 -1
  69. package/dist/core/agent-session-state.d.ts +19 -1
  70. package/dist/core/agent-session-state.d.ts.map +1 -1
  71. package/dist/core/agent-session-state.js +41 -6
  72. package/dist/core/agent-session-state.js.map +1 -1
  73. package/dist/core/auth-storage-backends.d.ts +3 -1
  74. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  75. package/dist/core/auth-storage-backends.js +79 -12
  76. package/dist/core/auth-storage-backends.js.map +1 -1
  77. package/dist/core/client-identity.d.ts +8 -0
  78. package/dist/core/client-identity.d.ts.map +1 -0
  79. package/dist/core/client-identity.js +16 -0
  80. package/dist/core/client-identity.js.map +1 -0
  81. package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
  82. package/dist/core/compaction/planner-outcome.js +2 -1
  83. package/dist/core/compaction/planner-outcome.js.map +1 -1
  84. package/dist/core/execution-model-router.d.ts +18 -0
  85. package/dist/core/execution-model-router.d.ts.map +1 -1
  86. package/dist/core/execution-model-router.js +14 -8
  87. package/dist/core/execution-model-router.js.map +1 -1
  88. package/dist/core/extension-oauth-refresh-rejection.d.ts +12 -0
  89. package/dist/core/extension-oauth-refresh-rejection.d.ts.map +1 -0
  90. package/dist/core/extension-oauth-refresh-rejection.js +70 -0
  91. package/dist/core/extension-oauth-refresh-rejection.js.map +1 -0
  92. package/dist/core/extension-startup-failure.d.ts +30 -0
  93. package/dist/core/extension-startup-failure.d.ts.map +1 -0
  94. package/dist/core/extension-startup-failure.js +62 -0
  95. package/dist/core/extension-startup-failure.js.map +1 -0
  96. package/dist/core/extensions/context-types.d.ts +2 -0
  97. package/dist/core/extensions/context-types.d.ts.map +1 -1
  98. package/dist/core/extensions/context-types.js.map +1 -1
  99. package/dist/core/extensions/provider-types.d.ts +2 -0
  100. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  101. package/dist/core/extensions/provider-types.js.map +1 -1
  102. package/dist/core/extensions/runner-context.d.ts +1 -0
  103. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  104. package/dist/core/extensions/runner-context.js +8 -0
  105. package/dist/core/extensions/runner-context.js.map +1 -1
  106. package/dist/core/extensions/runner.d.ts +1 -0
  107. package/dist/core/extensions/runner.d.ts.map +1 -1
  108. package/dist/core/extensions/runner.js +3 -0
  109. package/dist/core/extensions/runner.js.map +1 -1
  110. package/dist/core/extensions/runtime-types.d.ts +1 -0
  111. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  112. package/dist/core/extensions/runtime-types.js.map +1 -1
  113. package/dist/core/extensions/workflow-run-control-hub.d.ts +1 -0
  114. package/dist/core/extensions/workflow-run-control-hub.d.ts.map +1 -1
  115. package/dist/core/extensions/workflow-run-control-hub.js +3 -0
  116. package/dist/core/extensions/workflow-run-control-hub.js.map +1 -1
  117. package/dist/core/extensions/workflow-run-control.d.ts +8 -0
  118. package/dist/core/extensions/workflow-run-control.d.ts.map +1 -1
  119. package/dist/core/extensions/workflow-run-control.js.map +1 -1
  120. package/dist/core/model-config.d.ts +28 -0
  121. package/dist/core/model-config.d.ts.map +1 -1
  122. package/dist/core/model-fallback-failures.d.ts.map +1 -1
  123. package/dist/core/model-fallback-failures.js +12 -0
  124. package/dist/core/model-fallback-failures.js.map +1 -1
  125. package/dist/core/model-resolver-defaults.js +1 -1
  126. package/dist/core/model-resolver-defaults.js.map +1 -1
  127. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  128. package/dist/core/model-runtime-streaming.js +9 -3
  129. package/dist/core/model-runtime-streaming.js.map +1 -1
  130. package/dist/core/model-runtime.d.ts +5 -0
  131. package/dist/core/model-runtime.d.ts.map +1 -1
  132. package/dist/core/model-runtime.js +6 -0
  133. package/dist/core/model-runtime.js.map +1 -1
  134. package/dist/core/provider-composer-internal.d.ts +8 -6
  135. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  136. package/dist/core/provider-composer-internal.js +21 -8
  137. package/dist/core/provider-composer-internal.js.map +1 -1
  138. package/dist/core/sdk.d.ts.map +1 -1
  139. package/dist/core/sdk.js +12 -4
  140. package/dist/core/sdk.js.map +1 -1
  141. package/dist/core/storage/session/sql-session-store.d.ts +35 -0
  142. package/dist/core/storage/session/sql-session-store.d.ts.map +1 -1
  143. package/dist/core/storage/session/sql-session-store.js +158 -42
  144. package/dist/core/storage/session/sql-session-store.js.map +1 -1
  145. package/dist/core/structured-output/deadline.d.ts +40 -0
  146. package/dist/core/structured-output/deadline.d.ts.map +1 -0
  147. package/dist/core/structured-output/deadline.js +110 -0
  148. package/dist/core/structured-output/deadline.js.map +1 -0
  149. package/dist/core/structured-output/index.d.ts.map +1 -1
  150. package/dist/core/structured-output/index.js +103 -47
  151. package/dist/core/structured-output/index.js.map +1 -1
  152. package/dist/core/structured-output/rejection-detail.d.ts +9 -0
  153. package/dist/core/structured-output/rejection-detail.d.ts.map +1 -0
  154. package/dist/core/structured-output/rejection-detail.js +129 -0
  155. package/dist/core/structured-output/rejection-detail.js.map +1 -0
  156. package/dist/core/structured-output/types.d.ts +8 -1
  157. package/dist/core/structured-output/types.d.ts.map +1 -1
  158. package/dist/core/structured-output/types.js.map +1 -1
  159. package/dist/core/tasks/completion.d.ts +7 -1
  160. package/dist/core/tasks/completion.d.ts.map +1 -1
  161. package/dist/core/tasks/completion.js +28 -6
  162. package/dist/core/tasks/completion.js.map +1 -1
  163. package/dist/core/tasks/contracts.d.ts +6 -1
  164. package/dist/core/tasks/contracts.d.ts.map +1 -1
  165. package/dist/core/tasks/contracts.js.map +1 -1
  166. package/dist/core/tasks/pause.d.ts +2 -1
  167. package/dist/core/tasks/pause.d.ts.map +1 -1
  168. package/dist/core/tasks/pause.js +3 -2
  169. package/dist/core/tasks/pause.js.map +1 -1
  170. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  171. package/dist/core/tools/bash-pty-native.js +10 -5
  172. package/dist/core/tools/bash-pty-native.js.map +1 -1
  173. package/dist/core/tools/bash.d.ts.map +1 -1
  174. package/dist/core/tools/bash.js +16 -32
  175. package/dist/core/tools/bash.js.map +1 -1
  176. package/dist/core/tools/grep.js +1 -1
  177. package/dist/core/tools/grep.js.map +1 -1
  178. package/dist/core/tools/kill.d.ts.map +1 -1
  179. package/dist/core/tools/kill.js +17 -3
  180. package/dist/core/tools/kill.js.map +1 -1
  181. package/dist/core/tools/shell-task-render.d.ts +55 -0
  182. package/dist/core/tools/shell-task-render.d.ts.map +1 -0
  183. package/dist/core/tools/shell-task-render.js +123 -0
  184. package/dist/core/tools/shell-task-render.js.map +1 -0
  185. package/dist/core/tools/shell-task-status.d.ts +52 -0
  186. package/dist/core/tools/shell-task-status.d.ts.map +1 -0
  187. package/dist/core/tools/shell-task-status.js +184 -0
  188. package/dist/core/tools/shell-task-status.js.map +1 -0
  189. package/dist/core/tools/structured-output.d.ts +5 -0
  190. package/dist/core/tools/structured-output.d.ts.map +1 -1
  191. package/dist/core/tools/structured-output.js +3 -0
  192. package/dist/core/tools/structured-output.js.map +1 -1
  193. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  194. package/dist/extensions/codemode/execute.js +134 -57
  195. package/dist/extensions/codemode/execute.js.map +1 -1
  196. package/dist/extensions/mcp/config.d.ts.map +1 -1
  197. package/dist/extensions/mcp/config.js +3 -2
  198. package/dist/extensions/mcp/config.js.map +1 -1
  199. package/dist/index-extensions.d.ts +1 -0
  200. package/dist/index-extensions.d.ts.map +1 -1
  201. package/dist/index-extensions.js +3 -0
  202. package/dist/index-extensions.js.map +1 -1
  203. package/dist/index.d.ts +3 -1
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +3 -1
  206. package/dist/index.js.map +1 -1
  207. package/dist/main.d.ts.map +1 -1
  208. package/dist/main.js +19 -6
  209. package/dist/main.js.map +1 -1
  210. package/dist/modes/interactive/components/task-row.d.ts.map +1 -1
  211. package/dist/modes/interactive/components/task-row.js +11 -1
  212. package/dist/modes/interactive/components/task-row.js.map +1 -1
  213. package/dist/modes/interactive/interactive-auth-routing.js +12 -10
  214. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  215. package/dist/modes/interactive/interactive-extension-custom-ui.js +20 -30
  216. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  217. package/dist/modes/interactive/interactive-extension-dialogs.js +23 -96
  218. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  219. package/dist/modes/interactive/interactive-extension-runtime.js +7 -8
  220. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  221. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  222. package/dist/modes/interactive/interactive-input-handling.js +27 -4
  223. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  224. package/dist/modes/interactive/interactive-mode-base.d.ts +20 -10
  225. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  226. package/dist/modes/interactive/interactive-mode-base.js +40 -5
  227. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  228. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  229. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  230. package/dist/modes/interactive/interactive-mode-deps.js +1 -1
  231. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  232. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -4
  233. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  234. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  235. package/dist/modes/interactive/interactive-mode-types.d.ts +4 -1
  236. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  237. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  238. package/dist/modes/interactive/interactive-prompt-restore.d.ts +3 -0
  239. package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
  240. package/dist/modes/interactive/interactive-prompt-restore.js +9 -1
  241. package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
  242. package/dist/modes/interactive/interactive-prompt-turn.js +30 -2
  243. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
  244. package/dist/modes/interactive/interactive-queueing.js +43 -8
  245. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  246. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  247. package/dist/modes/interactive/interactive-startup.js +12 -3
  248. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  249. package/dist/modes/interactive/theme/color-utils.d.ts +6 -1
  250. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
  251. package/dist/modes/interactive/theme/color-utils.js +39 -17
  252. package/dist/modes/interactive/theme/color-utils.js.map +1 -1
  253. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  254. package/dist/modes/interactive/theme/theme-class.js +2 -2
  255. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  256. package/dist/modes/interactive/theme/theme-tokens.d.ts +6 -0
  257. package/dist/modes/interactive/theme/theme-tokens.d.ts.map +1 -1
  258. package/dist/modes/interactive/theme/theme-tokens.js +7 -3
  259. package/dist/modes/interactive/theme/theme-tokens.js.map +1 -1
  260. package/dist/modes/interactive-engine/isolated-auth.d.ts +3 -0
  261. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
  262. package/dist/modes/interactive-engine/isolated-auth.js +13 -1
  263. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  264. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  265. package/dist/modes/interactive-engine/isolated-runtime.js +11 -2
  266. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  267. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +8 -0
  268. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  269. package/dist/modes/interactive-engine/remote-model-catalog.js +54 -0
  270. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  271. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  272. package/dist/modes/rpc/rpc-command-handler.js +4 -13
  273. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  274. package/dist/modes/rpc/rpc-model-catalog.d.ts +9 -0
  275. package/dist/modes/rpc/rpc-model-catalog.d.ts.map +1 -0
  276. package/dist/modes/rpc/rpc-model-catalog.js +19 -0
  277. package/dist/modes/rpc/rpc-model-catalog.js.map +1 -0
  278. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  279. package/dist/modes/rpc/rpc-provider-auth.js +2 -6
  280. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  281. package/dist/modes/rpc/rpc-types.d.ts +6 -0
  282. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  283. package/dist/modes/rpc/rpc-types.js.map +1 -1
  284. package/dist/utils/changelog.d.ts +6 -0
  285. package/dist/utils/changelog.d.ts.map +1 -1
  286. package/dist/utils/changelog.js +11 -0
  287. package/dist/utils/changelog.js.map +1 -1
  288. package/dist/utils/clipboard.d.ts.map +1 -1
  289. package/dist/utils/clipboard.js +4 -0
  290. package/dist/utils/clipboard.js.map +1 -1
  291. package/dist/utils/tools-manager.d.ts.map +1 -1
  292. package/dist/utils/tools-manager.js +3 -2
  293. package/dist/utils/tools-manager.js.map +1 -1
  294. package/docs/background-tasks.md +5 -3
  295. package/docs/codemode.md +2 -2
  296. package/docs/custom-provider/oauth.md +42 -1
  297. package/docs/custom-provider/registration.md +2 -0
  298. package/docs/environment-variables.md +1 -0
  299. package/docs/extensions/api-reference.md +3 -4
  300. package/docs/extensions/authoring.md +1 -1
  301. package/docs/extensions/events.md +1 -1
  302. package/docs/models-configuration.md +9 -0
  303. package/docs/models.md +3 -1
  304. package/docs/providers.md +4 -4
  305. package/docs/rpc/protocol.md +4 -2
  306. package/docs/sdk/reference.md +2 -0
  307. package/docs/sdk/structured-decisions.md +7 -5
  308. package/docs/sdk.md +5 -2
  309. package/docs/settings.md +4 -2
  310. package/docs/subagents/reference.md +1 -1
  311. package/docs/subagents.md +15 -1
  312. package/docs/themes/reference.md +3 -1
  313. package/docs/usage.md +3 -1
  314. package/docs/workflows/api-reference.md +28 -0
  315. package/docs/workflows/authoring.md +1 -1
  316. package/docs/workflows/operations.md +2 -2
  317. package/npm-shrinkwrap.json +67 -54
  318. package/package.json +6 -6
  319. package/schemas/models.schema.json +21 -0
  320. package/dist/core/provider-attribution.d.ts +0 -4
  321. package/dist/core/provider-attribution.d.ts.map +0 -1
  322. package/dist/core/provider-attribution.js +0 -87
  323. package/dist/core/provider-attribution.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-auth-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import { builtinProviders } from \"@bastani/pi-ai/providers/all\";\nimport { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport type { AuthStatus } from \"../../core/provider-composer.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype AuthSelectorProvider,\n\tExtensionSelectorComponent,\n\tOAuthSelectorComponent,\n} from \"./interactive-mode-deps.ts\";\nimport { BEDROCK_PROVIDER_ID } from \"./interactive-mode-helpers.ts\";\nimport { resolveLoginProviderReference } from \"./login-provider-options.ts\";\n\nexport function formatLogoutStatus(\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tauthStatus: AuthStatus,\n): string {\n\tconst action = authType === \"oauth\" ? `Logged out of ${providerName}` : `Removed stored API key for ${providerName}`;\n\treturn authStatus.source\n\t\t? `${action}. Authentication remains active through ${authStatus.label ?? authStatus.source}.`\n\t\t: action;\n}\n\nexport function getBuiltinApiKeyLoginOptions(getDisplayName: (providerId: string) => string): AuthSelectorProvider[] {\n\treturn builtinProviders()\n\t\t.filter((provider) => provider.auth.apiKey?.login !== undefined)\n\t\t.map((provider) => ({\n\t\t\tid: provider.id,\n\t\t\tname: getDisplayName(provider.id),\n\t\t\tauthType: \"api_key\" as const,\n\t\t}));\n}\n\nfunction subscriptionFlag(isSubscription: boolean | undefined): { subscription?: boolean } {\n\treturn isSubscription === undefined ? {} : { subscription: isSubscription };\n}\n\nInteractiveModeBase.prototype.getLoginProviderOptions = function (\n\tthis: InteractiveModeBase,\n\tauthType?: \"oauth\" | \"api_key\",\n): AuthSelectorProvider[] {\n\tconst oauthProviders = this.session.modelRuntime.getOAuthProviderMetadata();\n\tconst subscriptions = new Map(oauthProviders.map((provider) => [provider.id, provider.isSubscription]));\n\tconst options: AuthSelectorProvider[] = oauthProviders.map((provider) => ({\n\t\tid: provider.id,\n\t\tname: provider.name,\n\t\tauthType: \"oauth\" as const,\n\t\t...subscriptionFlag(provider.isSubscription),\n\t}));\n\tfor (const provider of this.session.modelRuntime.getProviders()) {\n\t\tif (provider.auth.apiKey?.login)\n\t\t\toptions.push({\n\t\t\t\tid: provider.id,\n\t\t\t\tname: provider.name ?? provider.id,\n\t\t\t\tauthType: \"api_key\",\n\t\t\t\t...subscriptionFlag(subscriptions.get(provider.id)),\n\t\t\t});\n\t}\n\treturn (authType ? options.filter((option) => option.authType === authType) : options).sort((a, b) =>\n\t\ta.name.localeCompare(b.name),\n\t);\n};\nInteractiveModeBase.prototype.getLogoutProviderOptions = function (this: InteractiveModeBase): AuthSelectorProvider[] {\n\tconst runtime = this.session.modelRuntime;\n\tconst providers = runtime.getProviders();\n\tconst providerNames = new Map(providers.map((provider) => [provider.id, provider.name ?? provider.id]));\n\tconst subscriptions = new Map<string, boolean | undefined>();\n\tfor (const provider of runtime.getOAuthProviderMetadata()) {\n\t\tproviderNames.set(provider.id, provider.name);\n\t\tsubscriptions.set(provider.id, provider.isSubscription);\n\t}\n\tconst options: AuthSelectorProvider[] = [];\n\tfor (const [providerId, name] of providerNames) {\n\t\tif (runtime.getProviderAuthStatus(providerId).source !== \"stored\") continue;\n\t\tconst authType = runtime.getStoredCredentialType(providerId);\n\t\tif (authType)\n\t\t\toptions.push({ id: providerId, name, authType, ...subscriptionFlag(subscriptions.get(providerId)) });\n\t}\n\treturn options.sort((a, b) => a.name.localeCompare(b.name));\n};\n\nInteractiveModeBase.prototype.startProviderLogin = async function (\n\tthis: InteractiveModeBase,\n\tproviderOption: AuthSelectorProvider,\n\tonBack?: () => void,\n): Promise<void> {\n\tif (providerOption.authType === \"oauth\") {\n\t\tawait this.showLoginDialog(providerOption.id, providerOption.name, onBack);\n\t} else if (providerOption.id === BEDROCK_PROVIDER_ID) {\n\t\tthis.showBedrockSetupDialog(providerOption.id, providerOption.name, onBack);\n\t} else {\n\t\tawait this.showApiKeyLoginDialog(providerOption.id, providerOption.name, onBack);\n\t}\n};\n\nInteractiveModeBase.prototype.handleLoginCommand = async function (\n\tthis: InteractiveModeBase,\n\tproviderRef?: string,\n): Promise<void> {\n\tif (!providerRef?.trim()) {\n\t\tthis.showLoginAuthTypeSelector();\n\t\treturn;\n\t}\n\tconst resolution = resolveLoginProviderReference(this.getLoginProviderOptions(), providerRef);\n\tif (resolution.kind === \"direct\") {\n\t\tawait this.startProviderLogin(resolution.option);\n\t} else if (resolution.kind === \"choose_method\") {\n\t\tthis.showLoginAuthTypeSelector(resolution.options);\n\t} else {\n\t\tthis.showLoginProviderSelector(undefined, resolution.initialSearch);\n\t}\n};\n\nInteractiveModeBase.prototype.showLoginAuthTypeSelector = function (\n\tthis: InteractiveModeBase,\n\tproviderOptions?: AuthSelectorProvider[],\n): void {\n\tconst subscriptionLabel =\n\t\tproviderOptions?.find((provider) => provider.authType === \"oauth\")?.subscription === false\n\t\t\t? \"Use an account\"\n\t\t\t: \"Use a subscription\";\n\tconst apiKeyLabel = \"Use an API key\";\n\tconst choices = providerOptions\n\t\t? providerOptions.map((provider) => (provider.authType === \"oauth\" ? subscriptionLabel : apiKeyLabel))\n\t\t: [subscriptionLabel, apiKeyLabel];\n\tthis.showSelector((done) => {\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\"Select authentication method:\",\n\t\t\tchoices,\n\t\t\t(option) => {\n\t\t\t\tdone();\n\t\t\t\tconst authType = option === subscriptionLabel ? \"oauth\" : \"api_key\";\n\t\t\t\tconst directOption = providerOptions?.find((provider) => provider.authType === authType);\n\t\t\t\tif (directOption) {\n\t\t\t\t\tvoid this.startProviderLogin(directOption, () => this.showLoginAuthTypeSelector(providerOptions));\n\t\t\t\t} else {\n\t\t\t\t\tthis.showLoginProviderSelector(authType);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginProviderSelector = function (\n\tthis: InteractiveModeBase,\n\tauthType?: \"oauth\" | \"api_key\",\n\tinitialSearchInput?: string,\n): void {\n\tconst providerOptions = this.getLoginProviderOptions(authType);\n\tif (providerOptions.length === 0) {\n\t\tconst message =\n\t\t\tauthType === \"oauth\"\n\t\t\t\t? \"No account providers available.\"\n\t\t\t\t: authType === \"api_key\"\n\t\t\t\t\t? \"No API key providers available.\"\n\t\t\t\t\t: \"No login providers available.\";\n\t\tthis.showStatus(message);\n\t\treturn;\n\t}\n\n\tthis.showSelector((done) => {\n\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\"login\",\n\t\t\tthis.session.modelRuntime,\n\t\t\tproviderOptions,\n\t\t\tasync (providerId, selectedAuthType) => {\n\t\t\t\tdone();\n\t\t\t\tconst providerOption = providerOptions.find(\n\t\t\t\t\t(provider) => provider.id === providerId && provider.authType === selectedAuthType,\n\t\t\t\t);\n\t\t\t\tif (providerOption) {\n\t\t\t\t\tawait this.startProviderLogin(providerOption, () =>\n\t\t\t\t\t\tthis.showLoginProviderSelector(authType, initialSearchInput),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tif (authType) this.showLoginAuthTypeSelector();\n\t\t\t\telse this.ui.requestRender();\n\t\t\t},\n\t\t\t(providerId) => this.session.modelRuntime.getProviderAuthStatus(providerId),\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n\nInteractiveModeBase.prototype.showOAuthSelector = async function (\n\tthis: InteractiveModeBase,\n\tmode: \"login\" | \"logout\",\n\tinitialSearchInput?: string,\n): Promise<void> {\n\tif (mode === \"login\") {\n\t\tthis.showLoginAuthTypeSelector();\n\t\treturn;\n\t}\n\tconst providerOptions = this.getLogoutProviderOptions();\n\tif (providerOptions.length === 0) {\n\t\tthis.showStatus(\n\t\t\t\"No stored credentials to remove. /logout only removes credentials saved by /login; environment variables and models.json config are unchanged.\",\n\t\t);\n\t\treturn;\n\t}\n\tthis.showSelector((done) => {\n\t\tconst selector = new OAuthSelectorComponent(\n\t\t\tmode,\n\t\t\tthis.session.modelRuntime,\n\t\t\tproviderOptions,\n\t\t\tasync (providerId, selectedAuthType) => {\n\t\t\t\tdone();\n\t\t\t\tconst providerOption = providerOptions.find(\n\t\t\t\t\t(provider) => provider.id === providerId && provider.authType === selectedAuthType,\n\t\t\t\t);\n\t\t\t\tif (!providerOption) return;\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runtimeHost.logoutProvider(providerOption.id);\n\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t\t\tthis.showStatus(formatLogoutStatus(providerOption.name, providerOption.authType, result.authStatus));\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthis.showError(\n\t\t\t\t\t\terror instanceof CredentialSynchronizationError\n\t\t\t\t\t\t\t? `Credentials removed for ${providerOption.name}, but local model state could not be synchronized: ${message}`\n\t\t\t\t\t\t\t: `Logout failed: ${message}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tundefined,\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n"]}
1
+ {"version":3,"file":"interactive-auth-routing.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-routing.ts"],"names":[],"mappings":"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","sourcesContent":["import { builtinProviders } from \"@bastani/pi-ai/providers/all\";\nimport { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport type { AuthStatus } from \"../../core/provider-composer.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype AuthSelectorProvider,\n\tExtensionSelectorComponent,\n\tOAuthSelectorComponent,\n} from \"./interactive-mode-deps.ts\";\nimport { BEDROCK_PROVIDER_ID } from \"./interactive-mode-helpers.ts\";\nimport { resolveLoginProviderReference } from \"./login-provider-options.ts\";\n\nexport function formatLogoutStatus(\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tauthStatus: AuthStatus,\n): string {\n\tconst action = authType === \"oauth\" ? `Logged out of ${providerName}` : `Removed stored API key for ${providerName}`;\n\treturn authStatus.source\n\t\t? `${action}. Authentication remains active through ${authStatus.label ?? authStatus.source}.`\n\t\t: action;\n}\n\nexport function getBuiltinApiKeyLoginOptions(getDisplayName: (providerId: string) => string): AuthSelectorProvider[] {\n\treturn builtinProviders()\n\t\t.filter((provider) => provider.auth.apiKey?.login !== undefined)\n\t\t.map((provider) => ({\n\t\t\tid: provider.id,\n\t\t\tname: getDisplayName(provider.id),\n\t\t\tauthType: \"api_key\" as const,\n\t\t}));\n}\n\nfunction subscriptionFlag(isSubscription: boolean | undefined): { subscription?: boolean } {\n\treturn isSubscription === undefined ? {} : { subscription: isSubscription };\n}\n\nInteractiveModeBase.prototype.getLoginProviderOptions = function (\n\tthis: InteractiveModeBase,\n\tauthType?: \"oauth\" | \"api_key\",\n): AuthSelectorProvider[] {\n\tconst oauthProviders = this.session.modelRuntime.getOAuthProviderMetadata();\n\tconst subscriptions = new Map(oauthProviders.map((provider) => [provider.id, provider.isSubscription]));\n\tconst options: AuthSelectorProvider[] = oauthProviders.map((provider) => ({\n\t\tid: provider.id,\n\t\tname: provider.name,\n\t\tauthType: \"oauth\" as const,\n\t\t...subscriptionFlag(provider.isSubscription),\n\t}));\n\tfor (const provider of this.session.modelRuntime.getApiKeyLoginProviderMetadata()) {\n\t\toptions.push({\n\t\t\tid: provider.id,\n\t\t\tname: provider.name,\n\t\t\tauthType: \"api_key\",\n\t\t\t...subscriptionFlag(subscriptions.get(provider.id)),\n\t\t});\n\t}\n\treturn (authType ? options.filter((option) => option.authType === authType) : options).sort((a, b) =>\n\t\ta.name.localeCompare(b.name),\n\t);\n};\nInteractiveModeBase.prototype.getLogoutProviderOptions = function (this: InteractiveModeBase): AuthSelectorProvider[] {\n\tconst runtime = this.session.modelRuntime;\n\tconst providerNames = new Map(runtime.getProviders().map((provider) => [provider.id, provider.name ?? provider.id]));\n\tfor (const provider of runtime.getApiKeyLoginProviderMetadata()) {\n\t\tif (!providerNames.has(provider.id)) providerNames.set(provider.id, provider.name);\n\t}\n\tconst subscriptions = new Map<string, boolean | undefined>();\n\tfor (const provider of runtime.getOAuthProviderMetadata()) {\n\t\tproviderNames.set(provider.id, provider.name);\n\t\tsubscriptions.set(provider.id, provider.isSubscription);\n\t}\n\tconst options: AuthSelectorProvider[] = [];\n\tfor (const [providerId, name] of providerNames) {\n\t\tif (runtime.getProviderAuthStatus(providerId).source !== \"stored\") continue;\n\t\tconst authType = runtime.getStoredCredentialType(providerId);\n\t\tif (authType)\n\t\t\toptions.push({ id: providerId, name, authType, ...subscriptionFlag(subscriptions.get(providerId)) });\n\t}\n\treturn options.sort((a, b) => a.name.localeCompare(b.name));\n};\n\nInteractiveModeBase.prototype.startProviderLogin = async function (\n\tthis: InteractiveModeBase,\n\tproviderOption: AuthSelectorProvider,\n\tonBack?: () => void,\n): Promise<void> {\n\tif (providerOption.authType === \"oauth\") {\n\t\tawait this.showLoginDialog(providerOption.id, providerOption.name, onBack);\n\t} else if (providerOption.id === BEDROCK_PROVIDER_ID) {\n\t\tthis.showBedrockSetupDialog(providerOption.id, providerOption.name, onBack);\n\t} else {\n\t\tawait this.showApiKeyLoginDialog(providerOption.id, providerOption.name, onBack);\n\t}\n};\n\nInteractiveModeBase.prototype.handleLoginCommand = async function (\n\tthis: InteractiveModeBase,\n\tproviderRef?: string,\n): Promise<void> {\n\tif (!providerRef?.trim()) {\n\t\tthis.showLoginAuthTypeSelector();\n\t\treturn;\n\t}\n\tconst resolution = resolveLoginProviderReference(this.getLoginProviderOptions(), providerRef);\n\tif (resolution.kind === \"direct\") {\n\t\tawait this.startProviderLogin(resolution.option);\n\t} else if (resolution.kind === \"choose_method\") {\n\t\tthis.showLoginAuthTypeSelector(resolution.options);\n\t} else {\n\t\tthis.showLoginProviderSelector(undefined, resolution.initialSearch);\n\t}\n};\n\nInteractiveModeBase.prototype.showLoginAuthTypeSelector = function (\n\tthis: InteractiveModeBase,\n\tproviderOptions?: AuthSelectorProvider[],\n): void {\n\tconst subscriptionLabel =\n\t\tproviderOptions?.find((provider) => provider.authType === \"oauth\")?.subscription === false\n\t\t\t? \"Use an account\"\n\t\t\t: \"Use a subscription\";\n\tconst apiKeyLabel = \"Use an API key\";\n\tconst choices = providerOptions\n\t\t? providerOptions.map((provider) => (provider.authType === \"oauth\" ? subscriptionLabel : apiKeyLabel))\n\t\t: [subscriptionLabel, apiKeyLabel];\n\tthis.showSelector((done) => {\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\"Select authentication method:\",\n\t\t\tchoices,\n\t\t\t(option) => {\n\t\t\t\tdone();\n\t\t\t\tconst authType = option === subscriptionLabel ? \"oauth\" : \"api_key\";\n\t\t\t\tconst directOption = providerOptions?.find((provider) => provider.authType === authType);\n\t\t\t\tif (directOption) {\n\t\t\t\t\tvoid this.startProviderLogin(directOption, () => this.showLoginAuthTypeSelector(providerOptions));\n\t\t\t\t} else {\n\t\t\t\t\tthis.showLoginProviderSelector(authType);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginProviderSelector = function (\n\tthis: InteractiveModeBase,\n\tauthType?: \"oauth\" | \"api_key\",\n\tinitialSearchInput?: string,\n): void {\n\tconst providerOptions = this.getLoginProviderOptions(authType);\n\tif (providerOptions.length === 0) {\n\t\tconst message =\n\t\t\tauthType === \"oauth\"\n\t\t\t\t? \"No account providers available.\"\n\t\t\t\t: authType === \"api_key\"\n\t\t\t\t\t? \"No API key providers available.\"\n\t\t\t\t\t: \"No login providers available.\";\n\t\tthis.showStatus(message);\n\t\treturn;\n\t}\n\n\tthis.showSelector((done) => {\n\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\"login\",\n\t\t\tthis.session.modelRuntime,\n\t\t\tproviderOptions,\n\t\t\tasync (providerId, selectedAuthType) => {\n\t\t\t\tdone();\n\t\t\t\tconst providerOption = providerOptions.find(\n\t\t\t\t\t(provider) => provider.id === providerId && provider.authType === selectedAuthType,\n\t\t\t\t);\n\t\t\t\tif (providerOption) {\n\t\t\t\t\tawait this.startProviderLogin(providerOption, () =>\n\t\t\t\t\t\tthis.showLoginProviderSelector(authType, initialSearchInput),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tif (authType) this.showLoginAuthTypeSelector();\n\t\t\t\telse this.ui.requestRender();\n\t\t\t},\n\t\t\t(providerId) => this.session.modelRuntime.getProviderAuthStatus(providerId),\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n\nInteractiveModeBase.prototype.showOAuthSelector = async function (\n\tthis: InteractiveModeBase,\n\tmode: \"login\" | \"logout\",\n\tinitialSearchInput?: string,\n): Promise<void> {\n\tif (mode === \"login\") {\n\t\tthis.showLoginAuthTypeSelector();\n\t\treturn;\n\t}\n\tconst providerOptions = this.getLogoutProviderOptions();\n\tif (providerOptions.length === 0) {\n\t\tthis.showStatus(\n\t\t\t\"No stored credentials to remove. /logout only removes credentials saved by /login; environment variables and models.json config are unchanged.\",\n\t\t);\n\t\treturn;\n\t}\n\tthis.showSelector((done) => {\n\t\tconst selector = new OAuthSelectorComponent(\n\t\t\tmode,\n\t\t\tthis.session.modelRuntime,\n\t\t\tproviderOptions,\n\t\t\tasync (providerId, selectedAuthType) => {\n\t\t\t\tdone();\n\t\t\t\tconst providerOption = providerOptions.find(\n\t\t\t\t\t(provider) => provider.id === providerId && provider.authType === selectedAuthType,\n\t\t\t\t);\n\t\t\t\tif (!providerOption) return;\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runtimeHost.logoutProvider(providerOption.id);\n\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\tthis.setupAutocompleteProvider();\n\t\t\t\t\tthis.showStatus(formatLogoutStatus(providerOption.name, providerOption.authType, result.authStatus));\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthis.showError(\n\t\t\t\t\t\terror instanceof CredentialSynchronizationError\n\t\t\t\t\t\t\t? `Credentials removed for ${providerOption.name}, but local model state could not be synchronized: ${message}`\n\t\t\t\t\t\t\t: `Logout failed: ${message}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tdone();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t},\n\t\t\tundefined,\n\t\t\tinitialSearchInput,\n\t\t);\n\t\treturn { component: selector, focus: selector };\n\t});\n};\n"]}
@@ -28,14 +28,11 @@ InteractiveModeBase.prototype.showExtensionNotify = function (message, type) {
28
28
  InteractiveModeBase.prototype.showExtensionCustom = async function (factory, options) {
29
29
  const savedText = this.editor.getText();
30
30
  const isOverlay = options?.overlay ?? false;
31
- const restoreEditor = (focusEditor) => {
32
- this.editorContainer.clear();
33
- this.editorContainer.addChild(this.editor);
34
- this.editor.setText(savedText);
31
+ const restoreEditor = (mount, focusEditor) => {
35
32
  // Focus fence: a surviving overlay owns input, and taking it away to
36
33
  // "restore" the editor would dismiss a newer native dialog.
37
- if (focusEditor && !this.ui.hasOverlay())
38
- this.ui.setFocus(this.editor);
34
+ this.removeExtensionDialog(mount, focusEditor && !this.ui.hasOverlay());
35
+ this.editor.setText(savedText);
39
36
  this.ui.requestRender();
40
37
  };
41
38
  return new Promise((resolve, reject) => {
@@ -104,27 +101,27 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
104
101
  }
105
102
  }
106
103
  else if (inlineMount) {
107
- const stack = this.inlineCustomUiStack;
108
- const ownsSlot = stack.at(-1) === inlineMount && this.editorContainer.children.includes(inlineMount.component);
109
- stack.splice(stack.indexOf(inlineMount), 1);
104
+ const dialogs = this.extensionDialogs;
105
+ const index = dialogs.findIndex((dialog) => dialog.component === inlineMount);
106
+ if (index === -1)
107
+ return;
108
+ const ownsSlot = index === dialogs.length - 1 && this.editorContainer.children.includes(inlineMount);
110
109
  // An older completion must not clear a newer prompt's editor slot.
111
- if (!ownsSlot)
110
+ if (!ownsSlot) {
111
+ dialogs.splice(index, 1);
112
112
  return;
113
- const previous = stack.at(-1)?.component;
113
+ }
114
+ const previous = dialogs.at(-2)?.component;
115
+ const deferFocus = this.shouldDeferInlineCustomUiFocus();
114
116
  if (previous) {
115
- this.editorContainer.clear();
116
- this.editorContainer.addChild(previous);
117
- if (this.shouldDeferInlineCustomUiFocus()) {
117
+ this.removeExtensionDialog(inlineMount, !deferFocus && !this.ui.hasOverlay());
118
+ if (deferFocus) {
118
119
  this.pendingInlineCustomUiFocus = previous;
119
120
  this.notifyHostCustomUiStateListeners();
120
121
  }
121
- else if (!this.ui.hasOverlay()) {
122
- this.ui.setFocus(previous);
123
- }
124
- this.ui.requestRender();
125
122
  }
126
123
  else {
127
- restoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);
124
+ restoreEditor(inlineMount, !deferFocus && this.pendingInlineCustomUiFocus !== component);
128
125
  }
129
126
  }
130
127
  };
@@ -314,21 +311,14 @@ InteractiveModeBase.prototype.showExtensionCustom = async function (factory, opt
314
311
  }
315
312
  }
316
313
  else {
317
- this.disposeActiveSelector();
318
- inlineMount = { component };
319
- this.inlineCustomUiStack ??= [];
320
- this.inlineCustomUiStack.push(inlineMount);
321
- this.editorContainer.clear();
322
- this.editorContainer.addChild(component);
323
- if (this.shouldDeferInlineCustomUiFocus()) {
314
+ inlineMount = component;
315
+ const deferFocus = this.shouldDeferInlineCustomUiFocus();
316
+ this.pushExtensionDialog(component, undefined, !deferFocus);
317
+ if (deferFocus) {
324
318
  this.pendingInlineCustomUiFocus = component;
325
319
  this.notifyHostCustomUiStateListeners();
326
320
  }
327
- else {
328
- this.ui.setFocus(component);
329
- }
330
321
  mounted = true;
331
- this.ui.requestRender();
332
322
  }
333
323
  })
334
324
  .catch((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReservedBottomOverlay,\n\ttype TranscriptOverlayIntersection,\n\tTranscriptOverlayReserve,\n\ttranscriptOverlayIntersection,\n\ttype WrappedOverlayComponent,\n} from \"./components/reserved-bottom-overlay.ts\";\nimport { InteractiveModeBase, isFullscreenTranscriptScrollAction } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype KeybindingsManager,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { isMouseWheelInput, isOverlayMounted } from \"./interactive-tui.ts\";\n\nfunction validateReservedBottomOverlayOptions(options: OverlayOptions | undefined): void {\n\tconst anchor = options?.anchor;\n\tif (anchor !== \"bottom-left\" && anchor !== \"bottom-center\" && anchor !== \"bottom-right\") {\n\t\tthrow new Error(\n\t\t\t\"reserveTranscriptRows requires an explicit bottom anchor: bottom-left, bottom-center, or bottom-right\",\n\t\t);\n\t}\n\tif (options?.row !== undefined) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support overlayOptions.row\");\n\t}\n\tif (options?.offsetY !== undefined && options.offsetY !== 0) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support a nonzero overlayOptions.offsetY\");\n\t}\n}\n\nInteractiveModeBase.prototype.showExtensionNotify = function (\n\tthis: InteractiveModeBase,\n\tmessage: string,\n\ttype?: \"info\" | \"warning\" | \"error\",\n): void {\n\tif (type === \"error\") {\n\t\tthis.showError(message);\n\t} else if (type === \"warning\") {\n\t\tthis.showWarning(message);\n\t} else {\n\t\tthis.showStatus(message);\n\t}\n};\n\nInteractiveModeBase.prototype.showExtensionCustom = async function <T>(\n\tthis: InteractiveModeBase,\n\tfactory: (\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: T) => void,\n\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\toptions?: {\n\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\toverlay?: boolean;\n\t\tdeferInlineCustomUiFocus?: boolean;\n\t\thandlesInternalUiAction?: boolean;\n\t\treserveTranscriptRows?: boolean;\n\t\tsignal?: AbortSignal;\n\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\tonHandle?: (handle: OverlayHandle) => void;\n\t},\n): Promise<T> {\n\tconst savedText = this.editor.getText();\n\tconst isOverlay = options?.overlay ?? false;\n\n\tconst restoreEditor = (focusEditor: boolean) => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.editor.setText(savedText);\n\t\t// Focus fence: a surviving overlay owns input, and taking it away to\n\t\t// \"restore\" the editor would dismiss a newer native dialog.\n\t\tif (focusEditor && !this.ui.hasOverlay()) this.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\tlet closed = false;\n\t\tlet mounted = false;\n\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\tlet inlineMount: { component: Component } | undefined;\n\t\tlet releaseHostInlineCustomUi: (() => void) | undefined;\n\t\tlet releaseOverlayInlineCustomUiFocusDeferral: (() => void) | undefined;\n\t\tlet transcriptReserveCoordinator: TranscriptOverlayReserve | undefined;\n\t\tlet releaseTranscriptReserveRegistration: (() => void) | undefined;\n\t\tlet releaseOverlayFocusListener: (() => void) | undefined;\n\n\t\tconst disposeComponent = () => {\n\t\t\ttry {\n\t\t\t\tcomponent?.dispose?.();\n\t\t\t} catch {\n\t\t\t\t/* ignore dispose errors */\n\t\t\t}\n\t\t};\n\n\t\tconst releaseHostCustomUi = () => {\n\t\t\tif (component !== undefined && this.pendingInlineCustomUiFocus === component) {\n\t\t\t\tthis.pendingInlineCustomUiFocus = undefined;\n\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t}\n\t\t\treleaseHostInlineCustomUi?.();\n\t\t};\n\n\t\tconst cleanupAbortListener = () => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", abortCustomUi);\n\t\t};\n\n\t\tconst releaseTranscriptReserve = () => {\n\t\t\tconst coordinator = transcriptReserveCoordinator;\n\t\t\treleaseTranscriptReserveRegistration?.();\n\t\t\treleaseTranscriptReserveRegistration = undefined;\n\t\t\ttranscriptReserveCoordinator = undefined;\n\t\t\tif (!coordinator) return;\n\t\t\tif (coordinator.empty) {\n\t\t\t\tthis.documentContainer.removeChild(coordinator);\n\t\t\t\tif (this.transcriptOverlayReserve === coordinator) this.transcriptOverlayReserve = undefined;\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tconst closeMountedUi = () => {\n\t\t\tif (!mounted) return;\n\t\t\tif (isOverlay) {\n\t\t\t\tconst ownedInput = overlayHandle?.isFocused();\n\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t// Hide THIS overlay, not whatever is on top: during engine-death\n\t\t\t\t// teardown an unrelated native overlay can be above this one, and the\n\t\t\t\t// generic top-overlay call would close that instead.\n\t\t\t\tif (overlayHandle) overlayHandle.hide();\n\t\t\t\telse this.ui.hideOverlay();\n\t\t\t\tif (options?.reserveTranscriptRows && ownedInput && !this.ui.hasOverlay()) {\n\t\t\t\t\t// Navigation may have closed while this prompt waited; its preFocus is stale.\n\t\t\t\t\tthis.ui.setFocus(this.editorContainer.children.at(-1) ?? this.editor);\n\t\t\t\t}\n\t\t\t} else if (inlineMount) {\n\t\t\t\tconst stack = this.inlineCustomUiStack;\n\t\t\t\tconst ownsSlot =\n\t\t\t\t\tstack.at(-1) === inlineMount && this.editorContainer.children.includes(inlineMount.component);\n\t\t\t\tstack.splice(stack.indexOf(inlineMount), 1);\n\t\t\t\t// An older completion must not clear a newer prompt's editor slot.\n\t\t\t\tif (!ownsSlot) return;\n\t\t\t\tconst previous = stack.at(-1)?.component;\n\t\t\t\tif (previous) {\n\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\tthis.editorContainer.addChild(previous);\n\t\t\t\t\tif (this.shouldDeferInlineCustomUiFocus()) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = previous;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t} else if (!this.ui.hasOverlay()) {\n\t\t\t\t\t\tthis.ui.setFocus(previous);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else {\n\t\t\t\t\trestoreEditor(!this.shouldDeferInlineCustomUiFocus() && this.pendingInlineCustomUiFocus !== component);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst close = (result: T) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst rejectAndClose = (reason: unknown) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\treject(reason);\n\t\t};\n\n\t\tfunction abortCustomUi(): void {\n\t\t\trejectAndClose(options?.signal?.reason ?? new Error(\"Extension custom UI aborted\"));\n\t\t}\n\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\treleaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi(options?.purpose);\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", abortCustomUi, { once: true });\n\n\t\tlet factoryResult: (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>;\n\t\ttry {\n\t\t\tfactoryResult = factory(this.ui, theme, this.keybindings, close);\n\t\t} catch (err) {\n\t\t\trejectAndClose(err);\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.resolve(factoryResult)\n\t\t\t.then((c) => {\n\t\t\t\tif (closed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tc.dispose?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = c;\n\t\t\t\tif (options?.handlesInternalUiAction === true) {\n\t\t\t\t\t(component as Component & { handlesInternalUiAction?: boolean }).handlesInternalUiAction = true;\n\t\t\t\t}\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\tconst w = (component as { width?: number } | undefined)?.width;\n\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t};\n\t\t\t\t\t// A reserving overlay is bounded so a transcript strip always\n\t\t\t\t\t// survives, and the rows it still covers are added to the end of\n\t\t\t\t\t// the document so the scroll clamp can raise them into that strip.\n\t\t\t\t\tconst resolvedOverlayOptions = resolveOptions();\n\t\t\t\t\tlet mountedOverlayOptions = resolvedOverlayOptions;\n\t\t\t\t\tlet mountedComponent = component;\n\t\t\t\t\tlet pendingReserve: (() => TranscriptOverlayIntersection | undefined) | undefined;\n\t\t\t\t\tif (options?.reserveTranscriptRows === true) {\n\t\t\t\t\t\tvalidateReservedBottomOverlayOptions(resolvedOverlayOptions);\n\t\t\t\t\t\t// `custom()` documents the richer `ExtensionCustomComponent`\n\t\t\t\t\t\t// contract; this signature still names pi-tui's narrower one.\n\t\t\t\t\t\tconst bounded = new ReservedBottomOverlay(\n\t\t\t\t\t\t\tcomponent as WrappedOverlayComponent,\n\t\t\t\t\t\t\t() => this.ui.terminal.rows,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.maxHeight,\n\t\t\t\t\t\t\t(data) => isFullscreenTranscriptScrollAction(data, this.keybindings) || isMouseWheelInput(data),\n\t\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmountedComponent = bounded;\n\t\t\t\t\t\tif (resolvedOverlayOptions?.maxHeight !== undefined) {\n\t\t\t\t\t\t\tmountedOverlayOptions = { ...resolvedOverlayOptions };\n\t\t\t\t\t\t\tdelete mountedOverlayOptions.maxHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A raw host reset can remove the exact overlay without touching its\n\t\t\t\t\t\t// handle. Stop reserving in that frame, then remove the registration\n\t\t\t\t\t\t// after the document render traversal finishes.\n\t\t\t\t\t\tlet removalObserved = false;\n\t\t\t\t\t\tconst overlayShowing = (): boolean => {\n\t\t\t\t\t\t\tif (!isOverlayMounted(this.ui, mountedComponent)) {\n\t\t\t\t\t\t\t\tif (!removalObserved) {\n\t\t\t\t\t\t\t\t\tremovalObserved = true;\n\t\t\t\t\t\t\t\t\tqueueMicrotask(releaseTranscriptReserve);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (overlayHandle === undefined || overlayHandle.isHidden()) return false;\n\t\t\t\t\t\t\tconst visible = resolvedOverlayOptions?.visible;\n\t\t\t\t\t\t\treturn visible === undefined ? true : visible(this.ui.terminal.columns, this.ui.terminal.rows);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpendingReserve = () =>\n\t\t\t\t\t\t\toverlayShowing()\n\t\t\t\t\t\t\t\t? transcriptOverlayIntersection(\n\t\t\t\t\t\t\t\t\t\tbounded.renderedHeight,\n\t\t\t\t\t\t\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\t\t\t\t\t\t\tthis.transcriptScrollView?.viewportHeight ?? 0,\n\t\t\t\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst handle = this.ui.showOverlay(mountedComponent, mountedOverlayOptions);\n\t\t\t\t\toverlayHandle = handle;\n\t\t\t\t\tmounted = true;\n\t\t\t\t\t// Register only once the overlay is really up and `mounted` is\n\t\t\t\t\t// set: a throw before this point must not leave a registry entry\n\t\t\t\t\t// or blank-row component in the transcript document.\n\t\t\t\t\tif (pendingReserve) {\n\t\t\t\t\t\tlet coordinator = this.transcriptOverlayReserve;\n\t\t\t\t\t\tif (!coordinator) {\n\t\t\t\t\t\t\tcoordinator = new TranscriptOverlayReserve(() => this.transcriptScrollView?.viewportHeight ?? 0);\n\t\t\t\t\t\t\tthis.transcriptOverlayReserve = coordinator;\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t\tthis.documentContainer.addChild(coordinator);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treleaseTranscriptReserveRegistration = coordinator.register(pendingReserve);\n\t\t\t\t\t}\n\t\t\t\t\tlet releaseDeferral: (() => void) | undefined;\n\t\t\t\t\tlet hiddenByCaller = false;\n\t\t\t\t\tlet hiddenForNavigation = false;\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (pendingReserve && !options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\t// Register before onHandle: caller code may synchronously close this mount.\n\t\t\t\t\t\tconst syncNavigationFocus = () => {\n\t\t\t\t\t\t\thiddenForNavigation =\n\t\t\t\t\t\t\t\tthis.navigationInlineCustomUiDepth > 0 || this.shouldDeferInlineCustomUiFocus();\n\t\t\t\t\t\t\thandle.setHidden(hiddenByCaller || hiddenForNavigation);\n\t\t\t\t\t\t};\n\t\t\t\t\t\treleaseOverlayFocusListener = this.onHostCustomUiStateChange(syncNavigationFocus);\n\t\t\t\t\t\tsyncNavigationFocus();\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus || pendingReserve) {\n\t\t\t\t\t\tconst release = () => {\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst wrappedHandle: OverlayHandle = {\n\t\t\t\t\t\t\thide: () => {\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t\t\t\t\thandle.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetHidden: (hidden) => {\n\t\t\t\t\t\t\t\thiddenByCaller = hidden;\n\t\t\t\t\t\t\t\tif (hidden) release();\n\t\t\t\t\t\t\t\thandle.setHidden(hidden || hiddenForNavigation);\n\t\t\t\t\t\t\t\tif (!hidden && options?.deferInlineCustomUiFocus && releaseDeferral === undefined) {\n\t\t\t\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisHidden: () => handle.isHidden(),\n\t\t\t\t\t\t\tfocus: () => handle.focus(),\n\t\t\t\t\t\t\tunfocus: (unfocusOptions) => handle.unfocus(unfocusOptions),\n\t\t\t\t\t\t\tisFocused: () => handle.isFocused(),\n\t\t\t\t\t\t\tgetBounds: () => handle.getBounds(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\toverlayHandle = wrappedHandle;\n\t\t\t\t\t\toptions?.onHandle?.(wrappedHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.disposeActiveSelector();\n\t\t\t\t\tinlineMount = { component };\n\t\t\t\t\tthis.inlineCustomUiStack ??= [];\n\t\t\t\t\tthis.inlineCustomUiStack.push(inlineMount);\n\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\tif (this.shouldDeferInlineCustomUiFocus()) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = component;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t}\n\t\t\t\t\tmounted = true;\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\trejectAndClose(err);\n\t\t\t});\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionError = function (\n\tthis: InteractiveModeBase,\n\textensionPath: string,\n\terror: string,\n\tstack?: string,\n): void {\n\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\tthis.chatContainer.addChild(errorText);\n\tif (stack) {\n\t\t// Show stack trace in dim color, indented\n\t\tconst stackLines = stack\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t.join(\"\\n\");\n\t\tif (stackLines) {\n\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t}\n\t}\n\tthis.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-custom-ui.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-custom-ui.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tReservedBottomOverlay,\n\ttype TranscriptOverlayIntersection,\n\tTranscriptOverlayReserve,\n\ttranscriptOverlayIntersection,\n\ttype WrappedOverlayComponent,\n} from \"./components/reserved-bottom-overlay.ts\";\nimport { InteractiveModeBase, isFullscreenTranscriptScrollAction } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype KeybindingsManager,\n\ttype OverlayHandle,\n\ttype OverlayOptions,\n\tText,\n\ttype Theme,\n\ttype TUI,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport type { ExtensionDialogComponent } from \"./interactive-mode-types.ts\";\nimport { isMouseWheelInput, isOverlayMounted } from \"./interactive-tui.ts\";\n\nfunction validateReservedBottomOverlayOptions(options: OverlayOptions | undefined): void {\n\tconst anchor = options?.anchor;\n\tif (anchor !== \"bottom-left\" && anchor !== \"bottom-center\" && anchor !== \"bottom-right\") {\n\t\tthrow new Error(\n\t\t\t\"reserveTranscriptRows requires an explicit bottom anchor: bottom-left, bottom-center, or bottom-right\",\n\t\t);\n\t}\n\tif (options?.row !== undefined) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support overlayOptions.row\");\n\t}\n\tif (options?.offsetY !== undefined && options.offsetY !== 0) {\n\t\tthrow new Error(\"reserveTranscriptRows does not support a nonzero overlayOptions.offsetY\");\n\t}\n}\n\nInteractiveModeBase.prototype.showExtensionNotify = function (\n\tthis: InteractiveModeBase,\n\tmessage: string,\n\ttype?: \"info\" | \"warning\" | \"error\",\n): void {\n\tif (type === \"error\") {\n\t\tthis.showError(message);\n\t} else if (type === \"warning\") {\n\t\tthis.showWarning(message);\n\t} else {\n\t\tthis.showStatus(message);\n\t}\n};\n\nInteractiveModeBase.prototype.showExtensionCustom = async function <T>(\n\tthis: InteractiveModeBase,\n\tfactory: (\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: T) => void,\n\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\toptions?: {\n\t\tpurpose?: \"prompt\" | \"navigation\";\n\t\toverlay?: boolean;\n\t\tdeferInlineCustomUiFocus?: boolean;\n\t\thandlesInternalUiAction?: boolean;\n\t\treserveTranscriptRows?: boolean;\n\t\tsignal?: AbortSignal;\n\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\tonHandle?: (handle: OverlayHandle) => void;\n\t},\n): Promise<T> {\n\tconst savedText = this.editor.getText();\n\tconst isOverlay = options?.overlay ?? false;\n\n\tconst restoreEditor = (mount: ExtensionDialogComponent, focusEditor: boolean) => {\n\t\t// Focus fence: a surviving overlay owns input, and taking it away to\n\t\t// \"restore\" the editor would dismiss a newer native dialog.\n\t\tthis.removeExtensionDialog(mount, focusEditor && !this.ui.hasOverlay());\n\t\tthis.editor.setText(savedText);\n\t\tthis.ui.requestRender();\n\t};\n\n\treturn new Promise((resolve, reject) => {\n\t\tlet component: (Component & { dispose?(): void }) | undefined;\n\t\tlet closed = false;\n\t\tlet mounted = false;\n\t\tlet overlayHandle: OverlayHandle | undefined;\n\t\tlet inlineMount: ExtensionDialogComponent | undefined;\n\t\tlet releaseHostInlineCustomUi: (() => void) | undefined;\n\t\tlet releaseOverlayInlineCustomUiFocusDeferral: (() => void) | undefined;\n\t\tlet transcriptReserveCoordinator: TranscriptOverlayReserve | undefined;\n\t\tlet releaseTranscriptReserveRegistration: (() => void) | undefined;\n\t\tlet releaseOverlayFocusListener: (() => void) | undefined;\n\n\t\tconst disposeComponent = () => {\n\t\t\ttry {\n\t\t\t\tcomponent?.dispose?.();\n\t\t\t} catch {\n\t\t\t\t/* ignore dispose errors */\n\t\t\t}\n\t\t};\n\n\t\tconst releaseHostCustomUi = () => {\n\t\t\tif (component !== undefined && this.pendingInlineCustomUiFocus === component) {\n\t\t\t\tthis.pendingInlineCustomUiFocus = undefined;\n\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t}\n\t\t\treleaseHostInlineCustomUi?.();\n\t\t};\n\n\t\tconst cleanupAbortListener = () => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", abortCustomUi);\n\t\t};\n\n\t\tconst releaseTranscriptReserve = () => {\n\t\t\tconst coordinator = transcriptReserveCoordinator;\n\t\t\treleaseTranscriptReserveRegistration?.();\n\t\t\treleaseTranscriptReserveRegistration = undefined;\n\t\t\ttranscriptReserveCoordinator = undefined;\n\t\t\tif (!coordinator) return;\n\t\t\tif (coordinator.empty) {\n\t\t\t\tthis.documentContainer.removeChild(coordinator);\n\t\t\t\tif (this.transcriptOverlayReserve === coordinator) this.transcriptOverlayReserve = undefined;\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tconst closeMountedUi = () => {\n\t\t\tif (!mounted) return;\n\t\t\tif (isOverlay) {\n\t\t\t\tconst ownedInput = overlayHandle?.isFocused();\n\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t// Hide THIS overlay, not whatever is on top: during engine-death\n\t\t\t\t// teardown an unrelated native overlay can be above this one, and the\n\t\t\t\t// generic top-overlay call would close that instead.\n\t\t\t\tif (overlayHandle) overlayHandle.hide();\n\t\t\t\telse this.ui.hideOverlay();\n\t\t\t\tif (options?.reserveTranscriptRows && ownedInput && !this.ui.hasOverlay()) {\n\t\t\t\t\t// Navigation may have closed while this prompt waited; its preFocus is stale.\n\t\t\t\t\tthis.ui.setFocus(this.editorContainer.children.at(-1) ?? this.editor);\n\t\t\t\t}\n\t\t\t} else if (inlineMount) {\n\t\t\t\tconst dialogs = this.extensionDialogs;\n\t\t\t\tconst index = dialogs.findIndex((dialog) => dialog.component === inlineMount);\n\t\t\t\tif (index === -1) return;\n\t\t\t\tconst ownsSlot = index === dialogs.length - 1 && this.editorContainer.children.includes(inlineMount);\n\t\t\t\t// An older completion must not clear a newer prompt's editor slot.\n\t\t\t\tif (!ownsSlot) {\n\t\t\t\t\tdialogs.splice(index, 1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst previous = dialogs.at(-2)?.component;\n\t\t\t\tconst deferFocus = this.shouldDeferInlineCustomUiFocus();\n\t\t\t\tif (previous) {\n\t\t\t\t\tthis.removeExtensionDialog(inlineMount, !deferFocus && !this.ui.hasOverlay());\n\t\t\t\t\tif (deferFocus) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = previous;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trestoreEditor(inlineMount, !deferFocus && this.pendingInlineCustomUiFocus !== component);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst close = (result: T) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\tresolve(result);\n\t\t};\n\n\t\tconst rejectAndClose = (reason: unknown) => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tcleanupAbortListener();\n\t\t\tcloseMountedUi();\n\t\t\tdisposeComponent();\n\t\t\treleaseHostCustomUi();\n\t\t\treject(reason);\n\t\t};\n\n\t\tfunction abortCustomUi(): void {\n\t\t\trejectAndClose(options?.signal?.reason ?? new Error(\"Extension custom UI aborted\"));\n\t\t}\n\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\treleaseHostInlineCustomUi = isOverlay ? undefined : this.beginHostInlineCustomUi(options?.purpose);\n\t\tif (options?.signal?.aborted) {\n\t\t\tabortCustomUi();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", abortCustomUi, { once: true });\n\n\t\tlet factoryResult: (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>;\n\t\ttry {\n\t\t\tfactoryResult = factory(this.ui, theme, this.keybindings, close);\n\t\t} catch (err) {\n\t\t\trejectAndClose(err);\n\t\t\treturn;\n\t\t}\n\n\t\tPromise.resolve(factoryResult)\n\t\t\t.then((c) => {\n\t\t\t\tif (closed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tc.dispose?.();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcomponent = c;\n\t\t\t\tif (options?.handlesInternalUiAction === true) {\n\t\t\t\t\t(component as Component & { handlesInternalUiAction?: boolean }).handlesInternalUiAction = true;\n\t\t\t\t}\n\t\t\t\tif (isOverlay) {\n\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\tconst w = (component as { width?: number } | undefined)?.width;\n\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t};\n\t\t\t\t\t// A reserving overlay is bounded so a transcript strip always\n\t\t\t\t\t// survives, and the rows it still covers are added to the end of\n\t\t\t\t\t// the document so the scroll clamp can raise them into that strip.\n\t\t\t\t\tconst resolvedOverlayOptions = resolveOptions();\n\t\t\t\t\tlet mountedOverlayOptions = resolvedOverlayOptions;\n\t\t\t\t\tlet mountedComponent = component;\n\t\t\t\t\tlet pendingReserve: (() => TranscriptOverlayIntersection | undefined) | undefined;\n\t\t\t\t\tif (options?.reserveTranscriptRows === true) {\n\t\t\t\t\t\tvalidateReservedBottomOverlayOptions(resolvedOverlayOptions);\n\t\t\t\t\t\t// `custom()` documents the richer `ExtensionCustomComponent`\n\t\t\t\t\t\t// contract; this signature still names pi-tui's narrower one.\n\t\t\t\t\t\tconst bounded = new ReservedBottomOverlay(\n\t\t\t\t\t\t\tcomponent as WrappedOverlayComponent,\n\t\t\t\t\t\t\t() => this.ui.terminal.rows,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\tresolvedOverlayOptions?.maxHeight,\n\t\t\t\t\t\t\t(data) => isFullscreenTranscriptScrollAction(data, this.keybindings) || isMouseWheelInput(data),\n\t\t\t\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmountedComponent = bounded;\n\t\t\t\t\t\tif (resolvedOverlayOptions?.maxHeight !== undefined) {\n\t\t\t\t\t\t\tmountedOverlayOptions = { ...resolvedOverlayOptions };\n\t\t\t\t\t\t\tdelete mountedOverlayOptions.maxHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// A raw host reset can remove the exact overlay without touching its\n\t\t\t\t\t\t// handle. Stop reserving in that frame, then remove the registration\n\t\t\t\t\t\t// after the document render traversal finishes.\n\t\t\t\t\t\tlet removalObserved = false;\n\t\t\t\t\t\tconst overlayShowing = (): boolean => {\n\t\t\t\t\t\t\tif (!isOverlayMounted(this.ui, mountedComponent)) {\n\t\t\t\t\t\t\t\tif (!removalObserved) {\n\t\t\t\t\t\t\t\t\tremovalObserved = true;\n\t\t\t\t\t\t\t\t\tqueueMicrotask(releaseTranscriptReserve);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (overlayHandle === undefined || overlayHandle.isHidden()) return false;\n\t\t\t\t\t\t\tconst visible = resolvedOverlayOptions?.visible;\n\t\t\t\t\t\t\treturn visible === undefined ? true : visible(this.ui.terminal.columns, this.ui.terminal.rows);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpendingReserve = () =>\n\t\t\t\t\t\t\toverlayShowing()\n\t\t\t\t\t\t\t\t? transcriptOverlayIntersection(\n\t\t\t\t\t\t\t\t\t\tbounded.renderedHeight,\n\t\t\t\t\t\t\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\t\t\t\t\t\t\tthis.transcriptScrollView?.viewportHeight ?? 0,\n\t\t\t\t\t\t\t\t\t\tresolvedOverlayOptions?.margin,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst handle = this.ui.showOverlay(mountedComponent, mountedOverlayOptions);\n\t\t\t\t\toverlayHandle = handle;\n\t\t\t\t\tmounted = true;\n\t\t\t\t\t// Register only once the overlay is really up and `mounted` is\n\t\t\t\t\t// set: a throw before this point must not leave a registry entry\n\t\t\t\t\t// or blank-row component in the transcript document.\n\t\t\t\t\tif (pendingReserve) {\n\t\t\t\t\t\tlet coordinator = this.transcriptOverlayReserve;\n\t\t\t\t\t\tif (!coordinator) {\n\t\t\t\t\t\t\tcoordinator = new TranscriptOverlayReserve(() => this.transcriptScrollView?.viewportHeight ?? 0);\n\t\t\t\t\t\t\tthis.transcriptOverlayReserve = coordinator;\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t\tthis.documentContainer.addChild(coordinator);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranscriptReserveCoordinator = coordinator;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treleaseTranscriptReserveRegistration = coordinator.register(pendingReserve);\n\t\t\t\t\t}\n\t\t\t\t\tlet releaseDeferral: (() => void) | undefined;\n\t\t\t\t\tlet hiddenByCaller = false;\n\t\t\t\t\tlet hiddenForNavigation = false;\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (pendingReserve && !options?.deferInlineCustomUiFocus) {\n\t\t\t\t\t\t// Register before onHandle: caller code may synchronously close this mount.\n\t\t\t\t\t\tconst syncNavigationFocus = () => {\n\t\t\t\t\t\t\thiddenForNavigation =\n\t\t\t\t\t\t\t\tthis.navigationInlineCustomUiDepth > 0 || this.shouldDeferInlineCustomUiFocus();\n\t\t\t\t\t\t\thandle.setHidden(hiddenByCaller || hiddenForNavigation);\n\t\t\t\t\t\t};\n\t\t\t\t\t\treleaseOverlayFocusListener = this.onHostCustomUiStateChange(syncNavigationFocus);\n\t\t\t\t\t\tsyncNavigationFocus();\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.deferInlineCustomUiFocus || pendingReserve) {\n\t\t\t\t\t\tconst release = () => {\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral?.();\n\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst wrappedHandle: OverlayHandle = {\n\t\t\t\t\t\t\thide: () => {\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener?.();\n\t\t\t\t\t\t\t\treleaseOverlayFocusListener = undefined;\n\t\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t\t\treleaseTranscriptReserve();\n\t\t\t\t\t\t\t\thandle.hide();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsetHidden: (hidden) => {\n\t\t\t\t\t\t\t\thiddenByCaller = hidden;\n\t\t\t\t\t\t\t\tif (hidden) release();\n\t\t\t\t\t\t\t\thandle.setHidden(hidden || hiddenForNavigation);\n\t\t\t\t\t\t\t\tif (!hidden && options?.deferInlineCustomUiFocus && releaseDeferral === undefined) {\n\t\t\t\t\t\t\t\t\treleaseDeferral = this.beginInlineCustomUiFocusDeferral();\n\t\t\t\t\t\t\t\t\treleaseOverlayInlineCustomUiFocusDeferral = () => {\n\t\t\t\t\t\t\t\t\t\treleaseDeferral?.();\n\t\t\t\t\t\t\t\t\t\treleaseDeferral = undefined;\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tisHidden: () => handle.isHidden(),\n\t\t\t\t\t\t\tfocus: () => handle.focus(),\n\t\t\t\t\t\t\tunfocus: (unfocusOptions) => handle.unfocus(unfocusOptions),\n\t\t\t\t\t\t\tisFocused: () => handle.isFocused(),\n\t\t\t\t\t\t\tgetBounds: () => handle.getBounds(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\toverlayHandle = wrappedHandle;\n\t\t\t\t\t\toptions?.onHandle?.(wrappedHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinlineMount = component;\n\t\t\t\t\tconst deferFocus = this.shouldDeferInlineCustomUiFocus();\n\t\t\t\t\tthis.pushExtensionDialog(component, undefined, !deferFocus);\n\t\t\t\t\tif (deferFocus) {\n\t\t\t\t\t\tthis.pendingInlineCustomUiFocus = component;\n\t\t\t\t\t\tthis.notifyHostCustomUiStateListeners();\n\t\t\t\t\t}\n\t\t\t\t\tmounted = true;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\trejectAndClose(err);\n\t\t\t});\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionError = function (\n\tthis: InteractiveModeBase,\n\textensionPath: string,\n\terror: string,\n\tstack?: string,\n): void {\n\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\tthis.chatContainer.addChild(errorText);\n\tif (stack) {\n\t\t// Show stack trace in dim color, indented\n\t\tconst stackLines = stack\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t.join(\"\\n\");\n\t\tif (stackLines) {\n\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t}\n\t}\n\tthis.ui.requestRender();\n};\n"]}
@@ -12,49 +12,22 @@ InteractiveModeBase.prototype.showExtensionSelector = function (title, options,
12
12
  resolve(undefined);
13
13
  return;
14
14
  }
15
- const onAbort = () => {
16
- this.hideExtensionSelector(selector);
17
- resolve(undefined);
18
- };
19
- opts?.signal?.addEventListener("abort", onAbort, { once: true });
20
- const selector = new ExtensionSelectorComponent(title, options, (option) => {
15
+ const finish = (option) => {
21
16
  opts?.signal?.removeEventListener("abort", onAbort);
22
- this.hideExtensionSelector(selector);
17
+ selector.dispose();
18
+ this.removeExtensionDialog(selector);
23
19
  resolve(option);
24
- }, () => {
25
- opts?.signal?.removeEventListener("abort", onAbort);
26
- this.hideExtensionSelector(selector);
27
- resolve(undefined);
28
- }, {
20
+ };
21
+ const onAbort = () => finish(undefined);
22
+ opts?.signal?.addEventListener("abort", onAbort, { once: true });
23
+ const selector = new ExtensionSelectorComponent(title, options, (option) => finish(option), () => finish(undefined), {
29
24
  tui: this.ui,
30
25
  timeout: opts?.timeout,
31
26
  onToggleToolsExpanded: () => this.toggleToolOutputExpansion(),
32
27
  });
33
- this.extensionSelector = selector;
34
- this.disposeActiveSelector();
35
- this.editorContainer.clear();
36
- this.editorContainer.addChild(selector);
37
- this.ui.setFocus(selector);
38
- this.programStatus.setBlocked("extension-dialog", blocked);
39
- this.ui.requestRender();
28
+ this.pushExtensionDialog(selector, blocked);
40
29
  });
41
30
  };
42
- /**
43
- * Close the selector. Pass the instance that is closing: a late abort from a
44
- * dead engine generation must never dismiss a newer dialog that has since taken
45
- * over `editorContainer`.
46
- */
47
- InteractiveModeBase.prototype.hideExtensionSelector = function (instance) {
48
- if (instance !== undefined && this.extensionSelector !== instance)
49
- return;
50
- this.extensionSelector?.dispose();
51
- this.editorContainer.clear();
52
- this.editorContainer.addChild(this.editor);
53
- this.extensionSelector = undefined;
54
- this.programStatus.setBlocked("extension-dialog", undefined);
55
- this.ui.setFocus(this.editor);
56
- this.ui.requestRender();
57
- };
58
31
  InteractiveModeBase.prototype.showExtensionConfirm = async function (title, message, opts) {
59
32
  const result = await this.showExtensionSelector(`${title}\n${message}`, ["Yes", "No"], opts, {
60
33
  kind: "permission",
@@ -75,81 +48,35 @@ InteractiveModeBase.prototype.showExtensionInput = function (title, placeholder,
75
48
  resolve(undefined);
76
49
  return;
77
50
  }
78
- const onAbort = () => {
79
- this.hideExtensionInput(input);
80
- resolve(undefined);
81
- };
82
- opts?.signal?.addEventListener("abort", onAbort, { once: true });
83
- const input = new ExtensionInputComponent(title, placeholder, (value) => {
51
+ const finish = (value) => {
84
52
  opts?.signal?.removeEventListener("abort", onAbort);
85
- this.hideExtensionInput(input);
53
+ input.dispose();
54
+ this.removeExtensionDialog(input);
86
55
  resolve(value);
87
- }, () => {
88
- opts?.signal?.removeEventListener("abort", onAbort);
89
- this.hideExtensionInput(input);
90
- resolve(undefined);
91
- }, { tui: this.ui, timeout: opts?.timeout });
92
- this.extensionInput = input;
93
- this.disposeActiveSelector();
94
- this.editorContainer.clear();
95
- this.editorContainer.addChild(input);
96
- this.ui.setFocus(input);
97
- this.programStatus.setBlocked("extension-dialog", { kind: "question", message: title });
98
- this.ui.requestRender();
56
+ };
57
+ const onAbort = () => finish(undefined);
58
+ opts?.signal?.addEventListener("abort", onAbort, { once: true });
59
+ const input = new ExtensionInputComponent(title, placeholder, (value) => finish(value), () => finish(undefined), { tui: this.ui, timeout: opts?.timeout });
60
+ this.pushExtensionDialog(input, { kind: "question", message: title });
99
61
  });
100
62
  };
101
- /** Instance-scoped: see hideExtensionSelector. */
102
- InteractiveModeBase.prototype.hideExtensionInput = function (instance) {
103
- if (instance !== undefined && this.extensionInput !== instance)
104
- return;
105
- this.extensionInput?.dispose();
106
- this.editorContainer.clear();
107
- this.editorContainer.addChild(this.editor);
108
- this.extensionInput = undefined;
109
- this.programStatus.setBlocked("extension-dialog", undefined);
110
- this.ui.setFocus(this.editor);
111
- this.ui.requestRender();
112
- };
113
63
  InteractiveModeBase.prototype.showExtensionEditor = function (title, prefill, opts) {
114
64
  return new Promise((resolve) => {
115
65
  if (opts?.signal?.aborted) {
116
66
  resolve(undefined);
117
67
  return;
118
68
  }
119
- const onAbort = () => {
120
- this.hideExtensionEditor(editor);
121
- resolve(undefined);
122
- };
123
- opts?.signal?.addEventListener("abort", onAbort, { once: true });
124
- const editor = new ExtensionEditorComponent(this.ui, this.keybindings, title, prefill, (value) => {
69
+ const finish = (value) => {
125
70
  opts?.signal?.removeEventListener("abort", onAbort);
126
- this.hideExtensionEditor(editor);
71
+ this.removeExtensionDialog(editor);
127
72
  resolve(value);
128
- }, () => {
129
- opts?.signal?.removeEventListener("abort", onAbort);
130
- this.hideExtensionEditor(editor);
131
- resolve(undefined);
132
- }, undefined, this.settingsManager.getExternalEditorCommand());
133
- this.extensionEditor = editor;
134
- this.disposeActiveSelector();
135
- this.editorContainer.clear();
136
- this.editorContainer.addChild(editor);
137
- this.ui.setFocus(editor);
138
- this.programStatus.setBlocked("extension-dialog", { kind: "question", message: title });
139
- this.ui.requestRender();
73
+ };
74
+ const onAbort = () => finish(undefined);
75
+ opts?.signal?.addEventListener("abort", onAbort, { once: true });
76
+ const editor = new ExtensionEditorComponent(this.ui, this.keybindings, title, prefill, (value) => finish(value), () => finish(undefined), undefined, this.settingsManager.getExternalEditorCommand());
77
+ this.pushExtensionDialog(editor, { kind: "question", message: title });
140
78
  });
141
79
  };
142
- /** Instance-scoped: see hideExtensionSelector. */
143
- InteractiveModeBase.prototype.hideExtensionEditor = function (instance) {
144
- if (instance !== undefined && this.extensionEditor !== instance)
145
- return;
146
- this.editorContainer.clear();
147
- this.editorContainer.addChild(this.editor);
148
- this.extensionEditor = undefined;
149
- this.programStatus.setBlocked("extension-dialog", undefined);
150
- this.ui.setFocus(this.editor);
151
- this.ui.requestRender();
152
- };
153
80
  InteractiveModeBase.prototype.setCustomEditorComponent = function (factory) {
154
81
  this.editorComponentFactory = factory;
155
82
  // Save text from current editor before switching
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extension-dialogs.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { showStartupInput, showStartupSelector } from \"../../cli/startup-ui.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype EditorFactory,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\ttype ExtensionUIDialogOptions,\n\tformatMissingSessionCwdPrompt,\n\tgetEditorTheme,\n\ttype MissingSessionCwdError,\n} from \"./interactive-mode-deps.ts\";\nimport { isStartupTrustHeld } from \"./interactive-startup-trust.ts\";\nimport type { BlockedStatus } from \"./program-status-reporter.ts\";\n\nInteractiveModeBase.prototype.showExtensionSelector = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\toptions: string[],\n\topts?: ExtensionUIDialogOptions,\n\tblocked: BlockedStatus = { kind: \"question\", message: title },\n): Promise<string | undefined> {\n\tif (isStartupTrustHeld(this)) {\n\t\treturn showStartupSelector(\n\t\t\tthis.settingsManager,\n\t\t\ttitle,\n\t\t\toptions.map((option) => ({ label: option, value: option })),\n\t\t\topts,\n\t\t);\n\t}\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst onAbort = () => {\n\t\t\tthis.hideExtensionSelector(selector);\n\t\t\tresolve(undefined);\n\t\t};\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions,\n\t\t\t(option) => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionSelector(selector);\n\t\t\t\tresolve(option);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionSelector(selector);\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t\t{\n\t\t\t\ttui: this.ui,\n\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\tonToggleToolsExpanded: () => this.toggleToolOutputExpansion(),\n\t\t\t},\n\t\t);\n\t\tthis.extensionSelector = selector;\n\n\t\tthis.disposeActiveSelector();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(selector);\n\t\tthis.ui.setFocus(selector);\n\t\tthis.programStatus.setBlocked(\"extension-dialog\", blocked);\n\t\tthis.ui.requestRender();\n\t});\n};\n\n/**\n * Close the selector. Pass the instance that is closing: a late abort from a\n * dead engine generation must never dismiss a newer dialog that has since taken\n * over `editorContainer`.\n */\nInteractiveModeBase.prototype.hideExtensionSelector = function (\n\tthis: InteractiveModeBase,\n\tinstance?: ExtensionSelectorComponent,\n): void {\n\tif (instance !== undefined && this.extensionSelector !== instance) return;\n\tthis.extensionSelector?.dispose();\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(this.editor);\n\tthis.extensionSelector = undefined;\n\tthis.programStatus.setBlocked(\"extension-dialog\", undefined);\n\tthis.ui.setFocus(this.editor);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showExtensionConfirm = async function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tmessage: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<boolean> {\n\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts, {\n\t\tkind: \"permission\",\n\t\tmessage: title,\n\t});\n\treturn result === \"Yes\";\n};\n\nInteractiveModeBase.prototype.promptForMissingSessionCwd = async function (\n\tthis: InteractiveModeBase,\n\terror: MissingSessionCwdError,\n): Promise<string | undefined> {\n\tconst confirmed = await this.showExtensionConfirm(\n\t\t\"Session cwd not found\",\n\t\tformatMissingSessionCwdPrompt(error.issue),\n\t);\n\treturn confirmed ? error.issue.fallbackCwd : undefined;\n};\n\nInteractiveModeBase.prototype.showExtensionInput = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tplaceholder?: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<string | undefined> {\n\tif (isStartupTrustHeld(this)) {\n\t\treturn showStartupInput(this.settingsManager, title, placeholder, opts);\n\t}\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst onAbort = () => {\n\t\t\tthis.hideExtensionInput(input);\n\t\t\tresolve(undefined);\n\t\t};\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionInput(input);\n\t\t\t\tresolve(value);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionInput(input);\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t);\n\t\tthis.extensionInput = input;\n\n\t\tthis.disposeActiveSelector();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(input);\n\t\tthis.ui.setFocus(input);\n\t\tthis.programStatus.setBlocked(\"extension-dialog\", { kind: \"question\", message: title });\n\t\tthis.ui.requestRender();\n\t});\n};\n\n/** Instance-scoped: see hideExtensionSelector. */\nInteractiveModeBase.prototype.hideExtensionInput = function (\n\tthis: InteractiveModeBase,\n\tinstance?: ExtensionInputComponent,\n): void {\n\tif (instance !== undefined && this.extensionInput !== instance) return;\n\tthis.extensionInput?.dispose();\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(this.editor);\n\tthis.extensionInput = undefined;\n\tthis.programStatus.setBlocked(\"extension-dialog\", undefined);\n\tthis.ui.setFocus(this.editor);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showExtensionEditor = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tprefill?: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst onAbort = () => {\n\t\t\tthis.hideExtensionEditor(editor);\n\t\t\tresolve(undefined);\n\t\t};\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst editor = new ExtensionEditorComponent(\n\t\t\tthis.ui,\n\t\t\tthis.keybindings,\n\t\t\ttitle,\n\t\t\tprefill,\n\t\t\t(value) => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionEditor(editor);\n\t\t\t\tresolve(value);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tthis.hideExtensionEditor(editor);\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t\tundefined,\n\t\t\tthis.settingsManager.getExternalEditorCommand(),\n\t\t);\n\t\tthis.extensionEditor = editor;\n\n\t\tthis.disposeActiveSelector();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(editor);\n\t\tthis.ui.setFocus(editor);\n\t\tthis.programStatus.setBlocked(\"extension-dialog\", { kind: \"question\", message: title });\n\t\tthis.ui.requestRender();\n\t});\n};\n\n/** Instance-scoped: see hideExtensionSelector. */\nInteractiveModeBase.prototype.hideExtensionEditor = function (\n\tthis: InteractiveModeBase,\n\tinstance?: ExtensionEditorComponent,\n): void {\n\tif (instance !== undefined && this.extensionEditor !== instance) return;\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(this.editor);\n\tthis.extensionEditor = undefined;\n\tthis.programStatus.setBlocked(\"extension-dialog\", undefined);\n\tthis.ui.setFocus(this.editor);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.setCustomEditorComponent = function (\n\tthis: InteractiveModeBase,\n\tfactory: EditorFactory | undefined,\n): void {\n\tthis.editorComponentFactory = factory;\n\n\t// Save text from current editor before switching\n\tconst currentText = this.editor.getText();\n\n\tthis.disposeActiveSelector();\n\tthis.editorContainer.clear();\n\n\tif (factory) {\n\t\t// Create the custom editor with tui, theme, and keybindings\n\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t// Wire up callbacks from the default editor\n\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t// Copy text from previous editor\n\t\tnewEditor.setText(currentText);\n\n\t\t// Copy appearance settings if supported\n\t\tif (newEditor.borderColor !== undefined) {\n\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t}\n\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t}\n\n\t\t// Set autocomplete if supported\n\t\tif (newEditor.setAutocompleteMaxVisible !== undefined) {\n\t\t\tnewEditor.setAutocompleteMaxVisible(this.defaultEditor.getAutocompleteMaxVisible());\n\t\t}\n\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t}\n\n\t\t// If extending CustomEditor, copy app-level handlers\n\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\tif (!customEditor.onEscape) {\n\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t}\n\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t}\n\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t}\n\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t}\n\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t}\n\t\t}\n\n\t\tthis.editor = newEditor;\n\t} else {\n\t\t// Restore default editor with text from custom editor\n\t\tthis.defaultEditor.setText(currentText);\n\t\tthis.editor = this.defaultEditor;\n\t}\n\n\tthis.editorContainer.addChild(this.editor as Component);\n\tif (this.loadingAnimation instanceof AtomicWorkingLoader) {\n\t\tthis.statusContainer.clear();\n\t\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator(this.loadingAnimation);\n\t\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(this.loadingAnimation);\n\t}\n\tthis.ui.setFocus(this.editor as Component);\n\tthis.ui.requestRender();\n};\n"]}
1
+ {"version":3,"file":"interactive-extension-dialogs.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-extension-dialogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { showStartupInput, showStartupSelector } from \"../../cli/startup-ui.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Component,\n\ttype EditorFactory,\n\tExtensionEditorComponent,\n\tExtensionInputComponent,\n\tExtensionSelectorComponent,\n\ttype ExtensionUIDialogOptions,\n\tformatMissingSessionCwdPrompt,\n\tgetEditorTheme,\n\ttype MissingSessionCwdError,\n} from \"./interactive-mode-deps.ts\";\nimport { isStartupTrustHeld } from \"./interactive-startup-trust.ts\";\nimport type { BlockedStatus } from \"./program-status-reporter.ts\";\n\nInteractiveModeBase.prototype.showExtensionSelector = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\toptions: string[],\n\topts?: ExtensionUIDialogOptions,\n\tblocked: BlockedStatus = { kind: \"question\", message: title },\n): Promise<string | undefined> {\n\tif (isStartupTrustHeld(this)) {\n\t\treturn showStartupSelector(\n\t\t\tthis.settingsManager,\n\t\t\ttitle,\n\t\t\toptions.map((option) => ({ label: option, value: option })),\n\t\t\topts,\n\t\t);\n\t}\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst finish = (option: string | undefined) => {\n\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tselector.dispose();\n\t\t\tthis.removeExtensionDialog(selector);\n\t\t\tresolve(option);\n\t\t};\n\t\tconst onAbort = () => finish(undefined);\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\ttitle,\n\t\t\toptions,\n\t\t\t(option) => finish(option),\n\t\t\t() => finish(undefined),\n\t\t\t{\n\t\t\t\ttui: this.ui,\n\t\t\t\ttimeout: opts?.timeout,\n\t\t\t\tonToggleToolsExpanded: () => this.toggleToolOutputExpansion(),\n\t\t\t},\n\t\t);\n\t\tthis.pushExtensionDialog(selector, blocked);\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionConfirm = async function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tmessage: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<boolean> {\n\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts, {\n\t\tkind: \"permission\",\n\t\tmessage: title,\n\t});\n\treturn result === \"Yes\";\n};\n\nInteractiveModeBase.prototype.promptForMissingSessionCwd = async function (\n\tthis: InteractiveModeBase,\n\terror: MissingSessionCwdError,\n): Promise<string | undefined> {\n\tconst confirmed = await this.showExtensionConfirm(\n\t\t\"Session cwd not found\",\n\t\tformatMissingSessionCwdPrompt(error.issue),\n\t);\n\treturn confirmed ? error.issue.fallbackCwd : undefined;\n};\n\nInteractiveModeBase.prototype.showExtensionInput = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tplaceholder?: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<string | undefined> {\n\tif (isStartupTrustHeld(this)) {\n\t\treturn showStartupInput(this.settingsManager, title, placeholder, opts);\n\t}\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst finish = (value: string | undefined) => {\n\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tinput.dispose();\n\t\t\tthis.removeExtensionDialog(input);\n\t\t\tresolve(value);\n\t\t};\n\t\tconst onAbort = () => finish(undefined);\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst input = new ExtensionInputComponent(\n\t\t\ttitle,\n\t\t\tplaceholder,\n\t\t\t(value) => finish(value),\n\t\t\t() => finish(undefined),\n\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t);\n\t\tthis.pushExtensionDialog(input, { kind: \"question\", message: title });\n\t});\n};\n\nInteractiveModeBase.prototype.showExtensionEditor = function (\n\tthis: InteractiveModeBase,\n\ttitle: string,\n\tprefill?: string,\n\topts?: ExtensionUIDialogOptions,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tif (opts?.signal?.aborted) {\n\t\t\tresolve(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tconst finish = (value: string | undefined) => {\n\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.removeExtensionDialog(editor);\n\t\t\tresolve(value);\n\t\t};\n\t\tconst onAbort = () => finish(undefined);\n\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\tconst editor = new ExtensionEditorComponent(\n\t\t\tthis.ui,\n\t\t\tthis.keybindings,\n\t\t\ttitle,\n\t\t\tprefill,\n\t\t\t(value) => finish(value),\n\t\t\t() => finish(undefined),\n\t\t\tundefined,\n\t\t\tthis.settingsManager.getExternalEditorCommand(),\n\t\t);\n\t\tthis.pushExtensionDialog(editor, { kind: \"question\", message: title });\n\t});\n};\n\nInteractiveModeBase.prototype.setCustomEditorComponent = function (\n\tthis: InteractiveModeBase,\n\tfactory: EditorFactory | undefined,\n): void {\n\tthis.editorComponentFactory = factory;\n\n\t// Save text from current editor before switching\n\tconst currentText = this.editor.getText();\n\n\tthis.disposeActiveSelector();\n\tthis.editorContainer.clear();\n\n\tif (factory) {\n\t\t// Create the custom editor with tui, theme, and keybindings\n\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t// Wire up callbacks from the default editor\n\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t// Copy text from previous editor\n\t\tnewEditor.setText(currentText);\n\n\t\t// Copy appearance settings if supported\n\t\tif (newEditor.borderColor !== undefined) {\n\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t}\n\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t}\n\n\t\t// Set autocomplete if supported\n\t\tif (newEditor.setAutocompleteMaxVisible !== undefined) {\n\t\t\tnewEditor.setAutocompleteMaxVisible(this.defaultEditor.getAutocompleteMaxVisible());\n\t\t}\n\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t}\n\n\t\t// If extending CustomEditor, copy app-level handlers\n\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\tif (!customEditor.onEscape) {\n\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t}\n\t\t\tif (!customEditor.onCtrlD) {\n\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t}\n\t\t\tif (!customEditor.onPasteImage) {\n\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t}\n\t\t\tif (!customEditor.onExtensionShortcut) {\n\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t}\n\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t}\n\t\t}\n\n\t\tthis.editor = newEditor;\n\t} else {\n\t\t// Restore default editor with text from custom editor\n\t\tthis.defaultEditor.setText(currentText);\n\t\tthis.editor = this.defaultEditor;\n\t}\n\n\tthis.editorContainer.addChild(this.editor as Component);\n\tif (this.loadingAnimation instanceof AtomicWorkingLoader) {\n\t\tthis.statusContainer.clear();\n\t\tthis.workingIndicatorEmbedded = this.setEditorWorkingStatusIndicator(this.loadingAnimation);\n\t\tif (!this.workingIndicatorEmbedded) this.statusContainer.addChild(this.loadingAnimation);\n\t}\n\tthis.ui.setFocus(this.editor as Component);\n\tthis.ui.requestRender();\n};\n"]}
@@ -52,6 +52,7 @@ InteractiveModeBase.prototype.setupExtensionShortcuts = function (extensionRunne
52
52
  getSystemPrompt: () => this.session.systemPrompt,
53
53
  getRouterModel: () => this.session.settingsManager.getRouterModel(),
54
54
  getModelRouting: () => this.session.settingsManager.getModelRouting(),
55
+ getHttpIdleTimeoutMs: () => this.session.settingsManager.getHttpIdleTimeoutMs(),
55
56
  });
56
57
  // Set up the extension shortcut handler on the default editor
57
58
  this.defaultEditor.onExtensionShortcut = (data) => {
@@ -203,14 +204,12 @@ InteractiveModeBase.prototype.clearExtensionWidgets = function () {
203
204
  this.notifyExtensionWidgetRelease(key);
204
205
  };
205
206
  InteractiveModeBase.prototype.resetExtensionUI = function () {
206
- if (this.extensionSelector) {
207
- this.hideExtensionSelector();
208
- }
209
- if (this.extensionInput) {
210
- this.hideExtensionInput();
211
- }
212
- if (this.extensionEditor) {
213
- this.hideExtensionEditor();
207
+ if (this.extensionDialogs.length > 0) {
208
+ for (const dialog of this.extensionDialogs) {
209
+ dialog.component.dispose?.();
210
+ }
211
+ this.extensionDialogs = [];
212
+ this.showTopExtensionDialog();
214
213
  }
215
214
  this.ui.hideOverlay();
216
215
  this.clearExtensionTerminalInputListeners();