@astralyn/pi 0.83.0 → 0.84.1

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 (768) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/bun/cli.d.ts.map +1 -1
  3. package/dist/bun/cli.js.map +1 -1
  4. package/dist/bun/register-bedrock.d.ts.map +1 -1
  5. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  6. package/dist/bun/restore-sandbox-env.js.map +1 -1
  7. package/dist/cli/args.d.ts +2 -0
  8. package/dist/cli/args.d.ts.map +1 -1
  9. package/dist/cli/args.js +22 -3
  10. package/dist/cli/args.js.map +1 -1
  11. package/dist/cli/auth-check.d.ts +19 -0
  12. package/dist/cli/auth-check.d.ts.map +1 -0
  13. package/dist/cli/auth-check.js +50 -0
  14. package/dist/cli/auth-check.js.map +1 -0
  15. package/dist/cli/auth-command.d.ts +24 -0
  16. package/dist/cli/auth-command.d.ts.map +1 -0
  17. package/dist/cli/auth-command.js +104 -0
  18. package/dist/cli/auth-command.js.map +1 -0
  19. package/dist/cli/config-selector.d.ts.map +1 -1
  20. package/dist/cli/config-selector.js +2 -2
  21. package/dist/cli/config-selector.js.map +1 -1
  22. package/dist/cli/credential-print.d.ts +5 -15
  23. package/dist/cli/credential-print.d.ts.map +1 -1
  24. package/dist/cli/credential-print.js +42 -82
  25. package/dist/cli/credential-print.js.map +1 -1
  26. package/dist/cli/experimental/auth.d.ts +16 -0
  27. package/dist/cli/experimental/auth.d.ts.map +1 -0
  28. package/dist/cli/experimental/auth.js +13 -0
  29. package/dist/cli/experimental/auth.js.map +1 -0
  30. package/dist/cli/experimental/cli.d.ts +6 -0
  31. package/dist/cli/experimental/cli.d.ts.map +1 -0
  32. package/dist/cli/experimental/cli.js +5 -0
  33. package/dist/cli/experimental/cli.js.map +1 -0
  34. package/dist/cli/experimental/command-options.d.ts +17 -0
  35. package/dist/cli/experimental/command-options.d.ts.map +1 -0
  36. package/dist/cli/experimental/command-options.js +35 -0
  37. package/dist/cli/experimental/command-options.js.map +1 -0
  38. package/dist/cli/experimental/command.d.ts +63 -0
  39. package/dist/cli/experimental/command.d.ts.map +1 -0
  40. package/dist/cli/experimental/command.js +127 -0
  41. package/dist/cli/experimental/command.js.map +1 -0
  42. package/dist/cli/experimental/commands/client.d.ts +13 -0
  43. package/dist/cli/experimental/commands/client.d.ts.map +1 -0
  44. package/dist/cli/experimental/commands/client.js +25 -0
  45. package/dist/cli/experimental/commands/client.js.map +1 -0
  46. package/dist/cli/experimental/commands/pi.d.ts +15 -0
  47. package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
  48. package/dist/cli/experimental/commands/pi.js +28 -0
  49. package/dist/cli/experimental/commands/pi.js.map +1 -0
  50. package/dist/cli/experimental/commands/server.d.ts +13 -0
  51. package/dist/cli/experimental/commands/server.d.ts.map +1 -0
  52. package/dist/cli/experimental/commands/server.js +25 -0
  53. package/dist/cli/experimental/commands/server.js.map +1 -0
  54. package/dist/cli/experimental/transport-address.d.ts +10 -0
  55. package/dist/cli/experimental/transport-address.d.ts.map +1 -0
  56. package/dist/cli/experimental/transport-address.js +38 -0
  57. package/dist/cli/experimental/transport-address.js.map +1 -0
  58. package/dist/cli/file-processor.d.ts.map +1 -1
  59. package/dist/cli/file-processor.js.map +1 -1
  60. package/dist/cli/initial-message.d.ts +1 -1
  61. package/dist/cli/initial-message.d.ts.map +1 -1
  62. package/dist/cli/initial-message.js.map +1 -1
  63. package/dist/cli/list-models.d.ts +1 -1
  64. package/dist/cli/list-models.d.ts.map +1 -1
  65. package/dist/cli/list-models.js +2 -2
  66. package/dist/cli/list-models.js.map +1 -1
  67. package/dist/cli/project-trust.d.ts.map +1 -1
  68. package/dist/cli/project-trust.js.map +1 -1
  69. package/dist/cli/session-picker.d.ts.map +1 -1
  70. package/dist/cli/session-picker.js.map +1 -1
  71. package/dist/cli/startup-ui.d.ts +1 -1
  72. package/dist/cli/startup-ui.d.ts.map +1 -1
  73. package/dist/cli/startup-ui.js +2 -2
  74. package/dist/cli/startup-ui.js.map +1 -1
  75. package/dist/cli.d.ts.map +1 -1
  76. package/dist/cli.js +1 -0
  77. package/dist/cli.js.map +1 -1
  78. package/dist/client/index.d.ts +3 -0
  79. package/dist/client/index.d.ts.map +1 -0
  80. package/dist/client/index.js +3 -0
  81. package/dist/client/index.js.map +1 -0
  82. package/dist/client/remote-session.d.ts +53 -0
  83. package/dist/client/remote-session.d.ts.map +1 -0
  84. package/dist/client/remote-session.js +340 -0
  85. package/dist/client/remote-session.js.map +1 -0
  86. package/dist/client/transcript.d.ts +12 -0
  87. package/dist/client/transcript.d.ts.map +1 -0
  88. package/dist/client/transcript.js +98 -0
  89. package/dist/client/transcript.js.map +1 -0
  90. package/dist/config.d.ts.map +1 -1
  91. package/dist/config.js.map +1 -1
  92. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  93. package/dist/core/agent-session-runtime.js +0 -8
  94. package/dist/core/agent-session-runtime.js.map +1 -1
  95. package/dist/core/agent-session-services.d.ts +1 -0
  96. package/dist/core/agent-session-services.d.ts.map +1 -1
  97. package/dist/core/agent-session-services.js +1 -0
  98. package/dist/core/agent-session-services.js.map +1 -1
  99. package/dist/core/agent-session.d.ts +30 -10
  100. package/dist/core/agent-session.d.ts.map +1 -1
  101. package/dist/core/agent-session.js +177 -187
  102. package/dist/core/agent-session.js.map +1 -1
  103. package/dist/core/auth-guidance.d.ts.map +1 -1
  104. package/dist/core/auth-guidance.js.map +1 -1
  105. package/dist/core/auth-storage.d.ts +25 -9
  106. package/dist/core/auth-storage.d.ts.map +1 -1
  107. package/dist/core/auth-storage.js +235 -42
  108. package/dist/core/auth-storage.js.map +1 -1
  109. package/dist/core/bash-executor.d.ts.map +1 -1
  110. package/dist/core/bash-executor.js.map +1 -1
  111. package/dist/core/cache-stats.d.ts.map +1 -1
  112. package/dist/core/cache-stats.js.map +1 -1
  113. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  114. package/dist/core/compaction/branch-summarization.js.map +1 -1
  115. package/dist/core/compaction/compaction.d.ts.map +1 -1
  116. package/dist/core/compaction/compaction.js.map +1 -1
  117. package/dist/core/compaction/index.d.ts.map +1 -1
  118. package/dist/core/compaction/utils.d.ts.map +1 -1
  119. package/dist/core/compaction/utils.js.map +1 -1
  120. package/dist/core/defaults.d.ts.map +1 -1
  121. package/dist/core/diagnostics.d.ts.map +1 -1
  122. package/dist/core/event-bus.d.ts.map +1 -1
  123. package/dist/core/event-bus.js.map +1 -1
  124. package/dist/core/exec.d.ts.map +1 -1
  125. package/dist/core/exec.js.map +1 -1
  126. package/dist/core/experimental.d.ts.map +1 -1
  127. package/dist/core/experimental.js.map +1 -1
  128. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  129. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  130. package/dist/core/export-html/index.d.ts.map +1 -1
  131. package/dist/core/export-html/index.js.map +1 -1
  132. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  133. package/dist/core/export-html/tool-renderer.js.map +1 -1
  134. package/dist/core/extensions/index.d.ts +1 -1
  135. package/dist/core/extensions/index.d.ts.map +1 -1
  136. package/dist/core/extensions/index.js.map +1 -1
  137. package/dist/core/extensions/loader.d.ts.map +1 -1
  138. package/dist/core/extensions/loader.js +43 -20
  139. package/dist/core/extensions/loader.js.map +1 -1
  140. package/dist/core/extensions/runner.d.ts +2 -1
  141. package/dist/core/extensions/runner.d.ts.map +1 -1
  142. package/dist/core/extensions/runner.js +25 -29
  143. package/dist/core/extensions/runner.js.map +1 -1
  144. package/dist/core/extensions/types.d.ts +26 -3
  145. package/dist/core/extensions/types.d.ts.map +1 -1
  146. package/dist/core/extensions/types.js.map +1 -1
  147. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  148. package/dist/core/extensions/wrapper.js.map +1 -1
  149. package/dist/core/footer-data-provider.d.ts.map +1 -1
  150. package/dist/core/footer-data-provider.js +17 -18
  151. package/dist/core/footer-data-provider.js.map +1 -1
  152. package/dist/core/http-dispatcher.d.ts.map +1 -1
  153. package/dist/core/http-dispatcher.js +5 -0
  154. package/dist/core/http-dispatcher.js.map +1 -1
  155. package/dist/core/index.d.ts.map +1 -1
  156. package/dist/core/keybindings.d.ts +165 -125
  157. package/dist/core/keybindings.d.ts.map +1 -1
  158. package/dist/core/keybindings.js +0 -1
  159. package/dist/core/keybindings.js.map +1 -1
  160. package/dist/core/messages.d.ts.map +1 -1
  161. package/dist/core/messages.js.map +1 -1
  162. package/dist/core/model-config.d.ts +37 -13
  163. package/dist/core/model-config.d.ts.map +1 -1
  164. package/dist/core/model-config.js +4 -2
  165. package/dist/core/model-config.js.map +1 -1
  166. package/dist/core/model-registry.d.ts +5 -3
  167. package/dist/core/model-registry.d.ts.map +1 -1
  168. package/dist/core/model-registry.js +13 -11
  169. package/dist/core/model-registry.js.map +1 -1
  170. package/dist/core/model-resolver.d.ts +4 -3
  171. package/dist/core/model-resolver.d.ts.map +1 -1
  172. package/dist/core/model-resolver.js +42 -10
  173. package/dist/core/model-resolver.js.map +1 -1
  174. package/dist/core/model-runtime.d.ts +30 -13
  175. package/dist/core/model-runtime.d.ts.map +1 -1
  176. package/dist/core/model-runtime.js +241 -91
  177. package/dist/core/model-runtime.js.map +1 -1
  178. package/dist/core/models-store.d.ts +12 -7
  179. package/dist/core/models-store.d.ts.map +1 -1
  180. package/dist/core/models-store.js +84 -16
  181. package/dist/core/models-store.js.map +1 -1
  182. package/dist/core/output-guard.d.ts.map +1 -1
  183. package/dist/core/output-guard.js.map +1 -1
  184. package/dist/core/package-manager.d.ts +4 -1
  185. package/dist/core/package-manager.d.ts.map +1 -1
  186. package/dist/core/package-manager.js +63 -42
  187. package/dist/core/package-manager.js.map +1 -1
  188. package/dist/core/pi-manifest.d.ts +8 -0
  189. package/dist/core/pi-manifest.d.ts.map +1 -0
  190. package/dist/core/pi-manifest.js +25 -0
  191. package/dist/core/pi-manifest.js.map +1 -0
  192. package/dist/core/project-trust.d.ts.map +1 -1
  193. package/dist/core/project-trust.js.map +1 -1
  194. package/dist/core/prompt-templates.d.ts.map +1 -1
  195. package/dist/core/prompt-templates.js.map +1 -1
  196. package/dist/core/provider-attribution.d.ts.map +1 -1
  197. package/dist/core/provider-attribution.js.map +1 -1
  198. package/dist/core/provider-composer.d.ts +4 -1
  199. package/dist/core/provider-composer.d.ts.map +1 -1
  200. package/dist/core/provider-composer.js +36 -15
  201. package/dist/core/provider-composer.js.map +1 -1
  202. package/dist/core/radius.d.ts.map +1 -1
  203. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  204. package/dist/core/remote-catalog-provider.js +73 -67
  205. package/dist/core/remote-catalog-provider.js.map +1 -1
  206. package/dist/core/resolve-config-value.d.ts.map +1 -1
  207. package/dist/core/resolve-config-value.js.map +1 -1
  208. package/dist/core/resource-loader.d.ts.map +1 -1
  209. package/dist/core/resource-loader.js +2 -46
  210. package/dist/core/resource-loader.js.map +1 -1
  211. package/dist/core/runtime-credentials.d.ts +5 -5
  212. package/dist/core/runtime-credentials.d.ts.map +1 -1
  213. package/dist/core/runtime-credentials.js +12 -10
  214. package/dist/core/runtime-credentials.js.map +1 -1
  215. package/dist/core/sdk.d.ts.map +1 -1
  216. package/dist/core/sdk.js.map +1 -1
  217. package/dist/core/session-cwd.d.ts.map +1 -1
  218. package/dist/core/session-cwd.js +0 -1
  219. package/dist/core/session-cwd.js.map +1 -1
  220. package/dist/core/session-manager.d.ts.map +1 -1
  221. package/dist/core/session-manager.js +10 -12
  222. package/dist/core/session-manager.js.map +1 -1
  223. package/dist/core/settings-manager.d.ts +12 -0
  224. package/dist/core/settings-manager.d.ts.map +1 -1
  225. package/dist/core/settings-manager.js +47 -33
  226. package/dist/core/settings-manager.js.map +1 -1
  227. package/dist/core/skills.d.ts.map +1 -1
  228. package/dist/core/skills.js.map +1 -1
  229. package/dist/core/slash-commands.d.ts.map +1 -1
  230. package/dist/core/source-info.d.ts.map +1 -1
  231. package/dist/core/source-info.js.map +1 -1
  232. package/dist/core/system-prompt.d.ts.map +1 -1
  233. package/dist/core/system-prompt.js.map +1 -1
  234. package/dist/core/telemetry.d.ts.map +1 -1
  235. package/dist/core/telemetry.js.map +1 -1
  236. package/dist/core/timings.d.ts.map +1 -1
  237. package/dist/core/timings.js.map +1 -1
  238. package/dist/core/tools/bash.d.ts +4 -0
  239. package/dist/core/tools/bash.d.ts.map +1 -1
  240. package/dist/core/tools/bash.js +18 -14
  241. package/dist/core/tools/bash.js.map +1 -1
  242. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  243. package/dist/core/tools/edit-diff.js.map +1 -1
  244. package/dist/core/tools/edit.d.ts +4 -0
  245. package/dist/core/tools/edit.d.ts.map +1 -1
  246. package/dist/core/tools/edit.js +15 -10
  247. package/dist/core/tools/edit.js.map +1 -1
  248. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  249. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  250. package/dist/core/tools/find.d.ts +7 -0
  251. package/dist/core/tools/find.d.ts.map +1 -1
  252. package/dist/core/tools/find.js +18 -17
  253. package/dist/core/tools/find.js.map +1 -1
  254. package/dist/core/tools/grep.d.ts +4 -0
  255. package/dist/core/tools/grep.d.ts.map +1 -1
  256. package/dist/core/tools/grep.js +5 -1
  257. package/dist/core/tools/grep.js.map +1 -1
  258. package/dist/core/tools/index.d.ts.map +1 -1
  259. package/dist/core/tools/index.js.map +1 -1
  260. package/dist/core/tools/ls.d.ts +4 -0
  261. package/dist/core/tools/ls.d.ts.map +1 -1
  262. package/dist/core/tools/ls.js +5 -1
  263. package/dist/core/tools/ls.js.map +1 -1
  264. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  265. package/dist/core/tools/output-accumulator.js +12 -18
  266. package/dist/core/tools/output-accumulator.js.map +1 -1
  267. package/dist/core/tools/path-utils.d.ts.map +1 -1
  268. package/dist/core/tools/path-utils.js.map +1 -1
  269. package/dist/core/tools/read.d.ts +4 -0
  270. package/dist/core/tools/read.d.ts.map +1 -1
  271. package/dist/core/tools/read.js +7 -3
  272. package/dist/core/tools/read.js.map +1 -1
  273. package/dist/core/tools/render-utils.d.ts.map +1 -1
  274. package/dist/core/tools/render-utils.js.map +1 -1
  275. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  276. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  277. package/dist/core/tools/truncate.d.ts.map +1 -1
  278. package/dist/core/tools/truncate.js.map +1 -1
  279. package/dist/core/tools/write.d.ts +4 -0
  280. package/dist/core/tools/write.d.ts.map +1 -1
  281. package/dist/core/tools/write.js +6 -3
  282. package/dist/core/tools/write.js.map +1 -1
  283. package/dist/core/trust-manager.d.ts.map +1 -1
  284. package/dist/core/trust-manager.js +0 -1
  285. package/dist/core/trust-manager.js.map +1 -1
  286. package/dist/core/usage-totals.d.ts.map +1 -1
  287. package/dist/core/usage-totals.js.map +1 -1
  288. package/dist/extensions/biu/index.d.ts +19 -0
  289. package/dist/extensions/biu/index.d.ts.map +1 -0
  290. package/dist/extensions/biu/index.js +350 -0
  291. package/dist/extensions/biu/index.js.map +1 -0
  292. package/dist/extensions/biu/prompts.d.ts +26 -0
  293. package/dist/extensions/biu/prompts.d.ts.map +1 -0
  294. package/dist/extensions/biu/prompts.js +260 -0
  295. package/dist/extensions/biu/prompts.js.map +1 -0
  296. package/dist/extensions/biu/workspace.d.ts +122 -0
  297. package/dist/extensions/biu/workspace.d.ts.map +1 -0
  298. package/dist/extensions/biu/workspace.js +404 -0
  299. package/dist/extensions/biu/workspace.js.map +1 -0
  300. package/dist/extensions/deepwiki/client.d.ts.map +1 -1
  301. package/dist/extensions/deepwiki/client.js.map +1 -1
  302. package/dist/extensions/deepwiki/constants.d.ts.map +1 -1
  303. package/dist/extensions/deepwiki/constants.js.map +1 -1
  304. package/dist/extensions/deepwiki/contents.d.ts.map +1 -1
  305. package/dist/extensions/deepwiki/contents.js.map +1 -1
  306. package/dist/extensions/deepwiki/execute.d.ts.map +1 -1
  307. package/dist/extensions/deepwiki/execute.js.map +1 -1
  308. package/dist/extensions/deepwiki/http.d.ts.map +1 -1
  309. package/dist/extensions/deepwiki/http.js.map +1 -1
  310. package/dist/extensions/deepwiki/index.d.ts.map +1 -1
  311. package/dist/extensions/deepwiki/index.js.map +1 -1
  312. package/dist/extensions/deepwiki/render.d.ts.map +1 -1
  313. package/dist/extensions/deepwiki/render.js.map +1 -1
  314. package/dist/extensions/deepwiki/schema.d.ts +1 -1
  315. package/dist/extensions/deepwiki/schema.d.ts.map +1 -1
  316. package/dist/extensions/deepwiki/schema.js.map +1 -1
  317. package/dist/extensions/index.d.ts.map +1 -1
  318. package/dist/extensions/index.js +2 -0
  319. package/dist/extensions/index.js.map +1 -1
  320. package/dist/extensions/llama/client.d.ts.map +1 -1
  321. package/dist/extensions/llama/client.js +0 -2
  322. package/dist/extensions/llama/client.js.map +1 -1
  323. package/dist/extensions/llama/huggingface.d.ts.map +1 -1
  324. package/dist/extensions/llama/huggingface.js +0 -2
  325. package/dist/extensions/llama/huggingface.js.map +1 -1
  326. package/dist/extensions/llama/index.d.ts.map +1 -1
  327. package/dist/extensions/llama/index.js +11 -2
  328. package/dist/extensions/llama/index.js.map +1 -1
  329. package/dist/extensions/llama/provider.d.ts.map +1 -1
  330. package/dist/extensions/llama/provider.js +21 -7
  331. package/dist/extensions/llama/provider.js.map +1 -1
  332. package/dist/extensions/llama/ui.d.ts.map +1 -1
  333. package/dist/extensions/llama/ui.js +12 -28
  334. package/dist/extensions/llama/ui.js.map +1 -1
  335. package/dist/extensions/question/constants.d.ts.map +1 -1
  336. package/dist/extensions/question/constants.js.map +1 -1
  337. package/dist/extensions/question/dialog-primitives.d.ts.map +1 -1
  338. package/dist/extensions/question/dialog-primitives.js.map +1 -1
  339. package/dist/extensions/question/dialog.d.ts.map +1 -1
  340. package/dist/extensions/question/dialog.js.map +1 -1
  341. package/dist/extensions/question/index.d.ts.map +1 -1
  342. package/dist/extensions/question/index.js.map +1 -1
  343. package/dist/extensions/question/limits.d.ts.map +1 -1
  344. package/dist/extensions/question/render-cache.d.ts.map +1 -1
  345. package/dist/extensions/question/render-cache.js +3 -4
  346. package/dist/extensions/question/render-cache.js.map +1 -1
  347. package/dist/extensions/question/render.d.ts.map +1 -1
  348. package/dist/extensions/question/render.js.map +1 -1
  349. package/dist/extensions/question/results.d.ts.map +1 -1
  350. package/dist/extensions/question/results.js.map +1 -1
  351. package/dist/extensions/question/schema.d.ts.map +1 -1
  352. package/dist/extensions/question/schema.js.map +1 -1
  353. package/dist/extensions/question/state.d.ts.map +1 -1
  354. package/dist/extensions/question/state.js.map +1 -1
  355. package/dist/extensions/question/types.d.ts.map +1 -1
  356. package/dist/extensions/rewind/anchor.d.ts.map +1 -1
  357. package/dist/extensions/rewind/anchor.js.map +1 -1
  358. package/dist/extensions/rewind/config.d.ts.map +1 -1
  359. package/dist/extensions/rewind/config.js.map +1 -1
  360. package/dist/extensions/rewind/engine.d.ts.map +1 -1
  361. package/dist/extensions/rewind/engine.js.map +1 -1
  362. package/dist/extensions/rewind/gc.d.ts.map +1 -1
  363. package/dist/extensions/rewind/gc.js.map +1 -1
  364. package/dist/extensions/rewind/index.d.ts.map +1 -1
  365. package/dist/extensions/rewind/index.js.map +1 -1
  366. package/dist/extensions/rewind/menu.d.ts.map +1 -1
  367. package/dist/extensions/rewind/menu.js.map +1 -1
  368. package/dist/extensions/rewind/paths.d.ts.map +1 -1
  369. package/dist/extensions/rewind/paths.js.map +1 -1
  370. package/dist/extensions/rewind/restore.d.ts.map +1 -1
  371. package/dist/extensions/rewind/restore.js.map +1 -1
  372. package/dist/extensions/rewind/snapshot.d.ts.map +1 -1
  373. package/dist/extensions/rewind/snapshot.js.map +1 -1
  374. package/dist/extensions/rewind/storage.d.ts.map +1 -1
  375. package/dist/extensions/rewind/storage.js.map +1 -1
  376. package/dist/extensions/rewind/text.d.ts.map +1 -1
  377. package/dist/extensions/rewind/text.js.map +1 -1
  378. package/dist/extensions/rewind/tool-path.d.ts.map +1 -1
  379. package/dist/extensions/rewind/tool-path.js.map +1 -1
  380. package/dist/extensions/router/constants.d.ts +3 -0
  381. package/dist/extensions/router/constants.d.ts.map +1 -1
  382. package/dist/extensions/router/constants.js +3 -0
  383. package/dist/extensions/router/constants.js.map +1 -1
  384. package/dist/extensions/router/dialog.d.ts +14 -7
  385. package/dist/extensions/router/dialog.d.ts.map +1 -1
  386. package/dist/extensions/router/dialog.js +70 -132
  387. package/dist/extensions/router/dialog.js.map +1 -1
  388. package/dist/extensions/router/index.d.ts.map +1 -1
  389. package/dist/extensions/router/index.js.map +1 -1
  390. package/dist/extensions/router/presets.d.ts +8 -3
  391. package/dist/extensions/router/presets.d.ts.map +1 -1
  392. package/dist/extensions/router/presets.js +33 -17
  393. package/dist/extensions/router/presets.js.map +1 -1
  394. package/dist/extensions/router/probe.d.ts.map +1 -1
  395. package/dist/extensions/router/probe.js.map +1 -1
  396. package/dist/extensions/router/register.d.ts +3 -3
  397. package/dist/extensions/router/register.d.ts.map +1 -1
  398. package/dist/extensions/router/register.js.map +1 -1
  399. package/dist/extensions/router/store.d.ts.map +1 -1
  400. package/dist/extensions/router/store.js.map +1 -1
  401. package/dist/extensions/router/stream.d.ts.map +1 -1
  402. package/dist/extensions/router/stream.js.map +1 -1
  403. package/dist/extensions/router/types.d.ts.map +1 -1
  404. package/dist/extensions/router/ui.d.ts +11 -2
  405. package/dist/extensions/router/ui.d.ts.map +1 -1
  406. package/dist/extensions/router/ui.js +316 -171
  407. package/dist/extensions/router/ui.js.map +1 -1
  408. package/dist/extensions/statusline/index.d.ts.map +1 -1
  409. package/dist/extensions/statusline/index.js +17 -9
  410. package/dist/extensions/statusline/index.js.map +1 -1
  411. package/dist/extensions/subagent/activity.d.ts.map +1 -1
  412. package/dist/extensions/subagent/activity.js.map +1 -1
  413. package/dist/extensions/subagent/agents.d.ts.map +1 -1
  414. package/dist/extensions/subagent/agents.js.map +1 -1
  415. package/dist/extensions/subagent/constants.d.ts.map +1 -1
  416. package/dist/extensions/subagent/index.d.ts +3 -0
  417. package/dist/extensions/subagent/index.d.ts.map +1 -1
  418. package/dist/extensions/subagent/index.js +83 -12
  419. package/dist/extensions/subagent/index.js.map +1 -1
  420. package/dist/extensions/subagent/picker.d.ts.map +1 -1
  421. package/dist/extensions/subagent/picker.js +2 -9
  422. package/dist/extensions/subagent/picker.js.map +1 -1
  423. package/dist/extensions/subagent/render.d.ts.map +1 -1
  424. package/dist/extensions/subagent/render.js +33 -9
  425. package/dist/extensions/subagent/render.js.map +1 -1
  426. package/dist/extensions/subagent/resolve.d.ts.map +1 -1
  427. package/dist/extensions/subagent/resolve.js.map +1 -1
  428. package/dist/extensions/subagent/retry.d.ts.map +1 -1
  429. package/dist/extensions/subagent/retry.js.map +1 -1
  430. package/dist/extensions/subagent/runner.d.ts +2 -1
  431. package/dist/extensions/subagent/runner.d.ts.map +1 -1
  432. package/dist/extensions/subagent/runner.js +10 -12
  433. package/dist/extensions/subagent/runner.js.map +1 -1
  434. package/dist/extensions/subagent/schema.d.ts.map +1 -1
  435. package/dist/extensions/subagent/schema.js.map +1 -1
  436. package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
  437. package/dist/extensions/subagent/sdk-runner.js +41 -1
  438. package/dist/extensions/subagent/sdk-runner.js.map +1 -1
  439. package/dist/extensions/subagent/settings.d.ts.map +1 -1
  440. package/dist/extensions/subagent/settings.js +46 -36
  441. package/dist/extensions/subagent/settings.js.map +1 -1
  442. package/dist/extensions/subagent/types.d.ts +0 -1
  443. package/dist/extensions/subagent/types.d.ts.map +1 -1
  444. package/dist/extensions/subagent/types.js.map +1 -1
  445. package/dist/extensions/todo/constants.d.ts.map +1 -1
  446. package/dist/extensions/todo/constants.js.map +1 -1
  447. package/dist/extensions/todo/index.d.ts.map +1 -1
  448. package/dist/extensions/todo/index.js.map +1 -1
  449. package/dist/extensions/todo/overlay.d.ts.map +1 -1
  450. package/dist/extensions/todo/overlay.js +6 -10
  451. package/dist/extensions/todo/overlay.js.map +1 -1
  452. package/dist/extensions/todo/schema.d.ts +2 -2
  453. package/dist/extensions/todo/schema.d.ts.map +1 -1
  454. package/dist/extensions/todo/state.d.ts.map +1 -1
  455. package/dist/extensions/todo/state.js.map +1 -1
  456. package/dist/extensions/todo/view.d.ts.map +1 -1
  457. package/dist/extensions/todo/view.js.map +1 -1
  458. package/dist/index.d.ts +4 -4
  459. package/dist/index.d.ts.map +1 -1
  460. package/dist/index.js +1 -1
  461. package/dist/index.js.map +1 -1
  462. package/dist/main.d.ts.map +1 -1
  463. package/dist/main.js +70 -25
  464. package/dist/main.js.map +1 -1
  465. package/dist/migrations.d.ts.map +1 -1
  466. package/dist/migrations.js.map +1 -1
  467. package/dist/modes/index.d.ts +1 -0
  468. package/dist/modes/index.d.ts.map +1 -1
  469. package/dist/modes/index.js.map +1 -1
  470. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/armin.js +6 -10
  472. package/dist/modes/interactive/components/armin.js.map +1 -1
  473. package/dist/modes/interactive/components/assistant-message.d.ts +5 -2
  474. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  475. package/dist/modes/interactive/components/assistant-message.js +13 -11
  476. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  477. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  478. package/dist/modes/interactive/components/bash-execution.js +4 -10
  479. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  480. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  481. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  482. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  483. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  484. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  485. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  486. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  487. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  488. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  489. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  490. package/dist/modes/interactive/components/config-selector.js +5 -22
  491. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  492. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  493. package/dist/modes/interactive/components/countdown-timer.js +1 -7
  494. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  495. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  496. package/dist/modes/interactive/components/custom-editor.js +8 -8
  497. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  498. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
  499. package/dist/modes/interactive/components/custom-entry.js +1 -4
  500. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  501. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  502. package/dist/modes/interactive/components/custom-message.js +1 -7
  503. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  504. package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
  505. package/dist/modes/interactive/components/daxnuts.js +6 -8
  506. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  507. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  508. package/dist/modes/interactive/components/diff.js.map +1 -1
  509. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  510. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  511. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  512. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  513. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  514. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  515. package/dist/modes/interactive/components/extension-editor.js +1 -7
  516. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  517. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  518. package/dist/modes/interactive/components/extension-input.js +2 -8
  519. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  520. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  521. package/dist/modes/interactive/components/extension-selector.js +1 -9
  522. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  523. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  524. package/dist/modes/interactive/components/first-time-setup.js +2 -4
  525. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  526. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  527. package/dist/modes/interactive/components/footer.js +2 -4
  528. package/dist/modes/interactive/components/footer.js.map +1 -1
  529. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  530. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  531. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  532. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  533. package/dist/modes/interactive/components/login-dialog.js +3 -9
  534. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  535. package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
  536. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
  537. package/dist/modes/interactive/components/markdown-transform.js +19 -0
  538. package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
  539. package/dist/modes/interactive/components/mermaid.d.ts +11 -0
  540. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  541. package/dist/modes/interactive/components/mermaid.js +75 -0
  542. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  543. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  544. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  545. package/dist/modes/interactive/components/model-selector.js +28 -29
  546. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  547. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  548. package/dist/modes/interactive/components/oauth-selector.js +3 -11
  549. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  550. package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
  551. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  552. package/dist/modes/interactive/components/scoped-models-selector.js +34 -13
  553. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  554. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  555. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  556. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  557. package/dist/modes/interactive/components/session-selector.js +35 -60
  558. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  559. package/dist/modes/interactive/components/settings-selector.d.ts +8 -2
  560. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/settings-selector.js +30 -14
  562. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  563. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  564. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  565. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  566. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  567. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  568. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  569. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  570. package/dist/modes/interactive/components/status-indicator.js +0 -2
  571. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  572. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/theme-selector.js +0 -2
  574. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  575. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  576. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  577. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  578. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/tool-execution.js +18 -36
  580. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  581. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/tool-group.js +2 -3
  583. package/dist/modes/interactive/components/tool-group.js.map +1 -1
  584. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/tree-selector.js +19 -39
  586. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  587. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  588. package/dist/modes/interactive/components/trust-selector.js +0 -6
  589. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  590. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  591. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  592. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  593. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  594. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  595. package/dist/modes/interactive/components/user-message.js +8 -5
  596. package/dist/modes/interactive/components/user-message.js.map +1 -1
  597. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  598. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  599. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  600. package/dist/modes/interactive/external-editor.js.map +1 -1
  601. package/dist/modes/interactive/interactive-mode.d.ts +46 -5
  602. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  603. package/dist/modes/interactive/interactive-mode.js +538 -282
  604. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  605. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  606. package/dist/modes/interactive/model-search.js.map +1 -1
  607. package/dist/modes/interactive/theme/dark.json +1 -0
  608. package/dist/modes/interactive/theme/light.json +1 -0
  609. package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
  610. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  611. package/dist/modes/interactive/theme/theme-controller.js +11 -8
  612. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  613. package/dist/modes/interactive/theme/theme-schema.json +5 -1
  614. package/dist/modes/interactive/theme/theme.d.ts +4 -4
  615. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  616. package/dist/modes/interactive/theme/theme.js +24 -12
  617. package/dist/modes/interactive/theme/theme.js.map +1 -1
  618. package/dist/modes/json-event.d.ts +28 -0
  619. package/dist/modes/json-event.d.ts.map +1 -0
  620. package/dist/modes/json-event.js +12 -0
  621. package/dist/modes/json-event.js.map +1 -0
  622. package/dist/modes/print-mode.d.ts.map +1 -1
  623. package/dist/modes/print-mode.js +12 -2
  624. package/dist/modes/print-mode.js.map +1 -1
  625. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  626. package/dist/modes/rpc/jsonl.js.map +1 -1
  627. package/dist/modes/rpc/rpc-client.d.ts +5 -4
  628. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  629. package/dist/modes/rpc/rpc-client.js +7 -8
  630. package/dist/modes/rpc/rpc-client.js.map +1 -1
  631. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  632. package/dist/modes/rpc/rpc-mode.js +4 -3
  633. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  634. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  635. package/dist/package-manager-cli.d.ts.map +1 -1
  636. package/dist/package-manager-cli.js +11 -9
  637. package/dist/package-manager-cli.js.map +1 -1
  638. package/dist/rpc-entry.d.ts.map +1 -1
  639. package/dist/rpc-entry.js +1 -0
  640. package/dist/rpc-entry.js.map +1 -1
  641. package/dist/server/create-harness.d.ts +26 -0
  642. package/dist/server/create-harness.d.ts.map +1 -0
  643. package/dist/server/create-harness.js +104 -0
  644. package/dist/server/create-harness.js.map +1 -0
  645. package/dist/utils/abort.d.ts +5 -0
  646. package/dist/utils/abort.d.ts.map +1 -0
  647. package/dist/utils/abort.js +48 -0
  648. package/dist/utils/abort.js.map +1 -0
  649. package/dist/utils/ansi.d.ts.map +1 -1
  650. package/dist/utils/ansi.js.map +1 -1
  651. package/dist/utils/changelog.d.ts.map +1 -1
  652. package/dist/utils/changelog.js.map +1 -1
  653. package/dist/utils/child-process.d.ts.map +1 -1
  654. package/dist/utils/child-process.js.map +1 -1
  655. package/dist/utils/clipboard-image.d.ts.map +1 -1
  656. package/dist/utils/clipboard-image.js.map +1 -1
  657. package/dist/utils/clipboard-native.d.ts.map +1 -1
  658. package/dist/utils/clipboard-native.js.map +1 -1
  659. package/dist/utils/clipboard.d.ts +1 -1
  660. package/dist/utils/clipboard.d.ts.map +1 -1
  661. package/dist/utils/clipboard.js +22 -2
  662. package/dist/utils/clipboard.js.map +1 -1
  663. package/dist/utils/coalescing-terminal.d.ts +20 -4
  664. package/dist/utils/coalescing-terminal.d.ts.map +1 -1
  665. package/dist/utils/coalescing-terminal.js +48 -12
  666. package/dist/utils/coalescing-terminal.js.map +1 -1
  667. package/dist/utils/deprecation.d.ts.map +1 -1
  668. package/dist/utils/deprecation.js.map +1 -1
  669. package/dist/utils/exif-orientation.d.ts.map +1 -1
  670. package/dist/utils/exif-orientation.js.map +1 -1
  671. package/dist/utils/frontmatter.d.ts.map +1 -1
  672. package/dist/utils/frontmatter.js.map +1 -1
  673. package/dist/utils/fs-watch.d.ts.map +1 -1
  674. package/dist/utils/fs-watch.js.map +1 -1
  675. package/dist/utils/git.d.ts.map +1 -1
  676. package/dist/utils/git.js.map +1 -1
  677. package/dist/utils/html.d.ts.map +1 -1
  678. package/dist/utils/html.js.map +1 -1
  679. package/dist/utils/image-convert.d.ts.map +1 -1
  680. package/dist/utils/image-convert.js.map +1 -1
  681. package/dist/utils/image-process.d.ts.map +1 -1
  682. package/dist/utils/image-process.js.map +1 -1
  683. package/dist/utils/image-resize-core.d.ts.map +1 -1
  684. package/dist/utils/image-resize-core.js.map +1 -1
  685. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  686. package/dist/utils/image-resize-worker.js.map +1 -1
  687. package/dist/utils/image-resize.d.ts.map +1 -1
  688. package/dist/utils/image-resize.js.map +1 -1
  689. package/dist/utils/json.d.ts.map +1 -1
  690. package/dist/utils/json.js.map +1 -1
  691. package/dist/utils/management-http.d.ts +23 -0
  692. package/dist/utils/management-http.d.ts.map +1 -0
  693. package/dist/utils/management-http.js +50 -0
  694. package/dist/utils/management-http.js.map +1 -0
  695. package/dist/utils/mime.d.ts.map +1 -1
  696. package/dist/utils/mime.js.map +1 -1
  697. package/dist/utils/open-browser.d.ts.map +1 -1
  698. package/dist/utils/open-browser.js.map +1 -1
  699. package/dist/utils/paths.d.ts +3 -0
  700. package/dist/utils/paths.d.ts.map +1 -1
  701. package/dist/utils/paths.js +23 -1
  702. package/dist/utils/paths.js.map +1 -1
  703. package/dist/utils/photon.d.ts.map +1 -1
  704. package/dist/utils/photon.js.map +1 -1
  705. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  706. package/dist/utils/pi-user-agent.js.map +1 -1
  707. package/dist/utils/shell.d.ts.map +1 -1
  708. package/dist/utils/shell.js.map +1 -1
  709. package/dist/utils/sleep.d.ts.map +1 -1
  710. package/dist/utils/sleep.js.map +1 -1
  711. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  712. package/dist/utils/syntax-highlight.js.map +1 -1
  713. package/dist/utils/tool-result-images.d.ts +19 -0
  714. package/dist/utils/tool-result-images.d.ts.map +1 -0
  715. package/dist/utils/tool-result-images.js +45 -0
  716. package/dist/utils/tool-result-images.js.map +1 -0
  717. package/dist/utils/tools-manager.d.ts.map +1 -1
  718. package/dist/utils/tools-manager.js +4 -6
  719. package/dist/utils/tools-manager.js.map +1 -1
  720. package/dist/utils/version-check.d.ts +4 -0
  721. package/dist/utils/version-check.d.ts.map +1 -1
  722. package/dist/utils/version-check.js +20 -2
  723. package/dist/utils/version-check.js.map +1 -1
  724. package/dist/utils/windows-self-update.d.ts.map +1 -1
  725. package/dist/utils/windows-self-update.js.map +1 -1
  726. package/docs/bundled/README.md +1 -0
  727. package/docs/bundled/extensions/biu.md +63 -0
  728. package/docs/bundled/extensions/router.md +20 -14
  729. package/docs/bundled/extensions/statusline.md +7 -5
  730. package/docs/custom-provider.md +123 -2
  731. package/docs/development.md +83 -0
  732. package/docs/docs.json +8 -4
  733. package/docs/extensions.md +30 -5
  734. package/docs/json.md +21 -2
  735. package/docs/keybindings.md +46 -14
  736. package/docs/models.md +21 -3
  737. package/docs/providers.md +9 -1
  738. package/docs/quickstart.md +2 -0
  739. package/docs/rpc.md +12 -11
  740. package/docs/sdk.md +46 -0
  741. package/docs/security.md +1 -1
  742. package/docs/settings.md +4 -1
  743. package/docs/themes.md +7 -5
  744. package/docs/usage.md +8 -0
  745. package/examples/extensions/custom-compaction.ts +1 -16
  746. package/examples/extensions/custom-provider-anthropic/index.ts +2 -1
  747. package/examples/extensions/custom-provider-anthropic/package-lock.json +5 -5
  748. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  749. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -1
  750. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  751. package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
  752. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  753. package/examples/extensions/gondolin/package-lock.json +2 -2
  754. package/examples/extensions/gondolin/package.json +1 -1
  755. package/examples/extensions/handoff.ts +2 -11
  756. package/examples/extensions/qna.ts +3 -7
  757. package/examples/extensions/sandbox/package-lock.json +3 -3
  758. package/examples/extensions/sandbox/package.json +1 -1
  759. package/examples/extensions/summarize.ts +8 -18
  760. package/examples/extensions/with-deps/package-lock.json +4 -4
  761. package/examples/extensions/with-deps/package.json +1 -1
  762. package/examples/rpc-extension-ui.ts +11 -2
  763. package/examples/sdk/02-custom-model.ts +1 -2
  764. package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
  765. package/examples/sdk/12-full-control.ts +1 -1
  766. package/examples/sdk/README.md +1 -0
  767. package/npm-shrinkwrap.json +193 -264
  768. package/package.json +15 -8
@@ -1,16 +1,60 @@
1
1
  /**
2
2
  * /router interactive flows: list, add, edit, fetch, thinking map.
3
3
  *
4
- * Relay edits auto-save to router.json (no separate Save step). Nested multi-select
5
- * and thinking editors require Ctrl+S to apply, and warn on Esc when dirty.
4
+ * Relay edits are live: confirmed inputs and every toggle persist immediately.
5
+ * Searchable pickers follow Pi's native /model interaction pattern.
6
6
  */
7
7
  import { BorderedLoader } from "../../modes/interactive/components/bordered-loader.js";
8
- import { formatError, isValidRelayId, NO_UI_WARNING, truncate } from "./constants.js";
9
- import { createModelChecklist, createSearchableSelector, createThinkingMapEditor } from "./dialog.js";
10
- import { createDefaultModelConfig, displayModelLabel, resolveModelConfig, summarizeThinkingMap } from "./presets.js";
8
+ import { getModelSelectorSearchText } from "../../modes/interactive/model-search.js";
9
+ import { formatError, isValidRelayId, NO_UI_WARNING, ROUTER_THINKING_LEVELS, truncate } from "./constants.js";
10
+ import { createModelChecklist, createSearchableSelector, createThinkingMapEditor, } from "./dialog.js";
11
+ import { createDefaultModelConfig, displayModelLabel, resolveModelConfig, resolveRouterThinkingMap, summarizeThinkingMap, } from "./presets.js";
11
12
  import { probeRelayModels } from "./probe.js";
12
13
  import { applyRouterFile, registerOneRelay, unregisterOneRelay } from "./register.js";
13
14
  import { loadRouterFile, removeRelay, upsertRelay } from "./store.js";
15
+ /**
16
+ * Serialize live relay mutations without forcing a model-registry refresh for
17
+ * every checkbox press. Provider registration follows each snapshot; the
18
+ * registry is refreshed once when the editor closes.
19
+ */
20
+ class RelayAutoSaver {
21
+ constructor(ctx, pi, relay) {
22
+ this.chain = Promise.resolve();
23
+ this.needsRefresh = false;
24
+ this.ctx = ctx;
25
+ this.pi = pi;
26
+ this.relay = relay;
27
+ }
28
+ save() {
29
+ const snapshot = structuredClone(this.relay);
30
+ this.needsRefresh = true;
31
+ this.chain = this.chain
32
+ .catch(() => { })
33
+ .then(async () => {
34
+ await upsertRelay(snapshot);
35
+ registerOneRelay(this.pi, snapshot);
36
+ this.error = undefined;
37
+ })
38
+ .catch((error) => {
39
+ this.error = error;
40
+ });
41
+ }
42
+ async flush() {
43
+ await this.chain;
44
+ if (this.error !== undefined) {
45
+ const error = this.error;
46
+ this.error = undefined;
47
+ throw error;
48
+ }
49
+ if (this.needsRefresh) {
50
+ this.needsRefresh = false;
51
+ await this.ctx.modelRegistry.refresh();
52
+ }
53
+ }
54
+ }
55
+ export function isCurrentRouterModel(current, relayId, modelId) {
56
+ return current?.provider === relayId && current.id === modelId;
57
+ }
14
58
  export async function runRouterCommand(args, ctx, pi) {
15
59
  if (!ctx.hasUI) {
16
60
  ctx.ui.notify(NO_UI_WARNING, "warning");
@@ -76,7 +120,7 @@ async function openMainMenu(ctx, pi, initialQuery) {
76
120
  items,
77
121
  initialValue: cursor,
78
122
  initialQuery: query,
79
- maxVisible: 12,
123
+ maxVisible: 10,
80
124
  }))
81
125
  : await selectNative(ctx, "API relays", items.map((item) => ({ value: item.value, label: item.label, description: item.description })));
82
126
  query = undefined;
@@ -152,20 +196,13 @@ async function addRelayFlow(ctx, pi) {
152
196
  apiKey: apiKey.trim(),
153
197
  models: [],
154
198
  };
155
- const models = await fetchAndSelectModels(ctx, relay, new Set());
156
- if (models === undefined) {
157
- const keep = await ctx.ui.confirm("Save relay without models?", "You can fetch models later from the relay editor. Changes auto-save after that.");
158
- if (!keep)
159
- return undefined;
160
- }
161
- else {
162
- relay.models = models;
199
+ // Connection fields are committed before the network step so cancelling or
200
+ // failing catalog discovery never loses the relay the user just entered.
201
+ await persistRelay(ctx, pi, relay);
202
+ await fetchAndSelectModels(ctx, pi, relay);
203
+ if (relay.models.length === 0) {
204
+ ctx.ui.notify(`Relay "${relay.id}" has no models yet.`, "warning");
163
205
  }
164
- await persistRelay(ctx, pi, relay, {
165
- notify: relay.models.length > 0
166
- ? `Saved "${relay.id}" with ${relay.models.length} model(s).`
167
- : `Saved "${relay.id}" (no models yet).`,
168
- });
169
206
  return relay.id;
170
207
  }
171
208
  /**
@@ -192,7 +229,7 @@ async function editRelayFlow(ctx, pi, initial) {
192
229
  { value: "baseUrl", label: "Base URL", description: relay.baseUrl },
193
230
  { value: "apiKey", label: "API key", description: maskKey(relay.apiKey) },
194
231
  { value: "remove", label: "Remove relay", description: "Delete from router.json" },
195
- { value: "back", label: "Back", description: "All edits already saved" },
232
+ { value: "back", label: "Back", description: "Return to relays" },
196
233
  ]);
197
234
  if (choice === undefined || choice === "back")
198
235
  return;
@@ -214,7 +251,7 @@ async function editRelayFlow(ctx, pi, initial) {
214
251
  if (normalized === relay.baseUrl)
215
252
  continue;
216
253
  relay.baseUrl = normalized;
217
- await persistRelay(ctx, pi, relay, { notify: `Saved base URL for "${relay.id}".` });
254
+ await persistRelay(ctx, pi, relay);
218
255
  continue;
219
256
  }
220
257
  if (choice === "apiKey") {
@@ -225,7 +262,7 @@ async function editRelayFlow(ctx, pi, initial) {
225
262
  if (trimmed === relay.apiKey)
226
263
  continue;
227
264
  relay.apiKey = trimmed;
228
- await persistRelay(ctx, pi, relay, { notify: `Saved API key for "${relay.id}".` });
265
+ await persistRelay(ctx, pi, relay);
229
266
  continue;
230
267
  }
231
268
  if (choice === "models") {
@@ -235,6 +272,10 @@ async function editRelayFlow(ctx, pi, initial) {
235
272
  continue;
236
273
  }
237
274
  if (choice === "remove") {
275
+ if (ctx.model?.provider === relay.id) {
276
+ ctx.ui.notify(`Switch away from relay "${relay.id}" before removing it.`, "warning");
277
+ continue;
278
+ }
238
279
  const ok = await ctx.ui.confirm(`Remove relay "${relay.id}"?`, "Models will disappear from /model.");
239
280
  if (!ok)
240
281
  continue;
@@ -247,43 +288,57 @@ async function editRelayFlow(ctx, pi, initial) {
247
288
  }
248
289
  }
249
290
  /**
250
- * Models screen: flat list of configured models + fetch. Selecting a model opens
251
- * its editor (name / thinking). No extra "customize vs list" intermediate menu.
291
+ * Models screen: searchable configured models plus fetch/manual-add actions.
292
+ * Selecting a model opens its editor (name / thinking / remove).
252
293
  */
253
294
  async function manageModelsFlow(ctx, pi, relay) {
295
+ let cursor;
254
296
  while (true) {
255
- const empty = relay.models.length === 0;
256
297
  const items = [
257
- {
258
- value: "action:fetch",
259
- label: "Fetch catalog",
260
- description: empty
261
- ? "GET /models · multi-select · auto-saves"
262
- : "Refresh from server (keeps name/thinking for kept ids)",
263
- },
264
298
  ...relay.models.map((model) => {
265
299
  const resolved = resolveModelConfig(model);
266
300
  const label = displayModelLabel(resolved);
267
301
  const thinking = summarizeThinkingMap(resolved.thinkingLevelMap);
302
+ const current = ctx.model?.provider === relay.id && ctx.model.id === model.id ? " ✓" : "";
268
303
  return {
269
304
  value: `model:${model.id}`,
270
- label: model.id,
305
+ label: `${model.id}${current}`,
271
306
  description: label !== model.id ? `${label} · ${thinking}` : thinking,
307
+ searchText: `${getModelSelectorSearchText({ id: model.id, provider: relay.id, name: resolved.name })} ${thinking}`,
272
308
  };
273
309
  }),
274
- { value: "action:back", label: "Back", description: "Return to relay" },
310
+ {
311
+ value: "action:fetch",
312
+ label: "Fetch catalog",
313
+ description: relay.models.length === 0
314
+ ? "GET /models · select models"
315
+ : "Refresh from server · keeps selected customizations",
316
+ searchText: "fetch catalog refresh models server",
317
+ },
318
+ {
319
+ value: "action:manual",
320
+ label: "Add models manually",
321
+ description: "Comma- or newline-separated model ids",
322
+ searchText: "add manual custom model ids",
323
+ },
324
+ { value: "action:back", label: "Back", description: "Return to relay", searchText: "back return" },
275
325
  ];
276
- const choice = await selectNative(ctx, `Relay · ${relay.id} · models`, items);
326
+ const currentValue = `model:${ctx.model?.id}`;
327
+ const initialValue = cursor ?? (ctx.model?.provider === relay.id ? currentValue : undefined);
328
+ const choice = await selectNative(ctx, `Relay · ${relay.id} · models`, items, { initialValue });
277
329
  if (choice === undefined || choice === "action:back")
278
330
  return;
331
+ cursor = choice;
279
332
  if (choice === "action:fetch") {
280
- const selected = await fetchAndSelectModels(ctx, relay, new Set(relay.models.map((m) => m.id)));
281
- if (!selected)
333
+ await fetchAndSelectModels(ctx, pi, relay);
334
+ continue;
335
+ }
336
+ if (choice === "action:manual") {
337
+ const additions = await manualModelEntry(ctx);
338
+ if (!additions)
282
339
  continue;
283
- relay.models = mergeModelSelection(relay.models, selected);
284
- await persistRelay(ctx, pi, relay, {
285
- notify: `Saved "${relay.id}" · ${relay.models.length} model(s).`,
286
- });
340
+ relay.models = mergeAddedModels(relay.models, additions);
341
+ await persistRelay(ctx, pi, relay);
287
342
  continue;
288
343
  }
289
344
  if (choice.startsWith("model:")) {
@@ -295,7 +350,7 @@ async function manageModelsFlow(ctx, pi, relay) {
295
350
  }
296
351
  }
297
352
  }
298
- /** Single-model editor: display name + thinking. Auto-saves each applied change. */
353
+ /** Single-model editor: display name + thinking. Every confirmed change is live. */
299
354
  async function editModelFlow(ctx, pi, relay, model) {
300
355
  while (true) {
301
356
  const resolved = resolveModelConfig(model);
@@ -307,7 +362,8 @@ async function editModelFlow(ctx, pi, relay, model) {
307
362
  label: "Thinking levels",
308
363
  description: summarizeThinkingMap(resolved.thinkingLevelMap),
309
364
  },
310
- { value: "back", label: "Back", description: "Edits auto-save when applied" },
365
+ { value: "remove", label: "Remove model", description: "Delete this model from the relay" },
366
+ { value: "back", label: "Back", description: "Return to models" },
311
367
  ]);
312
368
  if (action === undefined || action === "back")
313
369
  return;
@@ -324,167 +380,249 @@ async function editModelFlow(ctx, pi, relay, model) {
324
380
  model.name = nextName;
325
381
  else
326
382
  delete model.name;
327
- await persistRelay(ctx, pi, relay, {
328
- notify: model.name
329
- ? `Saved display name "${model.name}" for ${model.id}.`
330
- : `Cleared display name for ${model.id}; /model shows id.`,
331
- });
383
+ await persistRelay(ctx, pi, relay);
332
384
  continue;
333
385
  }
334
386
  if (action === "thinking") {
335
- const nextMap = ctx.mode === "tui"
336
- ? await ctx.ui.custom(createThinkingMapEditor({
387
+ const saver = new RelayAutoSaver(ctx, pi, relay);
388
+ if (ctx.mode === "tui") {
389
+ await ctx.ui.custom(createThinkingMapEditor({
337
390
  title: `Thinking · ${relay.id} / ${model.id}`,
338
391
  map: resolved.thinkingLevelMap,
339
- }))
340
- : await editThinkingMapNative(ctx, resolved.thinkingLevelMap);
341
- if (!nextMap)
392
+ levels: ROUTER_THINKING_LEVELS,
393
+ onChange: (nextMap) => {
394
+ model.thinkingLevelMap = nextMap;
395
+ model.reasoning = true;
396
+ saver.save();
397
+ },
398
+ }));
399
+ }
400
+ else {
401
+ await editThinkingMapNative(ctx, resolved.thinkingLevelMap, (nextMap) => {
402
+ model.thinkingLevelMap = nextMap;
403
+ model.reasoning = true;
404
+ saver.save();
405
+ });
406
+ }
407
+ await saver.flush();
408
+ continue;
409
+ }
410
+ if (action === "remove") {
411
+ if (isCurrentRouterModel(ctx.model, relay.id, model.id)) {
412
+ ctx.ui.notify(`Switch away from model "${model.id}" before removing it.`, "warning");
342
413
  continue;
343
- model.thinkingLevelMap = nextMap;
344
- model.reasoning = true;
345
- await persistRelay(ctx, pi, relay, {
346
- notify: `Saved thinking levels for ${model.id}.`,
347
- });
414
+ }
415
+ const ok = await ctx.ui.confirm(`Remove model "${model.id}"?`, "Its display name and thinking settings will be removed.");
416
+ if (!ok)
417
+ continue;
418
+ relay.models = relay.models.filter((entry) => entry.id !== model.id);
419
+ await persistRelay(ctx, pi, relay);
420
+ ctx.ui.notify(`Removed model "${model.id}".`, "info");
421
+ return;
348
422
  }
349
423
  }
350
424
  }
351
- async function editThinkingMapNative(ctx, map) {
352
- const working = { ...(map ?? {}) };
425
+ async function editThinkingMapNative(ctx, map, onChange) {
426
+ let working = resolveRouterThinkingMap(map);
353
427
  while (true) {
354
428
  const choice = await selectNative(ctx, "Toggle thinking level", [
355
- ...["off", "minimal", "low", "medium", "high", "xhigh", "max"].map((level) => ({
429
+ ...ROUTER_THINKING_LEVELS.map((level) => ({
356
430
  value: level,
357
431
  label: level,
358
432
  description: working[level] === null ? "hidden" : working[level] === undefined ? "default" : String(working[level]),
359
433
  })),
360
- { value: "done", label: "Apply" },
361
- { value: "cancel", label: "Cancel" },
434
+ { value: "back", label: "Back", description: "Changes are live" },
362
435
  ]);
363
- if (choice === undefined || choice === "cancel")
364
- return undefined;
365
- if (choice === "done")
366
- return working;
367
- if (working[choice] === null)
368
- working[choice] = choice === "off" ? "none" : choice;
369
- else
370
- working[choice] = null;
436
+ if (choice === undefined || choice === "back")
437
+ return;
438
+ if (!ROUTER_THINKING_LEVELS.includes(choice))
439
+ continue;
440
+ const level = choice;
441
+ working = {
442
+ ...working,
443
+ [level]: working[level] === null ? level : null,
444
+ off: null,
445
+ minimal: null,
446
+ };
447
+ onChange({ ...working });
371
448
  }
372
449
  }
373
- async function fetchAndSelectModels(ctx, relay, initiallySelected) {
374
- const probeOptions = {
375
- baseUrl: relay.baseUrl,
376
- apiKey: literalKey(relay.apiKey),
377
- };
450
+ async function fetchAndSelectModels(ctx, pi, relay) {
451
+ const key = resolveProbeApiKey(relay.apiKey);
452
+ if (key.error) {
453
+ ctx.ui.notify(key.error, "warning");
454
+ await recoverWithManualModels(ctx, pi, relay);
455
+ return;
456
+ }
378
457
  let result;
379
- if (ctx.mode === "tui") {
380
- result = await ctx.ui.custom((tui, theme, _kb, done) => {
381
- const loader = new BorderedLoader(tui, theme, `Fetching models · ${relay.id}`, {
382
- cancellable: true,
458
+ while (true) {
459
+ const probeOptions = { baseUrl: relay.baseUrl, apiKey: key.value };
460
+ if (ctx.mode === "tui") {
461
+ result = await ctx.ui.custom((tui, theme, _kb, done) => {
462
+ const loader = new BorderedLoader(tui, theme, `Fetching models · ${relay.id}`, {
463
+ cancellable: true,
464
+ });
465
+ let settled = false;
466
+ const finish = (value) => {
467
+ if (settled)
468
+ return;
469
+ settled = true;
470
+ loader.dispose();
471
+ done(value);
472
+ };
473
+ loader.onAbort = () => finish(undefined);
474
+ void probeRelayModels({ ...probeOptions, signal: loader.signal })
475
+ .then(finish)
476
+ .catch((error) => finish({ ok: false, error: formatError(error) }));
477
+ return loader;
383
478
  });
384
- let settled = false;
385
- const finish = (value) => {
386
- if (settled)
387
- return;
388
- settled = true;
389
- loader.dispose();
390
- done(value);
391
- };
392
- loader.onAbort = () => finish(undefined);
393
- void probeRelayModels({ ...probeOptions, signal: loader.signal })
394
- .then(finish)
395
- .catch((error) => finish({ ok: false, error: formatError(error) }));
396
- return loader;
397
- });
398
- }
399
- else {
400
- ctx.ui.notify(`Fetching models from ${relay.baseUrl}…`, "info");
401
- result = await probeRelayModels(probeOptions);
402
- }
403
- if (result === undefined)
404
- return undefined;
405
- if (!result.ok) {
479
+ }
480
+ else {
481
+ ctx.ui.notify(`Fetching models from ${relay.baseUrl}…`, "info");
482
+ result = await probeRelayModels(probeOptions);
483
+ }
484
+ if (result === undefined)
485
+ return;
486
+ if (result.ok && result.models.length === 0) {
487
+ ctx.ui.notify("Server returned an empty model list.", "warning");
488
+ const recovery = await selectNative(ctx, `Catalog empty · ${relay.id}`, [
489
+ { value: "retry", label: "Retry", description: "Fetch /models again" },
490
+ { value: "manual", label: "Add models manually", description: "Enter model ids without a catalog" },
491
+ { value: "back", label: "Back", description: "Return to relay settings" },
492
+ ]);
493
+ if (recovery === "retry")
494
+ continue;
495
+ if (recovery === "manual")
496
+ await recoverWithManualModels(ctx, pi, relay);
497
+ return;
498
+ }
499
+ if (result.ok)
500
+ break;
406
501
  ctx.ui.notify(`Fetch failed: ${result.error}`, "error");
407
- const manual = await ctx.ui.confirm("Add model IDs manually?", "Comma-separated ids.");
408
- if (!manual)
409
- return undefined;
410
- return manualModelEntry(ctx);
411
- }
412
- if (result.models.length === 0) {
413
- ctx.ui.notify("Server returned an empty model list.", "warning");
414
- return manualModelEntry(ctx);
502
+ const recovery = await selectNative(ctx, `Catalog unavailable · ${relay.id}`, [
503
+ { value: "retry", label: "Retry", description: "Fetch /models again" },
504
+ { value: "manual", label: "Add models manually", description: "Enter model ids without a catalog" },
505
+ { value: "back", label: "Back", description: "Return to relay settings" },
506
+ ]);
507
+ if (recovery === "retry")
508
+ continue;
509
+ if (recovery === "manual")
510
+ await recoverWithManualModels(ctx, pi, relay);
511
+ return;
415
512
  }
416
- if (result.truncated) {
513
+ if (!result || !result.ok)
514
+ return;
515
+ if (result.truncated)
417
516
  ctx.ui.notify("Catalog truncated to 2,000 models.", "warning");
418
- }
419
- let selectedIds;
517
+ const catalog = mergeCatalogWithConfigured(relay.models, result.models);
518
+ const initiallySelected = new Set(relay.models.map((model) => model.id));
519
+ const activeModelId = ctx.model?.provider === relay.id ? ctx.model.id : undefined;
520
+ const currentModelId = activeModelId && initiallySelected.has(activeModelId) ? activeModelId : undefined;
521
+ const protectedIds = currentModelId ? new Set([currentModelId]) : undefined;
522
+ const preserved = new Map(relay.models.map((model) => [model.id, structuredClone(model)]));
523
+ const saver = new RelayAutoSaver(ctx, pi, relay);
524
+ const applySelection = (selectedIds) => {
525
+ if (currentModelId && !selectedIds.includes(currentModelId)) {
526
+ ctx.ui.notify(`Switch away from model "${currentModelId}" before disabling it.`, "warning");
527
+ return;
528
+ }
529
+ relay.models = selectedIds.map((id) => {
530
+ const previous = preserved.get(id);
531
+ if (previous)
532
+ return structuredClone(previous);
533
+ const next = createDefaultModelConfig(id);
534
+ preserved.set(id, next);
535
+ return structuredClone(next);
536
+ });
537
+ saver.save();
538
+ };
420
539
  if (ctx.mode === "tui") {
421
540
  const choice = await ctx.ui.custom(createModelChecklist({
422
541
  title: `Select models · ${relay.id}`,
423
- subtitle: "Space toggle · Ctrl+S apply · Esc warns if unsaved",
424
- models: result.models,
542
+ subtitle: "Space toggles immediately · Enter/Esc returns",
543
+ models: catalog,
425
544
  initiallySelected,
545
+ protectedIds,
546
+ onChange: applySelection,
547
+ onProtectedToggle: (id) => ctx.ui.notify(`Switch away from model "${id}" before disabling it.`, "warning"),
426
548
  }));
427
- if (choice.kind === "cancel")
428
- return undefined;
429
- selectedIds = choice.selectedIds;
549
+ if (choice.kind === "close")
550
+ applySelectionIfChanged(relay, choice.selectedIds, applySelection);
430
551
  }
431
552
  else {
432
- const ok = await ctx.ui.confirm(`Import ${result.models.length} models?`, "Non-TUI mode imports the full catalog. Prefer the terminal UI to multi-select.");
433
- if (!ok)
434
- return undefined;
435
- selectedIds = result.models.map((model) => model.id);
553
+ const ok = await ctx.ui.confirm(`Import ${result.models.length} models?`, "Non-TUI mode imports the full catalog.");
554
+ if (ok)
555
+ applySelection([...new Set([...initiallySelected, ...result.models.map((model) => model.id)])]);
436
556
  }
437
- if (selectedIds.length === 0) {
438
- ctx.ui.notify("No models selected.", "warning");
439
- return undefined;
440
- }
441
- // Do not import remote catalog names — leave name empty so /model shows the id
442
- // unless the user sets a custom display name later.
443
- return selectedIds.map((id) => createDefaultModelConfig(id));
557
+ await saver.flush();
558
+ if (relay.models.length === 0)
559
+ ctx.ui.notify(`No models enabled for "${relay.id}".`, "warning");
444
560
  }
445
561
  async function manualModelEntry(ctx) {
446
562
  const value = await ctx.ui.input("Model IDs (comma-separated)", "gpt-5.6-sol, gpt-5.6-luna");
447
563
  if (value === undefined)
448
564
  return undefined;
449
- const ids = value
450
- .split(/[,\r\n]+/)
451
- .map((id) => id.trim())
452
- .filter(Boolean);
565
+ const ids = [
566
+ ...new Set(value
567
+ .split(/[,\r\n]+/)
568
+ .map((id) => id.trim())
569
+ .filter(Boolean)),
570
+ ];
453
571
  if (ids.length === 0) {
454
572
  ctx.ui.notify("Enter at least one model id.", "warning");
455
573
  return undefined;
456
574
  }
457
575
  return ids.map((id) => createDefaultModelConfig(id));
458
576
  }
459
- /** Keep prior customizations when re-selecting overlapping ids. */
460
- function mergeModelSelection(previous, selected) {
461
- const prior = new Map(previous.map((model) => [model.id, model]));
462
- return selected.map((model) => {
463
- const old = prior.get(model.id);
464
- if (!old)
465
- return model;
466
- const merged = {
467
- ...model,
468
- reasoning: old.reasoning ?? model.reasoning,
469
- input: old.input ?? model.input,
470
- contextWindow: old.contextWindow ?? model.contextWindow,
471
- maxTokens: old.maxTokens ?? model.maxTokens,
472
- thinkingLevelMap: old.thinkingLevelMap ?? model.thinkingLevelMap,
473
- };
474
- // Preserve a user-set display name; never invent one on re-fetch.
475
- if (old.name?.trim() && old.name.trim() !== old.id)
476
- merged.name = old.name.trim();
477
- else
478
- delete merged.name;
479
- return merged;
480
- });
577
+ async function recoverWithManualModels(ctx, pi, relay) {
578
+ const additions = await manualModelEntry(ctx);
579
+ if (!additions)
580
+ return;
581
+ relay.models = mergeAddedModels(relay.models, additions);
582
+ await persistRelay(ctx, pi, relay);
583
+ }
584
+ function mergeAddedModels(previous, additions) {
585
+ const result = previous.map((model) => structuredClone(model));
586
+ const ids = new Set(result.map((model) => model.id));
587
+ for (const model of additions) {
588
+ if (ids.has(model.id))
589
+ continue;
590
+ ids.add(model.id);
591
+ result.push(model);
592
+ }
593
+ return result;
594
+ }
595
+ function mergeCatalogWithConfigured(configured, catalog) {
596
+ const items = new Map();
597
+ const configuredById = new Map(configured.map((model) => [model.id, model]));
598
+ for (const model of catalog) {
599
+ const previous = configuredById.get(model.id);
600
+ items.set(model.id, {
601
+ id: model.id,
602
+ name: previous?.name ?? model.name,
603
+ });
604
+ }
605
+ for (const model of configured) {
606
+ if (!items.has(model.id)) {
607
+ items.set(model.id, {
608
+ id: model.id,
609
+ name: model.name ?? model.id,
610
+ unavailable: true,
611
+ });
612
+ }
613
+ }
614
+ return [...items.values()].sort((left, right) => left.id.localeCompare(right.id));
615
+ }
616
+ function applySelectionIfChanged(relay, selectedIds, apply) {
617
+ const current = new Set(relay.models.map((model) => model.id));
618
+ if (current.size === selectedIds.length && selectedIds.every((id) => current.has(id)))
619
+ return;
620
+ apply([...selectedIds]);
481
621
  }
482
- async function persistRelay(ctx, pi, relay, opts) {
622
+ async function persistRelay(ctx, pi, relay) {
483
623
  await upsertRelay(relay);
484
624
  registerOneRelay(pi, relay);
485
625
  await ctx.modelRegistry.refresh();
486
- if (opts?.notify)
487
- ctx.ui.notify(opts.notify, "info");
488
626
  }
489
627
  async function promptText(ctx, title, placeholder, validate) {
490
628
  while (true) {
@@ -499,12 +637,14 @@ async function promptText(ctx, title, placeholder, validate) {
499
637
  return value;
500
638
  }
501
639
  }
502
- async function selectNative(ctx, title, items) {
640
+ async function selectNative(ctx, title, items, opts) {
503
641
  if (ctx.mode === "tui") {
504
642
  return ctx.ui.custom(createSearchableSelector({
505
643
  title,
506
644
  items,
507
- maxVisible: Math.min(12, Math.max(1, items.length)),
645
+ initialValue: opts?.initialValue,
646
+ initialQuery: opts?.initialQuery,
647
+ maxVisible: opts?.maxVisible ?? Math.min(10, Math.max(1, items.length)),
508
648
  }));
509
649
  }
510
650
  const labels = items.map((item) => (item.description ? `${item.label} — ${item.description}` : item.label));
@@ -520,19 +660,24 @@ function maskKey(key) {
520
660
  return "••••";
521
661
  return `${key.slice(0, 4)}…${key.slice(-4)}`;
522
662
  }
523
- /** Best-effort key for catalog fetch (full resolution still goes through Pi at request time). */
524
- function literalKey(apiKey) {
663
+ /** Resolve only keys that can be safely used by the catalog probe. */
664
+ export function resolveProbeApiKey(apiKey) {
525
665
  const trimmed = apiKey.trim();
526
- if (!trimmed || trimmed.startsWith("!"))
527
- return undefined;
666
+ if (!trimmed)
667
+ return {};
668
+ if (trimmed.startsWith("!")) {
669
+ return { error: "This API key uses a !command and cannot be resolved for catalog probing." };
670
+ }
528
671
  const envOnly = trimmed.match(/^\$([A-Za-z_][A-Za-z0-9_]*)$/);
529
- if (envOnly)
530
- return process.env[envOnly[1]];
531
672
  const braced = trimmed.match(/^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/);
532
- if (braced)
533
- return process.env[braced[1]];
534
- if (trimmed.includes("$"))
535
- return undefined;
536
- return trimmed;
673
+ const envName = envOnly?.[1] ?? braced?.[1];
674
+ if (envName) {
675
+ const value = process.env[envName]?.trim();
676
+ return value ? { value } : { error: `Environment variable $${envName} is not set.` };
677
+ }
678
+ if (trimmed.includes("$")) {
679
+ return { error: "This API key contains interpolation and cannot be resolved for catalog probing." };
680
+ }
681
+ return { value: trimmed };
537
682
  }
538
683
  //# sourceMappingURL=ui.js.map