@bastani/atomic 0.9.16-alpha.4 → 0.9.16-alpha.5

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 (404) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +11 -6
  3. package/dist/builtin/intercom/CHANGELOG.md +15 -0
  4. package/dist/builtin/intercom/README.md +6 -4
  5. package/dist/builtin/intercom/broker/broker.ts +34 -8
  6. package/dist/builtin/intercom/broker/client.ts +13 -0
  7. package/dist/builtin/intercom/broker/pending-question-index.ts +50 -0
  8. package/dist/builtin/intercom/broker/send-handler.ts +8 -0
  9. package/dist/builtin/intercom/index.bundle.mjs +2041 -1210
  10. package/dist/builtin/intercom/package.json +2 -2
  11. package/dist/builtin/intercom/skills/intercom/SKILL.md +20 -19
  12. package/dist/builtin/mcp/index.bundle.mjs +1774 -1025
  13. package/dist/builtin/mcp/package.json +2 -2
  14. package/dist/builtin/subagents/CHANGELOG.md +11 -0
  15. package/dist/builtin/subagents/README.md +3 -3
  16. package/dist/builtin/subagents/package.json +3 -3
  17. package/dist/builtin/subagents/skills/subagent/SKILL.md +4 -4
  18. package/dist/builtin/subagents/src/extension/index.bundle.mjs +2641 -1505
  19. package/dist/builtin/web-access/index.bundle.mjs +1750 -1001
  20. package/dist/builtin/web-access/package.json +2 -2
  21. package/dist/builtin/workflows/CHANGELOG.md +20 -0
  22. package/dist/builtin/workflows/README.md +1 -1
  23. package/dist/builtin/workflows/builtin/goal-ledger.ts +54 -10
  24. package/dist/builtin/workflows/builtin/goal-runner.ts +57 -12
  25. package/dist/builtin/workflows/package.json +2 -2
  26. package/dist/builtin/workflows/src/extension/index.bundle.mjs +13603 -12021
  27. package/dist/builtin/workflows/src/index.bundle.mjs +2331 -1277
  28. package/dist/bun/split-loader.js +2 -1
  29. package/dist/bun/split-loader.js.map +1 -1
  30. package/dist/cli/args.d.ts.map +1 -1
  31. package/dist/cli/args.js +6 -1
  32. package/dist/cli/args.js.map +1 -1
  33. package/dist/cli/file-processor.d.ts.map +1 -1
  34. package/dist/cli/file-processor.js +2 -1
  35. package/dist/cli/file-processor.js.map +1 -1
  36. package/dist/config-package-identity.d.ts.map +1 -1
  37. package/dist/config-package-identity.js +2 -1
  38. package/dist/config-package-identity.js.map +1 -1
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/config.js +2 -1
  41. package/dist/config.js.map +1 -1
  42. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  43. package/dist/core/agent-session-auto-compaction.js +64 -28
  44. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  45. package/dist/core/agent-session-compaction.d.ts +2 -0
  46. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  47. package/dist/core/agent-session-compaction.js +25 -5
  48. package/dist/core/agent-session-compaction.js.map +1 -1
  49. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  50. package/dist/core/agent-session-custom-message-commit.js +12 -0
  51. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  52. package/dist/core/agent-session-events.d.ts.map +1 -1
  53. package/dist/core/agent-session-events.js +2 -0
  54. package/dist/core/agent-session-events.js.map +1 -1
  55. package/dist/core/agent-session-export.d.ts +3 -1
  56. package/dist/core/agent-session-export.d.ts.map +1 -1
  57. package/dist/core/agent-session-export.js +22 -2
  58. package/dist/core/agent-session-export.js.map +1 -1
  59. package/dist/core/agent-session-message-queue.d.ts +3 -0
  60. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  61. package/dist/core/agent-session-message-queue.js +10 -0
  62. package/dist/core/agent-session-message-queue.js.map +1 -1
  63. package/dist/core/agent-session-methods.d.ts +15 -9
  64. package/dist/core/agent-session-methods.d.ts.map +1 -1
  65. package/dist/core/agent-session-methods.js.map +1 -1
  66. package/dist/core/agent-session-models.d.ts +8 -13
  67. package/dist/core/agent-session-models.d.ts.map +1 -1
  68. package/dist/core/agent-session-models.js +53 -19
  69. package/dist/core/agent-session-models.js.map +1 -1
  70. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  71. package/dist/core/agent-session-post-tool-compaction.js +12 -0
  72. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  73. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  74. package/dist/core/agent-session-prompt.js +3 -1
  75. package/dist/core/agent-session-prompt.js.map +1 -1
  76. package/dist/core/agent-session-tool-registry.js +3 -3
  77. package/dist/core/agent-session-tool-registry.js.map +1 -1
  78. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  79. package/dist/core/agent-session-transfer.js +1 -0
  80. package/dist/core/agent-session-transfer.js.map +1 -1
  81. package/dist/core/agent-session-tree.d.ts.map +1 -1
  82. package/dist/core/agent-session-tree.js +1 -1
  83. package/dist/core/agent-session-tree.js.map +1 -1
  84. package/dist/core/agent-session-types.d.ts +3 -0
  85. package/dist/core/agent-session-types.d.ts.map +1 -1
  86. package/dist/core/agent-session-types.js.map +1 -1
  87. package/dist/core/agent-session.d.ts +2 -0
  88. package/dist/core/agent-session.d.ts.map +1 -1
  89. package/dist/core/agent-session.js +2 -0
  90. package/dist/core/agent-session.js.map +1 -1
  91. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  92. package/dist/core/auth-storage-backends.js +10 -6
  93. package/dist/core/auth-storage-backends.js.map +1 -1
  94. package/dist/core/auth-storage.d.ts.map +1 -1
  95. package/dist/core/auth-storage.js +4 -3
  96. package/dist/core/auth-storage.js.map +1 -1
  97. package/dist/core/builtin-packages.d.ts.map +1 -1
  98. package/dist/core/builtin-packages.js +2 -1
  99. package/dist/core/builtin-packages.js.map +1 -1
  100. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  101. package/dist/core/compaction/branch-summarization.js +6 -0
  102. package/dist/core/compaction/branch-summarization.js.map +1 -1
  103. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  104. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  105. package/dist/core/compaction/compaction-runner.js +30 -4
  106. package/dist/core/compaction/compaction-runner.js.map +1 -1
  107. package/dist/core/compaction/compaction-types.d.ts +3 -1
  108. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  109. package/dist/core/compaction/compaction-types.js.map +1 -1
  110. package/dist/core/compaction/range-planner.d.ts +3 -1
  111. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  112. package/dist/core/compaction/range-planner.js +11 -1
  113. package/dist/core/compaction/range-planner.js.map +1 -1
  114. package/dist/core/compaction/session-summarization.d.ts.map +1 -1
  115. package/dist/core/compaction/session-summarization.js +6 -0
  116. package/dist/core/compaction/session-summarization.js.map +1 -1
  117. package/dist/core/extensions/api-types.d.ts +8 -3
  118. package/dist/core/extensions/api-types.d.ts.map +1 -1
  119. package/dist/core/extensions/api-types.js.map +1 -1
  120. package/dist/core/extensions/index.d.ts +2 -2
  121. package/dist/core/extensions/index.d.ts.map +1 -1
  122. package/dist/core/extensions/index.js +1 -1
  123. package/dist/core/extensions/index.js.map +1 -1
  124. package/dist/core/extensions/loader-api.d.ts +5 -1
  125. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  126. package/dist/core/extensions/loader-api.js +124 -36
  127. package/dist/core/extensions/loader-api.js.map +1 -1
  128. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  129. package/dist/core/extensions/loader-core.js +18 -4
  130. package/dist/core/extensions/loader-core.js.map +1 -1
  131. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  132. package/dist/core/extensions/loader-runtime.js +10 -2
  133. package/dist/core/extensions/loader-runtime.js.map +1 -1
  134. package/dist/core/extensions/session-events.d.ts +11 -2
  135. package/dist/core/extensions/session-events.d.ts.map +1 -1
  136. package/dist/core/extensions/session-events.js.map +1 -1
  137. package/dist/core/extensions/tool-events.d.ts +13 -3
  138. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  139. package/dist/core/extensions/tool-events.js +3 -0
  140. package/dist/core/extensions/tool-events.js.map +1 -1
  141. package/dist/core/extensions/types.d.ts +1 -1
  142. package/dist/core/extensions/types.d.ts.map +1 -1
  143. package/dist/core/extensions/types.js +1 -1
  144. package/dist/core/extensions/types.js.map +1 -1
  145. package/dist/core/extensions/ui-types.d.ts +2 -2
  146. package/dist/core/extensions/ui-types.js.map +1 -1
  147. package/dist/core/footer-data-provider.d.ts +1 -1
  148. package/dist/core/footer-data-provider.js +1 -1
  149. package/dist/core/footer-data-provider.js.map +1 -1
  150. package/dist/core/keybindings.d.ts +17 -16
  151. package/dist/core/keybindings.d.ts.map +1 -1
  152. package/dist/core/keybindings.js +23 -6
  153. package/dist/core/keybindings.js.map +1 -1
  154. package/dist/core/model-config.d.ts.map +1 -1
  155. package/dist/core/model-config.js +2 -1
  156. package/dist/core/model-config.js.map +1 -1
  157. package/dist/core/model-resolver-initial.d.ts +1 -0
  158. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  159. package/dist/core/model-resolver-initial.js +9 -5
  160. package/dist/core/model-resolver-initial.js.map +1 -1
  161. package/dist/core/models-store.d.ts.map +1 -1
  162. package/dist/core/models-store.js +2 -1
  163. package/dist/core/models-store.js.map +1 -1
  164. package/dist/core/package-manager-git.d.ts.map +1 -1
  165. package/dist/core/package-manager-git.js +2 -1
  166. package/dist/core/package-manager-git.js.map +1 -1
  167. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  168. package/dist/core/package-manager-manifest.js +2 -1
  169. package/dist/core/package-manager-manifest.js.map +1 -1
  170. package/dist/core/package-manager-npm.d.ts.map +1 -1
  171. package/dist/core/package-manager-npm.js +4 -3
  172. package/dist/core/package-manager-npm.js.map +1 -1
  173. package/dist/core/package-manager-operations.d.ts.map +1 -1
  174. package/dist/core/package-manager-operations.js +2 -1
  175. package/dist/core/package-manager-operations.js.map +1 -1
  176. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  177. package/dist/core/package-manager-resource-collector.js +2 -1
  178. package/dist/core/package-manager-resource-collector.js.map +1 -1
  179. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  180. package/dist/core/package-manager-resource-files.js +7 -2
  181. package/dist/core/package-manager-resource-files.js.map +1 -1
  182. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  183. package/dist/core/remote-catalog-provider.js +2 -1
  184. package/dist/core/remote-catalog-provider.js.map +1 -1
  185. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  186. package/dist/core/resource-loader-context-files.js +3 -2
  187. package/dist/core/resource-loader-context-files.js.map +1 -1
  188. package/dist/core/sdk-exports.d.ts +5 -3
  189. package/dist/core/sdk-exports.d.ts.map +1 -1
  190. package/dist/core/sdk-exports.js +4 -2
  191. package/dist/core/sdk-exports.js.map +1 -1
  192. package/dist/core/sdk.d.ts.map +1 -1
  193. package/dist/core/sdk.js +7 -3
  194. package/dist/core/sdk.js.map +1 -1
  195. package/dist/core/session-manager-core.d.ts +2 -2
  196. package/dist/core/session-manager-core.d.ts.map +1 -1
  197. package/dist/core/session-manager-core.js +4 -4
  198. package/dist/core/session-manager-core.js.map +1 -1
  199. package/dist/core/session-manager-entries.d.ts +2 -2
  200. package/dist/core/session-manager-entries.d.ts.map +1 -1
  201. package/dist/core/session-manager-entries.js +4 -3
  202. package/dist/core/session-manager-entries.js.map +1 -1
  203. package/dist/core/session-manager-storage.d.ts.map +1 -1
  204. package/dist/core/session-manager-storage.js +4 -2
  205. package/dist/core/session-manager-storage.js.map +1 -1
  206. package/dist/core/session-manager-types.d.ts +2 -0
  207. package/dist/core/session-manager-types.d.ts.map +1 -1
  208. package/dist/core/session-manager-types.js.map +1 -1
  209. package/dist/core/settings-diagnostics.d.ts +4 -0
  210. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  211. package/dist/core/settings-diagnostics.js +12 -0
  212. package/dist/core/settings-diagnostics.js.map +1 -0
  213. package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
  214. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  215. package/dist/core/settings-manager-basic-accessors.js +23 -0
  216. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  217. package/dist/core/settings-manager-core.d.ts.map +1 -1
  218. package/dist/core/settings-manager-core.js +10 -2
  219. package/dist/core/settings-manager-core.js.map +1 -1
  220. package/dist/core/settings-storage.d.ts.map +1 -1
  221. package/dist/core/settings-storage.js +10 -3
  222. package/dist/core/settings-storage.js.map +1 -1
  223. package/dist/core/settings-types.d.ts +2 -0
  224. package/dist/core/settings-types.d.ts.map +1 -1
  225. package/dist/core/settings-types.js.map +1 -1
  226. package/dist/core/skills.d.ts.map +1 -1
  227. package/dist/core/skills.js +51 -33
  228. package/dist/core/skills.js.map +1 -1
  229. package/dist/core/slash-commands.d.ts.map +1 -1
  230. package/dist/core/slash-commands.js +3 -2
  231. package/dist/core/slash-commands.js.map +1 -1
  232. package/dist/core/system-prompt.d.ts.map +1 -1
  233. package/dist/core/system-prompt.js +11 -2
  234. package/dist/core/system-prompt.js.map +1 -1
  235. package/dist/core/tools/ask-user-question/config.d.ts.map +1 -1
  236. package/dist/core/tools/ask-user-question/config.js +2 -1
  237. package/dist/core/tools/ask-user-question/config.js.map +1 -1
  238. package/dist/core/tools/bash.d.ts +13 -1
  239. package/dist/core/tools/bash.d.ts.map +1 -1
  240. package/dist/core/tools/bash.js +9 -5
  241. package/dist/core/tools/bash.js.map +1 -1
  242. package/dist/core/tools/index.d.ts +21 -5
  243. package/dist/core/tools/index.d.ts.map +1 -1
  244. package/dist/core/tools/index.js +45 -13
  245. package/dist/core/tools/index.js.map +1 -1
  246. package/dist/core/tools/powershell.d.ts +83 -0
  247. package/dist/core/tools/powershell.d.ts.map +1 -0
  248. package/dist/core/tools/powershell.js +89 -0
  249. package/dist/core/tools/powershell.js.map +1 -0
  250. package/dist/core/usage-totals.d.ts.map +1 -1
  251. package/dist/core/usage-totals.js +2 -1
  252. package/dist/core/usage-totals.js.map +1 -1
  253. package/dist/extensions/llama/client.d.ts +6 -0
  254. package/dist/extensions/llama/client.d.ts.map +1 -1
  255. package/dist/extensions/llama/client.js +12 -0
  256. package/dist/extensions/llama/client.js.map +1 -1
  257. package/dist/extensions/llama/index.d.ts.map +1 -1
  258. package/dist/extensions/llama/index.js +2 -0
  259. package/dist/extensions/llama/index.js.map +1 -1
  260. package/dist/extensions/llama/provider.d.ts +3 -1
  261. package/dist/extensions/llama/provider.d.ts.map +1 -1
  262. package/dist/extensions/llama/provider.js +25 -8
  263. package/dist/extensions/llama/provider.js.map +1 -1
  264. package/dist/index-extensions.d.ts +2 -2
  265. package/dist/index-extensions.d.ts.map +1 -1
  266. package/dist/index-extensions.js +1 -1
  267. package/dist/index-extensions.js.map +1 -1
  268. package/dist/index.d.ts +4 -3
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +4 -3
  271. package/dist/index.js.map +1 -1
  272. package/dist/main-stdio.d.ts.map +1 -1
  273. package/dist/main-stdio.js +4 -2
  274. package/dist/main-stdio.js.map +1 -1
  275. package/dist/main.d.ts.map +1 -1
  276. package/dist/main.js +10 -3
  277. package/dist/main.js.map +1 -1
  278. package/dist/migrations-config-values.d.ts.map +1 -1
  279. package/dist/migrations-config-values.js +2 -1
  280. package/dist/migrations-config-values.js.map +1 -1
  281. package/dist/migrations.d.ts.map +1 -1
  282. package/dist/migrations.js +5 -4
  283. package/dist/migrations.js.map +1 -1
  284. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  285. package/dist/modes/interactive/components/footer.js +2 -1
  286. package/dist/modes/interactive/components/footer.js.map +1 -1
  287. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  288. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  289. package/dist/modes/interactive/components/model-selector.js +27 -16
  290. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  291. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  292. package/dist/modes/interactive/components/settings-selector-items.js +67 -14
  293. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  294. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +7 -1
  295. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  296. package/dist/modes/interactive/components/settings-selector-submenus.js +38 -3
  297. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  298. package/dist/modes/interactive/components/settings-selector-types.d.ts +5 -1
  299. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  300. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  301. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -6
  302. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  303. package/dist/modes/interactive/components/thinking-selector.js +65 -27
  304. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  305. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  306. package/dist/modes/interactive/external-editor.js +2 -1
  307. package/dist/modes/interactive/external-editor.js.map +1 -1
  308. package/dist/modes/interactive/interactive-agent-events.js +2 -0
  309. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  310. package/dist/modes/interactive/interactive-auth-login.d.ts +1 -1
  311. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  312. package/dist/modes/interactive/interactive-auth-login.js +9 -1
  313. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  314. package/dist/modes/interactive/interactive-autocomplete.js +9 -0
  315. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  316. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  317. package/dist/modes/interactive/interactive-deferred-startup.js +2 -0
  318. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  319. package/dist/modes/interactive/interactive-editor-actions.js +11 -10
  320. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  321. package/dist/modes/interactive/interactive-input-handling.js +6 -0
  322. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  323. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -0
  324. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  325. package/dist/modes/interactive/interactive-mode-deps.js +1 -0
  326. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  327. package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -0
  328. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  329. package/dist/modes/interactive/interactive-mode-surface.js +0 -1
  330. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  331. package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
  332. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  333. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  334. package/dist/modes/interactive/interactive-model-routing.d.ts +16 -1
  335. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  336. package/dist/modes/interactive/interactive-model-routing.js +62 -3
  337. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  338. package/dist/modes/interactive/interactive-render-chat.js +18 -0
  339. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  340. package/dist/modes/interactive/interactive-selectors.js +10 -8
  341. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  342. package/dist/modes/interactive/interactive-slash-commands.js +6 -5
  343. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  344. package/dist/modes/interactive/interactive-startup.js +9 -1
  345. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  346. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
  347. package/dist/modes/interactive/theme/theme-parse.js +2 -1
  348. package/dist/modes/interactive/theme/theme-parse.js.map +1 -1
  349. package/dist/modes/json-event.d.ts +15 -18
  350. package/dist/modes/json-event.d.ts.map +1 -1
  351. package/dist/modes/json-event.js +21 -17
  352. package/dist/modes/json-event.js.map +1 -1
  353. package/dist/modes/rpc/rpc-client-api.d.ts +4 -0
  354. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  355. package/dist/modes/rpc/rpc-client-api.js +3 -0
  356. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  357. package/dist/utils/frontmatter.d.ts.map +1 -1
  358. package/dist/utils/frontmatter.js +2 -1
  359. package/dist/utils/frontmatter.js.map +1 -1
  360. package/dist/utils/management-http.d.ts +2 -0
  361. package/dist/utils/management-http.d.ts.map +1 -1
  362. package/dist/utils/management-http.js +11 -7
  363. package/dist/utils/management-http.js.map +1 -1
  364. package/dist/utils/shell.d.ts +3 -0
  365. package/dist/utils/shell.d.ts.map +1 -1
  366. package/dist/utils/shell.js +41 -10
  367. package/dist/utils/shell.js.map +1 -1
  368. package/dist/utils/syntax-highlight.d.ts +1 -0
  369. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  370. package/dist/utils/syntax-highlight.js +61 -1
  371. package/dist/utils/syntax-highlight.js.map +1 -1
  372. package/dist/utils/text.d.ts +8 -0
  373. package/dist/utils/text.d.ts.map +1 -0
  374. package/dist/utils/text.js +9 -0
  375. package/dist/utils/text.js.map +1 -0
  376. package/docs/changelog.mdx +1 -1
  377. package/docs/compaction.md +16 -3
  378. package/docs/containerization.md +17 -0
  379. package/docs/custom-provider.md +1 -1
  380. package/docs/environment-variables.md +3 -3
  381. package/docs/extensions.md +22 -5
  382. package/docs/index.md +12 -10
  383. package/docs/intercom.md +5 -3
  384. package/docs/keybindings.md +1 -1
  385. package/docs/llama-cpp.md +1 -1
  386. package/docs/models.md +2 -0
  387. package/docs/quickstart.md +80 -9
  388. package/docs/rpc.md +24 -1
  389. package/docs/sdk.md +11 -0
  390. package/docs/settings.md +16 -7
  391. package/docs/skills.md +3 -2
  392. package/docs/subagents.md +7 -0
  393. package/docs/termux.md +1 -1
  394. package/docs/usage.md +4 -3
  395. package/docs/windows.md +33 -3
  396. package/docs/workflows.md +20 -10
  397. package/examples/extensions/border-status-editor.ts +1 -1
  398. package/examples/extensions/git-checkpoint.ts +1 -1
  399. package/examples/extensions/notify.ts +1 -1
  400. package/examples/extensions/titlebar-spinner.ts +1 -1
  401. package/examples/rpc-extension-ui.ts +1 -1
  402. package/examples/sdk/README.md +1 -1
  403. package/npm-shrinkwrap.json +73 -65
  404. package/package.json +11 -13
@@ -1 +1 @@
1
- {"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { APP_NAME } from \"../../config.ts\";\nimport { createChildProcessEnvironment } from \"../../utils/child-process.ts\";\n\nexport interface ExternalEditorRequest {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nfunction parseEditorCommand(command: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet quote: \"'\" | '\"' | null = null;\n\tlet escaped = false;\n\tlet started = false;\n\n\tfor (const character of command) {\n\t\tif (escaped) {\n\t\t\tcurrent += character;\n\t\t\tescaped = false;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (character === quote) quote = null;\n\t\t\telse current += character;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"'\" || character === '\"') {\n\t\t\tquote = character;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\s/.test(character)) {\n\t\t\tif (started) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t\tstarted = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent += character;\n\t\tstarted = true;\n\t}\n\n\tif (escaped) current += \"\\\\\";\n\tif (started) args.push(current);\n\treturn args;\n}\n\n/**\n * Quote one argument for `cmd.exe`.\n *\n * Node does not quote arguments when `shell: true`, so any value holding a\n * space would otherwise be split into several arguments by the shell.\n * Backslashes are only special when they precede a quote, so double just\n * those runs (plus a trailing run, which would escape the closing quote),\n * escape embedded quotes, then wrap the result.\n */\nexport function quoteWindowsShellArgument(value: string): string {\n\tif (value === \"\") return '\"\"';\n\tconst escaped = value.replace(/(\\\\*)\"/g, '$1$1\\\\\"').replace(/(\\\\*)$/, \"$1$1\");\n\treturn `\"${escaped}\"`;\n}\n\nexport function resolveExternalEditorCommand(\n\tconfiguredCommand?: string,\n\tenvironment: Readonly<Partial<NodeJS.ProcessEnv>> = process.env,\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\tif (configuredCommand?.trim()) return configuredCommand;\n\tif (environment.VISUAL) return environment.VISUAL;\n\tif (environment.EDITOR) return environment.EDITOR;\n\treturn platform === \"win32\" ? \"notepad\" : \"nano\";\n}\n\nexport async function editInExternalEditor(request: ExternalEditorRequest): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), `${APP_NAME}-editor-`));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, request.content, {\n\t\t\tencoding: \"utf-8\",\n\t\t\tflag: \"wx\",\n\t\t\tmode: 0o600,\n\t\t});\n\t\tconst [editor, ...editorArgs] = parseEditorCommand(request.command);\n\t\tif (!editor) return { status: \"failed\" };\n\n\t\tprocess.stdout.write(\n\t\t\t`Launching external editor: ${request.command}\\n${APP_NAME} will resume when the editor exits.\\n`,\n\t\t);\n\n\t\t// Do not use spawnSync. On Windows, synchronous child_process calls can\n\t\t// leave a console read active and race the editor for keyboard input.\n\t\t//\n\t\t// The shell is required on Windows so `.cmd`/`.bat` editor launchers\n\t\t// still run, but Node hands the command line to cmd.exe unquoted, so\n\t\t// quote every token here or paths containing spaces get split apart.\n\t\tconst useShell = process.platform === \"win32\";\n\t\tconst spawnArgs = [...editorArgs, filePath];\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst child = spawn(\n\t\t\t\tuseShell ? quoteWindowsShellArgument(editor) : editor,\n\t\t\t\tuseShell ? spawnArgs.map(quoteWindowsShellArgument) : spawnArgs,\n\t\t\t\t{ stdio: \"inherit\", shell: useShell, env: createChildProcessEnvironment() },\n\t\t\t);\n\t\t\tchild.once(\"error\", () => resolve(null));\n\t\t\tchild.once(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) return { status: \"failed\" };\n\t\treturn {\n\t\t\tstatus: \"complete\",\n\t\t\tcontent: readFileSync(filePath, \"utf-8\").replace(/\\n$/, \"\"),\n\t\t};\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"external-editor.js","sourceRoot":"","sources":["../../../src/modes/interactive/external-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { APP_NAME } from \"../../config.ts\";\nimport { createChildProcessEnvironment } from \"../../utils/child-process.ts\";\nimport { stripBom } from \"../../utils/text.ts\";\n\nexport interface ExternalEditorRequest {\n\tcommand: string;\n\tcontent: string;\n}\n\nexport type ExternalEditorResult = { status: \"complete\"; content: string } | { status: \"failed\" };\n\nfunction parseEditorCommand(command: string): string[] {\n\tconst args: string[] = [];\n\tlet current = \"\";\n\tlet quote: \"'\" | '\"' | null = null;\n\tlet escaped = false;\n\tlet started = false;\n\n\tfor (const character of command) {\n\t\tif (escaped) {\n\t\t\tcurrent += character;\n\t\t\tescaped = false;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"\\\\\" && quote !== \"'\") {\n\t\t\tescaped = true;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (quote) {\n\t\t\tif (character === quote) quote = null;\n\t\t\telse current += character;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"'\" || character === '\"') {\n\t\t\tquote = character;\n\t\t\tstarted = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\s/.test(character)) {\n\t\t\tif (started) {\n\t\t\t\targs.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t\tstarted = false;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent += character;\n\t\tstarted = true;\n\t}\n\n\tif (escaped) current += \"\\\\\";\n\tif (started) args.push(current);\n\treturn args;\n}\n\n/**\n * Quote one argument for `cmd.exe`.\n *\n * Node does not quote arguments when `shell: true`, so any value holding a\n * space would otherwise be split into several arguments by the shell.\n * Backslashes are only special when they precede a quote, so double just\n * those runs (plus a trailing run, which would escape the closing quote),\n * escape embedded quotes, then wrap the result.\n */\nexport function quoteWindowsShellArgument(value: string): string {\n\tif (value === \"\") return '\"\"';\n\tconst escaped = value.replace(/(\\\\*)\"/g, '$1$1\\\\\"').replace(/(\\\\*)$/, \"$1$1\");\n\treturn `\"${escaped}\"`;\n}\n\nexport function resolveExternalEditorCommand(\n\tconfiguredCommand?: string,\n\tenvironment: Readonly<Partial<NodeJS.ProcessEnv>> = process.env,\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\tif (configuredCommand?.trim()) return configuredCommand;\n\tif (environment.VISUAL) return environment.VISUAL;\n\tif (environment.EDITOR) return environment.EDITOR;\n\treturn platform === \"win32\" ? \"notepad\" : \"nano\";\n}\n\nexport async function editInExternalEditor(request: ExternalEditorRequest): Promise<ExternalEditorResult> {\n\tconst directory = mkdtempSync(join(tmpdir(), `${APP_NAME}-editor-`));\n\tconst filePath = join(directory, \"prompt.md\");\n\ttry {\n\t\twriteFileSync(filePath, request.content, {\n\t\t\tencoding: \"utf-8\",\n\t\t\tflag: \"wx\",\n\t\t\tmode: 0o600,\n\t\t});\n\t\tconst [editor, ...editorArgs] = parseEditorCommand(request.command);\n\t\tif (!editor) return { status: \"failed\" };\n\n\t\tprocess.stdout.write(\n\t\t\t`Launching external editor: ${request.command}\\n${APP_NAME} will resume when the editor exits.\\n`,\n\t\t);\n\n\t\t// Do not use spawnSync. On Windows, synchronous child_process calls can\n\t\t// leave a console read active and race the editor for keyboard input.\n\t\t//\n\t\t// The shell is required on Windows so `.cmd`/`.bat` editor launchers\n\t\t// still run, but Node hands the command line to cmd.exe unquoted, so\n\t\t// quote every token here or paths containing spaces get split apart.\n\t\tconst useShell = process.platform === \"win32\";\n\t\tconst spawnArgs = [...editorArgs, filePath];\n\t\tconst exitCode = await new Promise<number | null>((resolve) => {\n\t\t\tconst child = spawn(\n\t\t\t\tuseShell ? quoteWindowsShellArgument(editor) : editor,\n\t\t\t\tuseShell ? spawnArgs.map(quoteWindowsShellArgument) : spawnArgs,\n\t\t\t\t{ stdio: \"inherit\", shell: useShell, env: createChildProcessEnvironment() },\n\t\t\t);\n\t\t\tchild.once(\"error\", () => resolve(null));\n\t\t\tchild.once(\"close\", (code) => resolve(code));\n\t\t});\n\n\t\tif (exitCode !== 0) return { status: \"failed\" };\n\t\treturn {\n\t\t\tstatus: \"complete\",\n\t\t\tcontent: stripBom(readFileSync(filePath, \"utf-8\")).replace(/\\n$/, \"\"),\n\t\t};\n\t} finally {\n\t\ttry {\n\t\t\trmSync(directory, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// Cleanup is best effort.\n\t\t}\n\t}\n}\n"]}
@@ -332,6 +332,8 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
332
332
  this.chatContainer.clear();
333
333
  this.rebuildChatFromMessages({ suppressCompactionBoundary: event.result });
334
334
  this.addCompactionBoundaryToChat(event.result);
335
+ if (event.result.usage)
336
+ this.addCompactionCostNotice("compaction", event.result.usage);
335
337
  this.footer.invalidate();
336
338
  }
337
339
  else if (event.errorMessage && !manualTakeoverPending) {
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-agent-events.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-agent-events.ts"],"names":[],"mappings":"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","sourcesContent":["import { CACHE_TTL_MS, detectCacheMiss } from \"../../core/cache-stats.ts\";\nimport { IsolatedInteractiveRuntime } from \"../interactive-engine/isolated-runtime.ts\";\nimport { RemoteToolExecutionComponent } from \"../interactive-engine/remote-renderer.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { mountIdleStatus } from \"./components/idle-status.ts\";\nimport { appendNewChildrenBeforeAttachedChild } from \"./interactive-child-ordering.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype AgentSessionEvent,\n\tAssistantMessageComponent,\n\tCountdownTimer,\n\tkeyText,\n\tLoader,\n\ttype Message,\n\tpickWhimsicalWorkingMessage,\n\tSpacer,\n\tText,\n\tToolExecutionComponent,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { handleSummarizationRetryEvent } from \"./interactive-summarization-retry-events.ts\";\nimport { applyAssistantMessageDelta, beginStreamingAssistantMessage } from \"./streaming-assistant-message.ts\";\n\nfunction createToolComponent(\n\tmode: InteractiveModeBase,\n\ttoolName: string,\n\ttoolCallId: string,\n\targs: unknown,\n): ToolExecutionComponent | RemoteToolExecutionComponent {\n\tconst options = {\n\t\tshowImages: mode.settingsManager.getShowImages(),\n\t\timageWidthCells: mode.settingsManager.getImageWidthCells(),\n\t};\n\treturn mode.runtimeHost instanceof IsolatedInteractiveRuntime\n\t\t? new RemoteToolExecutionComponent(toolName, toolCallId, args, options, mode.runtimeHost, () =>\n\t\t\t\tmode.ui.requestRender(),\n\t\t\t)\n\t\t: new ToolExecutionComponent(\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\targs,\n\t\t\t\toptions,\n\t\t\t\tmode.getRegisteredToolDefinition(toolName),\n\t\t\t\tmode.ui,\n\t\t\t\tmode.sessionManager.getCwd(),\n\t\t\t);\n}\n\nInteractiveModeBase.prototype.subscribeToAgent = function (this: InteractiveModeBase): void {\n\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\tawait this.handleEvent(event);\n\t});\n};\n\nInteractiveModeBase.prototype.handleEvent = async function (\n\tthis: InteractiveModeBase,\n\tevent: AgentSessionEvent | JsonAgentSessionEvent,\n): Promise<void> {\n\tif (!this.isInitialized) {\n\t\tawait this.init();\n\t}\n\n\tthis.footer.invalidate();\n\n\tswitch (event.type) {\n\t\tcase \"agent_start\":\n\t\t\tthis.pendingTools.clear();\n\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t}\n\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t}\n\t\t\tif (this.retryCountdown) {\n\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t}\n\t\t\tif (this.retryLoader) {\n\t\t\t\tthis.retryLoader.stop();\n\t\t\t\tthis.retryLoader = undefined;\n\t\t\t}\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.stopWorkingLoader();\n\t\t\tif (this.workingVisible) {\n\t\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"turn_start\": {\n\t\t\tthis.workingMessage = pickWhimsicalWorkingMessage();\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tif (\"resetForTurn\" in this.loadingAnimation) this.loadingAnimation.resetForTurn(this.workingMessage);\n\t\t\t\telse this.loadingAnimation.setMessage(this.workingMessage);\n\t\t\t} else if (!this.autoCompactionLoader) {\n\t\t\t\t// Post-tool compaction interposes this turn_start between\n\t\t\t\t// compaction_start and compaction_end. Mounting generic Working here\n\t\t\t\t// would evict the factual compaction status from the shared status\n\t\t\t\t// container and leave a stale `loadingAnimation` that then blocks the\n\t\t\t\t// restore at compaction_end, hiding all activity until the next run.\n\t\t\t\tthis.showWorkingLoaderNow();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"turn_end\": {\n\t\t\tthis.workingMessage = undefined;\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"queue_update\":\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"session_info_changed\":\n\t\t\tthis.updateTerminalTitle();\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"model_changed\":\n\t\t\tthis.refreshBuiltInHeader();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tbreak;\n\n\t\tcase \"thinking_level_changed\":\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.refreshBuiltInHeader();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tbreak;\n\n\t\tcase \"entry_appended\":\n\t\t\tif (event.entry.type === \"custom\") this.addCustomEntryToChat(event.entry);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"agent_settled\":\n\t\t\tawait this.checkShutdownRequested();\n\t\t\tbreak;\n\n\t\tcase \"message_start\":\n\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\tappendNewChildrenBeforeAttachedChild(this.chatContainer, this.streamingComponent, () =>\n\t\t\t\t\tthis.addMessageToChat(event.message),\n\t\t\t\t);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\tif (!this.consumeDeferredRenderedUserInput(this.getUserMessageText(event.message))) {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\tthis.outputPad,\n\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\ttrue,\n\t\t\t\t\tthis.settingsManager.getLatexRenderingEnabled(),\n\t\t\t\t);\n\t\t\t\tthis.streamingMessage = beginStreamingAssistantMessage(event.message);\n\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"message_update\": {\n\t\t\t// `message_start` seeds the stream, ordered deltas build it, and\n\t\t\t// `message_end` supplies the authoritative final message.\n\t\t\tif (this.streamingMessage) {\n\t\t\t\tapplyAssistantMessageDelta(this.streamingMessage, event.assistantMessageEvent);\n\t\t\t}\n\t\t\tif (this.streamingComponent && this.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\n\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\tconst component = createToolComponent(this, content.name, content.id, content.arguments);\n\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"message_end\":\n\t\t\tif (event.message.role === \"user\") break;\n\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\tconst existingAbortMessage =\n\t\t\t\t\t\tthis.streamingMessage.errorMessage && this.streamingMessage.errorMessage !== \"Request was aborted\"\n\t\t\t\t\t\t\t? this.streamingMessage.errorMessage\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\terrorMessage =\n\t\t\t\t\t\texistingAbortMessage ??\n\t\t\t\t\t\t(retryAttempt > 0\n\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t: \"Operation aborted\");\n\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t}\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, false);\n\n\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t} else {\n\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\tthis.footer.invalidate();\n\t\t\t}\n\t\t\tif (event.message.role === \"assistant\" && this.settingsManager.getShowCacheMissNotices()) {\n\t\t\t\tconst miss = detectCacheMiss(this.sessionManager.getEntries(), event.message, {\n\t\t\t\t\tgetModel: (provider, model) => this.session.modelRuntime.getModel(provider, model),\n\t\t\t\t});\n\t\t\t\tif (miss) {\n\t\t\t\t\tconst cause = miss.modelChanged\n\t\t\t\t\t\t? \" after model switch\"\n\t\t\t\t\t\t: miss.idleMs >= CACHE_TTL_MS\n\t\t\t\t\t\t\t? \" after cache TTL expiry\"\n\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t\t\t`Prompt cache miss${cause}: ${miss.missedTokens.toLocaleString()} tokens re-billed ($${miss.missedCost.toFixed(3)})`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"tool_execution_start\": {\n\t\t\tlet component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (!component) {\n\t\t\t\tcomponent = createToolComponent(this, event.toolName, event.toolCallId, event.args);\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t}\n\t\t\tcomponent.markExecutionStarted();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"tool_execution_update\": {\n\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (component) {\n\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"tool_execution_end\": {\n\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (component) {\n\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"agent_end\": {\n\t\t\tconst compactionInProgress = this.compactionActive;\n\t\t\tif (!compactionInProgress && this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t}\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\tif (this.streamingComponent) {\n\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t}\n\t\t\tthis.pendingTools.clear();\n\t\t\tif (this.compactionQueuedMessages.length > 0 && !compactionInProgress) {\n\t\t\t\tvoid this.session.agent.waitForIdle().then(() => this.flushCompactionQueue({ willRetry: false }));\n\t\t\t}\n\n\t\t\tawait this.checkShutdownRequested();\n\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"compaction_start\": {\n\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t}\n\t\t\t// Release any loader left behind by an earlier start before mounting a\n\t\t\t// new one; dropping the reference alone leaks its animation timer.\n\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t}\n\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t// Never clobber an already-saved handler with our own abort closure.\n\t\t\tif (!this.autoCompactionEscapeHandlerSaved) {\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.autoCompactionEscapeHandlerSaved = true;\n\t\t\t}\n\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\tthis.session.abortCompaction();\n\t\t\t};\n\t\t\tthis.stopWorkingLoader();\n\t\t\tconst cancelHint = `(${keyText(\"app.interrupt\")} Cancel)`;\n\t\t\tconst isOverflowAutoCompaction = event.reason === \"overflow\";\n\t\t\tconst label =\n\t\t\t\tevent.reason === \"manual\"\n\t\t\t\t\t? `Compacting context... ${cancelHint}`\n\t\t\t\t\t: `${isOverflowAutoCompaction ? \"Context overflow detected. \" : \"\"}Auto-compacting... ${cancelHint}`;\n\t\t\tthis.autoCompactionLoader = new AtomicWorkingLoader(\n\t\t\t\tthis.ui,\n\t\t\t\tundefined,\n\t\t\t\t(text) => theme.fg(isOverflowAutoCompaction ? \"warning\" : \"muted\", text),\n\t\t\t\tlabel,\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"compaction_end\": {\n\t\t\tconst manualTakeoverPending =\n\t\t\t\tevent.reason !== \"manual\" &&\n\t\t\t\t(event.manualTakeoverPending === true ||\n\t\t\t\t\tthis.manualCompactionTakeoverPending ||\n\t\t\t\t\tthis.session.compactionReason === \"manual\");\n\t\t\tif (manualTakeoverPending) {\n\t\t\t\tthis.manualCompactionTakeoverPending = true;\n\t\t\t} else if (event.reason === \"manual\") {\n\t\t\t\tthis.manualCompactionTakeoverPending = false;\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.autoCompactionEscapeHandlerSaved) {\n\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\tthis.autoCompactionEscapeHandlerSaved = false;\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.autoCompactionLoader) {\n\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\tif (event.aborted) {\n\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t\t} else if (!manualTakeoverPending) {\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t}\n\t\t\t} else if (event.result && !event.errorMessage) {\n\t\t\t\tthis.chatContainer.clear();\n\t\t\t\tthis.rebuildChatFromMessages({ suppressCompactionBoundary: event.result });\n\t\t\t\tthis.addCompactionBoundaryToChat(event.result);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t} else if (event.errorMessage && !manualTakeoverPending) {\n\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\t} else {\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Post-tool compaction resumes the same active run, so no new\n\t\t\t// agent_start event will recreate the working loader. A successful\n\t\t\t// no-op carries no `result` and still continues that stream.\n\t\t\tif (event.midTurn && !event.aborted && !event.errorMessage && !manualTakeoverPending) {\n\t\t\t\tthis.showWorkingLoaderNow();\n\t\t\t}\n\t\t\tif (!event.midTurn && !manualTakeoverPending) void this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"summarization_retry_scheduled\":\n\t\tcase \"summarization_retry_attempt_start\":\n\t\tcase \"summarization_retry_finished\":\n\t\t\thandleSummarizationRetryEvent(this, event);\n\t\t\tbreak;\n\n\t\tcase \"auto_retry_start\": {\n\t\t\t// Set up escape to abort retry\n\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\tthis.session.abortRetry();\n\t\t\t};\n\t\t\t// Show retry indicator\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.retryCountdown?.dispose();\n\t\t\tconst retryMessage = (seconds: number) =>\n\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${seconds}s... (${keyText(\"app.interrupt\")} Cancel)`;\n\t\t\tthis.retryLoader = new Loader(\n\t\t\t\tthis.ui,\n\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\tretryMessage(Math.ceil(event.delayMs / 1000)),\n\t\t\t);\n\t\t\tthis.retryCountdown = new CountdownTimer(\n\t\t\t\tevent.delayMs,\n\t\t\t\tthis.ui,\n\t\t\t\t(seconds) => {\n\t\t\t\t\tthis.retryLoader?.setMessage(retryMessage(seconds));\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"model_fallback_start\": {\n\t\t\tthis.statusContainer.clear();\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.fallbackLoader = new Loader(\n\t\t\t\tthis.ui,\n\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t`Falling back from ${event.from} to ${event.to}...`,\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.fallbackLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"model_fallback_end\": {\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.statusContainer.clear();\n\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"auto_retry_end\": {\n\t\t\t// Restore escape handler\n\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t}\n\t\t\tif (this.retryCountdown) {\n\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t}\n\t\t\t// Stop loader\n\t\t\tif (this.retryLoader) {\n\t\t\t\tthis.retryLoader.stop();\n\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\tif (!event.success) {\n\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"agent_continue_error\": {\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.showError(event.errorMessage);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.getUserMessageText = function (this: InteractiveModeBase, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst textBlocks =\n\t\ttypeof message.content === \"string\"\n\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n};\n"]}
1
+ {"version":3,"file":"interactive-agent-events.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-agent-events.ts"],"names":[],"mappings":"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","sourcesContent":["import { CACHE_TTL_MS, detectCacheMiss } from \"../../core/cache-stats.ts\";\nimport { IsolatedInteractiveRuntime } from \"../interactive-engine/isolated-runtime.ts\";\nimport { RemoteToolExecutionComponent } from \"../interactive-engine/remote-renderer.ts\";\nimport type { JsonAgentSessionEvent } from \"../json-event.ts\";\nimport { AtomicWorkingLoader } from \"./components/atomic-working-status.ts\";\nimport { mountIdleStatus } from \"./components/idle-status.ts\";\nimport { appendNewChildrenBeforeAttachedChild } from \"./interactive-child-ordering.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype AgentSessionEvent,\n\tAssistantMessageComponent,\n\tCountdownTimer,\n\tkeyText,\n\tLoader,\n\ttype Message,\n\tpickWhimsicalWorkingMessage,\n\tSpacer,\n\tText,\n\tToolExecutionComponent,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { handleSummarizationRetryEvent } from \"./interactive-summarization-retry-events.ts\";\nimport { applyAssistantMessageDelta, beginStreamingAssistantMessage } from \"./streaming-assistant-message.ts\";\n\nfunction createToolComponent(\n\tmode: InteractiveModeBase,\n\ttoolName: string,\n\ttoolCallId: string,\n\targs: unknown,\n): ToolExecutionComponent | RemoteToolExecutionComponent {\n\tconst options = {\n\t\tshowImages: mode.settingsManager.getShowImages(),\n\t\timageWidthCells: mode.settingsManager.getImageWidthCells(),\n\t};\n\treturn mode.runtimeHost instanceof IsolatedInteractiveRuntime\n\t\t? new RemoteToolExecutionComponent(toolName, toolCallId, args, options, mode.runtimeHost, () =>\n\t\t\t\tmode.ui.requestRender(),\n\t\t\t)\n\t\t: new ToolExecutionComponent(\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\targs,\n\t\t\t\toptions,\n\t\t\t\tmode.getRegisteredToolDefinition(toolName),\n\t\t\t\tmode.ui,\n\t\t\t\tmode.sessionManager.getCwd(),\n\t\t\t);\n}\n\nInteractiveModeBase.prototype.subscribeToAgent = function (this: InteractiveModeBase): void {\n\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\tawait this.handleEvent(event);\n\t});\n};\n\nInteractiveModeBase.prototype.handleEvent = async function (\n\tthis: InteractiveModeBase,\n\tevent: AgentSessionEvent | JsonAgentSessionEvent,\n): Promise<void> {\n\tif (!this.isInitialized) {\n\t\tawait this.init();\n\t}\n\n\tthis.footer.invalidate();\n\n\tswitch (event.type) {\n\t\tcase \"agent_start\":\n\t\t\tthis.pendingTools.clear();\n\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t}\n\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t}\n\t\t\tif (this.retryCountdown) {\n\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t}\n\t\t\tif (this.retryLoader) {\n\t\t\t\tthis.retryLoader.stop();\n\t\t\t\tthis.retryLoader = undefined;\n\t\t\t}\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.stopWorkingLoader();\n\t\t\tif (this.workingVisible) {\n\t\t\t\tthis.loadingAnimation = this.createWorkingLoader();\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"turn_start\": {\n\t\t\tthis.workingMessage = pickWhimsicalWorkingMessage();\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tif (\"resetForTurn\" in this.loadingAnimation) this.loadingAnimation.resetForTurn(this.workingMessage);\n\t\t\t\telse this.loadingAnimation.setMessage(this.workingMessage);\n\t\t\t} else if (!this.autoCompactionLoader) {\n\t\t\t\t// Post-tool compaction interposes this turn_start between\n\t\t\t\t// compaction_start and compaction_end. Mounting generic Working here\n\t\t\t\t// would evict the factual compaction status from the shared status\n\t\t\t\t// container and leave a stale `loadingAnimation` that then blocks the\n\t\t\t\t// restore at compaction_end, hiding all activity until the next run.\n\t\t\t\tthis.showWorkingLoaderNow();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"turn_end\": {\n\t\t\tthis.workingMessage = undefined;\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"queue_update\":\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"session_info_changed\":\n\t\t\tthis.updateTerminalTitle();\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"model_changed\":\n\t\t\tthis.refreshBuiltInHeader();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tbreak;\n\n\t\tcase \"thinking_level_changed\":\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.refreshBuiltInHeader();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tbreak;\n\n\t\tcase \"entry_appended\":\n\t\t\tif (event.entry.type === \"custom\") this.addCustomEntryToChat(event.entry);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"agent_settled\":\n\t\t\tawait this.checkShutdownRequested();\n\t\t\tbreak;\n\n\t\tcase \"message_start\":\n\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\tappendNewChildrenBeforeAttachedChild(this.chatContainer, this.streamingComponent, () =>\n\t\t\t\t\tthis.addMessageToChat(event.message),\n\t\t\t\t);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\tif (!this.consumeDeferredRenderedUserInput(this.getUserMessageText(event.message))) {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\tthis.hiddenThinkingLabel,\n\t\t\t\t\tthis.outputPad,\n\t\t\t\t\tthis.getMarkdownTransformers(),\n\t\t\t\t\ttrue,\n\t\t\t\t\tthis.settingsManager.getLatexRenderingEnabled(),\n\t\t\t\t);\n\t\t\t\tthis.streamingMessage = beginStreamingAssistantMessage(event.message);\n\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"message_update\": {\n\t\t\t// `message_start` seeds the stream, ordered deltas build it, and\n\t\t\t// `message_end` supplies the authoritative final message.\n\t\t\tif (this.streamingMessage) {\n\t\t\t\tapplyAssistantMessageDelta(this.streamingMessage, event.assistantMessageEvent);\n\t\t\t}\n\t\t\tif (this.streamingComponent && this.streamingMessage?.role === \"assistant\") {\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, true);\n\n\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\tconst component = createToolComponent(this, content.name, content.id, content.arguments);\n\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"message_end\":\n\t\t\tif (event.message.role === \"user\") break;\n\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\tconst existingAbortMessage =\n\t\t\t\t\t\tthis.streamingMessage.errorMessage && this.streamingMessage.errorMessage !== \"Request was aborted\"\n\t\t\t\t\t\t\t? this.streamingMessage.errorMessage\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\terrorMessage =\n\t\t\t\t\t\texistingAbortMessage ??\n\t\t\t\t\t\t(retryAttempt > 0\n\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t: \"Operation aborted\");\n\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t}\n\t\t\t\tthis.streamingComponent.updateContent(this.streamingMessage, false);\n\n\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t} else {\n\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\tthis.footer.invalidate();\n\t\t\t}\n\t\t\tif (event.message.role === \"assistant\" && this.settingsManager.getShowCacheMissNotices()) {\n\t\t\t\tconst miss = detectCacheMiss(this.sessionManager.getEntries(), event.message, {\n\t\t\t\t\tgetModel: (provider, model) => this.session.modelRuntime.getModel(provider, model),\n\t\t\t\t});\n\t\t\t\tif (miss) {\n\t\t\t\t\tconst cause = miss.modelChanged\n\t\t\t\t\t\t? \" after model switch\"\n\t\t\t\t\t\t: miss.idleMs >= CACHE_TTL_MS\n\t\t\t\t\t\t\t? \" after cache TTL expiry\"\n\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\t\tnew Text(\n\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t\t\t`Prompt cache miss${cause}: ${miss.missedTokens.toLocaleString()} tokens re-billed ($${miss.missedCost.toFixed(3)})`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\n\t\tcase \"tool_execution_start\": {\n\t\t\tlet component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (!component) {\n\t\t\t\tcomponent = createToolComponent(this, event.toolName, event.toolCallId, event.args);\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t}\n\t\t\tcomponent.markExecutionStarted();\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"tool_execution_update\": {\n\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (component) {\n\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"tool_execution_end\": {\n\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\tif (component) {\n\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"agent_end\": {\n\t\t\tconst compactionInProgress = this.compactionActive;\n\t\t\tif (!compactionInProgress && this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t}\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\tif (this.streamingComponent) {\n\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t}\n\t\t\tthis.pendingTools.clear();\n\t\t\tif (this.compactionQueuedMessages.length > 0 && !compactionInProgress) {\n\t\t\t\tvoid this.session.agent.waitForIdle().then(() => this.flushCompactionQueue({ willRetry: false }));\n\t\t\t}\n\n\t\t\tawait this.checkShutdownRequested();\n\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"compaction_start\": {\n\t\t\tif (this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(true);\n\t\t\t}\n\t\t\t// Release any loader left behind by an earlier start before mounting a\n\t\t\t// new one; dropping the reference alone leaks its animation timer.\n\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t}\n\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t// Never clobber an already-saved handler with our own abort closure.\n\t\t\tif (!this.autoCompactionEscapeHandlerSaved) {\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.autoCompactionEscapeHandlerSaved = true;\n\t\t\t}\n\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\tthis.session.abortCompaction();\n\t\t\t};\n\t\t\tthis.stopWorkingLoader();\n\t\t\tconst cancelHint = `(${keyText(\"app.interrupt\")} Cancel)`;\n\t\t\tconst isOverflowAutoCompaction = event.reason === \"overflow\";\n\t\t\tconst label =\n\t\t\t\tevent.reason === \"manual\"\n\t\t\t\t\t? `Compacting context... ${cancelHint}`\n\t\t\t\t\t: `${isOverflowAutoCompaction ? \"Context overflow detected. \" : \"\"}Auto-compacting... ${cancelHint}`;\n\t\t\tthis.autoCompactionLoader = new AtomicWorkingLoader(\n\t\t\t\tthis.ui,\n\t\t\t\tundefined,\n\t\t\t\t(text) => theme.fg(isOverflowAutoCompaction ? \"warning\" : \"muted\", text),\n\t\t\t\tlabel,\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"compaction_end\": {\n\t\t\tconst manualTakeoverPending =\n\t\t\t\tevent.reason !== \"manual\" &&\n\t\t\t\t(event.manualTakeoverPending === true ||\n\t\t\t\t\tthis.manualCompactionTakeoverPending ||\n\t\t\t\t\tthis.session.compactionReason === \"manual\");\n\t\t\tif (manualTakeoverPending) {\n\t\t\t\tthis.manualCompactionTakeoverPending = true;\n\t\t\t} else if (event.reason === \"manual\") {\n\t\t\t\tthis.manualCompactionTakeoverPending = false;\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.settingsManager.getShowTerminalProgress()) {\n\t\t\t\tthis.ui.terminal.setProgress(false);\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.autoCompactionEscapeHandlerSaved) {\n\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\tthis.autoCompactionEscapeHandlerSaved = false;\n\t\t\t}\n\t\t\tif (!manualTakeoverPending && this.autoCompactionLoader) {\n\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\tif (event.aborted) {\n\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t\t} else if (!manualTakeoverPending) {\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t}\n\t\t\t} else if (event.result && !event.errorMessage) {\n\t\t\t\tthis.chatContainer.clear();\n\t\t\t\tthis.rebuildChatFromMessages({ suppressCompactionBoundary: event.result });\n\t\t\t\tthis.addCompactionBoundaryToChat(event.result);\n\t\t\t\tif (event.result.usage) this.addCompactionCostNotice(\"compaction\", event.result.usage);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t} else if (event.errorMessage && !manualTakeoverPending) {\n\t\t\t\tif (event.reason === \"manual\") {\n\t\t\t\t\tthis.showError(event.errorMessage);\n\t\t\t\t} else {\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Post-tool compaction resumes the same active run, so no new\n\t\t\t// agent_start event will recreate the working loader. A successful\n\t\t\t// no-op carries no `result` and still continues that stream.\n\t\t\tif (event.midTurn && !event.aborted && !event.errorMessage && !manualTakeoverPending) {\n\t\t\t\tthis.showWorkingLoaderNow();\n\t\t\t}\n\t\t\tif (!event.midTurn && !manualTakeoverPending) void this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"summarization_retry_scheduled\":\n\t\tcase \"summarization_retry_attempt_start\":\n\t\tcase \"summarization_retry_finished\":\n\t\t\thandleSummarizationRetryEvent(this, event);\n\t\t\tbreak;\n\n\t\tcase \"auto_retry_start\": {\n\t\t\t// Set up escape to abort retry\n\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\tthis.session.abortRetry();\n\t\t\t};\n\t\t\t// Show retry indicator\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.retryCountdown?.dispose();\n\t\t\tconst retryMessage = (seconds: number) =>\n\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${seconds}s... (${keyText(\"app.interrupt\")} Cancel)`;\n\t\t\tthis.retryLoader = new Loader(\n\t\t\t\tthis.ui,\n\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\tretryMessage(Math.ceil(event.delayMs / 1000)),\n\t\t\t);\n\t\t\tthis.retryCountdown = new CountdownTimer(\n\t\t\t\tevent.delayMs,\n\t\t\t\tthis.ui,\n\t\t\t\t(seconds) => {\n\t\t\t\t\tthis.retryLoader?.setMessage(retryMessage(seconds));\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"model_fallback_start\": {\n\t\t\tthis.statusContainer.clear();\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.fallbackLoader = new Loader(\n\t\t\t\tthis.ui,\n\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t`Falling back from ${event.from} to ${event.to}...`,\n\t\t\t);\n\t\t\tthis.statusContainer.addChild(this.fallbackLoader);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"model_fallback_end\": {\n\t\t\tif (this.fallbackLoader) {\n\t\t\t\tthis.fallbackLoader.stop();\n\t\t\t\tthis.fallbackLoader = undefined;\n\t\t\t}\n\t\t\tthis.statusContainer.clear();\n\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"auto_retry_end\": {\n\t\t\t// Restore escape handler\n\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t}\n\t\t\tif (this.retryCountdown) {\n\t\t\t\tthis.retryCountdown.dispose();\n\t\t\t\tthis.retryCountdown = undefined;\n\t\t\t}\n\t\t\t// Stop loader\n\t\t\tif (this.retryLoader) {\n\t\t\t\tthis.retryLoader.stop();\n\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tmountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());\n\t\t\t}\n\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\tif (!event.success) {\n\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"agent_continue_error\": {\n\t\t\tthis.stopWorkingLoader();\n\t\t\tthis.showError(event.errorMessage);\n\t\t\tthis.ui.requestRender();\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.getUserMessageText = function (this: InteractiveModeBase, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst textBlocks =\n\t\ttypeof message.content === \"string\"\n\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n};\n"]}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export declare function llamaCppPostLoginGuidance(actionLabel: string, loadedModelCount: number): string;
2
2
  //# sourceMappingURL=interactive-auth-login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-auth-login.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"interactive-auth-login.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"AAiBA,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAI/F"}
@@ -3,6 +3,11 @@ import { isOAuthLoginCancelled } from "../../core/oauth-login.js";
3
3
  import { InteractiveModeBase } from "./interactive-mode-base.js";
4
4
  import { defaultModelPerProvider, ExtensionSelectorComponent, getAuthPath, getDocsPath, LoginDialogComponent, path, theme, } from "./interactive-mode-deps.js";
5
5
  import { hasDefaultModelProvider, isUnknownModel } from "./interactive-mode-helpers.js";
6
+ export function llamaCppPostLoginGuidance(actionLabel, loadedModelCount) {
7
+ return loadedModelCount === 0
8
+ ? `${actionLabel}. No llama.cpp models are loaded. Use /llama to load a model, then /model to select it.`
9
+ : `${actionLabel}. Use /model to select a loaded llama.cpp model, or /llama to manage models.`;
10
+ }
6
11
  InteractiveModeBase.prototype.completeProviderAuthentication = async function (providerId, providerName, authType, previousModel, options = {}) {
7
12
  if (!options.modelsRefreshed) {
8
13
  // Match pi: after authentication persists the credential, a thrown catalog
@@ -15,7 +20,10 @@ InteractiveModeBase.prototype.completeProviderAuthentication = async function (p
15
20
  if (isUnknownModel(previousModel)) {
16
21
  const availableModels = this.session.modelRuntime.getAvailableSnapshot();
17
22
  const providerModels = availableModels.filter((model) => model.provider === providerId);
18
- if (!hasDefaultModelProvider(providerId)) {
23
+ if (providerId === "llama.cpp") {
24
+ selectionError = llamaCppPostLoginGuidance(actionLabel, providerModels.length);
25
+ }
26
+ else if (!hasDefaultModelProvider(providerId)) {
19
27
  selectionError = `${actionLabel}, but no default model is configured for provider "${providerId}". Use /model to select a model.`;
20
28
  }
21
29
  else if (providerModels.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAEN,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,oBAAoB,EAGpB,IAAI,EACJ,KAAK,GACL,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAExF,mBAAmB,CAAC,SAAS,CAAC,8BAA8B,GAAG,KAAK,WAEnE,UAAkB,EAClB,YAAoB,EACpB,QAA6B,EAC7B,aAAqC,EACrC,OAAO,GAAkC,EAAE;IAE3C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC,CAAC,qBAAqB,YAAY,EAAE,CAAC;IAEhH,IAAI,aAAqC,CAAC;IAC1C,IAAI,cAAkC,CAAC;IACvC,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACzE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QACxF,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,cAAc,GAAG,GAAG,WAAW,sDAAsD,UAAU,kCAAkC,CAAC;QACnI,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,cAAc,GAAG,GAAG,WAAW,gFAAgF,CAAC;QACjH,CAAC;aAAM,CAAC;YACP,MAAM,cAAc,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAC3D,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;YAC5E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,cAAc,GAAG,GAAG,WAAW,4BAA4B,cAAc,mDAAmD,CAAC;YAC9H,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACzB,aAAa,GAAG,SAAS,CAAC;oBAC1B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,cAAc,GAAG,GAAG,WAAW,6CAA6C,YAAY,iCAAiC,CAAC;gBAC3H,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC/B,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,cAAc,aAAa,CAAC,EAAE,0BAA0B,WAAW,EAAE,EAAE,CAAC,CAAC;QACvG,KAAK,IAAI,CAAC,uCAAuC,CAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,0BAA0B,WAAW,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,KAAK,IAAI,CAAC,uCAAuC,EAAE,CAAC;QACrD,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAEtD,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,GAAG,EAAE,CAAC,aAAa,EAAE,EACrB,YAAY,EACZ,sBAAsB,CACtB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,kEAAkE,CAAC;QACpF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,8EAA8E,CAAC;QAChG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,qBAAqB,GAAG,KAAK,WAE1D,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAEzC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACtB,2BAA2B;IAC5B,CAAC,EACD,YAAY,CACZ,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAExB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;qBAClE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;SACD,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE;YAC7F,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,KAAK,YAAY,8BAA8B,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CACb,qBAAqB,YAAY,sDAAsD,QAAQ,EAAE,CACjG,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,8BAA8B,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,GAAG,UAEpD,MAA4B,EAC5B,MAAyB;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,aAAa,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAC9C,MAAM,CAAC,OAAO,EACd,MAAM,EACN,CAAC,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC,EACD,GAAG,EAAE;YACJ,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,SAAS,CAAC,CAAC;QACpB,CAAC,CACD,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAEpD,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC3G,MAAM,kBAAkB,GAAG,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEjE,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACtB,2BAA2B;IAC5B,CAAC,EACD,YAAY,EACZ,QAAQ,EAAE,UAAU,CACpB,CAAC;IAEF,kCAAkC;IAClC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAExB,8DAA8D;IAC9D,IAAI,iBAAuD,CAAC;IAC5D,IAAI,gBAAoD,CAAC;IACzD,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjE,iBAAiB,GAAG,OAAO,CAAC;QAC5B,gBAAgB,GAAG,MAAM,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,EAAE;YACzE,MAAM,EAAE,CAAC,IAA4C,EAAE,EAAE;gBACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;oBAC5C,cAAc,EAAE,CAAC,kBAAkB;iBACnC,CAAC,CAAC;gBAEH,IAAI,kBAAkB,EAAE,CAAC;oBACxB,oDAAoD;oBACpD,MAAM;yBACJ,eAAe,CAAC,yDAAyD,CAAC;yBAC1E,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,IAAI,KAAK,IAAI,iBAAiB,EAAE,CAAC;4BAChC,iBAAiB,CAAC,KAAK,CAAC,CAAC;4BACzB,iBAAiB,GAAG,SAAS,CAAC;wBAC/B,CAAC;oBACF,CAAC,CAAC;yBACD,KAAK,CAAC,GAAG,EAAE;wBACX,IAAI,gBAAgB,EAAE,CAAC;4BACtB,gBAAgB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;4BAC/C,gBAAgB,GAAG,SAAS,CAAC;wBAC9B,CAAC;oBACF,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,sDAAsD;YACvD,CAAC;YAED,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;YACrD,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,MAAiD,EAAE,EAAE;gBACrE,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACpG,CAAC;YAED,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE;gBAC/B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,QAAQ,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC;YAElF,iBAAiB,EAAE,GAAG,EAAE,CAAC,iBAAiB;YAE1C,kBAAkB,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxB,iBAAiB,GAAG,SAAS,CAAC;gBAC9B,gBAAgB,GAAG,SAAS,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,CAAC;QAEtB,UAAU;QACV,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC1G,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,KAAK,YAAY,8BAA8B,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,gBAAgB,YAAY,sDAAsD,QAAQ,EAAE,CAAC,CAAC;QAC9G,CAAC;aAAM,IAAI,cAAc,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,SAAS,CAAC,sBAAsB,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;IACF,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport { isOAuthLoginCancelled } from \"../../core/oauth-login.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\tdefaultModelPerProvider,\n\tExtensionSelectorComponent,\n\tgetAuthPath,\n\tgetDocsPath,\n\tLoginDialogComponent,\n\ttype Model,\n\ttype OAuthSelectPrompt,\n\tpath,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tpreviousModel: Model<Api> | undefined,\n\toptions: { modelsRefreshed?: boolean } = {},\n): Promise<void> {\n\tif (!options.modelsRefreshed) {\n\t\t// Match pi: after authentication persists the credential, a thrown catalog\n\t\t// refresh failure remains visible to the caller without rolling it back.\n\t\tawait this.session.modelRuntime.refresh();\n\t}\n\n\tconst actionLabel = authType === \"oauth\" ? `Logged in to ${providerName}` : `Saved API key for ${providerName}`;\n\n\tlet selectedModel: Model<Api> | undefined;\n\tlet selectionError: string | undefined;\n\tif (isUnknownModel(previousModel)) {\n\t\tconst availableModels = this.session.modelRuntime.getAvailableSnapshot();\n\t\tconst providerModels = availableModels.filter((model) => model.provider === providerId);\n\t\tif (!hasDefaultModelProvider(providerId)) {\n\t\t\tselectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n\t\t} else if (providerModels.length === 0) {\n\t\t\tselectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n\t\t} else {\n\t\t\tconst defaultModelId = defaultModelPerProvider[providerId];\n\t\t\tselectedModel = providerModels.find((model) => model.id === defaultModelId);\n\t\t\tif (!selectedModel) {\n\t\t\t\tselectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.setModel(selectedModel);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tselectedModel = undefined;\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tselectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tawait this.updateAvailableProviderCount();\n\tthis.setupAutocompleteProvider();\n\tthis.footer.invalidate();\n\tthis.updateEditorBorderColor();\n\tif (selectedModel) {\n\t\tthis.showStatus(`${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`);\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n\t\tthis.checkDaxnutsEasterEgg(selectedModel);\n\t} else {\n\t\tthis.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n\t\tif (selectionError) {\n\t\t\tthis.showError(selectionError);\n\t\t} else {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): void {\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t() => restoreEditor(),\n\t\tproviderName,\n\t\t\"Amazon Bedrock setup\",\n\t);\n\tdialog.showDetails([\n\t\ttheme.fg(\"text\", \"Amazon Bedrock uses AWS credentials instead of a single API key.\"),\n\t\ttheme.fg(\"text\", \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\"),\n\t\ttheme.fg(\"muted\", \"See:\"),\n\t\ttheme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n\t]);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\ttry {\n\t\tawait this.session.modelRuntime.login(providerId, \"api_key\", {\n\t\t\tsignal: dialog.signal,\n\t\t\tprompt: (prompt) =>\n\t\t\t\tdialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined),\n\t\t\tnotify: (event) => {\n\t\t\t\tif (event.type === \"info\") dialog.showInfo(event.message, event.links);\n\t\t\t\telse if (event.type === \"progress\") dialog.showProgress(event.message);\n\t\t\t},\n\t\t});\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"api_key\", previousModel, {\n\t\t\tmodelsRefreshed: true,\n\t\t});\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(\n\t\t\t\t`Saved API key for ${providerName}, but local model state could not be synchronized: ${errorMsg}`,\n\t\t\t);\n\t\t} else if (!isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function (\n\tthis: InteractiveModeBase,\n\tdialog: LoginDialogComponent,\n\tprompt: OAuthSelectPrompt,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst restoreDialog = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(dialog);\n\t\t\tthis.ui.setFocus(dialog);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t\tconst labels = prompt.options.map((option) => option.label);\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\tprompt.message,\n\t\t\tlabels,\n\t\t\t(optionLabel) => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(prompt.options.find((option) => option.label === optionLabel)?.id);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(selector);\n\t\tthis.ui.setFocus(selector);\n\t\tthis.ui.requestRender();\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\tconst metadata = this.session.modelRuntime?.getOAuthProviderMetadata().find(({ id }) => id === providerId);\n\tconst usesCallbackServer = metadata?.usesCallbackServer === true;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t\tmetadata?.loginLabel,\n\t);\n\n\t// Show dialog in editor container\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\t// Promise for manual code input (racing with callback server)\n\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\tmanualCodeResolve = resolve;\n\t\tmanualCodeReject = reject;\n\t});\n\n\t// Restore editor helper\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tlet loginSucceeded = false;\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginOAuthProvider(providerId, {\n\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\tdialog.showAuth(info.url, info.instructions, {\n\t\t\t\t\tshowCancelHint: !usesCallbackServer,\n\t\t\t\t});\n\n\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t},\n\n\t\t\tonDeviceCode: (info) => {\n\t\t\t\tdialog.showDeviceCode(info);\n\t\t\t\tdialog.showWaiting(\"Waiting for authentication...\");\n\t\t\t},\n\n\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\treturn dialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined);\n\t\t\t},\n\n\t\t\tonProgress: (message: string) => {\n\t\t\t\tdialog.showProgress(message);\n\t\t\t},\n\n\t\t\tonInfo: (message, links) => {\n\t\t\t\tdialog.showInfo(message, links);\n\t\t\t},\n\n\t\t\tonSelect: (prompt: OAuthSelectPrompt) => this.showOAuthLoginSelect(dialog, prompt),\n\n\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\tonManualCodeCancel: () => {\n\t\t\t\tdialog.dismissPendingInput();\n\t\t\t\tmanualCodeResolve?.(\"\");\n\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\tmanualCodeReject = undefined;\n\t\t\t},\n\n\t\t\tsignal: dialog.signal,\n\t\t});\n\t\tloginSucceeded = true;\n\n\t\t// Success\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"oauth\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(`Logged in to ${providerName}, but local model state could not be synchronized: ${errorMsg}`);\n\t\t} else if (loginSucceeded || !isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n"]}
1
+ {"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAEN,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,WAAW,EACX,oBAAoB,EAGpB,IAAI,EACJ,KAAK,GACL,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAExF,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,gBAAwB;IACtF,OAAO,gBAAgB,KAAK,CAAC;QAC5B,CAAC,CAAC,GAAG,WAAW,yFAAyF;QACzG,CAAC,CAAC,GAAG,WAAW,8EAA8E,CAAC;AACjG,CAAC;AAED,mBAAmB,CAAC,SAAS,CAAC,8BAA8B,GAAG,KAAK,WAEnE,UAAkB,EAClB,YAAoB,EACpB,QAA6B,EAC7B,aAAqC,EACrC,OAAO,GAAkC,EAAE;IAE3C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC,CAAC,qBAAqB,YAAY,EAAE,CAAC;IAEhH,IAAI,aAAqC,CAAC;IAC1C,IAAI,cAAkC,CAAC;IACvC,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACzE,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QACxF,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAChC,cAAc,GAAG,yBAAyB,CAAC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,cAAc,GAAG,GAAG,WAAW,sDAAsD,UAAU,kCAAkC,CAAC;QACnI,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,cAAc,GAAG,GAAG,WAAW,gFAAgF,CAAC;QACjH,CAAC;aAAM,CAAC;YACP,MAAM,cAAc,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAC3D,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;YAC5E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpB,cAAc,GAAG,GAAG,WAAW,4BAA4B,cAAc,mDAAmD,CAAC;YAC9H,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC;oBACJ,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACzB,aAAa,GAAG,SAAS,CAAC;oBAC1B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,cAAc,GAAG,GAAG,WAAW,6CAA6C,YAAY,iCAAiC,CAAC;gBAC3H,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAC1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC/B,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,cAAc,aAAa,CAAC,EAAE,0BAA0B,WAAW,EAAE,EAAE,CAAC,CAAC;QACvG,KAAK,IAAI,CAAC,uCAAuC,CAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACP,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,0BAA0B,WAAW,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,KAAK,IAAI,CAAC,uCAAuC,EAAE,CAAC;QACrD,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,sBAAsB,GAAG,UAEtD,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,GAAG,EAAE,CAAC,aAAa,EAAE,EACrB,YAAY,EACZ,sBAAsB,CACtB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,kEAAkE,CAAC;QACpF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,8EAA8E,CAAC;QAChG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,qBAAqB,GAAG,KAAK,WAE1D,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAEzC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACtB,2BAA2B;IAC5B,CAAC,EACD,YAAY,CACZ,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAExB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;qBAClE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;SACD,CAAC,CAAC;QACH,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE;YAC7F,eAAe,EAAE,IAAI;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,KAAK,YAAY,8BAA8B,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CACb,qBAAqB,YAAY,sDAAsD,QAAQ,EAAE,CACjG,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,8BAA8B,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,GAAG,UAEpD,MAA4B,EAC5B,MAAyB;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,aAAa,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,0BAA0B,CAC9C,MAAM,CAAC,OAAO,EACd,MAAM,EACN,CAAC,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC,EACD,GAAG,EAAE;YACJ,aAAa,EAAE,CAAC;YAChB,OAAO,CAAC,SAAS,CAAC,CAAC;QACpB,CAAC,CACD,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,mBAAmB,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK,WAEpD,UAAkB,EAClB,YAAoB;IAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC3G,MAAM,kBAAkB,GAAG,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEjE,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,IAAI,CAAC,EAAE,EACP,UAAU,EACV,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACtB,2BAA2B;IAC5B,CAAC,EACD,YAAY,EACZ,QAAQ,EAAE,UAAU,CACpB,CAAC;IAEF,kCAAkC;IAClC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAExB,8DAA8D;IAC9D,IAAI,iBAAuD,CAAC;IAC5D,IAAI,gBAAoD,CAAC;IACzD,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACjE,iBAAiB,GAAG,OAAO,CAAC;QAC5B,gBAAgB,GAAG,MAAM,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,UAAU,EAAE;YACzE,MAAM,EAAE,CAAC,IAA4C,EAAE,EAAE;gBACxD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;oBAC5C,cAAc,EAAE,CAAC,kBAAkB;iBACnC,CAAC,CAAC;gBAEH,IAAI,kBAAkB,EAAE,CAAC;oBACxB,oDAAoD;oBACpD,MAAM;yBACJ,eAAe,CAAC,yDAAyD,CAAC;yBAC1E,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,IAAI,KAAK,IAAI,iBAAiB,EAAE,CAAC;4BAChC,iBAAiB,CAAC,KAAK,CAAC,CAAC;4BACzB,iBAAiB,GAAG,SAAS,CAAC;wBAC/B,CAAC;oBACF,CAAC,CAAC;yBACD,KAAK,CAAC,GAAG,EAAE;wBACX,IAAI,gBAAgB,EAAE,CAAC;4BACtB,gBAAgB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;4BAC/C,gBAAgB,GAAG,SAAS,CAAC;wBAC9B,CAAC;oBACF,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,sDAAsD;YACvD,CAAC;YAED,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;YACrD,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,MAAiD,EAAE,EAAE;gBACrE,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACpG,CAAC;YAED,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE;gBAC/B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YAED,QAAQ,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC;YAElF,iBAAiB,EAAE,GAAG,EAAE,CAAC,iBAAiB;YAE1C,kBAAkB,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxB,iBAAiB,GAAG,SAAS,CAAC;gBAC9B,gBAAgB,GAAG,SAAS,CAAC;YAC9B,CAAC;YAED,MAAM,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,CAAC;QAEtB,UAAU;QACV,aAAa,EAAE,CAAC;QAChB,MAAM,IAAI,CAAC,8BAA8B,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAC1G,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,aAAa,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,KAAK,YAAY,8BAA8B,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,gBAAgB,YAAY,sDAAsD,QAAQ,EAAE,CAAC,CAAC;QAC9G,CAAC;aAAM,IAAI,cAAc,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,SAAS,CAAC,sBAAsB,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;IACF,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport { isOAuthLoginCancelled } from \"../../core/oauth-login.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\tdefaultModelPerProvider,\n\tExtensionSelectorComponent,\n\tgetAuthPath,\n\tgetDocsPath,\n\tLoginDialogComponent,\n\ttype Model,\n\ttype OAuthSelectPrompt,\n\tpath,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nexport function llamaCppPostLoginGuidance(actionLabel: string, loadedModelCount: number): string {\n\treturn loadedModelCount === 0\n\t\t? `${actionLabel}. No llama.cpp models are loaded. Use /llama to load a model, then /model to select it.`\n\t\t: `${actionLabel}. Use /model to select a loaded llama.cpp model, or /llama to manage models.`;\n}\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tpreviousModel: Model<Api> | undefined,\n\toptions: { modelsRefreshed?: boolean } = {},\n): Promise<void> {\n\tif (!options.modelsRefreshed) {\n\t\t// Match pi: after authentication persists the credential, a thrown catalog\n\t\t// refresh failure remains visible to the caller without rolling it back.\n\t\tawait this.session.modelRuntime.refresh();\n\t}\n\n\tconst actionLabel = authType === \"oauth\" ? `Logged in to ${providerName}` : `Saved API key for ${providerName}`;\n\n\tlet selectedModel: Model<Api> | undefined;\n\tlet selectionError: string | undefined;\n\tif (isUnknownModel(previousModel)) {\n\t\tconst availableModels = this.session.modelRuntime.getAvailableSnapshot();\n\t\tconst providerModels = availableModels.filter((model) => model.provider === providerId);\n\t\tif (providerId === \"llama.cpp\") {\n\t\t\tselectionError = llamaCppPostLoginGuidance(actionLabel, providerModels.length);\n\t\t} else if (!hasDefaultModelProvider(providerId)) {\n\t\t\tselectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n\t\t} else if (providerModels.length === 0) {\n\t\t\tselectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n\t\t} else {\n\t\t\tconst defaultModelId = defaultModelPerProvider[providerId];\n\t\t\tselectedModel = providerModels.find((model) => model.id === defaultModelId);\n\t\t\tif (!selectedModel) {\n\t\t\t\tselectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.setModel(selectedModel);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tselectedModel = undefined;\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tselectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tawait this.updateAvailableProviderCount();\n\tthis.setupAutocompleteProvider();\n\tthis.footer.invalidate();\n\tthis.updateEditorBorderColor();\n\tif (selectedModel) {\n\t\tthis.showStatus(`${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`);\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n\t\tthis.checkDaxnutsEasterEgg(selectedModel);\n\t} else {\n\t\tthis.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n\t\tif (selectionError) {\n\t\t\tthis.showError(selectionError);\n\t\t} else {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): void {\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t() => restoreEditor(),\n\t\tproviderName,\n\t\t\"Amazon Bedrock setup\",\n\t);\n\tdialog.showDetails([\n\t\ttheme.fg(\"text\", \"Amazon Bedrock uses AWS credentials instead of a single API key.\"),\n\t\ttheme.fg(\"text\", \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\"),\n\t\ttheme.fg(\"muted\", \"See:\"),\n\t\ttheme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n\t]);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\ttry {\n\t\tawait this.session.modelRuntime.login(providerId, \"api_key\", {\n\t\t\tsignal: dialog.signal,\n\t\t\tprompt: (prompt) =>\n\t\t\t\tdialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined),\n\t\t\tnotify: (event) => {\n\t\t\t\tif (event.type === \"info\") dialog.showInfo(event.message, event.links);\n\t\t\t\telse if (event.type === \"progress\") dialog.showProgress(event.message);\n\t\t\t},\n\t\t});\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"api_key\", previousModel, {\n\t\t\tmodelsRefreshed: true,\n\t\t});\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(\n\t\t\t\t`Saved API key for ${providerName}, but local model state could not be synchronized: ${errorMsg}`,\n\t\t\t);\n\t\t} else if (!isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function (\n\tthis: InteractiveModeBase,\n\tdialog: LoginDialogComponent,\n\tprompt: OAuthSelectPrompt,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst restoreDialog = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(dialog);\n\t\t\tthis.ui.setFocus(dialog);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t\tconst labels = prompt.options.map((option) => option.label);\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\tprompt.message,\n\t\t\tlabels,\n\t\t\t(optionLabel) => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(prompt.options.find((option) => option.label === optionLabel)?.id);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(selector);\n\t\tthis.ui.setFocus(selector);\n\t\tthis.ui.requestRender();\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\tconst metadata = this.session.modelRuntime?.getOAuthProviderMetadata().find(({ id }) => id === providerId);\n\tconst usesCallbackServer = metadata?.usesCallbackServer === true;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t\tmetadata?.loginLabel,\n\t);\n\n\t// Show dialog in editor container\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\t// Promise for manual code input (racing with callback server)\n\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\tmanualCodeResolve = resolve;\n\t\tmanualCodeReject = reject;\n\t});\n\n\t// Restore editor helper\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tlet loginSucceeded = false;\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginOAuthProvider(providerId, {\n\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\tdialog.showAuth(info.url, info.instructions, {\n\t\t\t\t\tshowCancelHint: !usesCallbackServer,\n\t\t\t\t});\n\n\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t},\n\n\t\t\tonDeviceCode: (info) => {\n\t\t\t\tdialog.showDeviceCode(info);\n\t\t\t\tdialog.showWaiting(\"Waiting for authentication...\");\n\t\t\t},\n\n\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\treturn dialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined);\n\t\t\t},\n\n\t\t\tonProgress: (message: string) => {\n\t\t\t\tdialog.showProgress(message);\n\t\t\t},\n\n\t\t\tonInfo: (message, links) => {\n\t\t\t\tdialog.showInfo(message, links);\n\t\t\t},\n\n\t\t\tonSelect: (prompt: OAuthSelectPrompt) => this.showOAuthLoginSelect(dialog, prompt),\n\n\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\tonManualCodeCancel: () => {\n\t\t\t\tdialog.dismissPendingInput();\n\t\t\t\tmanualCodeResolve?.(\"\");\n\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\tmanualCodeReject = undefined;\n\t\t\t},\n\n\t\t\tsignal: dialog.signal,\n\t\t});\n\t\tloginSucceeded = true;\n\n\t\t// Success\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"oauth\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(`Logged in to ${providerName}, but local model state could not be synchronized: ${errorMsg}`);\n\t\t} else if (loginSucceeded || !isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n"]}
@@ -204,6 +204,15 @@ InteractiveModeBase.prototype.createBaseAutocompleteProvider = function () {
204
204
  }));
205
205
  };
206
206
  }
207
+ const thinkingCommand = slashCommands.find((command) => command.name === "thinking");
208
+ if (thinkingCommand) {
209
+ thinkingCommand.getArgumentCompletions = (prefix) => {
210
+ const levels = fuzzyFilter(this.session.getAvailableThinkingLevels(), prefix, (level) => level);
211
+ if (levels.length === 0)
212
+ return null;
213
+ return levels.map((level) => ({ value: level, label: level }));
214
+ };
215
+ }
207
216
  const loginCommand = slashCommands.find((command) => command.name === "login");
208
217
  if (loginCommand) {
209
218
  loginCommand.getArgumentCompletions = (prefix) => getLoginProviderCompletions(this.getLoginProviderOptions(), prefix);
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSkillCatalog } from \"../../core/skill-catalog.ts\";\nimport {\n\tgetInteractiveEngineRemoteCommandCompletions,\n\tgetInteractiveEngineRemoteCommands,\n} from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\ttype AutocompleteItem,\n\ttype AutocompleteProvider,\n\ttype AutocompleteSuggestions,\n\tBUILTIN_SLASH_COMMANDS,\n\tBUNDLED_EXTENSION_SLASH_COMMANDS,\n\tCombinedAutocompleteProvider,\n\ttype ExtensionRunner,\n\tfuzzyFilter,\n\tgetModelSearchText,\n\thasSupportedCodexFastModeModel,\n\ttype Model,\n\tparseGitUrl,\n\ttype ResourceDiagnostic,\n\ttype SlashCommand,\n\ttype SourceInfo,\n} from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\nimport { getLoginProviderCompletions } from \"./login-provider-options.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n\tfor (let index = text.length - 1; index >= 0; index -= 1) {\n\t\tif (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n\t}\n\treturn -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n\treturn index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n\tlet quoteStart = -1;\n\tlet inQuotes = false;\n\tfor (let index = 0; index < text.length; index += 1) {\n\t\tif (text[index] === '\"') {\n\t\t\tinQuotes = !inQuotes;\n\t\t\tif (inQuotes) quoteStart = index;\n\t\t}\n\t}\n\treturn inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n\tconst quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n\tif (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n\t\treturn isAtMentionTokenStart(textBeforeCursor, quoteStart - 1) ? textBeforeCursor.slice(quoteStart - 1) : null;\n\t}\n\tconst lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n\tconst tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n\treturn textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n\treturn atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n\treturn {\n\t\t...item,\n\t\tvalue: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n\t};\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n\tprivate readonly primary: AutocompleteProvider;\n\tprivate readonly pathFallback: AutocompleteProvider;\n\n\tconstructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n\t\tthis.primary = primary;\n\t\tthis.pathFallback = pathFallback;\n\t}\n\n\tasync getSuggestions(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\toptions: { signal: AbortSignal; force?: boolean },\n\t): Promise<AutocompleteSuggestions | null> {\n\t\tconst primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\tif (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n\t\tconst currentLine = lines[cursorLine] ?? \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\tconst atPrefix = extractAtMentionPrefix(textBeforeCursor);\n\t\tif (!atPrefix) return null;\n\n\t\tconst pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n\t\tconst prefixStart = cursorCol - atPrefix.length;\n\t\tconst fallbackLines = [...lines];\n\t\tfallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n\t\tconst fallbackSuggestions = await this.pathFallback.getSuggestions(\n\t\t\tfallbackLines,\n\t\t\tcursorLine,\n\t\t\tprefixStart + pathPrefix.length,\n\t\t\t{ ...options, force: true },\n\t\t);\n\t\tif (!fallbackSuggestions) return null;\n\n\t\treturn {\n\t\t\tprefix: atPrefix,\n\t\t\titems: fallbackSuggestions.items.map(toAtMentionCompletion),\n\t\t};\n\t}\n\n\tapplyCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\titem: AutocompleteItem,\n\t\tprefix: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\treturn this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t}\n\n\tshouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n\t\treturn this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n\t}\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function (\n\tthis: InteractiveModeBase,\n\tsourceInfo?: SourceInfo,\n): string | undefined {\n\tif (!sourceInfo) {\n\t\treturn undefined;\n\t}\n\n\tconst scopePrefix = sourceInfo.scope === \"user\" ? \"u\" : sourceInfo.scope === \"project\" ? \"p\" : \"t\";\n\tconst source = sourceInfo.source.trim();\n\n\tif (source === \"auto\" || source === \"local\" || source === \"cli\") {\n\t\treturn scopePrefix;\n\t}\n\n\tif (source.startsWith(\"npm:\")) {\n\t\treturn `${scopePrefix}:${source}`;\n\t}\n\n\tconst gitSource = parseGitUrl(source);\n\tif (gitSource) {\n\t\tconst ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n\t\treturn `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n\t}\n\n\treturn scopePrefix;\n};\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function (\n\tthis: InteractiveModeBase,\n\tdescription: string | undefined,\n\tsourceInfo?: SourceInfo,\n): string | undefined {\n\tconst sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n\tif (!sourceTag) {\n\t\treturn description;\n\t}\n\treturn description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n};\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function (\n\tthis: InteractiveModeBase,\n\textensionRunner: ExtensionRunner,\n): ResourceDiagnostic[] {\n\treturn extensionRunner\n\t\t.getRegisteredCommands()\n\t\t.filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n\t\t.map((command) => ({\n\t\t\ttype: \"warning\" as const,\n\t\t\tmessage:\n\t\t\t\tcommand.invocationName === command.name\n\t\t\t\t\t? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n\t\t\t\t\t: `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n\t\t\tpath: command.sourceInfo.path,\n\t\t}));\n};\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function (this: InteractiveModeBase): Model<Api>[] {\n\tif (this.session.scopedModels.length > 0) {\n\t\treturn this.session.scopedModels\n\t\t\t.map((scoped) => scoped.model)\n\t\t\t.filter((model) => this.session.modelRuntime.hasConfiguredAuth(model.provider));\n\t}\n\n\treturn [...this.session.modelRuntime.getAvailableSnapshot()];\n};\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function (this: InteractiveModeBase): boolean {\n\treturn hasSupportedCodexFastModeModel(this.getCodexFastModeCandidateModels());\n};\n\nInteractiveModeBase.prototype.buildRemoteSlashCommands = function (\n\tthis: InteractiveModeBase,\n\tlocalCommands: SlashCommand[],\n): SlashCommand[] {\n\tconst remote = getInteractiveEngineRemoteCommands(this.runtimeHost);\n\tif (remote.length === 0) return [];\n\n\t// Names already present locally (built-ins, prompt templates, skills) win, so\n\t// the child catalog only contributes commands the host is genuinely missing.\n\tconst takenNames = new Set<string>(localCommands.map((command) => command.name));\n\tconst skillCommandsEnabled = this.settingsManager.getEnableSkillCommands();\n\t// Reuse bundled argument-completion providers (e.g. /workflow subcommands and\n\t// input schemas) for their matching child commands; RPC cannot serialize the\n\t// completion callbacks themselves.\n\tconst bundledArgumentCompletions = new Map(\n\t\tBUNDLED_EXTENSION_SLASH_COMMANDS.map((command) => [command.name, command.getArgumentCompletions] as const),\n\t);\n\n\tconst remoteCommands: SlashCommand[] = [];\n\tfor (const command of remote) {\n\t\t// Built-in interactive command names stay reserved regardless of source.\n\t\tif (BUILTIN_SLASH_COMMAND_NAMES.has(command.name)) continue;\n\t\t// Honor the skill-commands setting for child-provided skills too.\n\t\tif (command.source === \"skill\" && !skillCommandsEnabled) continue;\n\t\tif (takenNames.has(command.name)) continue;\n\t\ttakenNames.add(command.name);\n\t\tconst bundledCompletions = bundledArgumentCompletions.get(command.name);\n\t\tconst getArgumentCompletions = command.hasArgumentCompletions\n\t\t\t? async (prefix: string): Promise<AutocompleteItem[] | null> => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await getInteractiveEngineRemoteCommandCompletions(this.runtimeHost, command.name, prefix);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn (await bundledCompletions?.(prefix)) ?? null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: bundledCompletions;\n\t\tremoteCommands.push({\n\t\t\tname: command.name,\n\t\t\tdescription: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n\t\t\t...(getArgumentCompletions ? { getArgumentCompletions } : {}),\n\t\t});\n\t}\n\treturn remoteCommands;\n};\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function (\n\tthis: InteractiveModeBase,\n): AutocompleteProvider {\n\t// Define commands for autocomplete\n\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n\t\t(command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n\t).map((command) => ({\n\t\tname: command.name,\n\t\targumentHint: command.argumentHint,\n\t\tdescription: command.description,\n\t\tgetArgumentCompletions: command.getArgumentCompletions,\n\t}));\n\n\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\tif (modelCommand) {\n\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t// Get available models (scoped or from registry)\n\t\t\tconst models =\n\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t: this.session.modelRuntime.getAvailableSnapshot();\n\n\t\t\tif (models.length === 0) return null;\n\n\t\t\t// Create items with provider/id format\n\t\t\tconst items = models.map((m) => ({\n\t\t\t\tid: m.id,\n\t\t\t\tprovider: m.provider,\n\t\t\t\tname: m.name,\n\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t}));\n\n\t\t\t// Fuzzy filter by model ID + provider in either order.\n\t\t\tconst filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n\t\t\tif (filtered.length === 0) return null;\n\n\t\t\treturn filtered.map((item) => ({\n\t\t\t\tvalue: item.label,\n\t\t\t\tlabel: item.id,\n\t\t\t\tdescription: item.provider,\n\t\t\t}));\n\t\t};\n\t}\n\n\tconst loginCommand = slashCommands.find((command) => command.name === \"login\");\n\tif (loginCommand) {\n\t\tloginCommand.getArgumentCompletions = (prefix: string) =>\n\t\t\tgetLoginProviderCompletions(this.getLoginProviderOptions(), prefix);\n\t}\n\n\t// Convert prompt templates to SlashCommand format for autocomplete\n\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\tname: cmd.name,\n\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t}));\n\n\t// Convert extension commands to SlashCommand format. Built-in command names\n\t// stay reserved even when a built-in is contextually hidden (for example,\n\t// /fast without a supported OpenAI model) so extension visibility cannot\n\t// change as auth/model state changes. While extension loading is deferred,\n\t// expose lightweight bundled command metadata without importing heavy\n\t// implementations; the submit path loads the implementation on demand.\n\tconst registeredExtensionCommands = this.session.extensionRunner\n\t\t.getRegisteredCommands()\n\t\t.filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n\tconst registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n\tconst extensionCommands: SlashCommand[] = [\n\t\t...(this.deferredStartupPending\n\t\t\t? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n\t\t\t\t\t(cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n\t\t\t\t).map((cmd) => ({\n\t\t\t\t\tname: cmd.name,\n\t\t\t\t\tdescription: cmd.description,\n\t\t\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t\t\t}))\n\t\t\t: []),\n\t\t...registeredExtensionCommands.map((cmd) => ({\n\t\t\tname: cmd.invocationName,\n\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t})),\n\t];\n\n\t// Build skill commands from session.skills (if enabled)\n\tthis.skillCommands.clear();\n\tconst skillCommandList: SlashCommand[] = [];\n\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\tfor (const command of getSkillCatalog(this.session.resourceLoader).commands) {\n\t\t\tconst commandName = `skill:${command.name}`;\n\t\t\tthis.skillCommands.set(commandName, command.skill.filePath);\n\t\t\tskillCommandList.push({\n\t\t\t\tname: commandName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n\t\t\t});\n\t\t}\n\t}\n\n\t// In the isolated interactive host (isolateInteractiveHost) the host session\n\t// loads no extensions, so extension slash commands (/workflow, /workflows,\n\t// /run, /mcp, …) exist only in the engine child. Merge the child's command\n\t// catalog — fetched asynchronously after engine bind — so autocomplete lists\n\t// them. Built-in names stay reserved and anything already present locally\n\t// (built-ins, prompt templates, skills the host also loaded) is deduped, so\n\t// only genuinely engine-only commands are added. Execution keeps routing\n\t// through the child via the patched session.prompt(); nothing is handled\n\t// twice on the host.\n\tconst remoteCommandList = this.buildRemoteSlashCommands([\n\t\t...slashCommands,\n\t\t...templateCommands,\n\t\t...extensionCommands,\n\t\t...skillCommandList,\n\t]);\n\n\tconst commands = [\n\t\t...slashCommands,\n\t\t...templateCommands,\n\t\t...extensionCommands,\n\t\t...skillCommandList,\n\t\t...remoteCommandList,\n\t];\n\tconst cwd = this.sessionManager.getCwd();\n\treturn new AtMentionFallbackAutocompleteProvider(\n\t\tnew CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n\t\tnew CombinedAutocompleteProvider(commands, cwd, null),\n\t);\n};\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function (this: InteractiveModeBase): void {\n\tlet provider = this.createBaseAutocompleteProvider();\n\tfor (const wrapProvider of this.autocompleteProviderWrappers) {\n\t\tprovider = wrapProvider(provider);\n\t}\n\n\tthis.autocompleteProvider = provider;\n\tthis.defaultEditor.setAutocompleteProvider(provider);\n\tif (this.editor !== this.defaultEditor) {\n\t\tthis.editor.setAutocompleteProvider?.(provider);\n\t}\n};\n"]}
1
+ {"version":3,"file":"interactive-autocomplete.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSkillCatalog } from \"../../core/skill-catalog.ts\";\nimport {\n\tgetInteractiveEngineRemoteCommandCompletions,\n\tgetInteractiveEngineRemoteCommands,\n} from \"../interactive-engine/extension-ui-bridge.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\ttype AutocompleteItem,\n\ttype AutocompleteProvider,\n\ttype AutocompleteSuggestions,\n\tBUILTIN_SLASH_COMMANDS,\n\tBUNDLED_EXTENSION_SLASH_COMMANDS,\n\tCombinedAutocompleteProvider,\n\ttype ExtensionRunner,\n\tfuzzyFilter,\n\tgetModelSearchText,\n\thasSupportedCodexFastModeModel,\n\ttype Model,\n\tparseGitUrl,\n\ttype ResourceDiagnostic,\n\ttype SlashCommand,\n\ttype SourceInfo,\n} from \"./interactive-mode-deps.ts\";\nimport { BUILTIN_SLASH_COMMAND_NAMES } from \"./interactive-mode-helpers.ts\";\nimport { getLoginProviderCompletions } from \"./login-provider-options.ts\";\n\nconst AT_MENTION_PATH_DELIMITERS = new Set([\" \", \"\\t\", '\"', \"'\", \"=\"]);\n\nfunction findLastAtMentionDelimiter(text: string): number {\n\tfor (let index = text.length - 1; index >= 0; index -= 1) {\n\t\tif (AT_MENTION_PATH_DELIMITERS.has(text[index] ?? \"\")) return index;\n\t}\n\treturn -1;\n}\n\nfunction isAtMentionTokenStart(text: string, index: number): boolean {\n\treturn index === 0 || AT_MENTION_PATH_DELIMITERS.has(text[index - 1] ?? \"\");\n}\n\nfunction findUnclosedAtMentionQuoteStart(text: string): number | null {\n\tlet quoteStart = -1;\n\tlet inQuotes = false;\n\tfor (let index = 0; index < text.length; index += 1) {\n\t\tif (text[index] === '\"') {\n\t\t\tinQuotes = !inQuotes;\n\t\t\tif (inQuotes) quoteStart = index;\n\t\t}\n\t}\n\treturn inQuotes ? quoteStart : null;\n}\n\nfunction extractAtMentionPrefix(textBeforeCursor: string): string | null {\n\tconst quoteStart = findUnclosedAtMentionQuoteStart(textBeforeCursor);\n\tif (quoteStart !== null && quoteStart > 0 && textBeforeCursor[quoteStart - 1] === \"@\") {\n\t\treturn isAtMentionTokenStart(textBeforeCursor, quoteStart - 1) ? textBeforeCursor.slice(quoteStart - 1) : null;\n\t}\n\tconst lastDelimiterIndex = findLastAtMentionDelimiter(textBeforeCursor);\n\tconst tokenStart = lastDelimiterIndex === -1 ? 0 : lastDelimiterIndex + 1;\n\treturn textBeforeCursor[tokenStart] === \"@\" ? textBeforeCursor.slice(tokenStart) : null;\n}\n\nfunction atMentionPrefixToPathPrefix(atPrefix: string): string {\n\treturn atPrefix.startsWith('@\"') ? `\"${atPrefix.slice(2)}` : atPrefix.slice(1);\n}\n\nfunction toAtMentionCompletion(item: AutocompleteItem): AutocompleteItem {\n\treturn {\n\t\t...item,\n\t\tvalue: item.value.startsWith(\"@\") ? item.value : `@${item.value}`,\n\t};\n}\n\nclass AtMentionFallbackAutocompleteProvider implements AutocompleteProvider {\n\tprivate readonly primary: AutocompleteProvider;\n\tprivate readonly pathFallback: AutocompleteProvider;\n\n\tconstructor(primary: AutocompleteProvider, pathFallback: AutocompleteProvider) {\n\t\tthis.primary = primary;\n\t\tthis.pathFallback = pathFallback;\n\t}\n\n\tasync getSuggestions(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\toptions: { signal: AbortSignal; force?: boolean },\n\t): Promise<AutocompleteSuggestions | null> {\n\t\tconst primarySuggestions = await this.primary.getSuggestions(lines, cursorLine, cursorCol, options);\n\t\tif (primarySuggestions || options.signal.aborted) return primarySuggestions;\n\n\t\tconst currentLine = lines[cursorLine] ?? \"\";\n\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\tconst atPrefix = extractAtMentionPrefix(textBeforeCursor);\n\t\tif (!atPrefix) return null;\n\n\t\tconst pathPrefix = atMentionPrefixToPathPrefix(atPrefix);\n\t\tconst prefixStart = cursorCol - atPrefix.length;\n\t\tconst fallbackLines = [...lines];\n\t\tfallbackLines[cursorLine] = `${currentLine.slice(0, prefixStart)}${pathPrefix}${currentLine.slice(cursorCol)}`;\n\t\tconst fallbackSuggestions = await this.pathFallback.getSuggestions(\n\t\t\tfallbackLines,\n\t\t\tcursorLine,\n\t\t\tprefixStart + pathPrefix.length,\n\t\t\t{ ...options, force: true },\n\t\t);\n\t\tif (!fallbackSuggestions) return null;\n\n\t\treturn {\n\t\t\tprefix: atPrefix,\n\t\t\titems: fallbackSuggestions.items.map(toAtMentionCompletion),\n\t\t};\n\t}\n\n\tapplyCompletion(\n\t\tlines: string[],\n\t\tcursorLine: number,\n\t\tcursorCol: number,\n\t\titem: AutocompleteItem,\n\t\tprefix: string,\n\t): { lines: string[]; cursorLine: number; cursorCol: number } {\n\t\treturn this.primary.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t}\n\n\tshouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {\n\t\treturn this.primary.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;\n\t}\n}\n\nInteractiveModeBase.prototype.getAutocompleteSourceTag = function (\n\tthis: InteractiveModeBase,\n\tsourceInfo?: SourceInfo,\n): string | undefined {\n\tif (!sourceInfo) {\n\t\treturn undefined;\n\t}\n\n\tconst scopePrefix = sourceInfo.scope === \"user\" ? \"u\" : sourceInfo.scope === \"project\" ? \"p\" : \"t\";\n\tconst source = sourceInfo.source.trim();\n\n\tif (source === \"auto\" || source === \"local\" || source === \"cli\") {\n\t\treturn scopePrefix;\n\t}\n\n\tif (source.startsWith(\"npm:\")) {\n\t\treturn `${scopePrefix}:${source}`;\n\t}\n\n\tconst gitSource = parseGitUrl(source);\n\tif (gitSource) {\n\t\tconst ref = gitSource.ref ? `@${gitSource.ref}` : \"\";\n\t\treturn `${scopePrefix}:git:${gitSource.host}/${gitSource.path}${ref}`;\n\t}\n\n\treturn scopePrefix;\n};\n\nInteractiveModeBase.prototype.prefixAutocompleteDescription = function (\n\tthis: InteractiveModeBase,\n\tdescription: string | undefined,\n\tsourceInfo?: SourceInfo,\n): string | undefined {\n\tconst sourceTag = this.getAutocompleteSourceTag(sourceInfo);\n\tif (!sourceTag) {\n\t\treturn description;\n\t}\n\treturn description ? `[${sourceTag}] ${description}` : `[${sourceTag}]`;\n};\n\nInteractiveModeBase.prototype.getBuiltInCommandConflictDiagnostics = function (\n\tthis: InteractiveModeBase,\n\textensionRunner: ExtensionRunner,\n): ResourceDiagnostic[] {\n\treturn extensionRunner\n\t\t.getRegisteredCommands()\n\t\t.filter((command) => BUILTIN_SLASH_COMMAND_NAMES.has(command.name))\n\t\t.map((command) => ({\n\t\t\ttype: \"warning\" as const,\n\t\t\tmessage:\n\t\t\t\tcommand.invocationName === command.name\n\t\t\t\t\t? `Extension command '/${command.name}' conflicts with built-in interactive command. Skipping in autocomplete.`\n\t\t\t\t\t: `Extension command '/${command.name}' conflicts with built-in interactive command. Available as '/${command.invocationName}'.`,\n\t\t\tpath: command.sourceInfo.path,\n\t\t}));\n};\n\nInteractiveModeBase.prototype.getCodexFastModeCandidateModels = function (this: InteractiveModeBase): Model<Api>[] {\n\tif (this.session.scopedModels.length > 0) {\n\t\treturn this.session.scopedModels\n\t\t\t.map((scoped) => scoped.model)\n\t\t\t.filter((model) => this.session.modelRuntime.hasConfiguredAuth(model.provider));\n\t}\n\n\treturn [...this.session.modelRuntime.getAvailableSnapshot()];\n};\n\nInteractiveModeBase.prototype.hasCodexFastModeSupportedModels = function (this: InteractiveModeBase): boolean {\n\treturn hasSupportedCodexFastModeModel(this.getCodexFastModeCandidateModels());\n};\n\nInteractiveModeBase.prototype.buildRemoteSlashCommands = function (\n\tthis: InteractiveModeBase,\n\tlocalCommands: SlashCommand[],\n): SlashCommand[] {\n\tconst remote = getInteractiveEngineRemoteCommands(this.runtimeHost);\n\tif (remote.length === 0) return [];\n\n\t// Names already present locally (built-ins, prompt templates, skills) win, so\n\t// the child catalog only contributes commands the host is genuinely missing.\n\tconst takenNames = new Set<string>(localCommands.map((command) => command.name));\n\tconst skillCommandsEnabled = this.settingsManager.getEnableSkillCommands();\n\t// Reuse bundled argument-completion providers (e.g. /workflow subcommands and\n\t// input schemas) for their matching child commands; RPC cannot serialize the\n\t// completion callbacks themselves.\n\tconst bundledArgumentCompletions = new Map(\n\t\tBUNDLED_EXTENSION_SLASH_COMMANDS.map((command) => [command.name, command.getArgumentCompletions] as const),\n\t);\n\n\tconst remoteCommands: SlashCommand[] = [];\n\tfor (const command of remote) {\n\t\t// Built-in interactive command names stay reserved regardless of source.\n\t\tif (BUILTIN_SLASH_COMMAND_NAMES.has(command.name)) continue;\n\t\t// Honor the skill-commands setting for child-provided skills too.\n\t\tif (command.source === \"skill\" && !skillCommandsEnabled) continue;\n\t\tif (takenNames.has(command.name)) continue;\n\t\ttakenNames.add(command.name);\n\t\tconst bundledCompletions = bundledArgumentCompletions.get(command.name);\n\t\tconst getArgumentCompletions = command.hasArgumentCompletions\n\t\t\t? async (prefix: string): Promise<AutocompleteItem[] | null> => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await getInteractiveEngineRemoteCommandCompletions(this.runtimeHost, command.name, prefix);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn (await bundledCompletions?.(prefix)) ?? null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: bundledCompletions;\n\t\tremoteCommands.push({\n\t\t\tname: command.name,\n\t\t\tdescription: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n\t\t\t...(getArgumentCompletions ? { getArgumentCompletions } : {}),\n\t\t});\n\t}\n\treturn remoteCommands;\n};\n\nInteractiveModeBase.prototype.createBaseAutocompleteProvider = function (\n\tthis: InteractiveModeBase,\n): AutocompleteProvider {\n\t// Define commands for autocomplete\n\tconst slashCommands: SlashCommand[] = BUILTIN_SLASH_COMMANDS.filter(\n\t\t(command) => command.name !== \"fast\" || this.hasCodexFastModeSupportedModels(),\n\t).map((command) => ({\n\t\tname: command.name,\n\t\targumentHint: command.argumentHint,\n\t\tdescription: command.description,\n\t\tgetArgumentCompletions: command.getArgumentCompletions,\n\t}));\n\n\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\tif (modelCommand) {\n\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t// Get available models (scoped or from registry)\n\t\t\tconst models =\n\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t: this.session.modelRuntime.getAvailableSnapshot();\n\n\t\t\tif (models.length === 0) return null;\n\n\t\t\t// Create items with provider/id format\n\t\t\tconst items = models.map((m) => ({\n\t\t\t\tid: m.id,\n\t\t\t\tprovider: m.provider,\n\t\t\t\tname: m.name,\n\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t}));\n\n\t\t\t// Fuzzy filter by model ID + provider in either order.\n\t\t\tconst filtered = fuzzyFilter(items, prefix, getModelSearchText);\n\n\t\t\tif (filtered.length === 0) return null;\n\n\t\t\treturn filtered.map((item) => ({\n\t\t\t\tvalue: item.label,\n\t\t\t\tlabel: item.id,\n\t\t\t\tdescription: item.provider,\n\t\t\t}));\n\t\t};\n\t}\n\n\tconst thinkingCommand = slashCommands.find((command) => command.name === \"thinking\");\n\tif (thinkingCommand) {\n\t\tthinkingCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\tconst levels = fuzzyFilter(this.session.getAvailableThinkingLevels(), prefix, (level) => level);\n\t\t\tif (levels.length === 0) return null;\n\t\t\treturn levels.map((level) => ({ value: level, label: level }));\n\t\t};\n\t}\n\n\tconst loginCommand = slashCommands.find((command) => command.name === \"login\");\n\tif (loginCommand) {\n\t\tloginCommand.getArgumentCompletions = (prefix: string) =>\n\t\t\tgetLoginProviderCompletions(this.getLoginProviderOptions(), prefix);\n\t}\n\n\t// Convert prompt templates to SlashCommand format for autocomplete\n\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\tname: cmd.name,\n\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t...(cmd.argumentHint && { argumentHint: cmd.argumentHint }),\n\t}));\n\n\t// Convert extension commands to SlashCommand format. Built-in command names\n\t// stay reserved even when a built-in is contextually hidden (for example,\n\t// /fast without a supported OpenAI model) so extension visibility cannot\n\t// change as auth/model state changes. While extension loading is deferred,\n\t// expose lightweight bundled command metadata without importing heavy\n\t// implementations; the submit path loads the implementation on demand.\n\tconst registeredExtensionCommands = this.session.extensionRunner\n\t\t.getRegisteredCommands()\n\t\t.filter((cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name));\n\tconst registeredNames = new Set(registeredExtensionCommands.map((cmd) => cmd.invocationName));\n\tconst extensionCommands: SlashCommand[] = [\n\t\t...(this.deferredStartupPending\n\t\t\t? BUNDLED_EXTENSION_SLASH_COMMANDS.filter(\n\t\t\t\t\t(cmd) => !BUILTIN_SLASH_COMMAND_NAMES.has(cmd.name) && !registeredNames.has(cmd.name),\n\t\t\t\t).map((cmd) => ({\n\t\t\t\t\tname: cmd.name,\n\t\t\t\t\tdescription: cmd.description,\n\t\t\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t\t\t}))\n\t\t\t: []),\n\t\t...registeredExtensionCommands.map((cmd) => ({\n\t\t\tname: cmd.invocationName,\n\t\t\tdescription: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t})),\n\t];\n\n\t// Build skill commands from session.skills (if enabled)\n\tthis.skillCommands.clear();\n\tconst skillCommandList: SlashCommand[] = [];\n\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\tfor (const command of getSkillCatalog(this.session.resourceLoader).commands) {\n\t\t\tconst commandName = `skill:${command.name}`;\n\t\t\tthis.skillCommands.set(commandName, command.skill.filePath);\n\t\t\tskillCommandList.push({\n\t\t\t\tname: commandName,\n\t\t\t\tdescription: this.prefixAutocompleteDescription(command.description, command.sourceInfo),\n\t\t\t});\n\t\t}\n\t}\n\n\t// In the isolated interactive host (isolateInteractiveHost) the host session\n\t// loads no extensions, so extension slash commands (/workflow, /workflows,\n\t// /run, /mcp, …) exist only in the engine child. Merge the child's command\n\t// catalog — fetched asynchronously after engine bind — so autocomplete lists\n\t// them. Built-in names stay reserved and anything already present locally\n\t// (built-ins, prompt templates, skills the host also loaded) is deduped, so\n\t// only genuinely engine-only commands are added. Execution keeps routing\n\t// through the child via the patched session.prompt(); nothing is handled\n\t// twice on the host.\n\tconst remoteCommandList = this.buildRemoteSlashCommands([\n\t\t...slashCommands,\n\t\t...templateCommands,\n\t\t...extensionCommands,\n\t\t...skillCommandList,\n\t]);\n\n\tconst commands = [\n\t\t...slashCommands,\n\t\t...templateCommands,\n\t\t...extensionCommands,\n\t\t...skillCommandList,\n\t\t...remoteCommandList,\n\t];\n\tconst cwd = this.sessionManager.getCwd();\n\treturn new AtMentionFallbackAutocompleteProvider(\n\t\tnew CombinedAutocompleteProvider(commands, cwd, this.fdPath),\n\t\tnew CombinedAutocompleteProvider(commands, cwd, null),\n\t);\n};\n\nInteractiveModeBase.prototype.setupAutocompleteProvider = function (this: InteractiveModeBase): void {\n\tlet provider = this.createBaseAutocompleteProvider();\n\tfor (const wrapProvider of this.autocompleteProviderWrappers) {\n\t\tprovider = wrapProvider(provider);\n\t}\n\n\tthis.autocompleteProvider = provider;\n\tthis.defaultEditor.setAutocompleteProvider(provider);\n\tif (this.editor !== this.defaultEditor) {\n\t\tthis.editor.setAutocompleteProvider?.(provider);\n\t}\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-deferred-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAYjE,MAAM,WAAW,mBAAmB;IACnC,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAoED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtF"}
1
+ {"version":3,"file":"interactive-deferred-startup.d.ts","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-deferred-startup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAYjE,MAAM,WAAW,mBAAmB;IACnC,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAClD,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAqED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtF"}
@@ -1,4 +1,5 @@
1
1
  import { modelsAreEqual } from "@bastani/pi-ai/compat";
2
+ import { loadAllHighlightLanguages } from "../../utils/syntax-highlight.js";
2
3
  import { InteractiveModeBase } from "./interactive-mode-base.js";
3
4
  import { findInitialModel, formatNoModelsAvailableMessage, recordTimeSinceReset, resolveModelScopeWithDiagnostics, resolveRestoredModelReference, setRegisteredThemes, } from "./interactive-mode-deps.js";
4
5
  import { releaseStartupChatOutput } from "./interactive-startup-chat-container.js";
@@ -63,6 +64,7 @@ InteractiveModeBase.prototype.completeDeferredStartup = async function () {
63
64
  void this.updateAvailableProviderCount().catch(() => { });
64
65
  this.updateEditorBorderColor();
65
66
  this.ui.requestRender();
67
+ void loadAllHighlightLanguages().then(() => this.ui.requestRender());
66
68
  }
67
69
  catch (error) {
68
70
  // Same ownership rule as the success path: this catch swallows the error,