meetsoma 0.3.2 → 0.3.4

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 (516) hide show
  1. package/CHANGELOG.md +26 -194
  2. package/dist/thin-cli.js +1587 -392
  3. package/package.json +12 -59
  4. package/bin/gum +0 -0
  5. package/dist/bun/cli.d.ts +0 -3
  6. package/dist/bun/cli.d.ts.map +0 -1
  7. package/dist/bun/cli.js +0 -7
  8. package/dist/bun/cli.js.map +0 -1
  9. package/dist/bun/register-bedrock.d.ts +0 -2
  10. package/dist/bun/register-bedrock.d.ts.map +0 -1
  11. package/dist/bun/register-bedrock.js +0 -4
  12. package/dist/bun/register-bedrock.js.map +0 -1
  13. package/dist/cli/args.d.ts +0 -49
  14. package/dist/cli/args.d.ts.map +0 -1
  15. package/dist/cli/args.js +0 -304
  16. package/dist/cli/args.js.map +0 -1
  17. package/dist/cli/config-selector.d.ts +0 -14
  18. package/dist/cli/config-selector.d.ts.map +0 -1
  19. package/dist/cli/config-selector.js +0 -31
  20. package/dist/cli/config-selector.js.map +0 -1
  21. package/dist/cli/file-processor.d.ts +0 -15
  22. package/dist/cli/file-processor.d.ts.map +0 -1
  23. package/dist/cli/file-processor.js +0 -83
  24. package/dist/cli/file-processor.js.map +0 -1
  25. package/dist/cli/initial-message.d.ts +0 -18
  26. package/dist/cli/initial-message.d.ts.map +0 -1
  27. package/dist/cli/initial-message.js +0 -22
  28. package/dist/cli/initial-message.js.map +0 -1
  29. package/dist/cli/list-models.d.ts +0 -9
  30. package/dist/cli/list-models.d.ts.map +0 -1
  31. package/dist/cli/list-models.js +0 -92
  32. package/dist/cli/list-models.js.map +0 -1
  33. package/dist/cli/session-picker.d.ts +0 -9
  34. package/dist/cli/session-picker.d.ts.map +0 -1
  35. package/dist/cli/session-picker.js +0 -35
  36. package/dist/cli/session-picker.js.map +0 -1
  37. package/dist/cli.d.ts +0 -3
  38. package/dist/cli.d.ts.map +0 -1
  39. package/dist/cli.js +0 -601
  40. package/dist/cli.js.map +0 -1
  41. package/dist/config.d.ts +0 -68
  42. package/dist/config.d.ts.map +0 -1
  43. package/dist/config.js +0 -203
  44. package/dist/config.js.map +0 -1
  45. package/dist/core/agent-session-runtime.d.ts +0 -134
  46. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  47. package/dist/core/agent-session-runtime.js +0 -264
  48. package/dist/core/agent-session-runtime.js.map +0 -1
  49. package/dist/core/agent-session.d.ts +0 -585
  50. package/dist/core/agent-session.d.ts.map +0 -1
  51. package/dist/core/agent-session.js +0 -2497
  52. package/dist/core/agent-session.js.map +0 -1
  53. package/dist/core/auth-storage.d.ts +0 -132
  54. package/dist/core/auth-storage.d.ts.map +0 -1
  55. package/dist/core/auth-storage.js +0 -422
  56. package/dist/core/auth-storage.js.map +0 -1
  57. package/dist/core/bash-executor.d.ts +0 -46
  58. package/dist/core/bash-executor.d.ts.map +0 -1
  59. package/dist/core/bash-executor.js +0 -113
  60. package/dist/core/bash-executor.js.map +0 -1
  61. package/dist/core/compaction/branch-summarization.d.ts +0 -88
  62. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  63. package/dist/core/compaction/branch-summarization.js +0 -243
  64. package/dist/core/compaction/branch-summarization.js.map +0 -1
  65. package/dist/core/compaction/compaction.d.ts +0 -121
  66. package/dist/core/compaction/compaction.d.ts.map +0 -1
  67. package/dist/core/compaction/compaction.js +0 -613
  68. package/dist/core/compaction/compaction.js.map +0 -1
  69. package/dist/core/compaction/index.d.ts +0 -7
  70. package/dist/core/compaction/index.d.ts.map +0 -1
  71. package/dist/core/compaction/index.js +0 -7
  72. package/dist/core/compaction/index.js.map +0 -1
  73. package/dist/core/compaction/utils.d.ts +0 -38
  74. package/dist/core/compaction/utils.d.ts.map +0 -1
  75. package/dist/core/compaction/utils.js +0 -153
  76. package/dist/core/compaction/utils.js.map +0 -1
  77. package/dist/core/defaults.d.ts +0 -3
  78. package/dist/core/defaults.d.ts.map +0 -1
  79. package/dist/core/defaults.js +0 -2
  80. package/dist/core/defaults.js.map +0 -1
  81. package/dist/core/diagnostics.d.ts +0 -15
  82. package/dist/core/diagnostics.d.ts.map +0 -1
  83. package/dist/core/diagnostics.js +0 -2
  84. package/dist/core/diagnostics.js.map +0 -1
  85. package/dist/core/event-bus.d.ts +0 -9
  86. package/dist/core/event-bus.d.ts.map +0 -1
  87. package/dist/core/event-bus.js +0 -25
  88. package/dist/core/event-bus.js.map +0 -1
  89. package/dist/core/exec.d.ts +0 -29
  90. package/dist/core/exec.d.ts.map +0 -1
  91. package/dist/core/exec.js +0 -75
  92. package/dist/core/exec.js.map +0 -1
  93. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  94. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  95. package/dist/core/export-html/ansi-to-html.js +0 -249
  96. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  97. package/dist/core/export-html/index.d.ts +0 -37
  98. package/dist/core/export-html/index.d.ts.map +0 -1
  99. package/dist/core/export-html/index.js +0 -224
  100. package/dist/core/export-html/index.js.map +0 -1
  101. package/dist/core/export-html/template.css +0 -1001
  102. package/dist/core/export-html/template.html +0 -55
  103. package/dist/core/export-html/template.js +0 -1690
  104. package/dist/core/export-html/tool-renderer.d.ts +0 -40
  105. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  106. package/dist/core/export-html/tool-renderer.js +0 -95
  107. package/dist/core/export-html/tool-renderer.js.map +0 -1
  108. package/dist/core/export-html/vendor/highlight.min.js +0 -1213
  109. package/dist/core/export-html/vendor/marked.min.js +0 -6
  110. package/dist/core/extensions/index.d.ts +0 -12
  111. package/dist/core/extensions/index.d.ts.map +0 -1
  112. package/dist/core/extensions/index.js +0 -9
  113. package/dist/core/extensions/index.js.map +0 -1
  114. package/dist/core/extensions/loader.d.ts +0 -25
  115. package/dist/core/extensions/loader.d.ts.map +0 -1
  116. package/dist/core/extensions/loader.js +0 -436
  117. package/dist/core/extensions/loader.js.map +0 -1
  118. package/dist/core/extensions/runner.d.ts +0 -148
  119. package/dist/core/extensions/runner.d.ts.map +0 -1
  120. package/dist/core/extensions/runner.js +0 -700
  121. package/dist/core/extensions/runner.js.map +0 -1
  122. package/dist/core/extensions/types.d.ts +0 -1076
  123. package/dist/core/extensions/types.d.ts.map +0 -1
  124. package/dist/core/extensions/types.js +0 -35
  125. package/dist/core/extensions/types.js.map +0 -1
  126. package/dist/core/extensions/wrapper.d.ts +0 -20
  127. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  128. package/dist/core/extensions/wrapper.js +0 -22
  129. package/dist/core/extensions/wrapper.js.map +0 -1
  130. package/dist/core/footer-data-provider.d.ts +0 -48
  131. package/dist/core/footer-data-provider.d.ts.map +0 -1
  132. package/dist/core/footer-data-provider.js +0 -314
  133. package/dist/core/footer-data-provider.js.map +0 -1
  134. package/dist/core/index.d.ts +0 -11
  135. package/dist/core/index.d.ts.map +0 -1
  136. package/dist/core/index.js +0 -11
  137. package/dist/core/index.js.map +0 -1
  138. package/dist/core/keybindings.d.ts +0 -285
  139. package/dist/core/keybindings.d.ts.map +0 -1
  140. package/dist/core/keybindings.js +0 -251
  141. package/dist/core/keybindings.js.map +0 -1
  142. package/dist/core/messages.d.ts +0 -77
  143. package/dist/core/messages.d.ts.map +0 -1
  144. package/dist/core/messages.js +0 -123
  145. package/dist/core/messages.js.map +0 -1
  146. package/dist/core/model-registry.d.ts +0 -132
  147. package/dist/core/model-registry.d.ts.map +0 -1
  148. package/dist/core/model-registry.js +0 -583
  149. package/dist/core/model-registry.js.map +0 -1
  150. package/dist/core/model-resolver.d.ts +0 -110
  151. package/dist/core/model-resolver.d.ts.map +0 -1
  152. package/dist/core/model-resolver.js +0 -486
  153. package/dist/core/model-resolver.js.map +0 -1
  154. package/dist/core/output-guard.d.ts +0 -6
  155. package/dist/core/output-guard.d.ts.map +0 -1
  156. package/dist/core/output-guard.js +0 -59
  157. package/dist/core/output-guard.js.map +0 -1
  158. package/dist/core/package-manager.d.ts +0 -172
  159. package/dist/core/package-manager.d.ts.map +0 -1
  160. package/dist/core/package-manager.js +0 -1783
  161. package/dist/core/package-manager.js.map +0 -1
  162. package/dist/core/prompt-templates.d.ts +0 -51
  163. package/dist/core/prompt-templates.d.ts.map +0 -1
  164. package/dist/core/prompt-templates.js +0 -249
  165. package/dist/core/prompt-templates.js.map +0 -1
  166. package/dist/core/resolve-config-value.d.ts +0 -23
  167. package/dist/core/resolve-config-value.d.ts.map +0 -1
  168. package/dist/core/resolve-config-value.js +0 -126
  169. package/dist/core/resolve-config-value.js.map +0 -1
  170. package/dist/core/resource-loader.d.ts +0 -185
  171. package/dist/core/resource-loader.d.ts.map +0 -1
  172. package/dist/core/resource-loader.js +0 -698
  173. package/dist/core/resource-loader.js.map +0 -1
  174. package/dist/core/sdk.d.ts +0 -93
  175. package/dist/core/sdk.d.ts.map +0 -1
  176. package/dist/core/sdk.js +0 -236
  177. package/dist/core/sdk.js.map +0 -1
  178. package/dist/core/session-manager.d.ts +0 -332
  179. package/dist/core/session-manager.d.ts.map +0 -1
  180. package/dist/core/session-manager.js +0 -1104
  181. package/dist/core/session-manager.js.map +0 -1
  182. package/dist/core/settings-manager.d.ts +0 -237
  183. package/dist/core/settings-manager.d.ts.map +0 -1
  184. package/dist/core/settings-manager.js +0 -702
  185. package/dist/core/settings-manager.js.map +0 -1
  186. package/dist/core/skills.d.ts +0 -60
  187. package/dist/core/skills.d.ts.map +0 -1
  188. package/dist/core/skills.js +0 -409
  189. package/dist/core/skills.js.map +0 -1
  190. package/dist/core/slash-commands.d.ts +0 -14
  191. package/dist/core/slash-commands.d.ts.map +0 -1
  192. package/dist/core/slash-commands.js +0 -23
  193. package/dist/core/slash-commands.js.map +0 -1
  194. package/dist/core/source-info.d.ts +0 -18
  195. package/dist/core/source-info.d.ts.map +0 -1
  196. package/dist/core/source-info.js +0 -19
  197. package/dist/core/source-info.js.map +0 -1
  198. package/dist/core/system-prompt.d.ts +0 -28
  199. package/dist/core/system-prompt.d.ts.map +0 -1
  200. package/dist/core/system-prompt.js +0 -116
  201. package/dist/core/system-prompt.js.map +0 -1
  202. package/dist/core/timings.d.ts +0 -8
  203. package/dist/core/timings.d.ts.map +0 -1
  204. package/dist/core/timings.js +0 -31
  205. package/dist/core/timings.js.map +0 -1
  206. package/dist/core/tools/bash.d.ts +0 -73
  207. package/dist/core/tools/bash.d.ts.map +0 -1
  208. package/dist/core/tools/bash.js +0 -342
  209. package/dist/core/tools/bash.js.map +0 -1
  210. package/dist/core/tools/edit-diff.d.ts +0 -85
  211. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  212. package/dist/core/tools/edit-diff.js +0 -337
  213. package/dist/core/tools/edit-diff.js.map +0 -1
  214. package/dist/core/tools/edit.d.ts +0 -53
  215. package/dist/core/tools/edit.d.ts.map +0 -1
  216. package/dist/core/tools/edit.js +0 -196
  217. package/dist/core/tools/edit.js.map +0 -1
  218. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  219. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  220. package/dist/core/tools/file-mutation-queue.js +0 -37
  221. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  222. package/dist/core/tools/find.d.ts +0 -46
  223. package/dist/core/tools/find.d.ts.map +0 -1
  224. package/dist/core/tools/find.js +0 -258
  225. package/dist/core/tools/find.js.map +0 -1
  226. package/dist/core/tools/grep.d.ts +0 -56
  227. package/dist/core/tools/grep.d.ts.map +0 -1
  228. package/dist/core/tools/grep.js +0 -293
  229. package/dist/core/tools/grep.js.map +0 -1
  230. package/dist/core/tools/index.d.ts +0 -115
  231. package/dist/core/tools/index.d.ts.map +0 -1
  232. package/dist/core/tools/index.js +0 -86
  233. package/dist/core/tools/index.js.map +0 -1
  234. package/dist/core/tools/ls.d.ts +0 -46
  235. package/dist/core/tools/ls.d.ts.map +0 -1
  236. package/dist/core/tools/ls.js +0 -172
  237. package/dist/core/tools/ls.js.map +0 -1
  238. package/dist/core/tools/path-utils.d.ts +0 -8
  239. package/dist/core/tools/path-utils.d.ts.map +0 -1
  240. package/dist/core/tools/path-utils.js +0 -81
  241. package/dist/core/tools/path-utils.js.map +0 -1
  242. package/dist/core/tools/read.d.ts +0 -46
  243. package/dist/core/tools/read.d.ts.map +0 -1
  244. package/dist/core/tools/read.js +0 -225
  245. package/dist/core/tools/read.js.map +0 -1
  246. package/dist/core/tools/render-utils.d.ts +0 -21
  247. package/dist/core/tools/render-utils.d.ts.map +0 -1
  248. package/dist/core/tools/render-utils.js +0 -49
  249. package/dist/core/tools/render-utils.js.map +0 -1
  250. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  251. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  252. package/dist/core/tools/tool-definition-wrapper.js +0 -32
  253. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  254. package/dist/core/tools/truncate.d.ts +0 -70
  255. package/dist/core/tools/truncate.d.ts.map +0 -1
  256. package/dist/core/tools/truncate.js +0 -205
  257. package/dist/core/tools/truncate.js.map +0 -1
  258. package/dist/core/tools/write.d.ts +0 -35
  259. package/dist/core/tools/write.d.ts.map +0 -1
  260. package/dist/core/tools/write.js +0 -216
  261. package/dist/core/tools/write.js.map +0 -1
  262. package/dist/index.d.ts +0 -28
  263. package/dist/index.d.ts.map +0 -1
  264. package/dist/index.js +0 -43
  265. package/dist/index.js.map +0 -1
  266. package/dist/lib/config.js +0 -22
  267. package/dist/lib/detect.js +0 -94
  268. package/dist/lib/display.js +0 -182
  269. package/dist/main.d.ts +0 -8
  270. package/dist/main.d.ts.map +0 -1
  271. package/dist/main.js +0 -806
  272. package/dist/main.js.map +0 -1
  273. package/dist/migrations.d.ts +0 -33
  274. package/dist/migrations.d.ts.map +0 -1
  275. package/dist/migrations.js +0 -261
  276. package/dist/migrations.js.map +0 -1
  277. package/dist/modes/index.d.ts +0 -9
  278. package/dist/modes/index.d.ts.map +0 -1
  279. package/dist/modes/index.js +0 -8
  280. package/dist/modes/index.js.map +0 -1
  281. package/dist/modes/interactive/components/armin.d.ts +0 -34
  282. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  283. package/dist/modes/interactive/components/armin.js +0 -333
  284. package/dist/modes/interactive/components/armin.js.map +0 -1
  285. package/dist/modes/interactive/components/assistant-message.d.ts +0 -18
  286. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  287. package/dist/modes/interactive/components/assistant-message.js +0 -107
  288. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  289. package/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  290. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  291. package/dist/modes/interactive/components/bash-execution.js +0 -175
  292. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  293. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  294. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  295. package/dist/modes/interactive/components/bordered-loader.js +0 -51
  296. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  297. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  298. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  299. package/dist/modes/interactive/components/branch-summary-message.js +0 -44
  300. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  301. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  302. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  303. package/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  304. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  305. package/dist/modes/interactive/components/config-selector.d.ts +0 -71
  306. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  307. package/dist/modes/interactive/components/config-selector.js +0 -479
  308. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  309. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  310. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  311. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  312. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  313. package/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  314. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  315. package/dist/modes/interactive/components/custom-editor.js +0 -70
  316. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  317. package/dist/modes/interactive/components/custom-message.d.ts +0 -20
  318. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  319. package/dist/modes/interactive/components/custom-message.js +0 -79
  320. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  321. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  322. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  323. package/dist/modes/interactive/components/daxnuts.js +0 -140
  324. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  325. package/dist/modes/interactive/components/diff.d.ts +0 -12
  326. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  327. package/dist/modes/interactive/components/diff.js +0 -133
  328. package/dist/modes/interactive/components/diff.js.map +0 -1
  329. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  330. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  331. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  332. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  333. package/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  334. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  335. package/dist/modes/interactive/components/extension-editor.js +0 -111
  336. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  337. package/dist/modes/interactive/components/extension-input.d.ts +0 -23
  338. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  339. package/dist/modes/interactive/components/extension-input.js +0 -61
  340. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  341. package/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  342. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  343. package/dist/modes/interactive/components/extension-selector.js +0 -78
  344. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  345. package/dist/modes/interactive/components/footer.d.ts +0 -27
  346. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  347. package/dist/modes/interactive/components/footer.js +0 -201
  348. package/dist/modes/interactive/components/footer.js.map +0 -1
  349. package/dist/modes/interactive/components/index.d.ts +0 -32
  350. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  351. package/dist/modes/interactive/components/index.js +0 -33
  352. package/dist/modes/interactive/components/index.js.map +0 -1
  353. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  354. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  355. package/dist/modes/interactive/components/keybinding-hints.js +0 -22
  356. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  357. package/dist/modes/interactive/components/login-dialog.d.ts +0 -42
  358. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  359. package/dist/modes/interactive/components/login-dialog.js +0 -145
  360. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  361. package/dist/modes/interactive/components/model-selector.d.ts +0 -47
  362. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  363. package/dist/modes/interactive/components/model-selector.js +0 -275
  364. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  365. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  366. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  367. package/dist/modes/interactive/components/oauth-selector.js +0 -97
  368. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  369. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  370. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  371. package/dist/modes/interactive/components/scoped-models-selector.js +0 -275
  372. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  373. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  374. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  375. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  376. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  377. package/dist/modes/interactive/components/session-selector.d.ts +0 -95
  378. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  379. package/dist/modes/interactive/components/session-selector.js +0 -848
  380. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  381. package/dist/modes/interactive/components/settings-selector.d.ts +0 -58
  382. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  383. package/dist/modes/interactive/components/settings-selector.js +0 -301
  384. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  385. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  386. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  387. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  388. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  389. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  390. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  391. package/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  392. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  393. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  394. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  395. package/dist/modes/interactive/components/theme-selector.js +0 -50
  396. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  397. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  398. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  399. package/dist/modes/interactive/components/thinking-selector.js +0 -51
  400. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  401. package/dist/modes/interactive/components/tool-execution.d.ts +0 -58
  402. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  403. package/dist/modes/interactive/components/tool-execution.js +0 -274
  404. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  405. package/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  406. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  407. package/dist/modes/interactive/components/tree-selector.js +0 -1084
  408. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  409. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  410. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  411. package/dist/modes/interactive/components/user-message-selector.js +0 -113
  412. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  413. package/dist/modes/interactive/components/user-message.d.ts +0 -9
  414. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  415. package/dist/modes/interactive/components/user-message.js +0 -28
  416. package/dist/modes/interactive/components/user-message.js.map +0 -1
  417. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  418. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  419. package/dist/modes/interactive/components/visual-truncate.js +0 -33
  420. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  421. package/dist/modes/interactive/interactive-mode.d.ts +0 -318
  422. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  423. package/dist/modes/interactive/interactive-mode.js +0 -3907
  424. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  425. package/dist/modes/interactive/theme/dark.json +0 -85
  426. package/dist/modes/interactive/theme/light.json +0 -84
  427. package/dist/modes/interactive/theme/theme-schema.json +0 -335
  428. package/dist/modes/interactive/theme/theme.d.ts +0 -81
  429. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  430. package/dist/modes/interactive/theme/theme.js +0 -970
  431. package/dist/modes/interactive/theme/theme.js.map +0 -1
  432. package/dist/modes/print-mode.d.ts +0 -28
  433. package/dist/modes/print-mode.d.ts.map +0 -1
  434. package/dist/modes/print-mode.js +0 -108
  435. package/dist/modes/print-mode.js.map +0 -1
  436. package/dist/modes/rpc/jsonl.d.ts +0 -17
  437. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  438. package/dist/modes/rpc/jsonl.js +0 -49
  439. package/dist/modes/rpc/jsonl.js.map +0 -1
  440. package/dist/modes/rpc/rpc-client.d.ts +0 -217
  441. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  442. package/dist/modes/rpc/rpc-client.js +0 -401
  443. package/dist/modes/rpc/rpc-client.js.map +0 -1
  444. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  445. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  446. package/dist/modes/rpc/rpc-mode.js +0 -542
  447. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  448. package/dist/modes/rpc/rpc-types.d.ts +0 -408
  449. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  450. package/dist/modes/rpc/rpc-types.js +0 -8
  451. package/dist/modes/rpc/rpc-types.js.map +0 -1
  452. package/dist/utils/changelog.d.ts +0 -21
  453. package/dist/utils/changelog.d.ts.map +0 -1
  454. package/dist/utils/changelog.js +0 -87
  455. package/dist/utils/changelog.js.map +0 -1
  456. package/dist/utils/child-process.d.ts +0 -11
  457. package/dist/utils/child-process.d.ts.map +0 -1
  458. package/dist/utils/child-process.js +0 -78
  459. package/dist/utils/child-process.js.map +0 -1
  460. package/dist/utils/clipboard-image.d.ts +0 -11
  461. package/dist/utils/clipboard-image.d.ts.map +0 -1
  462. package/dist/utils/clipboard-image.js +0 -245
  463. package/dist/utils/clipboard-image.js.map +0 -1
  464. package/dist/utils/clipboard-native.d.ts +0 -8
  465. package/dist/utils/clipboard-native.d.ts.map +0 -1
  466. package/dist/utils/clipboard-native.js +0 -14
  467. package/dist/utils/clipboard-native.js.map +0 -1
  468. package/dist/utils/clipboard.d.ts +0 -2
  469. package/dist/utils/clipboard.d.ts.map +0 -1
  470. package/dist/utils/clipboard.js +0 -78
  471. package/dist/utils/clipboard.js.map +0 -1
  472. package/dist/utils/exif-orientation.d.ts +0 -5
  473. package/dist/utils/exif-orientation.d.ts.map +0 -1
  474. package/dist/utils/exif-orientation.js +0 -158
  475. package/dist/utils/exif-orientation.js.map +0 -1
  476. package/dist/utils/frontmatter.d.ts +0 -8
  477. package/dist/utils/frontmatter.d.ts.map +0 -1
  478. package/dist/utils/frontmatter.js +0 -26
  479. package/dist/utils/frontmatter.js.map +0 -1
  480. package/dist/utils/git.d.ts +0 -26
  481. package/dist/utils/git.d.ts.map +0 -1
  482. package/dist/utils/git.js +0 -163
  483. package/dist/utils/git.js.map +0 -1
  484. package/dist/utils/image-convert.d.ts +0 -9
  485. package/dist/utils/image-convert.d.ts.map +0 -1
  486. package/dist/utils/image-convert.js +0 -39
  487. package/dist/utils/image-convert.js.map +0 -1
  488. package/dist/utils/image-resize.d.ts +0 -36
  489. package/dist/utils/image-resize.d.ts.map +0 -1
  490. package/dist/utils/image-resize.js +0 -137
  491. package/dist/utils/image-resize.js.map +0 -1
  492. package/dist/utils/mime.d.ts +0 -2
  493. package/dist/utils/mime.d.ts.map +0 -1
  494. package/dist/utils/mime.js +0 -26
  495. package/dist/utils/mime.js.map +0 -1
  496. package/dist/utils/photon.d.ts +0 -21
  497. package/dist/utils/photon.d.ts.map +0 -1
  498. package/dist/utils/photon.js +0 -121
  499. package/dist/utils/photon.js.map +0 -1
  500. package/dist/utils/shell.d.ts +0 -26
  501. package/dist/utils/shell.d.ts.map +0 -1
  502. package/dist/utils/shell.js +0 -186
  503. package/dist/utils/shell.js.map +0 -1
  504. package/dist/utils/sleep.d.ts +0 -5
  505. package/dist/utils/sleep.d.ts.map +0 -1
  506. package/dist/utils/sleep.js +0 -17
  507. package/dist/utils/sleep.js.map +0 -1
  508. package/dist/utils/tools-manager.d.ts +0 -3
  509. package/dist/utils/tools-manager.d.ts.map +0 -1
  510. package/dist/utils/tools-manager.js +0 -252
  511. package/dist/utils/tools-manager.js.map +0 -1
  512. package/dist/welcome/about.js +0 -50
  513. package/dist/welcome/auth.js +0 -126
  514. package/dist/welcome/intro.js +0 -90
  515. package/dist/welcome/qa.js +0 -131
  516. package/scripts/install-gum.sh +0 -141
@@ -1,583 +0,0 @@
1
- /**
2
- * Model registry - manages built-in and custom models, provides API key resolution.
3
- */
4
- import { getModels, getProviders, registerApiProvider, resetApiProviders, } from "@mariozechner/pi-ai";
5
- import { registerOAuthProvider, resetOAuthProviders } from "@mariozechner/pi-ai/oauth";
6
- import { Type } from "@sinclair/typebox";
7
- import AjvModule from "ajv";
8
- import { existsSync, readFileSync } from "fs";
9
- import { join } from "path";
10
- import { getAgentDir } from "../config.js";
11
- import { clearConfigValueCache, resolveConfigValueOrThrow, resolveConfigValueUncached, resolveHeadersOrThrow, } from "./resolve-config-value.js";
12
- const Ajv = AjvModule.default || AjvModule;
13
- const ajv = new Ajv();
14
- // Schema for OpenRouter routing preferences
15
- const OpenRouterRoutingSchema = Type.Object({
16
- only: Type.Optional(Type.Array(Type.String())),
17
- order: Type.Optional(Type.Array(Type.String())),
18
- });
19
- // Schema for Vercel AI Gateway routing preferences
20
- const VercelGatewayRoutingSchema = Type.Object({
21
- only: Type.Optional(Type.Array(Type.String())),
22
- order: Type.Optional(Type.Array(Type.String())),
23
- });
24
- // Schema for OpenAI compatibility settings
25
- const ReasoningEffortMapSchema = Type.Object({
26
- minimal: Type.Optional(Type.String()),
27
- low: Type.Optional(Type.String()),
28
- medium: Type.Optional(Type.String()),
29
- high: Type.Optional(Type.String()),
30
- xhigh: Type.Optional(Type.String()),
31
- });
32
- const OpenAICompletionsCompatSchema = Type.Object({
33
- supportsStore: Type.Optional(Type.Boolean()),
34
- supportsDeveloperRole: Type.Optional(Type.Boolean()),
35
- supportsReasoningEffort: Type.Optional(Type.Boolean()),
36
- reasoningEffortMap: Type.Optional(ReasoningEffortMapSchema),
37
- supportsUsageInStreaming: Type.Optional(Type.Boolean()),
38
- maxTokensField: Type.Optional(Type.Union([Type.Literal("max_completion_tokens"), Type.Literal("max_tokens")])),
39
- requiresToolResultName: Type.Optional(Type.Boolean()),
40
- requiresAssistantAfterToolResult: Type.Optional(Type.Boolean()),
41
- requiresThinkingAsText: Type.Optional(Type.Boolean()),
42
- thinkingFormat: Type.Optional(Type.Union([
43
- Type.Literal("openai"),
44
- Type.Literal("openrouter"),
45
- Type.Literal("zai"),
46
- Type.Literal("qwen"),
47
- Type.Literal("qwen-chat-template"),
48
- ])),
49
- openRouterRouting: Type.Optional(OpenRouterRoutingSchema),
50
- vercelGatewayRouting: Type.Optional(VercelGatewayRoutingSchema),
51
- supportsStrictMode: Type.Optional(Type.Boolean()),
52
- });
53
- const OpenAIResponsesCompatSchema = Type.Object({});
54
- const OpenAICompatSchema = Type.Union([OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema]);
55
- // Schema for custom model definition
56
- // Most fields are optional with sensible defaults for local models (Ollama, LM Studio, etc.)
57
- const ModelDefinitionSchema = Type.Object({
58
- id: Type.String({ minLength: 1 }),
59
- name: Type.Optional(Type.String({ minLength: 1 })),
60
- api: Type.Optional(Type.String({ minLength: 1 })),
61
- baseUrl: Type.Optional(Type.String({ minLength: 1 })),
62
- reasoning: Type.Optional(Type.Boolean()),
63
- input: Type.Optional(Type.Array(Type.Union([Type.Literal("text"), Type.Literal("image")]))),
64
- cost: Type.Optional(Type.Object({
65
- input: Type.Number(),
66
- output: Type.Number(),
67
- cacheRead: Type.Number(),
68
- cacheWrite: Type.Number(),
69
- })),
70
- contextWindow: Type.Optional(Type.Number()),
71
- maxTokens: Type.Optional(Type.Number()),
72
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
73
- compat: Type.Optional(OpenAICompatSchema),
74
- });
75
- // Schema for per-model overrides (all fields optional, merged with built-in model)
76
- const ModelOverrideSchema = Type.Object({
77
- name: Type.Optional(Type.String({ minLength: 1 })),
78
- reasoning: Type.Optional(Type.Boolean()),
79
- input: Type.Optional(Type.Array(Type.Union([Type.Literal("text"), Type.Literal("image")]))),
80
- cost: Type.Optional(Type.Object({
81
- input: Type.Optional(Type.Number()),
82
- output: Type.Optional(Type.Number()),
83
- cacheRead: Type.Optional(Type.Number()),
84
- cacheWrite: Type.Optional(Type.Number()),
85
- })),
86
- contextWindow: Type.Optional(Type.Number()),
87
- maxTokens: Type.Optional(Type.Number()),
88
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
89
- compat: Type.Optional(OpenAICompatSchema),
90
- });
91
- const ProviderConfigSchema = Type.Object({
92
- baseUrl: Type.Optional(Type.String({ minLength: 1 })),
93
- apiKey: Type.Optional(Type.String({ minLength: 1 })),
94
- api: Type.Optional(Type.String({ minLength: 1 })),
95
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
96
- compat: Type.Optional(OpenAICompatSchema),
97
- authHeader: Type.Optional(Type.Boolean()),
98
- models: Type.Optional(Type.Array(ModelDefinitionSchema)),
99
- modelOverrides: Type.Optional(Type.Record(Type.String(), ModelOverrideSchema)),
100
- });
101
- const ModelsConfigSchema = Type.Object({
102
- providers: Type.Record(Type.String(), ProviderConfigSchema),
103
- });
104
- ajv.addSchema(ModelsConfigSchema, "ModelsConfig");
105
- function emptyCustomModelsResult(error) {
106
- return { models: [], overrides: new Map(), modelOverrides: new Map(), error };
107
- }
108
- function mergeCompat(baseCompat, overrideCompat) {
109
- if (!overrideCompat)
110
- return baseCompat;
111
- const base = baseCompat;
112
- const override = overrideCompat;
113
- const merged = { ...base, ...override };
114
- const baseCompletions = base;
115
- const overrideCompletions = override;
116
- const mergedCompletions = merged;
117
- if (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {
118
- mergedCompletions.openRouterRouting = {
119
- ...baseCompletions?.openRouterRouting,
120
- ...overrideCompletions.openRouterRouting,
121
- };
122
- }
123
- if (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {
124
- mergedCompletions.vercelGatewayRouting = {
125
- ...baseCompletions?.vercelGatewayRouting,
126
- ...overrideCompletions.vercelGatewayRouting,
127
- };
128
- }
129
- return merged;
130
- }
131
- /**
132
- * Deep merge a model override into a model.
133
- * Handles nested objects (cost, compat) by merging rather than replacing.
134
- */
135
- function applyModelOverride(model, override) {
136
- const result = { ...model };
137
- // Simple field overrides
138
- if (override.name !== undefined)
139
- result.name = override.name;
140
- if (override.reasoning !== undefined)
141
- result.reasoning = override.reasoning;
142
- if (override.input !== undefined)
143
- result.input = override.input;
144
- if (override.contextWindow !== undefined)
145
- result.contextWindow = override.contextWindow;
146
- if (override.maxTokens !== undefined)
147
- result.maxTokens = override.maxTokens;
148
- // Merge cost (partial override)
149
- if (override.cost) {
150
- result.cost = {
151
- input: override.cost.input ?? model.cost.input,
152
- output: override.cost.output ?? model.cost.output,
153
- cacheRead: override.cost.cacheRead ?? model.cost.cacheRead,
154
- cacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,
155
- };
156
- }
157
- // Deep merge compat
158
- result.compat = mergeCompat(model.compat, override.compat);
159
- return result;
160
- }
161
- /** Clear the config value command cache. Exported for testing. */
162
- export const clearApiKeyCache = clearConfigValueCache;
163
- /**
164
- * Model registry - loads and manages models, resolves API keys via AuthStorage.
165
- */
166
- export class ModelRegistry {
167
- authStorage;
168
- modelsJsonPath;
169
- models = [];
170
- providerRequestConfigs = new Map();
171
- modelRequestHeaders = new Map();
172
- registeredProviders = new Map();
173
- loadError = undefined;
174
- constructor(authStorage, modelsJsonPath) {
175
- this.authStorage = authStorage;
176
- this.modelsJsonPath = modelsJsonPath;
177
- this.loadModels();
178
- }
179
- static create(authStorage, modelsJsonPath = join(getAgentDir(), "models.json")) {
180
- return new ModelRegistry(authStorage, modelsJsonPath);
181
- }
182
- static inMemory(authStorage) {
183
- return new ModelRegistry(authStorage, undefined);
184
- }
185
- /**
186
- * Reload models from disk (built-in + custom from models.json).
187
- */
188
- refresh() {
189
- this.providerRequestConfigs.clear();
190
- this.modelRequestHeaders.clear();
191
- this.loadError = undefined;
192
- // Ensure dynamic API/OAuth registrations are rebuilt from current provider state.
193
- resetApiProviders();
194
- resetOAuthProviders();
195
- this.loadModels();
196
- for (const [providerName, config] of this.registeredProviders.entries()) {
197
- this.applyProviderConfig(providerName, config);
198
- }
199
- }
200
- /**
201
- * Get any error from loading models.json (undefined if no error).
202
- */
203
- getError() {
204
- return this.loadError;
205
- }
206
- loadModels() {
207
- // Load custom models and overrides from models.json
208
- const { models: customModels, overrides, modelOverrides, error, } = this.modelsJsonPath ? this.loadCustomModels(this.modelsJsonPath) : emptyCustomModelsResult();
209
- if (error) {
210
- this.loadError = error;
211
- // Keep built-in models even if custom models failed to load
212
- }
213
- const builtInModels = this.loadBuiltInModels(overrides, modelOverrides);
214
- let combined = this.mergeCustomModels(builtInModels, customModels);
215
- // Let OAuth providers modify their models (e.g., update baseUrl)
216
- for (const oauthProvider of this.authStorage.getOAuthProviders()) {
217
- const cred = this.authStorage.get(oauthProvider.id);
218
- if (cred?.type === "oauth" && oauthProvider.modifyModels) {
219
- combined = oauthProvider.modifyModels(combined, cred);
220
- }
221
- }
222
- this.models = combined;
223
- }
224
- /** Load built-in models and apply provider/model overrides */
225
- loadBuiltInModels(overrides, modelOverrides) {
226
- return getProviders().flatMap((provider) => {
227
- const models = getModels(provider);
228
- const providerOverride = overrides.get(provider);
229
- const perModelOverrides = modelOverrides.get(provider);
230
- return models.map((m) => {
231
- let model = m;
232
- // Apply provider-level baseUrl/headers/compat override
233
- if (providerOverride) {
234
- model = {
235
- ...model,
236
- baseUrl: providerOverride.baseUrl ?? model.baseUrl,
237
- compat: mergeCompat(model.compat, providerOverride.compat),
238
- };
239
- }
240
- // Apply per-model override
241
- const modelOverride = perModelOverrides?.get(m.id);
242
- if (modelOverride) {
243
- model = applyModelOverride(model, modelOverride);
244
- }
245
- return model;
246
- });
247
- });
248
- }
249
- /** Merge custom models into built-in list by provider+id (custom wins on conflicts). */
250
- mergeCustomModels(builtInModels, customModels) {
251
- const merged = [...builtInModels];
252
- for (const customModel of customModels) {
253
- const existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);
254
- if (existingIndex >= 0) {
255
- merged[existingIndex] = customModel;
256
- }
257
- else {
258
- merged.push(customModel);
259
- }
260
- }
261
- return merged;
262
- }
263
- loadCustomModels(modelsJsonPath) {
264
- if (!existsSync(modelsJsonPath)) {
265
- return emptyCustomModelsResult();
266
- }
267
- try {
268
- const content = readFileSync(modelsJsonPath, "utf-8");
269
- const config = JSON.parse(content);
270
- // Validate schema
271
- const validate = ajv.getSchema("ModelsConfig");
272
- if (!validate(config)) {
273
- const errors = validate.errors?.map((e) => ` - ${e.instancePath || "root"}: ${e.message}`).join("\n") ||
274
- "Unknown schema error";
275
- return emptyCustomModelsResult(`Invalid models.json schema:\n${errors}\n\nFile: ${modelsJsonPath}`);
276
- }
277
- // Additional validation
278
- this.validateConfig(config);
279
- const overrides = new Map();
280
- const modelOverrides = new Map();
281
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
282
- if (providerConfig.baseUrl || providerConfig.compat) {
283
- overrides.set(providerName, {
284
- baseUrl: providerConfig.baseUrl,
285
- compat: providerConfig.compat,
286
- });
287
- }
288
- this.storeProviderRequestConfig(providerName, providerConfig);
289
- if (providerConfig.modelOverrides) {
290
- modelOverrides.set(providerName, new Map(Object.entries(providerConfig.modelOverrides)));
291
- for (const [modelId, modelOverride] of Object.entries(providerConfig.modelOverrides)) {
292
- this.storeModelHeaders(providerName, modelId, modelOverride.headers);
293
- }
294
- }
295
- }
296
- return { models: this.parseModels(config), overrides, modelOverrides, error: undefined };
297
- }
298
- catch (error) {
299
- if (error instanceof SyntaxError) {
300
- return emptyCustomModelsResult(`Failed to parse models.json: ${error.message}\n\nFile: ${modelsJsonPath}`);
301
- }
302
- return emptyCustomModelsResult(`Failed to load models.json: ${error instanceof Error ? error.message : error}\n\nFile: ${modelsJsonPath}`);
303
- }
304
- }
305
- validateConfig(config) {
306
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
307
- const hasProviderApi = !!providerConfig.api;
308
- const models = providerConfig.models ?? [];
309
- const hasModelOverrides = providerConfig.modelOverrides && Object.keys(providerConfig.modelOverrides).length > 0;
310
- if (models.length === 0) {
311
- // Override-only config: needs baseUrl, compat, modelOverrides, or some combination.
312
- if (!providerConfig.baseUrl && !providerConfig.compat && !hasModelOverrides) {
313
- throw new Error(`Provider ${providerName}: must specify "baseUrl", "compat", "modelOverrides", or "models".`);
314
- }
315
- }
316
- else {
317
- // Custom models are merged into provider models and require endpoint + auth.
318
- if (!providerConfig.baseUrl) {
319
- throw new Error(`Provider ${providerName}: "baseUrl" is required when defining custom models.`);
320
- }
321
- if (!providerConfig.apiKey) {
322
- throw new Error(`Provider ${providerName}: "apiKey" is required when defining custom models.`);
323
- }
324
- }
325
- for (const modelDef of models) {
326
- const hasModelApi = !!modelDef.api;
327
- if (!hasProviderApi && !hasModelApi) {
328
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: no "api" specified. Set at provider or model level.`);
329
- }
330
- if (!modelDef.id)
331
- throw new Error(`Provider ${providerName}: model missing "id"`);
332
- // Validate contextWindow/maxTokens only if provided (they have defaults)
333
- if (modelDef.contextWindow !== undefined && modelDef.contextWindow <= 0)
334
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: invalid contextWindow`);
335
- if (modelDef.maxTokens !== undefined && modelDef.maxTokens <= 0)
336
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: invalid maxTokens`);
337
- }
338
- }
339
- }
340
- parseModels(config) {
341
- const models = [];
342
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
343
- const modelDefs = providerConfig.models ?? [];
344
- if (modelDefs.length === 0)
345
- continue; // Override-only, no custom models
346
- for (const modelDef of modelDefs) {
347
- const api = modelDef.api || providerConfig.api;
348
- if (!api)
349
- continue;
350
- const compat = mergeCompat(providerConfig.compat, modelDef.compat);
351
- this.storeModelHeaders(providerName, modelDef.id, modelDef.headers);
352
- // Provider baseUrl is required when custom models are defined.
353
- // Individual models can override it with modelDef.baseUrl.
354
- const defaultCost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
355
- models.push({
356
- id: modelDef.id,
357
- name: modelDef.name ?? modelDef.id,
358
- api: api,
359
- provider: providerName,
360
- baseUrl: modelDef.baseUrl ?? providerConfig.baseUrl,
361
- reasoning: modelDef.reasoning ?? false,
362
- input: (modelDef.input ?? ["text"]),
363
- cost: modelDef.cost ?? defaultCost,
364
- contextWindow: modelDef.contextWindow ?? 128000,
365
- maxTokens: modelDef.maxTokens ?? 16384,
366
- headers: undefined,
367
- compat,
368
- });
369
- }
370
- }
371
- return models;
372
- }
373
- /**
374
- * Get all models (built-in + custom).
375
- * If models.json had errors, returns only built-in models.
376
- */
377
- getAll() {
378
- return this.models;
379
- }
380
- /**
381
- * Get only models that have auth configured.
382
- * This is a fast check that doesn't refresh OAuth tokens.
383
- */
384
- getAvailable() {
385
- return this.models.filter((m) => this.hasConfiguredAuth(m));
386
- }
387
- /**
388
- * Find a model by provider and ID.
389
- */
390
- find(provider, modelId) {
391
- return this.models.find((m) => m.provider === provider && m.id === modelId);
392
- }
393
- /**
394
- * Get API key for a model.
395
- */
396
- hasConfiguredAuth(model) {
397
- return (this.authStorage.hasAuth(model.provider) ||
398
- this.providerRequestConfigs.get(model.provider)?.apiKey !== undefined);
399
- }
400
- getModelRequestKey(provider, modelId) {
401
- return `${provider}:${modelId}`;
402
- }
403
- storeProviderRequestConfig(providerName, config) {
404
- if (!config.apiKey && !config.headers && !config.authHeader) {
405
- return;
406
- }
407
- this.providerRequestConfigs.set(providerName, {
408
- apiKey: config.apiKey,
409
- headers: config.headers,
410
- authHeader: config.authHeader,
411
- });
412
- }
413
- storeModelHeaders(providerName, modelId, headers) {
414
- const key = this.getModelRequestKey(providerName, modelId);
415
- if (!headers || Object.keys(headers).length === 0) {
416
- this.modelRequestHeaders.delete(key);
417
- return;
418
- }
419
- this.modelRequestHeaders.set(key, headers);
420
- }
421
- /**
422
- * Get API key and request headers for a model.
423
- */
424
- async getApiKeyAndHeaders(model) {
425
- try {
426
- const providerConfig = this.providerRequestConfigs.get(model.provider);
427
- const apiKeyFromAuthStorage = await this.authStorage.getApiKey(model.provider, { includeFallback: false });
428
- const apiKey = apiKeyFromAuthStorage ??
429
- (providerConfig?.apiKey
430
- ? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider "${model.provider}"`)
431
- : undefined);
432
- const providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider "${model.provider}"`);
433
- const modelHeaders = resolveHeadersOrThrow(this.modelRequestHeaders.get(this.getModelRequestKey(model.provider, model.id)), `model "${model.provider}/${model.id}"`);
434
- let headers = model.headers || providerHeaders || modelHeaders
435
- ? { ...model.headers, ...providerHeaders, ...modelHeaders }
436
- : undefined;
437
- if (providerConfig?.authHeader) {
438
- if (!apiKey) {
439
- return { ok: false, error: `No API key found for "${model.provider}"` };
440
- }
441
- headers = { ...headers, Authorization: `Bearer ${apiKey}` };
442
- }
443
- return {
444
- ok: true,
445
- apiKey,
446
- headers: headers && Object.keys(headers).length > 0 ? headers : undefined,
447
- };
448
- }
449
- catch (error) {
450
- return {
451
- ok: false,
452
- error: error instanceof Error ? error.message : String(error),
453
- };
454
- }
455
- }
456
- /**
457
- * Get API key for a provider.
458
- */
459
- async getApiKeyForProvider(provider) {
460
- const apiKey = await this.authStorage.getApiKey(provider, { includeFallback: false });
461
- if (apiKey !== undefined) {
462
- return apiKey;
463
- }
464
- const providerApiKey = this.providerRequestConfigs.get(provider)?.apiKey;
465
- return providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;
466
- }
467
- /**
468
- * Check if a model is using OAuth credentials (subscription).
469
- */
470
- isUsingOAuth(model) {
471
- const cred = this.authStorage.get(model.provider);
472
- return cred?.type === "oauth";
473
- }
474
- /**
475
- * Register a provider dynamically (from extensions).
476
- *
477
- * If provider has models: replaces all existing models for this provider.
478
- * If provider has only baseUrl/headers: overrides existing models' URLs.
479
- * If provider has oauth: registers OAuth provider for /login support.
480
- */
481
- registerProvider(providerName, config) {
482
- this.validateProviderConfig(providerName, config);
483
- this.applyProviderConfig(providerName, config);
484
- this.registeredProviders.set(providerName, config);
485
- }
486
- /**
487
- * Unregister a previously registered provider.
488
- *
489
- * Removes the provider from the registry and reloads models from disk so that
490
- * built-in models overridden by this provider are restored to their original state.
491
- * Also resets dynamic OAuth and API stream registrations before reapplying
492
- * remaining dynamic providers.
493
- * Has no effect if the provider was never registered.
494
- */
495
- unregisterProvider(providerName) {
496
- if (!this.registeredProviders.has(providerName))
497
- return;
498
- this.registeredProviders.delete(providerName);
499
- this.refresh();
500
- }
501
- validateProviderConfig(providerName, config) {
502
- if (config.streamSimple && !config.api) {
503
- throw new Error(`Provider ${providerName}: "api" is required when registering streamSimple.`);
504
- }
505
- if (!config.models || config.models.length === 0) {
506
- return;
507
- }
508
- if (!config.baseUrl) {
509
- throw new Error(`Provider ${providerName}: "baseUrl" is required when defining models.`);
510
- }
511
- if (!config.apiKey && !config.oauth) {
512
- throw new Error(`Provider ${providerName}: "apiKey" or "oauth" is required when defining models.`);
513
- }
514
- for (const modelDef of config.models) {
515
- const api = modelDef.api || config.api;
516
- if (!api) {
517
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: no "api" specified.`);
518
- }
519
- }
520
- }
521
- applyProviderConfig(providerName, config) {
522
- // Register OAuth provider if provided
523
- if (config.oauth) {
524
- // Ensure the OAuth provider ID matches the provider name
525
- const oauthProvider = {
526
- ...config.oauth,
527
- id: providerName,
528
- };
529
- registerOAuthProvider(oauthProvider);
530
- }
531
- if (config.streamSimple) {
532
- const streamSimple = config.streamSimple;
533
- registerApiProvider({
534
- api: config.api,
535
- stream: (model, context, options) => streamSimple(model, context, options),
536
- streamSimple,
537
- }, `provider:${providerName}`);
538
- }
539
- this.storeProviderRequestConfig(providerName, config);
540
- if (config.models && config.models.length > 0) {
541
- // Full replacement: remove existing models for this provider
542
- this.models = this.models.filter((m) => m.provider !== providerName);
543
- // Parse and add new models
544
- for (const modelDef of config.models) {
545
- const api = modelDef.api || config.api;
546
- this.storeModelHeaders(providerName, modelDef.id, modelDef.headers);
547
- this.models.push({
548
- id: modelDef.id,
549
- name: modelDef.name,
550
- api: api,
551
- provider: providerName,
552
- baseUrl: config.baseUrl,
553
- reasoning: modelDef.reasoning,
554
- input: modelDef.input,
555
- cost: modelDef.cost,
556
- contextWindow: modelDef.contextWindow,
557
- maxTokens: modelDef.maxTokens,
558
- headers: undefined,
559
- compat: modelDef.compat,
560
- });
561
- }
562
- // Apply OAuth modifyModels if credentials exist (e.g., to update baseUrl)
563
- if (config.oauth?.modifyModels) {
564
- const cred = this.authStorage.get(providerName);
565
- if (cred?.type === "oauth") {
566
- this.models = config.oauth.modifyModels(this.models, cred);
567
- }
568
- }
569
- }
570
- else if (config.baseUrl || config.headers) {
571
- // Override-only: update baseUrl for existing models. Request headers are resolved per request.
572
- this.models = this.models.map((m) => {
573
- if (m.provider !== providerName)
574
- return m;
575
- return {
576
- ...m,
577
- baseUrl: config.baseUrl ?? m.baseUrl,
578
- };
579
- });
580
- }
581
- }
582
- }
583
- //# sourceMappingURL=model-registry.js.map