@bastani/atomic 0.9.11-alpha.1 → 0.9.11-alpha.3

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 (507) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/builtin/cursor/package.json +3 -3
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/package.json +3 -3
  5. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  6. package/dist/builtin/subagents/package.json +4 -4
  7. package/dist/builtin/subagents/src/runs/background/notify.ts +3 -1
  8. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +5 -2
  9. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -1
  10. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -2
  11. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +34 -0
  12. package/dist/builtin/web-access/package.json +2 -2
  13. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  14. package/dist/builtin/workflows/package.json +2 -2
  15. package/dist/builtin/workflows/src/durable/child-primitive.ts +3 -0
  16. package/dist/builtin/workflows/src/durable/completed-catalog.ts +182 -33
  17. package/dist/builtin/workflows/src/durable/completed-inspection.ts +9 -4
  18. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +31 -8
  19. package/dist/builtin/workflows/src/durable/resume-runtime.ts +6 -2
  20. package/dist/builtin/workflows/src/durable/stage-primitive.ts +48 -10
  21. package/dist/builtin/workflows/src/durable/types.ts +11 -0
  22. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +9 -9
  23. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +89 -0
  24. package/dist/builtin/workflows/src/engine/run.ts +18 -16
  25. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  26. package/dist/builtin/workflows/src/extension/ui-surface.ts +4 -0
  27. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +3 -0
  28. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +6 -3
  29. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +2 -2
  30. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +4 -1
  31. package/dist/builtin/workflows/src/tui/host-input-form.ts +1 -1
  32. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +2 -3
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +4 -2
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/config-selector.d.ts +4 -2
  37. package/dist/cli/config-selector.d.ts.map +1 -1
  38. package/dist/cli/config-selector.js +1 -1
  39. package/dist/cli/config-selector.js.map +1 -1
  40. package/dist/cli/startup-ui.d.ts +3 -0
  41. package/dist/cli/startup-ui.d.ts.map +1 -1
  42. package/dist/cli/startup-ui.js +50 -1
  43. package/dist/cli/startup-ui.js.map +1 -1
  44. package/dist/config-command-parser.d.ts +9 -0
  45. package/dist/config-command-parser.d.ts.map +1 -0
  46. package/dist/config-command-parser.js +22 -0
  47. package/dist/config-command-parser.js.map +1 -0
  48. package/dist/config-self-update.d.ts +6 -2
  49. package/dist/config-self-update.d.ts.map +1 -1
  50. package/dist/config-self-update.js +17 -10
  51. package/dist/config-self-update.js.map +1 -1
  52. package/dist/config.d.ts +3 -3
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +4 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  57. package/dist/core/agent-session-compaction.js +7 -1
  58. package/dist/core/agent-session-compaction.js.map +1 -1
  59. package/dist/core/agent-session-export.d.ts.map +1 -1
  60. package/dist/core/agent-session-export.js +32 -25
  61. package/dist/core/agent-session-export.js.map +1 -1
  62. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  63. package/dist/core/agent-session-extension-bindings.js +9 -3
  64. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  65. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  66. package/dist/core/agent-session-prompt.js +5 -0
  67. package/dist/core/agent-session-prompt.js.map +1 -1
  68. package/dist/core/agent-session-services.d.ts +2 -0
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +11 -5
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-tree.d.ts.map +1 -1
  73. package/dist/core/agent-session-tree.js +7 -2
  74. package/dist/core/agent-session-tree.js.map +1 -1
  75. package/dist/core/agent-session-types.d.ts +20 -0
  76. package/dist/core/agent-session-types.d.ts.map +1 -1
  77. package/dist/core/agent-session-types.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +6 -2
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +5 -1
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/cache-stats.d.ts +25 -0
  83. package/dist/core/cache-stats.d.ts.map +1 -0
  84. package/dist/core/cache-stats.js +68 -0
  85. package/dist/core/cache-stats.js.map +1 -0
  86. package/dist/core/compaction/branch-summarization.d.ts +7 -2
  87. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  88. package/dist/core/compaction/branch-summarization.js +8 -8
  89. package/dist/core/compaction/branch-summarization.js.map +1 -1
  90. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  91. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  92. package/dist/core/compaction/compaction-runner.js +6 -1
  93. package/dist/core/compaction/compaction-runner.js.map +1 -1
  94. package/dist/core/compaction/range-planner.d.ts +3 -0
  95. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  96. package/dist/core/compaction/range-planner.js +2 -1
  97. package/dist/core/compaction/range-planner.js.map +1 -1
  98. package/dist/core/extensions/agent-events.d.ts +10 -0
  99. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  100. package/dist/core/extensions/agent-events.js.map +1 -1
  101. package/dist/core/extensions/api-types.d.ts +8 -2
  102. package/dist/core/extensions/api-types.d.ts.map +1 -1
  103. package/dist/core/extensions/api-types.js.map +1 -1
  104. package/dist/core/extensions/event-types.d.ts +2 -2
  105. package/dist/core/extensions/event-types.d.ts.map +1 -1
  106. package/dist/core/extensions/event-types.js.map +1 -1
  107. package/dist/core/extensions/index.d.ts +1 -1
  108. package/dist/core/extensions/index.d.ts.map +1 -1
  109. package/dist/core/extensions/index.js.map +1 -1
  110. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  111. package/dist/core/extensions/loader-api.js +13 -2
  112. package/dist/core/extensions/loader-api.js.map +1 -1
  113. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  114. package/dist/core/extensions/loader-core.js +1 -0
  115. package/dist/core/extensions/loader-core.js.map +1 -1
  116. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  117. package/dist/core/extensions/loader-runtime.js +15 -7
  118. package/dist/core/extensions/loader-runtime.js.map +1 -1
  119. package/dist/core/extensions/message-types.d.ts +5 -0
  120. package/dist/core/extensions/message-types.d.ts.map +1 -1
  121. package/dist/core/extensions/message-types.js.map +1 -1
  122. package/dist/core/extensions/provider-types.d.ts +46 -0
  123. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  124. package/dist/core/extensions/provider-types.js.map +1 -1
  125. package/dist/core/extensions/runner-registries.d.ts +2 -1
  126. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  127. package/dist/core/extensions/runner-registries.js +8 -0
  128. package/dist/core/extensions/runner-registries.js.map +1 -1
  129. package/dist/core/extensions/runner.d.ts +5 -2
  130. package/dist/core/extensions/runner.d.ts.map +1 -1
  131. package/dist/core/extensions/runner.js +35 -13
  132. package/dist/core/extensions/runner.js.map +1 -1
  133. package/dist/core/extensions/runtime-types.d.ts +8 -2
  134. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  135. package/dist/core/extensions/runtime-types.js.map +1 -1
  136. package/dist/core/extensions/ui-types.d.ts +4 -0
  137. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  138. package/dist/core/extensions/ui-types.js.map +1 -1
  139. package/dist/core/http-dispatcher.d.ts +1 -0
  140. package/dist/core/http-dispatcher.d.ts.map +1 -1
  141. package/dist/core/http-dispatcher.js +16 -2
  142. package/dist/core/http-dispatcher.js.map +1 -1
  143. package/dist/core/keybindings.d.ts +6 -1
  144. package/dist/core/keybindings.d.ts.map +1 -1
  145. package/dist/core/keybindings.js +3 -1
  146. package/dist/core/keybindings.js.map +1 -1
  147. package/dist/core/model-registry-auth.d.ts +2 -0
  148. package/dist/core/model-registry-auth.d.ts.map +1 -1
  149. package/dist/core/model-registry-auth.js +18 -1
  150. package/dist/core/model-registry-auth.js.map +1 -1
  151. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  152. package/dist/core/model-registry-custom-loader.js +14 -2
  153. package/dist/core/model-registry-custom-loader.js.map +1 -1
  154. package/dist/core/model-registry-dynamic.js +2 -2
  155. package/dist/core/model-registry-dynamic.js.map +1 -1
  156. package/dist/core/model-registry-loader.d.ts.map +1 -1
  157. package/dist/core/model-registry-loader.js +2 -1
  158. package/dist/core/model-registry-loader.js.map +1 -1
  159. package/dist/core/model-registry-schemas.d.ts +17 -0
  160. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  161. package/dist/core/model-registry-schemas.js +2 -0
  162. package/dist/core/model-registry-schemas.js.map +1 -1
  163. package/dist/core/model-registry-types.d.ts +10 -1
  164. package/dist/core/model-registry-types.d.ts.map +1 -1
  165. package/dist/core/model-registry-types.js.map +1 -1
  166. package/dist/core/model-registry.d.ts +26 -36
  167. package/dist/core/model-registry.d.ts.map +1 -1
  168. package/dist/core/model-registry.js +73 -68
  169. package/dist/core/model-registry.js.map +1 -1
  170. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  171. package/dist/core/model-resolver-defaults.js +5 -0
  172. package/dist/core/model-resolver-defaults.js.map +1 -1
  173. package/dist/core/model-runtime.d.ts +52 -0
  174. package/dist/core/model-runtime.d.ts.map +1 -0
  175. package/dist/core/model-runtime.js +120 -0
  176. package/dist/core/model-runtime.js.map +1 -0
  177. package/dist/core/oauth-provider-bridge.d.ts +3 -1
  178. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  179. package/dist/core/oauth-provider-bridge.js +6 -4
  180. package/dist/core/oauth-provider-bridge.js.map +1 -1
  181. package/dist/core/package-manager-resolver.js +22 -11
  182. package/dist/core/package-manager-resolver.js.map +1 -1
  183. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  184. package/dist/core/package-manager-resource-collector.js +8 -2
  185. package/dist/core/package-manager-resource-collector.js.map +1 -1
  186. package/dist/core/package-manager-resource-patterns.d.ts +1 -0
  187. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  188. package/dist/core/package-manager-resource-patterns.js +15 -0
  189. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  190. package/dist/core/package-manager-source.d.ts.map +1 -1
  191. package/dist/core/package-manager-source.js +15 -8
  192. package/dist/core/package-manager-source.js.map +1 -1
  193. package/dist/core/package-manager-types.d.ts +1 -0
  194. package/dist/core/package-manager-types.d.ts.map +1 -1
  195. package/dist/core/package-manager-types.js.map +1 -1
  196. package/dist/core/prompt-templates.d.ts +1 -0
  197. package/dist/core/prompt-templates.d.ts.map +1 -1
  198. package/dist/core/prompt-templates.js +6 -4
  199. package/dist/core/prompt-templates.js.map +1 -1
  200. package/dist/core/provider-display-names.d.ts.map +1 -1
  201. package/dist/core/provider-display-names.js +4 -0
  202. package/dist/core/provider-display-names.js.map +1 -1
  203. package/dist/core/remote-catalog-provider.d.ts +1 -1
  204. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  205. package/dist/core/remote-catalog-provider.js +25 -6
  206. package/dist/core/remote-catalog-provider.js.map +1 -1
  207. package/dist/core/resource-loader-core.d.ts.map +1 -1
  208. package/dist/core/resource-loader-core.js.map +1 -1
  209. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  210. package/dist/core/resource-loader-extensions.js +5 -2
  211. package/dist/core/resource-loader-extensions.js.map +1 -1
  212. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  213. package/dist/core/resource-loader-helpers.js +1 -0
  214. package/dist/core/resource-loader-helpers.js.map +1 -1
  215. package/dist/core/resource-loader-internals.d.ts +2 -2
  216. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  217. package/dist/core/resource-loader-internals.js.map +1 -1
  218. package/dist/core/resource-loader-types.d.ts +3 -3
  219. package/dist/core/resource-loader-types.d.ts.map +1 -1
  220. package/dist/core/resource-loader-types.js.map +1 -1
  221. package/dist/core/sdk-exports.d.ts +1 -1
  222. package/dist/core/sdk-exports.d.ts.map +1 -1
  223. package/dist/core/sdk-exports.js.map +1 -1
  224. package/dist/core/sdk-types.d.ts +3 -0
  225. package/dist/core/sdk-types.d.ts.map +1 -1
  226. package/dist/core/sdk-types.js.map +1 -1
  227. package/dist/core/sdk.d.ts.map +1 -1
  228. package/dist/core/sdk.js +10 -3
  229. package/dist/core/sdk.js.map +1 -1
  230. package/dist/core/session-manager-core.d.ts +2 -1
  231. package/dist/core/session-manager-core.d.ts.map +1 -1
  232. package/dist/core/session-manager-core.js +9 -6
  233. package/dist/core/session-manager-core.js.map +1 -1
  234. package/dist/core/session-manager-entries.d.ts +2 -2
  235. package/dist/core/session-manager-entries.d.ts.map +1 -1
  236. package/dist/core/session-manager-entries.js +2 -1
  237. package/dist/core/session-manager-entries.js.map +1 -1
  238. package/dist/core/session-manager-history.d.ts +5 -0
  239. package/dist/core/session-manager-history.d.ts.map +1 -1
  240. package/dist/core/session-manager-history.js +33 -0
  241. package/dist/core/session-manager-history.js.map +1 -1
  242. package/dist/core/session-manager-types.d.ts +4 -2
  243. package/dist/core/session-manager-types.d.ts.map +1 -1
  244. package/dist/core/session-manager-types.js.map +1 -1
  245. package/dist/core/session-manager-validation.d.ts.map +1 -1
  246. package/dist/core/session-manager-validation.js +3 -16
  247. package/dist/core/session-manager-validation.js.map +1 -1
  248. package/dist/core/session-manager.d.ts +1 -1
  249. package/dist/core/session-manager.d.ts.map +1 -1
  250. package/dist/core/session-manager.js +1 -1
  251. package/dist/core/session-manager.js.map +1 -1
  252. package/dist/core/settings-manager-basic-accessors.d.ts +7 -0
  253. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  254. package/dist/core/settings-manager-basic-accessors.js +35 -0
  255. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  256. package/dist/core/settings-manager-resource-accessors.d.ts +3 -0
  257. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  258. package/dist/core/settings-manager-resource-accessors.js +16 -0
  259. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  260. package/dist/core/settings-types.d.ts +8 -2
  261. package/dist/core/settings-types.d.ts.map +1 -1
  262. package/dist/core/settings-types.js.map +1 -1
  263. package/dist/core/slash-commands.d.ts +1 -0
  264. package/dist/core/slash-commands.d.ts.map +1 -1
  265. package/dist/core/slash-commands.js +1 -1
  266. package/dist/core/slash-commands.js.map +1 -1
  267. package/dist/core/summarization-retry.d.ts +11 -0
  268. package/dist/core/summarization-retry.d.ts.map +1 -0
  269. package/dist/core/summarization-retry.js +21 -0
  270. package/dist/core/summarization-retry.js.map +1 -0
  271. package/dist/core/tools/read.js +1 -1
  272. package/dist/core/tools/read.js.map +1 -1
  273. package/dist/core/usage-totals.d.ts +18 -0
  274. package/dist/core/usage-totals.d.ts.map +1 -0
  275. package/dist/core/usage-totals.js +40 -0
  276. package/dist/core/usage-totals.js.map +1 -0
  277. package/dist/extensions/index.d.ts +3 -0
  278. package/dist/extensions/index.d.ts.map +1 -0
  279. package/dist/extensions/index.js +5 -0
  280. package/dist/extensions/index.js.map +1 -0
  281. package/dist/extensions/llama/client.d.ts +61 -0
  282. package/dist/extensions/llama/client.d.ts.map +1 -0
  283. package/dist/extensions/llama/client.js +300 -0
  284. package/dist/extensions/llama/client.js.map +1 -0
  285. package/dist/extensions/llama/huggingface-ui.d.ts +33 -0
  286. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -0
  287. package/dist/extensions/llama/huggingface-ui.js +166 -0
  288. package/dist/extensions/llama/huggingface-ui.js.map +1 -0
  289. package/dist/extensions/llama/huggingface.d.ts +23 -0
  290. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  291. package/dist/extensions/llama/huggingface.js +139 -0
  292. package/dist/extensions/llama/huggingface.js.map +1 -0
  293. package/dist/extensions/llama/index.d.ts +3 -0
  294. package/dist/extensions/llama/index.d.ts.map +1 -0
  295. package/dist/extensions/llama/index.js +208 -0
  296. package/dist/extensions/llama/index.js.map +1 -0
  297. package/dist/extensions/llama/provider.d.ts +11 -0
  298. package/dist/extensions/llama/provider.d.ts.map +1 -0
  299. package/dist/extensions/llama/provider.js +93 -0
  300. package/dist/extensions/llama/provider.js.map +1 -0
  301. package/dist/extensions/llama/ui.d.ts +42 -0
  302. package/dist/extensions/llama/ui.d.ts.map +1 -0
  303. package/dist/extensions/llama/ui.js +237 -0
  304. package/dist/extensions/llama/ui.js.map +1 -0
  305. package/dist/index-extensions.d.ts +1 -1
  306. package/dist/index-extensions.d.ts.map +1 -1
  307. package/dist/index-extensions.js.map +1 -1
  308. package/dist/index.d.ts +5 -4
  309. package/dist/index.d.ts.map +1 -1
  310. package/dist/index.js +4 -3
  311. package/dist/index.js.map +1 -1
  312. package/dist/main-first-time-setup.d.ts +6 -0
  313. package/dist/main-first-time-setup.d.ts.map +1 -0
  314. package/dist/main-first-time-setup.js +10 -0
  315. package/dist/main-first-time-setup.js.map +1 -0
  316. package/dist/main-types.d.ts +2 -2
  317. package/dist/main-types.d.ts.map +1 -1
  318. package/dist/main-types.js.map +1 -1
  319. package/dist/main.d.ts.map +1 -1
  320. package/dist/main.js +19 -7
  321. package/dist/main.js.map +1 -1
  322. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  323. package/dist/modes/interactive/chat-input-actions.js +14 -2
  324. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  325. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/chat-session-host-events.js +16 -0
  327. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  328. package/dist/modes/interactive/components/config-selector-list.d.ts +6 -6
  329. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/config-selector-list.js +64 -125
  331. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  332. package/dist/modes/interactive/components/config-selector-project-scope.d.ts +4 -0
  333. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/config-selector-project-scope.js +61 -0
  335. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -0
  336. package/dist/modes/interactive/components/config-selector.d.ts +8 -5
  337. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/config-selector.js +46 -22
  339. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/custom-entry.d.ts +16 -0
  341. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/custom-entry.js +45 -0
  343. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  344. package/dist/modes/interactive/components/first-time-setup.d.ts +24 -0
  345. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/first-time-setup.js +69 -0
  347. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  348. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/footer.js +48 -26
  350. package/dist/modes/interactive/components/footer.js.map +1 -1
  351. package/dist/modes/interactive/components/host-input-form.d.ts +2 -0
  352. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/host-input-form.js +6 -3
  354. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  355. package/dist/modes/interactive/components/idle-status.d.ts +8 -0
  356. package/dist/modes/interactive/components/idle-status.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/idle-status.js +13 -0
  358. package/dist/modes/interactive/components/idle-status.js.map +1 -0
  359. package/dist/modes/interactive/components/index.d.ts +3 -0
  360. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/index.js +3 -0
  362. package/dist/modes/interactive/components/index.js.map +1 -1
  363. package/dist/modes/interactive/components/login-dialog.d.ts +5 -5
  364. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/login-dialog.js +14 -6
  366. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  367. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  368. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  369. package/dist/modes/interactive/components/oauth-selector.js +10 -6
  370. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  371. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  372. package/dist/modes/interactive/components/settings-selector-handlers.js +6 -0
  373. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  374. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  375. package/dist/modes/interactive/components/settings-selector-items.js +14 -0
  376. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  377. package/dist/modes/interactive/components/settings-selector-types.d.ts +4 -0
  378. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  380. package/dist/modes/interactive/interactive-agent-events.js +27 -0
  381. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  382. package/dist/modes/interactive/interactive-auth-login.js +17 -8
  383. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  384. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  385. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  386. package/dist/modes/interactive/interactive-auth-routing.js +88 -40
  387. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  388. package/dist/modes/interactive/interactive-autocomplete.js +6 -0
  389. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  390. package/dist/modes/interactive/interactive-extension-runtime.js +4 -0
  391. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  392. package/dist/modes/interactive/interactive-global-clear.d.ts +10 -2
  393. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  394. package/dist/modes/interactive/interactive-global-clear.js +3 -1
  395. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  396. package/dist/modes/interactive/interactive-input-handling.js +6 -4
  397. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-helpers.d.ts +2 -1
  399. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-helpers.js +6 -10
  401. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  402. package/dist/modes/interactive/interactive-mode-surface.d.ts +11 -2
  403. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  404. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  405. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +13 -0
  406. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -0
  407. package/dist/modes/interactive/interactive-model-catalog-startup.js +24 -0
  408. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -0
  409. package/dist/modes/interactive/interactive-model-routing.js +4 -3
  410. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  411. package/dist/modes/interactive/interactive-queueing.js +3 -2
  412. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  413. package/dist/modes/interactive/interactive-render-chat.js +69 -12
  414. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  415. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  416. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  417. package/dist/modes/interactive/interactive-selectors.js +10 -0
  418. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  419. package/dist/modes/interactive/interactive-session-routing.js +3 -0
  420. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  421. package/dist/modes/interactive/interactive-slash-commands.js +14 -0
  422. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  423. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  424. package/dist/modes/interactive/interactive-startup.js +4 -7
  425. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  426. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +8 -0
  427. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -0
  428. package/dist/modes/interactive/interactive-summarization-retry-events.js +40 -0
  429. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -0
  430. package/dist/modes/interactive/login-provider-options.d.ts +21 -0
  431. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -0
  432. package/dist/modes/interactive/login-provider-options.js +51 -0
  433. package/dist/modes/interactive/login-provider-options.js.map +1 -0
  434. package/dist/modes/interactive-engine/engine-input-form.d.ts +1 -1
  435. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  436. package/dist/modes/interactive-engine/engine-input-form.js +10 -2
  437. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  439. package/dist/modes/interactive-engine/input-form-host.js +7 -2
  440. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  441. package/dist/modes/interactive-engine/isolated-runtime.js +1 -1
  442. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  443. package/dist/modes/interactive-engine/protocol.d.ts +5 -0
  444. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  445. package/dist/modes/interactive-engine/protocol.js +9 -1
  446. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  447. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +2 -0
  448. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  449. package/dist/modes/interactive-engine/remote-model-catalog.js +33 -0
  450. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  451. package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
  452. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  453. package/dist/modes/rpc/rpc-client-api.js +18 -0
  454. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  455. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  456. package/dist/modes/rpc/rpc-client.js +1 -0
  457. package/dist/modes/rpc/rpc-client.js.map +1 -1
  458. package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
  459. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  460. package/dist/modes/rpc/rpc-command-handler.js +67 -2
  461. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  462. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  463. package/dist/modes/rpc/rpc-input-scheduler.js +1 -0
  464. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  465. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-mode.js +1 -0
  467. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  468. package/dist/modes/rpc/rpc-types.d.ts +42 -0
  469. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  470. package/dist/modes/rpc/rpc-types.js.map +1 -1
  471. package/dist/package-manager-cli.d.ts +3 -3
  472. package/dist/package-manager-cli.d.ts.map +1 -1
  473. package/dist/package-manager-cli.js +55 -51
  474. package/dist/package-manager-cli.js.map +1 -1
  475. package/dist/self-update-plan.d.ts +12 -0
  476. package/dist/self-update-plan.d.ts.map +1 -0
  477. package/dist/self-update-plan.js +42 -0
  478. package/dist/self-update-plan.js.map +1 -0
  479. package/dist/utils/clipboard-native.d.ts +1 -0
  480. package/dist/utils/clipboard-native.d.ts.map +1 -1
  481. package/dist/utils/clipboard-native.js.map +1 -1
  482. package/dist/utils/clipboard.d.ts +3 -0
  483. package/dist/utils/clipboard.d.ts.map +1 -1
  484. package/dist/utils/clipboard.js +10 -0
  485. package/dist/utils/clipboard.js.map +1 -1
  486. package/dist/utils/version-check.d.ts +1 -0
  487. package/dist/utils/version-check.d.ts.map +1 -1
  488. package/dist/utils/version-check.js +3 -3
  489. package/dist/utils/version-check.js.map +1 -1
  490. package/docs/docs.json +2 -1
  491. package/docs/extensions.md +59 -7
  492. package/docs/json.md +7 -1
  493. package/docs/keybindings.md +3 -0
  494. package/docs/llama-cpp.md +70 -0
  495. package/docs/models.md +8 -3
  496. package/docs/packages.md +4 -2
  497. package/docs/prompt-templates.md +1 -0
  498. package/docs/providers.md +41 -3
  499. package/docs/rpc.md +49 -0
  500. package/docs/sdk.md +21 -0
  501. package/docs/settings.md +19 -3
  502. package/docs/tui.md +2 -2
  503. package/docs/workflows.md +6 -6
  504. package/examples/extensions/README.md +1 -1
  505. package/examples/extensions/sandbox/package-lock.json +3 -3
  506. package/npm-shrinkwrap.json +36 -36
  507. package/package.json +5 -5
@@ -2,15 +2,22 @@ export class RemoteModelCatalog {
2
2
  constructor(client) {
3
3
  this.models = [];
4
4
  this.scopedModels = [];
5
+ this.customAuthProviders = new Map();
5
6
  this.refreshGeneration = 0;
6
7
  this.client = client;
7
8
  }
8
9
  apply(catalog) {
10
+ this.applyModels(catalog);
11
+ this.customAuthProviders = new Map(catalog.customAuthProviders.map(({ id, name }) => [id, name]));
12
+ }
13
+ applyModels(catalog) {
9
14
  this.models = catalog.models;
10
15
  this.scopedModels = catalog.scopedModels;
11
16
  }
12
17
  patch(session) {
13
18
  const registry = session.modelRegistry;
19
+ const localGetCustomAuth = registry.getCustomApiKeyAuth?.bind(registry) ?? (() => undefined);
20
+ const localGetDisplayName = registry.getProviderDisplayName?.bind(registry) ?? ((provider) => provider);
14
21
  Object.defineProperties(registry, {
15
22
  refresh: { configurable: true, value: (options = {}) => this.refresh(options) },
16
23
  getAvailable: { configurable: true, value: () => [...this.models] },
@@ -22,6 +29,32 @@ export class RemoteModelCatalog {
22
29
  configurable: true,
23
30
  value: (model) => this.models.some((candidate) => candidate.provider === model.provider && candidate.id === model.id),
24
31
  },
32
+ getCustomApiKeyAuthProviders: {
33
+ configurable: true,
34
+ value: () => [...this.customAuthProviders].map(([id, name]) => ({ id, name })),
35
+ },
36
+ getProviderDisplayName: {
37
+ configurable: true,
38
+ value: (provider) => this.customAuthProviders.get(provider) ?? localGetDisplayName(provider),
39
+ },
40
+ getCustomApiKeyAuth: {
41
+ configurable: true,
42
+ value: (provider) => {
43
+ const name = this.customAuthProviders.get(provider);
44
+ if (!name)
45
+ return localGetCustomAuth(provider);
46
+ return {
47
+ name,
48
+ login: async ({ signal }) => {
49
+ const result = await this.client.loginProvider(provider, signal);
50
+ if (result.cancelled)
51
+ throw new Error("Login cancelled");
52
+ this.apply(result);
53
+ return result.credential;
54
+ },
55
+ };
56
+ },
57
+ },
25
58
  });
26
59
  Object.defineProperty(session, "scopedModels", {
27
60
  configurable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"remote-model-catalog.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-model-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelsRefreshResult } from \"@earendil-works/pi-ai\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport type { RpcModelCatalog } from \"../rpc/rpc-types.ts\";\n\ninterface RemoteModelRefreshOptions {\n\tsignal?: AbortSignal;\n\ttimeoutMs?: number;\n\tforce?: boolean;\n\tallowNetwork?: boolean;\n}\n\nexport class RemoteModelCatalog {\n\tprivate readonly client: RpcClient;\n\tprivate models: Model<Api>[] = [];\n\tprivate scopedModels: Array<{ model: Model<Api>; thinkingLevel?: AgentSession[\"thinkingLevel\"] }> = [];\n\tprivate refreshGeneration = 0;\n\n\tconstructor(client: RpcClient) {\n\t\tthis.client = client;\n\t}\n\n\tapply(catalog: RpcModelCatalog): void {\n\t\tthis.models = catalog.models;\n\t\tthis.scopedModels = catalog.scopedModels;\n\t}\n\n\tpatch(session: AgentSession): void {\n\t\tconst registry = session.modelRegistry;\n\t\tObject.defineProperties(registry, {\n\t\t\trefresh: { configurable: true, value: (options = {}) => this.refresh(options) },\n\t\t\tgetAvailable: { configurable: true, value: () => [...this.models] },\n\t\t\tfind: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (provider: string, modelId: string) =>\n\t\t\t\t\tthis.models.find((model) => model.provider === provider && model.id === modelId),\n\t\t\t},\n\t\t\thasConfiguredAuth: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (model: Model<Api>) => this.models.some(\n\t\t\t\t\t(candidate) => candidate.provider === model.provider && candidate.id === model.id,\n\t\t\t\t),\n\t\t\t},\n\t\t});\n\t\tObject.defineProperty(session, \"scopedModels\", {\n\t\t\tconfigurable: true,\n\t\t\tget: () => this.scopedModels,\n\t\t});\n\t}\n\n\tprivate async refresh(options: RemoteModelRefreshOptions = {}): Promise<ModelsRefreshResult> {\n\t\tconst generation = ++this.refreshGeneration;\n\t\tif (options.signal?.aborted) return { aborted: true, errors: new Map() };\n\t\tconst remoteRefresh = this.client.refreshModels({\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t\tforce: options.force,\n\t\t\tallowNetwork: options.allowNetwork,\n\t\t});\n\t\tconst result = await this.waitForRefresh(remoteRefresh, options.signal);\n\t\tif (!result || options.signal?.aborted) return { aborted: true, errors: new Map() };\n\t\tif (generation === this.refreshGeneration) this.apply(result);\n\t\treturn {\n\t\t\taborted: result.aborted,\n\t\t\terrors: new Map(result.errors.map(({ provider, message }) => [provider, new Error(message)])),\n\t\t};\n\t}\n\n\tprivate async waitForRefresh(\n\t\tremoteRefresh: ReturnType<RpcClient[\"refreshModels\"]>,\n\t\tsignal: AbortSignal | undefined,\n\t): Promise<Awaited<typeof remoteRefresh> | undefined> {\n\t\tif (!signal) return remoteRefresh;\n\t\tlet abort: (() => void) | undefined;\n\t\tconst aborted = new Promise<undefined>((resolve) => {\n\t\t\tabort = () => resolve(undefined);\n\t\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\t});\n\t\ttry {\n\t\t\treturn await Promise.race([remoteRefresh, aborted]);\n\t\t} finally {\n\t\t\tif (abort) signal.removeEventListener(\"abort\", abort);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"remote-model-catalog.js","sourceRoot":"","sources":["../../../src/modes/interactive-engine/remote-model-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelsRefreshResult } from \"@earendil-works/pi-ai\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSession } from \"../../core/agent-session.ts\";\nimport type { ProviderApiKeyAuth } from \"../../core/extensions/provider-types.ts\";\nimport type { RpcClient } from \"../rpc/rpc-client.ts\";\nimport type { RpcModelCatalog } from \"../rpc/rpc-types.ts\";\n\ninterface RemoteModelRefreshOptions {\n\tsignal?: AbortSignal;\n\ttimeoutMs?: number;\n\tforce?: boolean;\n\tallowNetwork?: boolean;\n}\n\nexport class RemoteModelCatalog {\n\tprivate readonly client: RpcClient;\n\tprivate models: Model<Api>[] = [];\n\tprivate scopedModels: Array<{ model: Model<Api>; thinkingLevel?: AgentSession[\"thinkingLevel\"] }> = [];\n\tprivate customAuthProviders = new Map<string, string>();\n\tprivate refreshGeneration = 0;\n\n\tconstructor(client: RpcClient) {\n\t\tthis.client = client;\n\t}\n\n\tapply(catalog: RpcModelCatalog): void {\n\t\tthis.applyModels(catalog);\n\t\tthis.customAuthProviders = new Map(catalog.customAuthProviders.map(({ id, name }) => [id, name]));\n\t}\n\n\tapplyModels(catalog: Pick<RpcModelCatalog, \"models\" | \"scopedModels\">): void {\n\t\tthis.models = catalog.models;\n\t\tthis.scopedModels = catalog.scopedModels;\n\t}\n\n\tpatch(session: AgentSession): void {\n\t\tconst registry = session.modelRegistry;\n\t\tconst localGetCustomAuth = registry.getCustomApiKeyAuth?.bind(registry) ?? (() => undefined);\n\t\tconst localGetDisplayName = registry.getProviderDisplayName?.bind(registry) ?? ((provider: string) => provider);\n\t\tObject.defineProperties(registry, {\n\t\t\trefresh: { configurable: true, value: (options = {}) => this.refresh(options) },\n\t\t\tgetAvailable: { configurable: true, value: () => [...this.models] },\n\t\t\tfind: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (provider: string, modelId: string) =>\n\t\t\t\t\tthis.models.find((model) => model.provider === provider && model.id === modelId),\n\t\t\t},\n\t\t\thasConfiguredAuth: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (model: Model<Api>) => this.models.some(\n\t\t\t\t\t(candidate) => candidate.provider === model.provider && candidate.id === model.id,\n\t\t\t\t),\n\t\t\t},\n\t\t\tgetCustomApiKeyAuthProviders: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => [...this.customAuthProviders].map(([id, name]) => ({ id, name })),\n\t\t\t},\n\t\t\tgetProviderDisplayName: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (provider: string) => this.customAuthProviders.get(provider) ?? localGetDisplayName(provider),\n\t\t\t},\n\t\t\tgetCustomApiKeyAuth: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: (provider: string): ProviderApiKeyAuth | undefined => {\n\t\t\t\t\tconst name = this.customAuthProviders.get(provider);\n\t\t\t\t\tif (!name) return localGetCustomAuth(provider);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tlogin: async ({ signal }) => {\n\t\t\t\t\t\t\tconst result = await this.client.loginProvider(provider, signal);\n\t\t\t\t\t\t\tif (result.cancelled) throw new Error(\"Login cancelled\");\n\t\t\t\t\t\t\tthis.apply(result);\n\t\t\t\t\t\t\treturn result.credential;\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});\n\t\tObject.defineProperty(session, \"scopedModels\", {\n\t\t\tconfigurable: true,\n\t\t\tget: () => this.scopedModels,\n\t\t});\n\t}\n\n\tprivate async refresh(options: RemoteModelRefreshOptions = {}): Promise<ModelsRefreshResult> {\n\t\tconst generation = ++this.refreshGeneration;\n\t\tif (options.signal?.aborted) return { aborted: true, errors: new Map() };\n\t\tconst remoteRefresh = this.client.refreshModels({\n\t\t\ttimeoutMs: options.timeoutMs,\n\t\t\tforce: options.force,\n\t\t\tallowNetwork: options.allowNetwork,\n\t\t});\n\t\tconst result = await this.waitForRefresh(remoteRefresh, options.signal);\n\t\tif (!result || options.signal?.aborted) return { aborted: true, errors: new Map() };\n\t\tif (generation === this.refreshGeneration) this.apply(result);\n\t\treturn {\n\t\t\taborted: result.aborted,\n\t\t\terrors: new Map(result.errors.map(({ provider, message }) => [provider, new Error(message)])),\n\t\t};\n\t}\n\n\tprivate async waitForRefresh(\n\t\tremoteRefresh: ReturnType<RpcClient[\"refreshModels\"]>,\n\t\tsignal: AbortSignal | undefined,\n\t): Promise<Awaited<typeof remoteRefresh> | undefined> {\n\t\tif (!signal) return remoteRefresh;\n\t\tlet abort: (() => void) | undefined;\n\t\tconst aborted = new Promise<undefined>((resolve) => {\n\t\t\tabort = () => resolve(undefined);\n\t\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\t});\n\t\ttry {\n\t\t\treturn await Promise.race([remoteRefresh, aborted]);\n\t\t} finally {\n\t\t\tif (abort) signal.removeEventListener(\"abort\", abort);\n\t\t}\n\t}\n}\n"]}
@@ -4,7 +4,7 @@ import type { SessionStats } from "../../core/agent-session.ts";
4
4
  import type { BashResult } from "../../core/bash-executor.ts";
5
5
  import type { VerbatimCompactionResult } from "../../core/compaction/index.ts";
6
6
  import type { SessionEntry, SessionTreeNode } from "../../core/session-manager.ts";
7
- import type { RpcCommand, RpcAutocompleteItem, RpcContextWindowInfo, RpcLogoutProviderResult, RpcModelRefreshResult, RpcResponse, RpcSessionState, RpcSlashCommand } from "./rpc-types.ts";
7
+ import type { RpcCommand, RpcAutocompleteItem, RpcContextWindowInfo, RpcLoginProviderResult, RpcLogoutProviderResult, RpcModelRefreshResult, RpcResponse, RpcSessionState, RpcSlashCommand } from "./rpc-types.ts";
8
8
  type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;
9
9
  export type RpcCommandBody = DistributiveOmit<RpcCommand, "id">;
10
10
  export interface ModelInfo {
@@ -34,6 +34,8 @@ export declare abstract class RpcClientApi {
34
34
  isScoped: boolean;
35
35
  } | null>;
36
36
  getAvailableModels(): Promise<ModelInfo[]>;
37
+ loginProvider(provider: string, signal?: AbortSignal): Promise<RpcLoginProviderResult>;
38
+ cancelLoginProvider(provider: string): Promise<void>;
37
39
  logoutProvider(provider: string): Promise<RpcLogoutProviderResult>;
38
40
  refreshModels(options?: {
39
41
  timeoutMs?: number;
@@ -44,6 +46,7 @@ export declare abstract class RpcClientApi {
44
46
  cycleThinkingLevel(): Promise<{
45
47
  level: ThinkingLevel;
46
48
  } | null>;
49
+ getAvailableThinkingLevels(): Promise<ThinkingLevel[]>;
47
50
  setContextWindow(contextWindow: number | string): Promise<void>;
48
51
  getAvailableContextWindows(): Promise<RpcContextWindowInfo>;
49
52
  setSteeringMode(mode: "all" | "one-at-a-time"): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client-api.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client-api.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client-api.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,21 @@ export class RpcClientApi {
18
18
  async getAvailableModels() {
19
19
  return this.data(await this.request({ type: "get_available_models" })).models;
20
20
  }
21
+ async loginProvider(provider, signal) {
22
+ if (signal?.aborted)
23
+ return { provider, cancelled: true };
24
+ const cancel = () => { void this.cancelLoginProvider(provider).catch(() => { }); };
25
+ signal?.addEventListener("abort", cancel, { once: true });
26
+ try {
27
+ return this.data(await this.request({ type: "login_provider", provider }));
28
+ }
29
+ finally {
30
+ signal?.removeEventListener("abort", cancel);
31
+ }
32
+ }
33
+ async cancelLoginProvider(provider) {
34
+ await this.request({ type: "cancel_login_provider", provider });
35
+ }
21
36
  async logoutProvider(provider) {
22
37
  return this.data(await this.request({ type: "logout_provider", provider }));
23
38
  }
@@ -28,6 +43,9 @@ export class RpcClientApi {
28
43
  async cycleThinkingLevel() {
29
44
  return this.data(await this.request({ type: "cycle_thinking_level" }));
30
45
  }
46
+ async getAvailableThinkingLevels() {
47
+ return this.data(await this.request({ type: "get_available_thinking_levels" })).levels;
48
+ }
31
49
  async setContextWindow(contextWindow) {
32
50
  this.data(await this.request({ type: "set_context_window", contextWindow }));
33
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client-api.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, ImageContent, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { SessionStats } from \"../../core/agent-session.ts\";\nimport type { BashResult } from \"../../core/bash-executor.ts\";\nimport type { VerbatimCompactionResult } from \"../../core/compaction/index.ts\";\nimport type { SessionEntry, SessionTreeNode } from \"../../core/session-manager.ts\";\nimport type {\n\tRpcCommand,\n\tRpcAutocompleteItem,\n\tRpcContextWindowInfo,\n\tRpcLogoutProviderResult,\n\tRpcModelRefreshResult,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSlashCommand,\n} from \"./rpc-types.ts\";\n\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\nexport type RpcCommandBody = DistributiveOmit<RpcCommand, \"id\">;\n\nexport interface ModelInfo {\n\tprovider: string;\n\tid: string;\n\tcontextWindow: number;\n\treasoning: boolean;\n}\n\nexport abstract class RpcClientApi {\n\tprotected abstract request(command: RpcCommandBody): Promise<RpcResponse>;\n\tprotected abstract data<T>(response: RpcResponse): T;\n\n\tasync prompt(message: string, images?: ImageContent[], streamingBehavior?: \"steer\" | \"followUp\"): Promise<void> {\n\t\tawait this.request({ type: \"prompt\", message, images, streamingBehavior });\n\t}\n\tasync steer(message: string, images?: ImageContent[]): Promise<void> { await this.request({ type: \"steer\", message, images }); }\n\tasync followUp(message: string, images?: ImageContent[]): Promise<void> { await this.request({ type: \"follow_up\", message, images }); }\n\tasync abort(): Promise<void> { await this.request({ type: \"abort\" }); }\n\tasync newSession(parentSession?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.data(await this.request({ type: \"new_session\", parentSession }));\n\t}\n\tasync getState(): Promise<RpcSessionState> { return this.data(await this.request({ type: \"get_state\" })); }\n\tasync setModel(provider: string, modelId: string): Promise<{ provider: string; id: string }> {\n\t\treturn this.data(await this.request({ type: \"set_model\", provider, modelId }));\n\t}\n\tasync cycleModel(direction?: \"forward\" | \"backward\"): Promise<{\n\t\tmodel: Model<Api>; thinkingLevel: ThinkingLevel; isScoped: boolean;\n\t} | null> {\n\t\treturn this.data(await this.request({ type: \"cycle_model\", direction }));\n\t}\n\tasync getAvailableModels(): Promise<ModelInfo[]> {\n\t\treturn this.data<{ models: ModelInfo[] }>(await this.request({ type: \"get_available_models\" })).models;\n\t}\n\tasync logoutProvider(provider: string): Promise<RpcLogoutProviderResult> {\n\t\treturn this.data(await this.request({ type: \"logout_provider\", provider }));\n\t}\n\n\tasync refreshModels(options: { timeoutMs?: number; force?: boolean; allowNetwork?: boolean } = {}): Promise<RpcModelRefreshResult> {\n\t\treturn this.data(await this.request({ type: \"refresh_models\", ...options }));\n\t}\n\tasync setThinkingLevel(level: ThinkingLevel): Promise<void> { await this.request({ type: \"set_thinking_level\", level }); }\n\tasync cycleThinkingLevel(): Promise<{ level: ThinkingLevel } | null> {\n\t\treturn this.data(await this.request({ type: \"cycle_thinking_level\" }));\n\t}\n\tasync setContextWindow(contextWindow: number | string): Promise<void> {\n\t\tthis.data(await this.request({ type: \"set_context_window\", contextWindow }));\n\t}\n\tasync getAvailableContextWindows(): Promise<RpcContextWindowInfo> {\n\t\treturn this.data(await this.request({ type: \"get_available_context_windows\" }));\n\t}\n\tasync setSteeringMode(mode: \"all\" | \"one-at-a-time\"): Promise<void> { await this.request({ type: \"set_steering_mode\", mode }); }\n\tasync setFollowUpMode(mode: \"all\" | \"one-at-a-time\"): Promise<void> { await this.request({ type: \"set_follow_up_mode\", mode }); }\n\tasync compact(): Promise<VerbatimCompactionResult> { return this.data(await this.request({ type: \"compact\" })); }\n\tasync setAutoCompaction(enabled: boolean): Promise<void> { await this.request({ type: \"set_auto_compaction\", enabled }); }\n\tasync setAutoRetry(enabled: boolean): Promise<void> { await this.request({ type: \"set_auto_retry\", enabled }); }\n\tasync abortRetry(): Promise<void> { await this.request({ type: \"abort_retry\" }); }\n\tasync bash(command: string): Promise<BashResult> { return this.data(await this.request({ type: \"bash\", command })); }\n\tasync abortBash(): Promise<void> { await this.request({ type: \"abort_bash\" }); }\n\tasync getSessionStats(): Promise<SessionStats> { return this.data(await this.request({ type: \"get_session_stats\" })); }\n\tasync exportHtml(outputPath?: string): Promise<{ path: string }> { return this.data(await this.request({ type: \"export_html\", outputPath })); }\n\tasync switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.data(await this.request({ type: \"switch_session\", sessionPath }));\n\t}\n\tasync fork(entryId: string): Promise<{ text: string; cancelled: boolean }> { return this.data(await this.request({ type: \"fork\", entryId })); }\n\tasync clone(): Promise<{ cancelled: boolean }> { return this.data(await this.request({ type: \"clone\" })); }\n\tasync getForkMessages(): Promise<Array<{ entryId: string; text: string }>> {\n\t\treturn this.data<{ messages: Array<{ entryId: string; text: string }> }>(await this.request({ type: \"get_fork_messages\" })).messages;\n\t}\n\tasync getEntries(since?: string): Promise<{ entries: SessionEntry[]; leafId: string | null }> {\n\t\treturn this.data(await this.request({ type: \"get_entries\", since }));\n\t}\n\tasync getTree(): Promise<{ tree: SessionTreeNode[]; leafId: string | null }> { return this.data(await this.request({ type: \"get_tree\" })); }\n\tasync getLastAssistantText(): Promise<string | null> {\n\t\treturn this.data<{ text: string | null }>(await this.request({ type: \"get_last_assistant_text\" })).text;\n\t}\n\tasync setSessionName(name: string): Promise<void> { await this.request({ type: \"set_session_name\", name }); }\n\tasync getMessages(): Promise<AgentMessage[]> {\n\t\treturn this.data<{ messages: AgentMessage[] }>(await this.request({ type: \"get_messages\" })).messages;\n\t}\n\tasync getCommands(): Promise<RpcSlashCommand[]> {\n\t\treturn this.data<{ commands: RpcSlashCommand[] }>(await this.request({ type: \"get_commands\" })).commands;\n\t}\n\tasync getCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.data<{ completions: RpcAutocompleteItem[] | null }>(\n\t\t\tawait this.request({ type: \"get_command_completions\", commandName, argumentPrefix }),\n\t\t).completions;\n\t}\n}\n"]}
1
+ {"version":3,"file":"rpc-client-api.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client-api.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Api, ImageContent, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { SessionStats } from \"../../core/agent-session.ts\";\nimport type { BashResult } from \"../../core/bash-executor.ts\";\nimport type { VerbatimCompactionResult } from \"../../core/compaction/index.ts\";\nimport type { SessionEntry, SessionTreeNode } from \"../../core/session-manager.ts\";\nimport type {\n\tRpcCommand,\n\tRpcAutocompleteItem,\n\tRpcContextWindowInfo,\n\tRpcLoginProviderResult,\n\tRpcLogoutProviderResult,\n\tRpcModelRefreshResult,\n\tRpcResponse,\n\tRpcSessionState,\n\tRpcSlashCommand,\n} from \"./rpc-types.ts\";\n\ntype DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\nexport type RpcCommandBody = DistributiveOmit<RpcCommand, \"id\">;\n\nexport interface ModelInfo {\n\tprovider: string;\n\tid: string;\n\tcontextWindow: number;\n\treasoning: boolean;\n}\n\nexport abstract class RpcClientApi {\n\tprotected abstract request(command: RpcCommandBody): Promise<RpcResponse>;\n\tprotected abstract data<T>(response: RpcResponse): T;\n\n\tasync prompt(message: string, images?: ImageContent[], streamingBehavior?: \"steer\" | \"followUp\"): Promise<void> {\n\t\tawait this.request({ type: \"prompt\", message, images, streamingBehavior });\n\t}\n\tasync steer(message: string, images?: ImageContent[]): Promise<void> { await this.request({ type: \"steer\", message, images }); }\n\tasync followUp(message: string, images?: ImageContent[]): Promise<void> { await this.request({ type: \"follow_up\", message, images }); }\n\tasync abort(): Promise<void> { await this.request({ type: \"abort\" }); }\n\tasync newSession(parentSession?: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.data(await this.request({ type: \"new_session\", parentSession }));\n\t}\n\tasync getState(): Promise<RpcSessionState> { return this.data(await this.request({ type: \"get_state\" })); }\n\tasync setModel(provider: string, modelId: string): Promise<{ provider: string; id: string }> {\n\t\treturn this.data(await this.request({ type: \"set_model\", provider, modelId }));\n\t}\n\tasync cycleModel(direction?: \"forward\" | \"backward\"): Promise<{\n\t\tmodel: Model<Api>; thinkingLevel: ThinkingLevel; isScoped: boolean;\n\t} | null> {\n\t\treturn this.data(await this.request({ type: \"cycle_model\", direction }));\n\t}\n\tasync getAvailableModels(): Promise<ModelInfo[]> {\n\t\treturn this.data<{ models: ModelInfo[] }>(await this.request({ type: \"get_available_models\" })).models;\n\t}\n\tasync loginProvider(provider: string, signal?: AbortSignal): Promise<RpcLoginProviderResult> {\n\t\tif (signal?.aborted) return { provider, cancelled: true };\n\t\tconst cancel = () => { void this.cancelLoginProvider(provider).catch(() => {}); };\n\t\tsignal?.addEventListener(\"abort\", cancel, { once: true });\n\t\ttry {\n\t\t\treturn this.data(await this.request({ type: \"login_provider\", provider }));\n\t\t} finally {\n\t\t\tsignal?.removeEventListener(\"abort\", cancel);\n\t\t}\n\t}\n\tasync cancelLoginProvider(provider: string): Promise<void> {\n\t\tawait this.request({ type: \"cancel_login_provider\", provider });\n\t}\n\tasync logoutProvider(provider: string): Promise<RpcLogoutProviderResult> {\n\t\treturn this.data(await this.request({ type: \"logout_provider\", provider }));\n\t}\n\n\tasync refreshModels(options: { timeoutMs?: number; force?: boolean; allowNetwork?: boolean } = {}): Promise<RpcModelRefreshResult> {\n\t\treturn this.data(await this.request({ type: \"refresh_models\", ...options }));\n\t}\n\tasync setThinkingLevel(level: ThinkingLevel): Promise<void> { await this.request({ type: \"set_thinking_level\", level }); }\n\tasync cycleThinkingLevel(): Promise<{ level: ThinkingLevel } | null> {\n\t\treturn this.data(await this.request({ type: \"cycle_thinking_level\" }));\n\t}\n\tasync getAvailableThinkingLevels(): Promise<ThinkingLevel[]> {\n\t\treturn this.data<{ levels: ThinkingLevel[] }>(\n\t\t\tawait this.request({ type: \"get_available_thinking_levels\" }),\n\t\t).levels;\n\t}\n\tasync setContextWindow(contextWindow: number | string): Promise<void> {\n\t\tthis.data(await this.request({ type: \"set_context_window\", contextWindow }));\n\t}\n\tasync getAvailableContextWindows(): Promise<RpcContextWindowInfo> {\n\t\treturn this.data(await this.request({ type: \"get_available_context_windows\" }));\n\t}\n\tasync setSteeringMode(mode: \"all\" | \"one-at-a-time\"): Promise<void> { await this.request({ type: \"set_steering_mode\", mode }); }\n\tasync setFollowUpMode(mode: \"all\" | \"one-at-a-time\"): Promise<void> { await this.request({ type: \"set_follow_up_mode\", mode }); }\n\tasync compact(): Promise<VerbatimCompactionResult> { return this.data(await this.request({ type: \"compact\" })); }\n\tasync setAutoCompaction(enabled: boolean): Promise<void> { await this.request({ type: \"set_auto_compaction\", enabled }); }\n\tasync setAutoRetry(enabled: boolean): Promise<void> { await this.request({ type: \"set_auto_retry\", enabled }); }\n\tasync abortRetry(): Promise<void> { await this.request({ type: \"abort_retry\" }); }\n\tasync bash(command: string): Promise<BashResult> { return this.data(await this.request({ type: \"bash\", command })); }\n\tasync abortBash(): Promise<void> { await this.request({ type: \"abort_bash\" }); }\n\tasync getSessionStats(): Promise<SessionStats> { return this.data(await this.request({ type: \"get_session_stats\" })); }\n\tasync exportHtml(outputPath?: string): Promise<{ path: string }> { return this.data(await this.request({ type: \"export_html\", outputPath })); }\n\tasync switchSession(sessionPath: string): Promise<{ cancelled: boolean }> {\n\t\treturn this.data(await this.request({ type: \"switch_session\", sessionPath }));\n\t}\n\tasync fork(entryId: string): Promise<{ text: string; cancelled: boolean }> { return this.data(await this.request({ type: \"fork\", entryId })); }\n\tasync clone(): Promise<{ cancelled: boolean }> { return this.data(await this.request({ type: \"clone\" })); }\n\tasync getForkMessages(): Promise<Array<{ entryId: string; text: string }>> {\n\t\treturn this.data<{ messages: Array<{ entryId: string; text: string }> }>(await this.request({ type: \"get_fork_messages\" })).messages;\n\t}\n\tasync getEntries(since?: string): Promise<{ entries: SessionEntry[]; leafId: string | null }> {\n\t\treturn this.data(await this.request({ type: \"get_entries\", since }));\n\t}\n\tasync getTree(): Promise<{ tree: SessionTreeNode[]; leafId: string | null }> { return this.data(await this.request({ type: \"get_tree\" })); }\n\tasync getLastAssistantText(): Promise<string | null> {\n\t\treturn this.data<{ text: string | null }>(await this.request({ type: \"get_last_assistant_text\" })).text;\n\t}\n\tasync setSessionName(name: string): Promise<void> { await this.request({ type: \"set_session_name\", name }); }\n\tasync getMessages(): Promise<AgentMessage[]> {\n\t\treturn this.data<{ messages: AgentMessage[] }>(await this.request({ type: \"get_messages\" })).messages;\n\t}\n\tasync getCommands(): Promise<RpcSlashCommand[]> {\n\t\treturn this.data<{ commands: RpcSlashCommand[] }>(await this.request({ type: \"get_commands\" })).commands;\n\t}\n\tasync getCommandCompletions(commandName: string, argumentPrefix: string): Promise<RpcAutocompleteItem[] | null> {\n\t\treturn this.data<{ completions: RpcAutocompleteItem[] | null }>(\n\t\t\tawait this.request({ type: \"get_command_completions\", commandName, argumentPrefix }),\n\t\t).completions;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,7 @@ function restartArgs(args, sessionFile) {
37
37
  */
38
38
  const LONG_LIVED_COMMANDS = new Set([
39
39
  "prompt",
40
+ "login_provider",
40
41
  "steer",
41
42
  "follow_up",
42
43
  "bash",
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type { ChildProcess } from \"node:child_process\";\nimport type { ImageContent } from \"@earendil-works/pi-ai/compat\";\nimport { BoundedWriter } from \"./bounded-writer.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"../interactive-engine/activity-watchdog.ts\";\nimport { InteractiveEngineMonitor } from \"../interactive-engine/engine-monitor.ts\";\nimport { INTERACTIVE_ENGINE_MAX_FRAME_BYTES, serializeInteractiveEngineFrame, type EngineKeybindingState, type InteractiveEngineCommand, type InteractiveEngineMessage } from \"../interactive-engine/protocol.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport { createInteractiveJsonlOptions, spawnRpcClientProcess, terminateRpcClientProcess } from \"./rpc-client-process.ts\";\nimport { RpcClientApi, type RpcCommandBody } from \"./rpc-client-api.ts\";\nimport { RpcEventBuffer } from \"./rpc-event-buffer.ts\";\nimport { collectRpcEvents, waitForRpcIdle } from \"./rpc-client-waits.ts\";\nimport type { RpcCommand, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcEvent, RpcResponse } from \"./rpc-types.ts\";\nexport type { ModelInfo, RpcCommandBody } from \"./rpc-client-api.ts\";\nexport type { RpcContextWindowInfo, RpcEvent } from \"./rpc-types.ts\";\n\n\nfunction restartArgs(args: readonly string[] | undefined, sessionFile: string | undefined): string[] {\n\tconst result: string[] = [];\n\tfor (let index = 0; index < (args?.length ?? 0); index += 1) {\n\t\tconst value = args![index]!;\n\t\tif (value === \"--no-session\") continue;\n\t\tif (value === \"--session\") { index += 1; continue; }\n\t\tresult.push(value);\n\t}\n\tresult.push(sessionFile ? \"--session\" : \"--no-session\");\n\tif (sessionFile) result.push(sessionFile);\n\treturn result;\n}\nexport interface RpcClientOptions {\n\tcliPath?: string;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tprovider?: string;\n\tmodel?: string;\n\tcontextWindow?: number | string;\n\targs?: string[];\n\truntimeExecutable?: string;\n\truntimeArgs?: string[];\n\t/**\n\t * Bounded deadline (ms) applied to short metadata/control requests. Long-lived\n\t * commands (see LONG_LIVED_COMMANDS) never use this timer. Defaults to 30s.\n\t */\n\trequestTimeoutMs?: number;\n\tinteractiveEngine?: {\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void;\n\t\tonActivityChange?: (active: boolean) => void;\n\t};\n}\n\n/**\n * Commands whose response is legitimately gated on human/agent interaction or a\n * turn boundary and therefore must not be subject to the generic request\n * timeout: interactive prompts and custom-UI pickers (routed through `prompt`),\n * queued turn-boundary sends (`steer`/`follow_up`), long-running shell and\n * compaction work, and session-tree navigation/mutation that can open pickers.\n *\n * Failure detection is unaffected: engine exit, transport violations, aborts,\n * generation replacement, and explicit stop all reject pending requests via\n * rejectPendingRequests/failTransport independently of any timer.\n */\nconst LONG_LIVED_COMMANDS: ReadonlySet<string> = new Set<string>([\n\t\"prompt\",\n\t\"steer\",\n\t\"follow_up\",\n\t\"bash\",\n\t\"user_bash\",\n\t\"compact\",\n\t\"fork\",\n\t\"clone\",\n\t\"switch_session\",\n\t\"new_session\",\n\t\"import_session\",\n\t\"navigate_tree\",\n\t\"invoke_shortcut\",\n]);\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n\nexport type RpcEventListener = (event: RpcEvent) => void;\n\n\nexport class RpcClient extends RpcClientApi {\n\tprivate process: ChildProcess | null = null;\n\tprivate stopReadingStdout: (() => void) | null = null;\n\tprivate eventListeners: RpcEventListener[] = [];\n\tprivate extensionUIListeners: Array<(request: RpcExtensionUIRequest) => void> = [];\n\tprivate pendingExtensionUIRequests: RpcExtensionUIRequest[] = [];\n\tprivate engineMessageListeners: Array<(message: InteractiveEngineMessage) => void> = [];\n\tprivate latestEngineKeybindingState: EngineKeybindingState | undefined;\n\tprivate pendingEngineMessages: InteractiveEngineMessage[] = [];\n\tprivate pendingEngineMessageBytes = 0;\n\tprivate pendingRequests: Map<string, { resolve: (response: RpcResponse) => void; reject: (error: Error) => void }> =\n\t\tnew Map();\n\tprivate requestId = 0;\n\tprivate stderr = \"\";\n\tprivate exitError: Error | null = null;\n\tprivate engineMonitor: InteractiveEngineMonitor | undefined;\n\tprivate eventBuffer: RpcEventBuffer | undefined;\n\tprivate stdinWriter: BoundedWriter | undefined;\n\tprivate generation = 0;\n\tprivate readonly activeActivityIds = new Set<string>();\n\tprivate enginePid: number | undefined;\n\n\tdeclare private options: RpcClientOptions;\n\n\tconstructor(options: RpcClientOptions = {}) {\n\t\tsuper();\n\t\tthis.options = options;\n\t}\n\n\tasync start(): Promise<void> {\n\t\tif (this.process) {\n\t\t\tthrow new Error(\"Client already started\");\n\t\t}\n\n\t\tconst cliPath = this.options.cliPath ?? \"dist/cli.js\";\n\t\tconst args = [\"--mode\", \"rpc\"];\n\n\t\tif (this.options.provider) {\n\t\t\targs.push(\"--provider\", this.options.provider);\n\t\t}\n\t\tif (this.options.model) {\n\t\t\targs.push(\"--model\", this.options.model);\n\t\t}\n\t\tif (this.options.contextWindow !== undefined) {\n\t\t\targs.push(\"--context-window\", String(this.options.contextWindow));\n\t\t}\n\t\tif (this.options.args) {\n\t\t\targs.push(...this.options.args);\n\t\t}\n\n\t\tconst generation = ++this.generation;\n\t\tthis.exitError = null;\n\t\tthis.stderr = \"\";\n\t\tthis.activeActivityIds.clear();\n\t\tthis.enginePid = undefined;\n\t\tthis.engineMonitor = this.options.interactiveEngine\n\t\t\t? new InteractiveEngineMonitor(\n\t\t\t\t\tthis.options.interactiveEngine.onDiagnostic,\n\t\t\t\t\t(message) => this.observeInteractiveEngineMessage(message),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tthis.eventBuffer = this.engineMonitor ? new RpcEventBuffer((event) => this.emitEvent(event)) : undefined;\n\t\tconst childProcess = spawnRpcClientProcess({\n\t\t\tcliPath,\n\t\t\tcliArgs: args,\n\t\t\tcwd: this.options.cwd,\n\t\t\tenv: this.options.env,\n\t\t\truntimeExecutable: this.options.runtimeExecutable,\n\t\t\truntimeArgs: this.options.runtimeArgs,\n\t\t\tinteractiveEngine: this.engineMonitor !== undefined,\n\t\t});\n\t\tthis.process = childProcess;\n\t\tthis.stdinWriter = new BoundedWriter(childProcess.stdin!, {\n\t\t\tmaxFrameBytes: INTERACTIVE_ENGINE_MAX_FRAME_BYTES,\n\t\t\tmaxQueuedBytes: 2 * INTERACTIVE_ENGINE_MAX_FRAME_BYTES,\n\t\t});\n\n\t\tchildProcess.once(\"exit\", (code, signal) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tconst error = this.createProcessExitError(code, signal);\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.activeActivityIds.clear();\n\t\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.once(\"error\", (error) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.stdin?.on(\"error\", (error) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.stderr?.on(\"data\", (data) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tconst next = this.stderr + data.toString();\n\t\t\tthis.stderr = Buffer.byteLength(next, \"utf8\") <= 256 * 1024\n\t\t\t\t? next\n\t\t\t\t: `${Buffer.from(next).subarray(-256 * 1024).toString(\"utf8\")}\\n[stderr truncated]`;\n\t\t\tprocess.stderr.write(data);\n\t\t});\n\t\tconst readerOptions = createInteractiveJsonlOptions(\n\t\t\tthis.engineMonitor !== undefined,\n\t\t\tthis.options.interactiveEngine?.onDiagnostic,\n\t\t);\n\t\tthis.stopReadingStdout = attachJsonlLineReader(childProcess.stdout!, (line) => {\n\t\t\tif (generation === this.generation) this.handleLine(line);\n\t\t}, {\n\t\t\t...readerOptions,\n\t\t\tonOversizedLine: () => {\n\t\t\t\treaderOptions.onOversizedLine?.();\n\t\t\t\tif (generation === this.generation) this.failTransport(new Error(\"Interactive engine emitted an oversized RPC frame\"));\n\t\t\t},\n\t\t});\n\t\tif (this.engineMonitor) await this.engineMonitor.waitUntilReady();\n\t\telse await sleep(100);\n\n\t\tif (generation !== this.generation || this.process?.exitCode !== null) {\n\t\t\tthrow new Error(`Agent process exited immediately. Stderr: ${this.stderr}`);\n\t\t}\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tconst child = this.process;\n\t\tif (!child) return;\n\t\tthis.invalidateEngineShortcuts();\n\t\tconst terminateTree = this.engineMonitor !== undefined;\n\t\tthis.stopReadingStdout?.();\n\t\tthis.engineMonitor?.stop();\n\t\tthis.stdinWriter?.close(new Error(\"Agent process stopped\"));\n\t\tthis.engineMonitor = undefined;\n\t\tthis.stopReadingStdout = null;\n\t\tthis.stdinWriter = undefined;\n\t\tthis.process = null;\n\t\tthis.generation += 1;\n\t\tawait terminateRpcClientProcess(child, terminateTree);\n\t\tthis.rejectPendingRequests(new Error(\"Agent process stopped\"));\n\t\tthis.eventBuffer?.dispose();\n\t\tthis.eventBuffer = undefined;\n\t\tthis.activeActivityIds.clear();\n\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t}\n\n\t/** Subscribe to agent events. */\n\tonEvent(listener: RpcEventListener): () => void {\n\t\tthis.eventListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tonExtensionUIRequest(listener: (request: RpcExtensionUIRequest) => void): () => void {\n\t\tthis.extensionUIListeners.push(listener);\n\t\tfor (const request of this.pendingExtensionUIRequests.splice(0)) listener(request);\n\t\treturn () => {\n\t\t\tconst index = this.extensionUIListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.extensionUIListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tasync respondExtensionUI(response: RpcExtensionUIResponse): Promise<void> {\n\t\tawait this.requireWriter().write(serializeJsonLine(response));\n\t}\n\n\tonInteractiveEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\tthis.engineMessageListeners.push(listener);\n\t\tfor (const message of this.pendingEngineMessages.splice(0)) listener(message);\n\t\tthis.pendingEngineMessageBytes = 0;\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tonInteractiveEngineKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") listener(message.state);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tif (this.latestEngineKeybindingState) listener(this.latestEngineKeybindingState);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tsendInteractiveEngineCommand(command: InteractiveEngineCommand): void {\n\t\tconst writer = this.stdinWriter;\n\t\tif (!writer) return;\n\t\tconst frame = serializeInteractiveEngineFrame(command);\n\t\tif (command.type === \"engine_custom_render\" || command.type === \"engine_tool_render\" || command.type === \"engine_message_render\") {\n\t\t\twriter.offerLatest(`render:${command.componentId}`, frame);\n\t\t\treturn;\n\t\t}\n\t\tthis.bestEffort(writer.write(frame), `engine command ${command.type}`);\n\t}\n\twaitForInteractiveEngineBound(): Promise<void> { return this.engineMonitor?.waitUntilBound() ?? Promise.resolve(); }\n\tgetEnginePid(): number | undefined { return this.enginePid; }\n\tgetGeneration(): number { return this.generation; }\n\n\tasync restart(sessionFile: string | undefined): Promise<void> {\n\t\tawait this.stop();\n\t\tthis.options = { ...this.options, args: restartArgs(this.options.args, sessionFile) };\n\t\tawait this.start();\n\t\tawait this.waitForInteractiveEngineBound();\n\t}\n\n\tasync requestInternal<T>(command: RpcCommandBody): Promise<T> {\n\t\treturn this.data<T>(await this.request(command));\n\t}\n\tgetStderr(): string {\n\t\treturn this.stderr;\n\t}\n\n\n\twaitForIdle(timeout = 60000): Promise<void> {\n\t\treturn waitForRpcIdle(this, timeout);\n\t}\n\tcollectEvents(timeout = 60000): Promise<RpcEvent[]> {\n\t\treturn collectRpcEvents(this, timeout);\n\t}\n\tasync promptAndWait(message: string, images?: ImageContent[], timeout = 60000): Promise<RpcEvent[]> {\n\t\tconst eventsPromise = this.collectEvents(timeout);\n\t\tawait this.prompt(message, images);\n\t\treturn eventsPromise;\n\t}\n\tprivate handleLine(line: string): void {\n\t\tif (this.engineMonitor?.handleLine(line)) return;\n\t\ttry {\n\t\t\tconst data = JSON.parse(line) as { type?: string; id?: string };\n\t\t\tif (data.type === \"extension_ui_request\") {\n\t\t\t\tconst request = data as RpcExtensionUIRequest;\n\t\t\t\tif (this.extensionUIListeners.length === 0) this.pendingExtensionUIRequests.push(request);\n\t\t\t\tfor (const listener of this.extensionUIListeners) listener(request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.type === \"response\" && data.id && this.pendingRequests.has(data.id)) {\n\t\t\t\tconst pending = this.pendingRequests.get(data.id)!;\n\t\t\t\tthis.pendingRequests.delete(data.id);\n\t\t\t\tpending.resolve(data as RpcResponse);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst event = data as RpcEvent;\n\t\t\tif (this.eventBuffer) this.eventBuffer.enqueue(event);\n\t\t\telse this.emitEvent(event);\n\t\t} catch {\n\t\t\tif (this.engineMonitor) this.failTransport(new Error(\"Interactive engine emitted malformed JSONL\"));\n\t\t}\n\t}\n\tprivate emitEvent(event: RpcEvent): void {\n\t\tfor (const listener of this.eventListeners) listener(event);\n\t}\n\tprivate emitInteractiveEngineMessage(message: InteractiveEngineMessage): void {\n\t\tif (this.engineMessageListeners.length === 0 && message.type.startsWith(\"engine_custom_\")) {\n\t\t\tconst bytes = Buffer.byteLength(JSON.stringify(message), \"utf8\");\n\t\t\twhile (this.pendingEngineMessages.length > 0 && this.pendingEngineMessageBytes + bytes > INTERACTIVE_ENGINE_MAX_FRAME_BYTES) {\n\t\t\t\tconst removed = this.pendingEngineMessages.shift()!;\n\t\t\t\tthis.pendingEngineMessageBytes -= Buffer.byteLength(JSON.stringify(removed), \"utf8\");\n\t\t\t}\n\t\t\tif (bytes <= INTERACTIVE_ENGINE_MAX_FRAME_BYTES) {\n\t\t\t\tthis.pendingEngineMessages.push(message);\n\t\t\t\tthis.pendingEngineMessageBytes += bytes;\n\t\t\t}\n\t\t}\n\t\tfor (const listener of this.engineMessageListeners) listener(message);\n\t}\n\tprivate createProcessExitError(code: number | null, signal: NodeJS.Signals | null): Error {\n\t\treturn new Error(`Agent process exited (code=${code} signal=${signal}). Stderr: ${this.stderr}`);\n\t}\n\tprivate invalidateEngineShortcuts(): void {\n\t\tif (!this.latestEngineKeybindingState || this.latestEngineKeybindingState.shortcuts.length === 0) return;\n\t\tconst state: EngineKeybindingState = { ...this.latestEngineKeybindingState, shortcuts: [] };\n\t\tthis.latestEngineKeybindingState = state;\n\t\tthis.emitInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state });\n\t}\n\tprivate observeInteractiveEngineMessage(message: InteractiveEngineMessage): void {\n\t\tif (message.type === \"engine_ready\") this.enginePid = message.pid;\n\t\tif (message.type === \"engine_keybindings_reloaded\") this.latestEngineKeybindingState = message.state;\n\t\tif (message.type === \"engine_activity_started\") this.activeActivityIds.add(message.activity.id);\n\t\telse if (message.type === \"engine_activity_finished\") this.activeActivityIds.delete(message.activityId);\n\t\tthis.options.interactiveEngine?.onActivityChange?.(this.activeActivityIds.size > 0);\n\t\tthis.emitInteractiveEngineMessage(message);\n\t}\n\tprivate rejectPendingRequests(error: Error): void {\n\t\tfor (const { reject } of this.pendingRequests.values()) reject(error);\n\t\tthis.pendingRequests.clear();\n\t}\n\tprivate failTransport(error: Error): void {\n\t\tthis.exitError = error;\n\t\tthis.stdinWriter?.close(error);\n\t\tthis.engineMonitor?.fail(error);\n\t\tthis.rejectPendingRequests(error);\n\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\tactivity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message,\n\t\t});\n\t}\n\tprivate requireWriter(): BoundedWriter {\n\t\tif (!this.stdinWriter) throw new Error(\"Agent process stdin is not writable\");\n\t\treturn this.stdinWriter;\n\t}\n\tprivate bestEffort(operation: Promise<void>, label: string): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (!this.process || this.exitError) return;\n\t\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\t\tactivity: undefined, elapsedMs: 0, level: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\tprotected async request(command: RpcCommandBody): Promise<RpcResponse> {\n\t\tconst childProcess = this.process;\n\t\tif (!childProcess) throw new Error(\"Client not started\");\n\t\tif (this.exitError) throw this.exitError;\n\t\tif (childProcess.exitCode !== null) {\n\t\t\tconst error = this.createProcessExitError(childProcess.exitCode, childProcess.signalCode);\n\t\t\tthis.exitError = error;\n\t\t\tthrow error;\n\t\t}\n\t\tconst id = `req_${++this.requestId}`;\n\t\tconst fullCommand = { ...command, id } as RpcCommand;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet rejectResponse!: (error: Error) => void;\n\t\tconst response = new Promise<RpcResponse>((resolve, reject) => {\n\t\t\trejectResponse = reject;\n\t\t\tthis.pendingRequests.set(id, {\n\t\t\t\tresolve: (value) => { if (timeout) clearTimeout(timeout); resolve(value); },\n\t\t\t\treject: (error) => { if (timeout) clearTimeout(timeout); reject(error); },\n\t\t\t});\n\t\t});\n\t\ttry {\n\t\t\tawait this.requireWriter().write(serializeJsonLine(fullCommand));\n\t\t} catch (error) {\n\t\t\tthis.pendingRequests.delete(id);\n\t\t\trejectResponse(error instanceof Error ? error : new Error(String(error)));\n\t\t\treturn response;\n\t\t}\n\t\tif (this.pendingRequests.has(id) && !LONG_LIVED_COMMANDS.has(command.type)) {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\trejectResponse(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));\n\t\t\t}, this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n\t\t}\n\t\treturn response;\n\t}\n\tprivate assertSuccess(response: RpcResponse): void {\n\t\tif (!response.success) throw new Error(response.error);\n\t}\n\tprotected data<T>(response: RpcResponse): T {\n\t\tthis.assertSuccess(response);\n\t\tconst successResponse = response as Extract<RpcResponse, { success: true; data: unknown }>;\n\t\treturn successResponse.data as T;\n\t}\n}\n"]}
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport type { ChildProcess } from \"node:child_process\";\nimport type { ImageContent } from \"@earendil-works/pi-ai/compat\";\nimport { BoundedWriter } from \"./bounded-writer.ts\";\nimport { attachJsonlLineReader, serializeJsonLine } from \"./jsonl.ts\";\nimport type { ActivityWatchdogDiagnostic } from \"../interactive-engine/activity-watchdog.ts\";\nimport { InteractiveEngineMonitor } from \"../interactive-engine/engine-monitor.ts\";\nimport { INTERACTIVE_ENGINE_MAX_FRAME_BYTES, serializeInteractiveEngineFrame, type EngineKeybindingState, type InteractiveEngineCommand, type InteractiveEngineMessage } from \"../interactive-engine/protocol.ts\";\nimport { sleep } from \"../../utils/sleep.ts\";\nimport { createInteractiveJsonlOptions, spawnRpcClientProcess, terminateRpcClientProcess } from \"./rpc-client-process.ts\";\nimport { RpcClientApi, type RpcCommandBody } from \"./rpc-client-api.ts\";\nimport { RpcEventBuffer } from \"./rpc-event-buffer.ts\";\nimport { collectRpcEvents, waitForRpcIdle } from \"./rpc-client-waits.ts\";\nimport type { RpcCommand, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcEvent, RpcResponse } from \"./rpc-types.ts\";\nexport type { ModelInfo, RpcCommandBody } from \"./rpc-client-api.ts\";\nexport type { RpcContextWindowInfo, RpcEvent } from \"./rpc-types.ts\";\n\n\nfunction restartArgs(args: readonly string[] | undefined, sessionFile: string | undefined): string[] {\n\tconst result: string[] = [];\n\tfor (let index = 0; index < (args?.length ?? 0); index += 1) {\n\t\tconst value = args![index]!;\n\t\tif (value === \"--no-session\") continue;\n\t\tif (value === \"--session\") { index += 1; continue; }\n\t\tresult.push(value);\n\t}\n\tresult.push(sessionFile ? \"--session\" : \"--no-session\");\n\tif (sessionFile) result.push(sessionFile);\n\treturn result;\n}\nexport interface RpcClientOptions {\n\tcliPath?: string;\n\tcwd?: string;\n\tenv?: Record<string, string>;\n\tprovider?: string;\n\tmodel?: string;\n\tcontextWindow?: number | string;\n\targs?: string[];\n\truntimeExecutable?: string;\n\truntimeArgs?: string[];\n\t/**\n\t * Bounded deadline (ms) applied to short metadata/control requests. Long-lived\n\t * commands (see LONG_LIVED_COMMANDS) never use this timer. Defaults to 30s.\n\t */\n\trequestTimeoutMs?: number;\n\tinteractiveEngine?: {\n\t\tonDiagnostic: (diagnostic: ActivityWatchdogDiagnostic) => void;\n\t\tonActivityChange?: (active: boolean) => void;\n\t};\n}\n\n/**\n * Commands whose response is legitimately gated on human/agent interaction or a\n * turn boundary and therefore must not be subject to the generic request\n * timeout: interactive prompts and custom-UI pickers (routed through `prompt`),\n * queued turn-boundary sends (`steer`/`follow_up`), long-running shell and\n * compaction work, and session-tree navigation/mutation that can open pickers.\n *\n * Failure detection is unaffected: engine exit, transport violations, aborts,\n * generation replacement, and explicit stop all reject pending requests via\n * rejectPendingRequests/failTransport independently of any timer.\n */\nconst LONG_LIVED_COMMANDS: ReadonlySet<string> = new Set<string>([\n\t\"prompt\",\n\t\"login_provider\",\n\t\"steer\",\n\t\"follow_up\",\n\t\"bash\",\n\t\"user_bash\",\n\t\"compact\",\n\t\"fork\",\n\t\"clone\",\n\t\"switch_session\",\n\t\"new_session\",\n\t\"import_session\",\n\t\"navigate_tree\",\n\t\"invoke_shortcut\",\n]);\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n\nexport type RpcEventListener = (event: RpcEvent) => void;\n\n\nexport class RpcClient extends RpcClientApi {\n\tprivate process: ChildProcess | null = null;\n\tprivate stopReadingStdout: (() => void) | null = null;\n\tprivate eventListeners: RpcEventListener[] = [];\n\tprivate extensionUIListeners: Array<(request: RpcExtensionUIRequest) => void> = [];\n\tprivate pendingExtensionUIRequests: RpcExtensionUIRequest[] = [];\n\tprivate engineMessageListeners: Array<(message: InteractiveEngineMessage) => void> = [];\n\tprivate latestEngineKeybindingState: EngineKeybindingState | undefined;\n\tprivate pendingEngineMessages: InteractiveEngineMessage[] = [];\n\tprivate pendingEngineMessageBytes = 0;\n\tprivate pendingRequests: Map<string, { resolve: (response: RpcResponse) => void; reject: (error: Error) => void }> =\n\t\tnew Map();\n\tprivate requestId = 0;\n\tprivate stderr = \"\";\n\tprivate exitError: Error | null = null;\n\tprivate engineMonitor: InteractiveEngineMonitor | undefined;\n\tprivate eventBuffer: RpcEventBuffer | undefined;\n\tprivate stdinWriter: BoundedWriter | undefined;\n\tprivate generation = 0;\n\tprivate readonly activeActivityIds = new Set<string>();\n\tprivate enginePid: number | undefined;\n\n\tdeclare private options: RpcClientOptions;\n\n\tconstructor(options: RpcClientOptions = {}) {\n\t\tsuper();\n\t\tthis.options = options;\n\t}\n\n\tasync start(): Promise<void> {\n\t\tif (this.process) {\n\t\t\tthrow new Error(\"Client already started\");\n\t\t}\n\n\t\tconst cliPath = this.options.cliPath ?? \"dist/cli.js\";\n\t\tconst args = [\"--mode\", \"rpc\"];\n\n\t\tif (this.options.provider) {\n\t\t\targs.push(\"--provider\", this.options.provider);\n\t\t}\n\t\tif (this.options.model) {\n\t\t\targs.push(\"--model\", this.options.model);\n\t\t}\n\t\tif (this.options.contextWindow !== undefined) {\n\t\t\targs.push(\"--context-window\", String(this.options.contextWindow));\n\t\t}\n\t\tif (this.options.args) {\n\t\t\targs.push(...this.options.args);\n\t\t}\n\n\t\tconst generation = ++this.generation;\n\t\tthis.exitError = null;\n\t\tthis.stderr = \"\";\n\t\tthis.activeActivityIds.clear();\n\t\tthis.enginePid = undefined;\n\t\tthis.engineMonitor = this.options.interactiveEngine\n\t\t\t? new InteractiveEngineMonitor(\n\t\t\t\t\tthis.options.interactiveEngine.onDiagnostic,\n\t\t\t\t\t(message) => this.observeInteractiveEngineMessage(message),\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tthis.eventBuffer = this.engineMonitor ? new RpcEventBuffer((event) => this.emitEvent(event)) : undefined;\n\t\tconst childProcess = spawnRpcClientProcess({\n\t\t\tcliPath,\n\t\t\tcliArgs: args,\n\t\t\tcwd: this.options.cwd,\n\t\t\tenv: this.options.env,\n\t\t\truntimeExecutable: this.options.runtimeExecutable,\n\t\t\truntimeArgs: this.options.runtimeArgs,\n\t\t\tinteractiveEngine: this.engineMonitor !== undefined,\n\t\t});\n\t\tthis.process = childProcess;\n\t\tthis.stdinWriter = new BoundedWriter(childProcess.stdin!, {\n\t\t\tmaxFrameBytes: INTERACTIVE_ENGINE_MAX_FRAME_BYTES,\n\t\t\tmaxQueuedBytes: 2 * INTERACTIVE_ENGINE_MAX_FRAME_BYTES,\n\t\t});\n\n\t\tchildProcess.once(\"exit\", (code, signal) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tconst error = this.createProcessExitError(code, signal);\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.activeActivityIds.clear();\n\t\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.once(\"error\", (error) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.stdin?.on(\"error\", (error) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tthis.exitError = error;\n\t\t\tthis.stdinWriter?.close(error);\n\t\t\tthis.engineMonitor?.fail(error);\n\t\t\tthis.rejectPendingRequests(error);\n\t\t});\n\t\tchildProcess.stderr?.on(\"data\", (data) => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\tconst next = this.stderr + data.toString();\n\t\t\tthis.stderr = Buffer.byteLength(next, \"utf8\") <= 256 * 1024\n\t\t\t\t? next\n\t\t\t\t: `${Buffer.from(next).subarray(-256 * 1024).toString(\"utf8\")}\\n[stderr truncated]`;\n\t\t\tprocess.stderr.write(data);\n\t\t});\n\t\tconst readerOptions = createInteractiveJsonlOptions(\n\t\t\tthis.engineMonitor !== undefined,\n\t\t\tthis.options.interactiveEngine?.onDiagnostic,\n\t\t);\n\t\tthis.stopReadingStdout = attachJsonlLineReader(childProcess.stdout!, (line) => {\n\t\t\tif (generation === this.generation) this.handleLine(line);\n\t\t}, {\n\t\t\t...readerOptions,\n\t\t\tonOversizedLine: () => {\n\t\t\t\treaderOptions.onOversizedLine?.();\n\t\t\t\tif (generation === this.generation) this.failTransport(new Error(\"Interactive engine emitted an oversized RPC frame\"));\n\t\t\t},\n\t\t});\n\t\tif (this.engineMonitor) await this.engineMonitor.waitUntilReady();\n\t\telse await sleep(100);\n\n\t\tif (generation !== this.generation || this.process?.exitCode !== null) {\n\t\t\tthrow new Error(`Agent process exited immediately. Stderr: ${this.stderr}`);\n\t\t}\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tconst child = this.process;\n\t\tif (!child) return;\n\t\tthis.invalidateEngineShortcuts();\n\t\tconst terminateTree = this.engineMonitor !== undefined;\n\t\tthis.stopReadingStdout?.();\n\t\tthis.engineMonitor?.stop();\n\t\tthis.stdinWriter?.close(new Error(\"Agent process stopped\"));\n\t\tthis.engineMonitor = undefined;\n\t\tthis.stopReadingStdout = null;\n\t\tthis.stdinWriter = undefined;\n\t\tthis.process = null;\n\t\tthis.generation += 1;\n\t\tawait terminateRpcClientProcess(child, terminateTree);\n\t\tthis.rejectPendingRequests(new Error(\"Agent process stopped\"));\n\t\tthis.eventBuffer?.dispose();\n\t\tthis.eventBuffer = undefined;\n\t\tthis.activeActivityIds.clear();\n\t\tthis.options.interactiveEngine?.onActivityChange?.(false);\n\t}\n\n\t/** Subscribe to agent events. */\n\tonEvent(listener: RpcEventListener): () => void {\n\t\tthis.eventListeners.push(listener);\n\t\treturn () => {\n\t\t\tconst index = this.eventListeners.indexOf(listener);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.eventListeners.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tonExtensionUIRequest(listener: (request: RpcExtensionUIRequest) => void): () => void {\n\t\tthis.extensionUIListeners.push(listener);\n\t\tfor (const request of this.pendingExtensionUIRequests.splice(0)) listener(request);\n\t\treturn () => {\n\t\t\tconst index = this.extensionUIListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.extensionUIListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tasync respondExtensionUI(response: RpcExtensionUIResponse): Promise<void> {\n\t\tawait this.requireWriter().write(serializeJsonLine(response));\n\t}\n\n\tonInteractiveEngineMessage(listener: (message: InteractiveEngineMessage) => void): () => void {\n\t\tthis.engineMessageListeners.push(listener);\n\t\tfor (const message of this.pendingEngineMessages.splice(0)) listener(message);\n\t\tthis.pendingEngineMessageBytes = 0;\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(listener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tonInteractiveEngineKeybindingState(listener: (state: EngineKeybindingState) => void): () => void {\n\t\tconst messageListener = (message: InteractiveEngineMessage): void => {\n\t\t\tif (message.type === \"engine_keybindings_reloaded\") listener(message.state);\n\t\t};\n\t\tthis.engineMessageListeners.push(messageListener);\n\t\tif (this.latestEngineKeybindingState) listener(this.latestEngineKeybindingState);\n\t\treturn () => {\n\t\t\tconst index = this.engineMessageListeners.indexOf(messageListener);\n\t\t\tif (index !== -1) this.engineMessageListeners.splice(index, 1);\n\t\t};\n\t}\n\n\tsendInteractiveEngineCommand(command: InteractiveEngineCommand): void {\n\t\tconst writer = this.stdinWriter;\n\t\tif (!writer) return;\n\t\tconst frame = serializeInteractiveEngineFrame(command);\n\t\tif (command.type === \"engine_custom_render\" || command.type === \"engine_tool_render\" || command.type === \"engine_message_render\") {\n\t\t\twriter.offerLatest(`render:${command.componentId}`, frame);\n\t\t\treturn;\n\t\t}\n\t\tthis.bestEffort(writer.write(frame), `engine command ${command.type}`);\n\t}\n\twaitForInteractiveEngineBound(): Promise<void> { return this.engineMonitor?.waitUntilBound() ?? Promise.resolve(); }\n\tgetEnginePid(): number | undefined { return this.enginePid; }\n\tgetGeneration(): number { return this.generation; }\n\n\tasync restart(sessionFile: string | undefined): Promise<void> {\n\t\tawait this.stop();\n\t\tthis.options = { ...this.options, args: restartArgs(this.options.args, sessionFile) };\n\t\tawait this.start();\n\t\tawait this.waitForInteractiveEngineBound();\n\t}\n\n\tasync requestInternal<T>(command: RpcCommandBody): Promise<T> {\n\t\treturn this.data<T>(await this.request(command));\n\t}\n\tgetStderr(): string {\n\t\treturn this.stderr;\n\t}\n\n\n\twaitForIdle(timeout = 60000): Promise<void> {\n\t\treturn waitForRpcIdle(this, timeout);\n\t}\n\tcollectEvents(timeout = 60000): Promise<RpcEvent[]> {\n\t\treturn collectRpcEvents(this, timeout);\n\t}\n\tasync promptAndWait(message: string, images?: ImageContent[], timeout = 60000): Promise<RpcEvent[]> {\n\t\tconst eventsPromise = this.collectEvents(timeout);\n\t\tawait this.prompt(message, images);\n\t\treturn eventsPromise;\n\t}\n\tprivate handleLine(line: string): void {\n\t\tif (this.engineMonitor?.handleLine(line)) return;\n\t\ttry {\n\t\t\tconst data = JSON.parse(line) as { type?: string; id?: string };\n\t\t\tif (data.type === \"extension_ui_request\") {\n\t\t\t\tconst request = data as RpcExtensionUIRequest;\n\t\t\t\tif (this.extensionUIListeners.length === 0) this.pendingExtensionUIRequests.push(request);\n\t\t\t\tfor (const listener of this.extensionUIListeners) listener(request);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (data.type === \"response\" && data.id && this.pendingRequests.has(data.id)) {\n\t\t\t\tconst pending = this.pendingRequests.get(data.id)!;\n\t\t\t\tthis.pendingRequests.delete(data.id);\n\t\t\t\tpending.resolve(data as RpcResponse);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst event = data as RpcEvent;\n\t\t\tif (this.eventBuffer) this.eventBuffer.enqueue(event);\n\t\t\telse this.emitEvent(event);\n\t\t} catch {\n\t\t\tif (this.engineMonitor) this.failTransport(new Error(\"Interactive engine emitted malformed JSONL\"));\n\t\t}\n\t}\n\tprivate emitEvent(event: RpcEvent): void {\n\t\tfor (const listener of this.eventListeners) listener(event);\n\t}\n\tprivate emitInteractiveEngineMessage(message: InteractiveEngineMessage): void {\n\t\tif (this.engineMessageListeners.length === 0 && message.type.startsWith(\"engine_custom_\")) {\n\t\t\tconst bytes = Buffer.byteLength(JSON.stringify(message), \"utf8\");\n\t\t\twhile (this.pendingEngineMessages.length > 0 && this.pendingEngineMessageBytes + bytes > INTERACTIVE_ENGINE_MAX_FRAME_BYTES) {\n\t\t\t\tconst removed = this.pendingEngineMessages.shift()!;\n\t\t\t\tthis.pendingEngineMessageBytes -= Buffer.byteLength(JSON.stringify(removed), \"utf8\");\n\t\t\t}\n\t\t\tif (bytes <= INTERACTIVE_ENGINE_MAX_FRAME_BYTES) {\n\t\t\t\tthis.pendingEngineMessages.push(message);\n\t\t\t\tthis.pendingEngineMessageBytes += bytes;\n\t\t\t}\n\t\t}\n\t\tfor (const listener of this.engineMessageListeners) listener(message);\n\t}\n\tprivate createProcessExitError(code: number | null, signal: NodeJS.Signals | null): Error {\n\t\treturn new Error(`Agent process exited (code=${code} signal=${signal}). Stderr: ${this.stderr}`);\n\t}\n\tprivate invalidateEngineShortcuts(): void {\n\t\tif (!this.latestEngineKeybindingState || this.latestEngineKeybindingState.shortcuts.length === 0) return;\n\t\tconst state: EngineKeybindingState = { ...this.latestEngineKeybindingState, shortcuts: [] };\n\t\tthis.latestEngineKeybindingState = state;\n\t\tthis.emitInteractiveEngineMessage({ type: \"engine_keybindings_reloaded\", state });\n\t}\n\tprivate observeInteractiveEngineMessage(message: InteractiveEngineMessage): void {\n\t\tif (message.type === \"engine_ready\") this.enginePid = message.pid;\n\t\tif (message.type === \"engine_keybindings_reloaded\") this.latestEngineKeybindingState = message.state;\n\t\tif (message.type === \"engine_activity_started\") this.activeActivityIds.add(message.activity.id);\n\t\telse if (message.type === \"engine_activity_finished\") this.activeActivityIds.delete(message.activityId);\n\t\tthis.options.interactiveEngine?.onActivityChange?.(this.activeActivityIds.size > 0);\n\t\tthis.emitInteractiveEngineMessage(message);\n\t}\n\tprivate rejectPendingRequests(error: Error): void {\n\t\tfor (const { reject } of this.pendingRequests.values()) reject(error);\n\t\tthis.pendingRequests.clear();\n\t}\n\tprivate failTransport(error: Error): void {\n\t\tthis.exitError = error;\n\t\tthis.stdinWriter?.close(error);\n\t\tthis.engineMonitor?.fail(error);\n\t\tthis.rejectPendingRequests(error);\n\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\tactivity: undefined, elapsedMs: 0, level: \"unresponsive\", message: error.message,\n\t\t});\n\t}\n\tprivate requireWriter(): BoundedWriter {\n\t\tif (!this.stdinWriter) throw new Error(\"Agent process stdin is not writable\");\n\t\treturn this.stdinWriter;\n\t}\n\tprivate bestEffort(operation: Promise<void>, label: string): void {\n\t\tvoid operation.catch((error: Error) => {\n\t\t\tif (!this.process || this.exitError) return;\n\t\t\tthis.options.interactiveEngine?.onDiagnostic({\n\t\t\t\tactivity: undefined, elapsedMs: 0, level: \"unresponsive\",\n\t\t\t\tmessage: `Interactive engine ${label} failed: ${error.message}`,\n\t\t\t});\n\t\t});\n\t}\n\tprotected async request(command: RpcCommandBody): Promise<RpcResponse> {\n\t\tconst childProcess = this.process;\n\t\tif (!childProcess) throw new Error(\"Client not started\");\n\t\tif (this.exitError) throw this.exitError;\n\t\tif (childProcess.exitCode !== null) {\n\t\t\tconst error = this.createProcessExitError(childProcess.exitCode, childProcess.signalCode);\n\t\t\tthis.exitError = error;\n\t\t\tthrow error;\n\t\t}\n\t\tconst id = `req_${++this.requestId}`;\n\t\tconst fullCommand = { ...command, id } as RpcCommand;\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\tlet rejectResponse!: (error: Error) => void;\n\t\tconst response = new Promise<RpcResponse>((resolve, reject) => {\n\t\t\trejectResponse = reject;\n\t\t\tthis.pendingRequests.set(id, {\n\t\t\t\tresolve: (value) => { if (timeout) clearTimeout(timeout); resolve(value); },\n\t\t\t\treject: (error) => { if (timeout) clearTimeout(timeout); reject(error); },\n\t\t\t});\n\t\t});\n\t\ttry {\n\t\t\tawait this.requireWriter().write(serializeJsonLine(fullCommand));\n\t\t} catch (error) {\n\t\t\tthis.pendingRequests.delete(id);\n\t\t\trejectResponse(error instanceof Error ? error : new Error(String(error)));\n\t\t\treturn response;\n\t\t}\n\t\tif (this.pendingRequests.has(id) && !LONG_LIVED_COMMANDS.has(command.type)) {\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tthis.pendingRequests.delete(id);\n\t\t\t\trejectResponse(new Error(`Timeout waiting for response to ${command.type}. Stderr: ${this.stderr}`));\n\t\t\t}, this.options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);\n\t\t}\n\t\treturn response;\n\t}\n\tprivate assertSuccess(response: RpcResponse): void {\n\t\tif (!response.success) throw new Error(response.error);\n\t}\n\tprotected data<T>(response: RpcResponse): T {\n\t\tthis.assertSuccess(response);\n\t\tconst successResponse = response as Extract<RpcResponse, { success: true; data: unknown }>;\n\t\treturn successResponse.data as T;\n\t}\n}\n"]}
@@ -5,6 +5,9 @@ import { type RpcOutput } from "./rpc-responses.ts";
5
5
  import type { KeybindingsReloadCoordinator } from "./rpc-keybindings-reload.ts";
6
6
  import type { RpcCommand, RpcResponse } from "./rpc-types.ts";
7
7
  export type RpcCommandHandler = (command: RpcCommand) => Promise<RpcResponse | undefined>;
8
+ interface ProviderLoginInput {
9
+ open(request: import("../../core/extensions/ui-types.ts").HostInputFormRequest, signal?: AbortSignal): Promise<Record<string, string> | undefined>;
10
+ }
8
11
  interface RpcCommandHandlerOptions {
9
12
  runtimeHost: AgentSessionRuntime;
10
13
  getSession: () => AgentSession;
@@ -12,7 +15,8 @@ interface RpcCommandHandlerOptions {
12
15
  output: RpcOutput;
13
16
  keybindings?: KeybindingsManager;
14
17
  reloadCoordinator?: KeybindingsReloadCoordinator<AgentSession>;
18
+ inputForm?: ProviderLoginInput;
15
19
  }
16
- export declare function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, }: RpcCommandHandlerOptions): RpcCommandHandler;
20
+ export declare function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, inputForm, }: RpcCommandHandlerOptions): RpcCommandHandler;
17
21
  export {};
18
22
  //# sourceMappingURL=rpc-command-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAKN,KAAK,SAAS,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAEhG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;AAE1F,UAAU,wBAAwB;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,MAAM,YAAY,CAAC;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC;CAC/D;AAED,wBAAgB,uBAAuB,CAAC,EACvC,WAAW,EACX,UAAU,EACV,aAAa,EACb,MAAM,EACN,WAAW,EACX,iBAAiB,GACjB,EAAE,wBAAwB,GAAG,iBAAiB,CAuY9C"}
1
+ {"version":3,"file":"rpc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/modes/rpc/rpc-command-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAKN,KAAK,SAAS,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAEhG,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;AAE1F,UAAU,kBAAkB;IAC3B,IAAI,CACH,OAAO,EAAE,OAAO,mCAAmC,EAAE,oBAAoB,EACzE,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,UAAU,wBAAwB;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,MAAM,YAAY,CAAC;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC;IAC/D,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,CAAC,EACvC,WAAW,EACX,UAAU,EACV,aAAa,EACb,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,SAAS,GACT,EAAE,wBAAwB,GAAG,iBAAiB,CAmc9C"}
@@ -1,8 +1,9 @@
1
1
  import { runCallback } from "../../core/callback-activity.js";
2
2
  import { KeybindingsManager } from "../../core/keybindings.js";
3
3
  import { createRpcErrorResponse, createRpcSuccessResponse, formatRpcErrorMessage, parseRpcContextWindow, } from "./rpc-responses.js";
4
- export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, }) {
4
+ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession, output, keybindings, reloadCoordinator, inputForm, }) {
5
5
  let fallbackShortcutKeybindings;
6
+ const providerLoginControllers = new Map();
6
7
  const getShortcutBindings = () => {
7
8
  if (keybindings)
8
9
  return keybindings.getEffectiveConfig();
@@ -89,7 +90,65 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
89
90
  }
90
91
  case "get_available_models": {
91
92
  const models = await session.modelRegistry.getAvailable();
92
- return createRpcSuccessResponse(id, "get_available_models", { models, scopedModels: session.scopedModels });
93
+ return createRpcSuccessResponse(id, "get_available_models", {
94
+ models,
95
+ scopedModels: session.scopedModels,
96
+ customAuthProviders: session.modelRegistry.getCustomApiKeyAuthProviders(),
97
+ });
98
+ }
99
+ case "login_provider": {
100
+ const customAuth = session.modelRegistry.getCustomApiKeyAuth(command.provider);
101
+ if (!customAuth)
102
+ throw new Error(`Provider does not support custom API-key login: ${command.provider}`);
103
+ if (!inputForm)
104
+ throw new Error("Provider login requires an interactive input host");
105
+ if (providerLoginControllers.has(command.provider))
106
+ throw new Error(`Login already in progress: ${command.provider}`);
107
+ const controller = new AbortController();
108
+ providerLoginControllers.set(command.provider, controller);
109
+ try {
110
+ const credential = await customAuth.login({
111
+ signal: controller.signal,
112
+ prompt: async (prompt) => {
113
+ const values = await inputForm.open({
114
+ title: prompt.message,
115
+ heading: "PROVIDER LOGIN",
116
+ submitLabel: "[ Submit ]",
117
+ fields: [{
118
+ name: "value", type: "string", required: false, initialValue: "",
119
+ placeholder: prompt.placeholder,
120
+ }],
121
+ }, controller.signal);
122
+ if (!values || controller.signal.aborted)
123
+ throw new Error("Login cancelled");
124
+ return values.value ?? "";
125
+ },
126
+ });
127
+ if (controller.signal.aborted)
128
+ return createRpcSuccessResponse(id, "login_provider", { provider: command.provider, cancelled: true });
129
+ session.modelRegistry.authStorage.set(command.provider, credential);
130
+ await session.modelRegistry.refresh();
131
+ return createRpcSuccessResponse(id, "login_provider", {
132
+ provider: command.provider, cancelled: false, credential,
133
+ models: session.modelRegistry.getAvailable(),
134
+ scopedModels: session.scopedModels,
135
+ customAuthProviders: session.modelRegistry.getCustomApiKeyAuthProviders(),
136
+ });
137
+ }
138
+ catch (error) {
139
+ if (controller.signal.aborted || (error instanceof Error && error.message === "Login cancelled")) {
140
+ return createRpcSuccessResponse(id, "login_provider", { provider: command.provider, cancelled: true });
141
+ }
142
+ throw error;
143
+ }
144
+ finally {
145
+ if (providerLoginControllers.get(command.provider) === controller)
146
+ providerLoginControllers.delete(command.provider);
147
+ }
148
+ }
149
+ case "cancel_login_provider": {
150
+ providerLoginControllers.get(command.provider)?.abort();
151
+ return createRpcSuccessResponse(id, "cancel_login_provider");
93
152
  }
94
153
  case "logout_provider": {
95
154
  const result = await runtimeHost.logoutProvider(command.provider);
@@ -107,6 +166,7 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
107
166
  errors: [...result.errors].map(([provider, error]) => ({ provider, message: error.message })),
108
167
  models: session.modelRegistry.getAvailable(),
109
168
  scopedModels: session.scopedModels,
169
+ customAuthProviders: session.modelRegistry.getCustomApiKeyAuthProviders(),
110
170
  });
111
171
  }
112
172
  case "set_thinking_level": {
@@ -117,6 +177,11 @@ export function createRpcCommandHandler({ runtimeHost, getSession, rebindSession
117
177
  const level = session.cycleThinkingLevel();
118
178
  return createRpcSuccessResponse(id, "cycle_thinking_level", level ? { level } : null);
119
179
  }
180
+ case "get_available_thinking_levels": {
181
+ return createRpcSuccessResponse(id, "get_available_thinking_levels", {
182
+ levels: session.getAvailableThinkingLevels(),
183
+ });
184
+ }
120
185
  case "set_context_window": {
121
186
  const contextWindow = parseRpcContextWindow(command.contextWindow);
122
187
  session.setContextWindow(contextWindow);