@eminent337/aery 0.1.62 → 0.1.64

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 (714) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/README.md +0 -0
  3. package/docs/compaction.md +0 -0
  4. package/docs/custom-provider.md +1 -1
  5. package/docs/development.md +0 -0
  6. package/docs/docs.json +0 -0
  7. package/docs/extensions.md +18 -18
  8. package/docs/images/doom-extension.png +0 -0
  9. package/docs/images/exy.png +0 -0
  10. package/docs/images/interactive-mode.png +0 -0
  11. package/docs/images/tree-view.png +0 -0
  12. package/docs/index.md +5 -5
  13. package/docs/json.md +1 -1
  14. package/docs/keybindings.md +2 -2
  15. package/docs/models.md +2 -2
  16. package/docs/packages.md +13 -13
  17. package/docs/prompt-templates.md +0 -0
  18. package/docs/providers.md +5 -5
  19. package/docs/quickstart.md +19 -19
  20. package/docs/rpc.md +3 -3
  21. package/docs/sdk.md +1 -1
  22. package/docs/session-format.md +3 -3
  23. package/docs/sessions.md +10 -10
  24. package/docs/settings.md +7 -5
  25. package/docs/shell-aliases.md +0 -0
  26. package/docs/skills.md +2 -2
  27. package/docs/terminal-setup.md +6 -6
  28. package/docs/termux.md +3 -3
  29. package/docs/themes.md +3 -3
  30. package/docs/tmux.md +1 -1
  31. package/docs/tui.md +2 -2
  32. package/docs/usage.md +33 -33
  33. package/docs/windows.md +0 -0
  34. package/examples/README.md +0 -0
  35. package/examples/extensions/README.md +3 -3
  36. package/examples/extensions/antigravity-image-gen.ts +6 -6
  37. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  38. package/examples/extensions/bash-spawn-hook.ts +1 -1
  39. package/examples/extensions/bookmark.ts +0 -0
  40. package/examples/extensions/border-status-editor.ts +0 -0
  41. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  42. package/examples/extensions/claude-rules.ts +1 -1
  43. package/examples/extensions/commands.ts +1 -1
  44. package/examples/extensions/confirm-destructive.ts +0 -0
  45. package/examples/extensions/custom-compaction.ts +1 -1
  46. package/examples/extensions/custom-footer.ts +0 -0
  47. package/examples/extensions/custom-header.ts +2 -2
  48. package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
  49. package/examples/extensions/custom-provider-anthropic/package-lock.json +0 -0
  50. package/examples/extensions/custom-provider-anthropic/package.json +0 -0
  51. package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
  52. package/examples/extensions/custom-provider-gitlab-duo/package.json +0 -0
  53. package/examples/extensions/custom-provider-gitlab-duo/test.ts +0 -0
  54. package/examples/extensions/custom-provider-qwen-cli/index.ts +1 -1
  55. package/examples/extensions/custom-provider-qwen-cli/package.json +0 -0
  56. package/examples/extensions/dirty-repo-guard.ts +0 -0
  57. package/examples/extensions/doom-overlay/README.md +2 -2
  58. package/examples/extensions/doom-overlay/doom/build/doom.js +0 -0
  59. package/examples/extensions/doom-overlay/doom/build.sh +2 -2
  60. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +0 -0
  61. package/examples/extensions/doom-overlay/doom-component.ts +0 -0
  62. package/examples/extensions/doom-overlay/doom-engine.ts +0 -0
  63. package/examples/extensions/doom-overlay/doom-keys.ts +0 -0
  64. package/examples/extensions/doom-overlay/index.ts +1 -1
  65. package/examples/extensions/doom-overlay/wad-finder.ts +0 -0
  66. package/examples/extensions/dynamic-resources/SKILL.md +0 -0
  67. package/examples/extensions/dynamic-resources/dynamic.json +0 -0
  68. package/examples/extensions/dynamic-resources/dynamic.md +0 -0
  69. package/examples/extensions/dynamic-resources/index.ts +0 -0
  70. package/examples/extensions/dynamic-tools.ts +0 -0
  71. package/examples/extensions/event-bus.ts +0 -0
  72. package/examples/extensions/file-trigger.ts +0 -0
  73. package/examples/extensions/git-checkpoint.ts +0 -0
  74. package/examples/extensions/github-issue-autocomplete.ts +0 -0
  75. package/examples/extensions/handoff.ts +0 -0
  76. package/examples/extensions/hello.ts +0 -0
  77. package/examples/extensions/hidden-thinking-label.ts +1 -1
  78. package/examples/extensions/inline-bash.ts +2 -2
  79. package/examples/extensions/input-transform.ts +3 -3
  80. package/examples/extensions/interactive-shell.ts +1 -1
  81. package/examples/extensions/mac-system-theme.ts +2 -2
  82. package/examples/extensions/message-renderer.ts +0 -0
  83. package/examples/extensions/minimal-mode.ts +1 -1
  84. package/examples/extensions/modal-editor.ts +1 -1
  85. package/examples/extensions/model-status.ts +1 -1
  86. package/examples/extensions/notify.ts +0 -0
  87. package/examples/extensions/overlay-qa-tests.ts +1 -1
  88. package/examples/extensions/overlay-test.ts +1 -1
  89. package/examples/extensions/permission-gate.ts +0 -0
  90. package/examples/extensions/pirate.ts +1 -1
  91. package/examples/extensions/plan-mode/README.md +0 -0
  92. package/examples/extensions/plan-mode/index.ts +0 -0
  93. package/examples/extensions/plan-mode/utils.ts +0 -0
  94. package/examples/extensions/preset.ts +12 -6
  95. package/examples/extensions/prompt-customizer.ts +1 -1
  96. package/examples/extensions/protected-paths.ts +0 -0
  97. package/examples/extensions/provider-payload.ts +1 -1
  98. package/examples/extensions/qna.ts +0 -0
  99. package/examples/extensions/question.ts +0 -0
  100. package/examples/extensions/questionnaire.ts +0 -0
  101. package/examples/extensions/rainbow-editor.ts +1 -1
  102. package/examples/extensions/reload-runtime.ts +0 -0
  103. package/examples/extensions/rpc-demo.ts +1 -1
  104. package/examples/extensions/sandbox/index.ts +8 -8
  105. package/examples/extensions/sandbox/package-lock.json +0 -0
  106. package/examples/extensions/sandbox/package.json +0 -0
  107. package/examples/extensions/send-user-message.ts +0 -0
  108. package/examples/extensions/session-name.ts +0 -0
  109. package/examples/extensions/shutdown-command.ts +5 -5
  110. package/examples/extensions/snake.ts +0 -0
  111. package/examples/extensions/space-invaders.ts +0 -0
  112. package/examples/extensions/ssh.ts +2 -2
  113. package/examples/extensions/status-line.ts +0 -0
  114. package/examples/extensions/structured-output.ts +0 -0
  115. package/examples/extensions/subagent/README.md +13 -13
  116. package/examples/extensions/subagent/agents/planner.md +0 -0
  117. package/examples/extensions/subagent/agents/reviewer.md +0 -0
  118. package/examples/extensions/subagent/agents/scout.md +0 -0
  119. package/examples/extensions/subagent/agents/worker.md +0 -0
  120. package/examples/extensions/subagent/agents.ts +1 -1
  121. package/examples/extensions/subagent/index.ts +5 -5
  122. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -0
  123. package/examples/extensions/subagent/prompts/implement.md +0 -0
  124. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -0
  125. package/examples/extensions/summarize.ts +0 -0
  126. package/examples/extensions/system-prompt-header.ts +0 -0
  127. package/examples/extensions/tic-tac-toe.ts +0 -0
  128. package/examples/extensions/timed-confirm.ts +0 -0
  129. package/examples/extensions/titlebar-spinner.ts +1 -1
  130. package/examples/extensions/todo.ts +0 -0
  131. package/examples/extensions/tool-override.ts +2 -2
  132. package/examples/extensions/tools.ts +1 -1
  133. package/examples/extensions/trigger-compact.ts +0 -0
  134. package/examples/extensions/truncated-tool.ts +1 -1
  135. package/examples/extensions/widget-placement.ts +0 -0
  136. package/examples/extensions/with-deps/index.ts +0 -0
  137. package/examples/extensions/with-deps/package-lock.json +0 -0
  138. package/examples/extensions/with-deps/package.json +0 -0
  139. package/examples/extensions/working-indicator.ts +4 -4
  140. package/examples/extensions/working-message-test.ts +1 -1
  141. package/examples/rpc-extension-ui.ts +0 -0
  142. package/examples/sdk/01-minimal.ts +1 -1
  143. package/examples/sdk/02-custom-model.ts +0 -0
  144. package/examples/sdk/03-custom-prompt.ts +1 -1
  145. package/examples/sdk/04-skills.ts +1 -1
  146. package/examples/sdk/05-tools.ts +0 -0
  147. package/examples/sdk/06-extensions.ts +2 -2
  148. package/examples/sdk/07-context-files.ts +0 -0
  149. package/examples/sdk/08-prompt-templates.ts +1 -1
  150. package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
  151. package/examples/sdk/10-settings.ts +0 -0
  152. package/examples/sdk/11-sessions.ts +0 -0
  153. package/examples/sdk/12-full-control.ts +0 -0
  154. package/examples/sdk/13-session-runtime.ts +0 -0
  155. package/examples/sdk/README.md +1 -1
  156. package/package.json +4 -4
  157. package/dist/bun/cli.d.ts +0 -3
  158. package/dist/bun/cli.d.ts.map +0 -1
  159. package/dist/bun/cli.js +0 -8
  160. package/dist/bun/cli.js.map +0 -1
  161. package/dist/bun/register-bedrock.d.ts +0 -2
  162. package/dist/bun/register-bedrock.d.ts.map +0 -1
  163. package/dist/bun/register-bedrock.js +0 -4
  164. package/dist/bun/register-bedrock.js.map +0 -1
  165. package/dist/bun/restore-sandbox-env.d.ts +0 -13
  166. package/dist/bun/restore-sandbox-env.d.ts.map +0 -1
  167. package/dist/bun/restore-sandbox-env.js +0 -32
  168. package/dist/bun/restore-sandbox-env.js.map +0 -1
  169. package/dist/cli/args.d.ts +0 -53
  170. package/dist/cli/args.d.ts.map +0 -1
  171. package/dist/cli/args.js +0 -329
  172. package/dist/cli/args.js.map +0 -1
  173. package/dist/cli/config-selector.d.ts +0 -14
  174. package/dist/cli/config-selector.d.ts.map +0 -1
  175. package/dist/cli/config-selector.js +0 -31
  176. package/dist/cli/config-selector.js.map +0 -1
  177. package/dist/cli/file-processor.d.ts +0 -15
  178. package/dist/cli/file-processor.d.ts.map +0 -1
  179. package/dist/cli/file-processor.js +0 -83
  180. package/dist/cli/file-processor.js.map +0 -1
  181. package/dist/cli/initial-message.d.ts +0 -18
  182. package/dist/cli/initial-message.d.ts.map +0 -1
  183. package/dist/cli/initial-message.js +0 -22
  184. package/dist/cli/initial-message.js.map +0 -1
  185. package/dist/cli/list-models.d.ts +0 -9
  186. package/dist/cli/list-models.d.ts.map +0 -1
  187. package/dist/cli/list-models.js +0 -98
  188. package/dist/cli/list-models.js.map +0 -1
  189. package/dist/cli/session-picker.d.ts +0 -9
  190. package/dist/cli/session-picker.d.ts.map +0 -1
  191. package/dist/cli/session-picker.js +0 -35
  192. package/dist/cli/session-picker.js.map +0 -1
  193. package/dist/cli.d.ts +0 -3
  194. package/dist/cli.d.ts.map +0 -1
  195. package/dist/cli.js +0 -19
  196. package/dist/cli.js.map +0 -1
  197. package/dist/config.d.ts +0 -86
  198. package/dist/config.d.ts.map +0 -1
  199. package/dist/config.js +0 -332
  200. package/dist/config.js.map +0 -1
  201. package/dist/core/agent-session-runtime.d.ts +0 -117
  202. package/dist/core/agent-session-runtime.d.ts.map +0 -1
  203. package/dist/core/agent-session-runtime.js +0 -300
  204. package/dist/core/agent-session-runtime.js.map +0 -1
  205. package/dist/core/agent-session-services.d.ts +0 -86
  206. package/dist/core/agent-session-services.d.ts.map +0 -1
  207. package/dist/core/agent-session-services.js +0 -117
  208. package/dist/core/agent-session-services.js.map +0 -1
  209. package/dist/core/agent-session.d.ts +0 -595
  210. package/dist/core/agent-session.d.ts.map +0 -1
  211. package/dist/core/agent-session.js +0 -2520
  212. package/dist/core/agent-session.js.map +0 -1
  213. package/dist/core/auth-guidance.d.ts +0 -5
  214. package/dist/core/auth-guidance.d.ts.map +0 -1
  215. package/dist/core/auth-guidance.js +0 -21
  216. package/dist/core/auth-guidance.js.map +0 -1
  217. package/dist/core/auth-storage.d.ts +0 -141
  218. package/dist/core/auth-storage.d.ts.map +0 -1
  219. package/dist/core/auth-storage.js +0 -441
  220. package/dist/core/auth-storage.js.map +0 -1
  221. package/dist/core/bash-executor.d.ts +0 -32
  222. package/dist/core/bash-executor.d.ts.map +0 -1
  223. package/dist/core/bash-executor.js +0 -111
  224. package/dist/core/bash-executor.js.map +0 -1
  225. package/dist/core/compaction/branch-summarization.d.ts +0 -88
  226. package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
  227. package/dist/core/compaction/branch-summarization.js +0 -243
  228. package/dist/core/compaction/branch-summarization.js.map +0 -1
  229. package/dist/core/compaction/compaction.d.ts +0 -121
  230. package/dist/core/compaction/compaction.d.ts.map +0 -1
  231. package/dist/core/compaction/compaction.js +0 -615
  232. package/dist/core/compaction/compaction.js.map +0 -1
  233. package/dist/core/compaction/index.d.ts +0 -7
  234. package/dist/core/compaction/index.d.ts.map +0 -1
  235. package/dist/core/compaction/index.js +0 -7
  236. package/dist/core/compaction/index.js.map +0 -1
  237. package/dist/core/compaction/utils.d.ts +0 -38
  238. package/dist/core/compaction/utils.d.ts.map +0 -1
  239. package/dist/core/compaction/utils.js +0 -153
  240. package/dist/core/compaction/utils.js.map +0 -1
  241. package/dist/core/defaults.d.ts +0 -3
  242. package/dist/core/defaults.d.ts.map +0 -1
  243. package/dist/core/defaults.js +0 -2
  244. package/dist/core/defaults.js.map +0 -1
  245. package/dist/core/diagnostics.d.ts +0 -15
  246. package/dist/core/diagnostics.d.ts.map +0 -1
  247. package/dist/core/diagnostics.js +0 -2
  248. package/dist/core/diagnostics.js.map +0 -1
  249. package/dist/core/event-bus.d.ts +0 -9
  250. package/dist/core/event-bus.d.ts.map +0 -1
  251. package/dist/core/event-bus.js +0 -25
  252. package/dist/core/event-bus.js.map +0 -1
  253. package/dist/core/exec.d.ts +0 -29
  254. package/dist/core/exec.d.ts.map +0 -1
  255. package/dist/core/exec.js +0 -75
  256. package/dist/core/exec.js.map +0 -1
  257. package/dist/core/export-html/ansi-to-html.d.ts +0 -22
  258. package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
  259. package/dist/core/export-html/ansi-to-html.js +0 -249
  260. package/dist/core/export-html/ansi-to-html.js.map +0 -1
  261. package/dist/core/export-html/index.d.ts +0 -37
  262. package/dist/core/export-html/index.d.ts.map +0 -1
  263. package/dist/core/export-html/index.js +0 -224
  264. package/dist/core/export-html/index.js.map +0 -1
  265. package/dist/core/export-html/template.css +0 -1022
  266. package/dist/core/export-html/template.html +0 -55
  267. package/dist/core/export-html/template.js +0 -1770
  268. package/dist/core/export-html/tool-renderer.d.ts +0 -34
  269. package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
  270. package/dist/core/export-html/tool-renderer.js +0 -108
  271. package/dist/core/export-html/tool-renderer.js.map +0 -1
  272. package/dist/core/export-html/vendor/highlight.min.js +0 -1213
  273. package/dist/core/export-html/vendor/marked.min.js +0 -6
  274. package/dist/core/extensions/index.d.ts +0 -12
  275. package/dist/core/extensions/index.d.ts.map +0 -1
  276. package/dist/core/extensions/index.js +0 -9
  277. package/dist/core/extensions/index.js.map +0 -1
  278. package/dist/core/extensions/loader.d.ts +0 -25
  279. package/dist/core/extensions/loader.d.ts.map +0 -1
  280. package/dist/core/extensions/loader.js +0 -476
  281. package/dist/core/extensions/loader.js.map +0 -1
  282. package/dist/core/extensions/runner.d.ts +0 -158
  283. package/dist/core/extensions/runner.d.ts.map +0 -1
  284. package/dist/core/extensions/runner.js +0 -784
  285. package/dist/core/extensions/runner.js.map +0 -1
  286. package/dist/core/extensions/types.d.ts +0 -1153
  287. package/dist/core/extensions/types.d.ts.map +0 -1
  288. package/dist/core/extensions/types.js +0 -45
  289. package/dist/core/extensions/types.js.map +0 -1
  290. package/dist/core/extensions/wrapper.d.ts +0 -20
  291. package/dist/core/extensions/wrapper.d.ts.map +0 -1
  292. package/dist/core/extensions/wrapper.js +0 -22
  293. package/dist/core/extensions/wrapper.js.map +0 -1
  294. package/dist/core/footer-data-provider.d.ts +0 -52
  295. package/dist/core/footer-data-provider.d.ts.map +0 -1
  296. package/dist/core/footer-data-provider.js +0 -310
  297. package/dist/core/footer-data-provider.js.map +0 -1
  298. package/dist/core/index.d.ts +0 -12
  299. package/dist/core/index.d.ts.map +0 -1
  300. package/dist/core/index.js +0 -12
  301. package/dist/core/index.js.map +0 -1
  302. package/dist/core/keybindings.d.ts +0 -353
  303. package/dist/core/keybindings.d.ts.map +0 -1
  304. package/dist/core/keybindings.js +0 -295
  305. package/dist/core/keybindings.js.map +0 -1
  306. package/dist/core/messages.d.ts +0 -77
  307. package/dist/core/messages.d.ts.map +0 -1
  308. package/dist/core/messages.js +0 -123
  309. package/dist/core/messages.js.map +0 -1
  310. package/dist/core/model-registry.d.ts +0 -144
  311. package/dist/core/model-registry.d.ts.map +0 -1
  312. package/dist/core/model-registry.js +0 -699
  313. package/dist/core/model-registry.js.map +0 -1
  314. package/dist/core/model-resolver.d.ts +0 -110
  315. package/dist/core/model-resolver.d.ts.map +0 -1
  316. package/dist/core/model-resolver.js +0 -489
  317. package/dist/core/model-resolver.js.map +0 -1
  318. package/dist/core/output-guard.d.ts +0 -6
  319. package/dist/core/output-guard.d.ts.map +0 -1
  320. package/dist/core/output-guard.js +0 -59
  321. package/dist/core/output-guard.js.map +0 -1
  322. package/dist/core/package-manager.d.ts +0 -199
  323. package/dist/core/package-manager.d.ts.map +0 -1
  324. package/dist/core/package-manager.js +0 -1973
  325. package/dist/core/package-manager.js.map +0 -1
  326. package/dist/core/prompt-templates.d.ts +0 -52
  327. package/dist/core/prompt-templates.d.ts.map +0 -1
  328. package/dist/core/prompt-templates.js +0 -250
  329. package/dist/core/prompt-templates.js.map +0 -1
  330. package/dist/core/resolve-config-value.d.ts +0 -23
  331. package/dist/core/resolve-config-value.d.ts.map +0 -1
  332. package/dist/core/resolve-config-value.js +0 -126
  333. package/dist/core/resolve-config-value.js.map +0 -1
  334. package/dist/core/resource-loader.d.ts +0 -194
  335. package/dist/core/resource-loader.d.ts.map +0 -1
  336. package/dist/core/resource-loader.js +0 -727
  337. package/dist/core/resource-loader.js.map +0 -1
  338. package/dist/core/sdk.d.ts +0 -107
  339. package/dist/core/sdk.d.ts.map +0 -1
  340. package/dist/core/sdk.js +0 -274
  341. package/dist/core/sdk.js.map +0 -1
  342. package/dist/core/session-cwd.d.ts +0 -19
  343. package/dist/core/session-cwd.d.ts.map +0 -1
  344. package/dist/core/session-cwd.js +0 -38
  345. package/dist/core/session-cwd.js.map +0 -1
  346. package/dist/core/session-manager.d.ts +0 -333
  347. package/dist/core/session-manager.d.ts.map +0 -1
  348. package/dist/core/session-manager.js +0 -1109
  349. package/dist/core/session-manager.js.map +0 -1
  350. package/dist/core/settings-manager.d.ts +0 -261
  351. package/dist/core/settings-manager.d.ts.map +0 -1
  352. package/dist/core/settings-manager.js +0 -782
  353. package/dist/core/settings-manager.js.map +0 -1
  354. package/dist/core/skills.d.ts +0 -60
  355. package/dist/core/skills.d.ts.map +0 -1
  356. package/dist/core/skills.js +0 -404
  357. package/dist/core/skills.js.map +0 -1
  358. package/dist/core/slash-commands.d.ts +0 -14
  359. package/dist/core/slash-commands.d.ts.map +0 -1
  360. package/dist/core/slash-commands.js +0 -25
  361. package/dist/core/slash-commands.js.map +0 -1
  362. package/dist/core/source-info.d.ts +0 -18
  363. package/dist/core/source-info.d.ts.map +0 -1
  364. package/dist/core/source-info.js +0 -19
  365. package/dist/core/source-info.js.map +0 -1
  366. package/dist/core/system-prompt.d.ts +0 -28
  367. package/dist/core/system-prompt.d.ts.map +0 -1
  368. package/dist/core/system-prompt.js +0 -120
  369. package/dist/core/system-prompt.js.map +0 -1
  370. package/dist/core/telemetry.d.ts +0 -3
  371. package/dist/core/telemetry.d.ts.map +0 -1
  372. package/dist/core/telemetry.js +0 -9
  373. package/dist/core/telemetry.js.map +0 -1
  374. package/dist/core/timings.d.ts +0 -8
  375. package/dist/core/timings.d.ts.map +0 -1
  376. package/dist/core/timings.js +0 -31
  377. package/dist/core/timings.js.map +0 -1
  378. package/dist/core/tools/bash.d.ts +0 -68
  379. package/dist/core/tools/bash.d.ts.map +0 -1
  380. package/dist/core/tools/bash.js +0 -355
  381. package/dist/core/tools/bash.js.map +0 -1
  382. package/dist/core/tools/edit-diff.d.ts +0 -85
  383. package/dist/core/tools/edit-diff.d.ts.map +0 -1
  384. package/dist/core/tools/edit-diff.js +0 -337
  385. package/dist/core/tools/edit-diff.js.map +0 -1
  386. package/dist/core/tools/edit.d.ts +0 -49
  387. package/dist/core/tools/edit.d.ts.map +0 -1
  388. package/dist/core/tools/edit.js +0 -323
  389. package/dist/core/tools/edit.js.map +0 -1
  390. package/dist/core/tools/file-mutation-queue.d.ts +0 -6
  391. package/dist/core/tools/file-mutation-queue.d.ts.map +0 -1
  392. package/dist/core/tools/file-mutation-queue.js +0 -37
  393. package/dist/core/tools/file-mutation-queue.js.map +0 -1
  394. package/dist/core/tools/find.d.ts +0 -35
  395. package/dist/core/tools/find.d.ts.map +0 -1
  396. package/dist/core/tools/find.js +0 -298
  397. package/dist/core/tools/find.js.map +0 -1
  398. package/dist/core/tools/grep.d.ts +0 -37
  399. package/dist/core/tools/grep.d.ts.map +0 -1
  400. package/dist/core/tools/grep.js +0 -304
  401. package/dist/core/tools/grep.js.map +0 -1
  402. package/dist/core/tools/index.d.ts +0 -40
  403. package/dist/core/tools/index.d.ts.map +0 -1
  404. package/dist/core/tools/index.js +0 -112
  405. package/dist/core/tools/index.js.map +0 -1
  406. package/dist/core/tools/ls.d.ts +0 -37
  407. package/dist/core/tools/ls.d.ts.map +0 -1
  408. package/dist/core/tools/ls.js +0 -169
  409. package/dist/core/tools/ls.js.map +0 -1
  410. package/dist/core/tools/path-utils.d.ts +0 -8
  411. package/dist/core/tools/path-utils.d.ts.map +0 -1
  412. package/dist/core/tools/path-utils.js +0 -81
  413. package/dist/core/tools/path-utils.js.map +0 -1
  414. package/dist/core/tools/read.d.ts +0 -35
  415. package/dist/core/tools/read.d.ts.map +0 -1
  416. package/dist/core/tools/read.js +0 -232
  417. package/dist/core/tools/read.js.map +0 -1
  418. package/dist/core/tools/render-utils.d.ts +0 -21
  419. package/dist/core/tools/render-utils.d.ts.map +0 -1
  420. package/dist/core/tools/render-utils.js +0 -49
  421. package/dist/core/tools/render-utils.js.map +0 -1
  422. package/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  423. package/dist/core/tools/tool-definition-wrapper.d.ts.map +0 -1
  424. package/dist/core/tools/tool-definition-wrapper.js +0 -34
  425. package/dist/core/tools/tool-definition-wrapper.js.map +0 -1
  426. package/dist/core/tools/truncate.d.ts +0 -70
  427. package/dist/core/tools/truncate.d.ts.map +0 -1
  428. package/dist/core/tools/truncate.js +0 -205
  429. package/dist/core/tools/truncate.js.map +0 -1
  430. package/dist/core/tools/write.d.ts +0 -26
  431. package/dist/core/tools/write.d.ts.map +0 -1
  432. package/dist/core/tools/write.js +0 -213
  433. package/dist/core/tools/write.js.map +0 -1
  434. package/dist/index.d.ts +0 -28
  435. package/dist/index.d.ts.map +0 -1
  436. package/dist/index.js +0 -41
  437. package/dist/index.js.map +0 -1
  438. package/dist/main.d.ts +0 -12
  439. package/dist/main.d.ts.map +0 -1
  440. package/dist/main.js +0 -589
  441. package/dist/main.js.map +0 -1
  442. package/dist/migrations.d.ts +0 -33
  443. package/dist/migrations.d.ts.map +0 -1
  444. package/dist/migrations.js +0 -281
  445. package/dist/migrations.js.map +0 -1
  446. package/dist/modes/index.d.ts +0 -9
  447. package/dist/modes/index.d.ts.map +0 -1
  448. package/dist/modes/index.js +0 -8
  449. package/dist/modes/index.js.map +0 -1
  450. package/dist/modes/interactive/assets/clankolas.png +0 -0
  451. package/dist/modes/interactive/components/aery-splash.d.ts +0 -18
  452. package/dist/modes/interactive/components/aery-splash.d.ts.map +0 -1
  453. package/dist/modes/interactive/components/aery-splash.js +0 -60
  454. package/dist/modes/interactive/components/aery-splash.js.map +0 -1
  455. package/dist/modes/interactive/components/armin.d.ts +0 -34
  456. package/dist/modes/interactive/components/armin.d.ts.map +0 -1
  457. package/dist/modes/interactive/components/armin.js +0 -333
  458. package/dist/modes/interactive/components/armin.js.map +0 -1
  459. package/dist/modes/interactive/components/assistant-message.d.ts +0 -20
  460. package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  461. package/dist/modes/interactive/components/assistant-message.js +0 -121
  462. package/dist/modes/interactive/components/assistant-message.js.map +0 -1
  463. package/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  464. package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  465. package/dist/modes/interactive/components/bash-execution.js +0 -175
  466. package/dist/modes/interactive/components/bash-execution.js.map +0 -1
  467. package/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  468. package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  469. package/dist/modes/interactive/components/bordered-loader.js +0 -54
  470. package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  471. package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  472. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  473. package/dist/modes/interactive/components/branch-summary-message.js +0 -44
  474. package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  475. package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  476. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  477. package/dist/modes/interactive/components/compaction-summary-message.js +0 -45
  478. package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  479. package/dist/modes/interactive/components/config-selector.d.ts +0 -71
  480. package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  481. package/dist/modes/interactive/components/config-selector.js +0 -481
  482. package/dist/modes/interactive/components/config-selector.js.map +0 -1
  483. package/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  484. package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  485. package/dist/modes/interactive/components/countdown-timer.js +0 -33
  486. package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  487. package/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  488. package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  489. package/dist/modes/interactive/components/custom-editor.js +0 -70
  490. package/dist/modes/interactive/components/custom-editor.js.map +0 -1
  491. package/dist/modes/interactive/components/custom-message.d.ts +0 -20
  492. package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  493. package/dist/modes/interactive/components/custom-message.js +0 -79
  494. package/dist/modes/interactive/components/custom-message.js.map +0 -1
  495. package/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  496. package/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  497. package/dist/modes/interactive/components/daxnuts.js +0 -140
  498. package/dist/modes/interactive/components/daxnuts.js.map +0 -1
  499. package/dist/modes/interactive/components/diff.d.ts +0 -12
  500. package/dist/modes/interactive/components/diff.d.ts.map +0 -1
  501. package/dist/modes/interactive/components/diff.js +0 -133
  502. package/dist/modes/interactive/components/diff.js.map +0 -1
  503. package/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  504. package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  505. package/dist/modes/interactive/components/dynamic-border.js +0 -21
  506. package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  507. package/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  508. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +0 -1
  509. package/dist/modes/interactive/components/earendil-announcement.js +0 -40
  510. package/dist/modes/interactive/components/earendil-announcement.js.map +0 -1
  511. package/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  512. package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  513. package/dist/modes/interactive/components/extension-editor.js +0 -111
  514. package/dist/modes/interactive/components/extension-editor.js.map +0 -1
  515. package/dist/modes/interactive/components/extension-input.d.ts +0 -23
  516. package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  517. package/dist/modes/interactive/components/extension-input.js +0 -61
  518. package/dist/modes/interactive/components/extension-input.js.map +0 -1
  519. package/dist/modes/interactive/components/extension-selector.d.ts +0 -24
  520. package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  521. package/dist/modes/interactive/components/extension-selector.js +0 -78
  522. package/dist/modes/interactive/components/extension-selector.js.map +0 -1
  523. package/dist/modes/interactive/components/footer.d.ts +0 -27
  524. package/dist/modes/interactive/components/footer.d.ts.map +0 -1
  525. package/dist/modes/interactive/components/footer.js +0 -201
  526. package/dist/modes/interactive/components/footer.js.map +0 -1
  527. package/dist/modes/interactive/components/index.d.ts +0 -32
  528. package/dist/modes/interactive/components/index.d.ts.map +0 -1
  529. package/dist/modes/interactive/components/index.js +0 -33
  530. package/dist/modes/interactive/components/index.js.map +0 -1
  531. package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -8
  532. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  533. package/dist/modes/interactive/components/keybinding-hints.js +0 -22
  534. package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  535. package/dist/modes/interactive/components/login-dialog.d.ts +0 -46
  536. package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  537. package/dist/modes/interactive/components/login-dialog.js +0 -158
  538. package/dist/modes/interactive/components/login-dialog.js.map +0 -1
  539. package/dist/modes/interactive/components/model-selector.d.ts +0 -47
  540. package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  541. package/dist/modes/interactive/components/model-selector.js +0 -278
  542. package/dist/modes/interactive/components/model-selector.js.map +0 -1
  543. package/dist/modes/interactive/components/oauth-selector.d.ts +0 -29
  544. package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  545. package/dist/modes/interactive/components/oauth-selector.js +0 -141
  546. package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  547. package/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  548. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  549. package/dist/modes/interactive/components/scoped-models-selector.js +0 -290
  550. package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  551. package/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  552. package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  553. package/dist/modes/interactive/components/session-selector-search.js +0 -155
  554. package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  555. package/dist/modes/interactive/components/session-selector.d.ts +0 -96
  556. package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  557. package/dist/modes/interactive/components/session-selector.js +0 -861
  558. package/dist/modes/interactive/components/session-selector.js.map +0 -1
  559. package/dist/modes/interactive/components/settings-selector.d.ts +0 -67
  560. package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  561. package/dist/modes/interactive/components/settings-selector.js +0 -373
  562. package/dist/modes/interactive/components/settings-selector.js.map +0 -1
  563. package/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  564. package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  565. package/dist/modes/interactive/components/show-images-selector.js +0 -39
  566. package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  567. package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  568. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  569. package/dist/modes/interactive/components/skill-invocation-message.js +0 -47
  570. package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  571. package/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  572. package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  573. package/dist/modes/interactive/components/theme-selector.js +0 -50
  574. package/dist/modes/interactive/components/theme-selector.js.map +0 -1
  575. package/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  576. package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  577. package/dist/modes/interactive/components/thinking-selector.js +0 -51
  578. package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  579. package/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  580. package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  581. package/dist/modes/interactive/components/tool-execution.js +0 -295
  582. package/dist/modes/interactive/components/tool-execution.js.map +0 -1
  583. package/dist/modes/interactive/components/tree-selector.d.ts +0 -89
  584. package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  585. package/dist/modes/interactive/components/tree-selector.js +0 -1092
  586. package/dist/modes/interactive/components/tree-selector.js.map +0 -1
  587. package/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  588. package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  589. package/dist/modes/interactive/components/user-message-selector.js +0 -114
  590. package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  591. package/dist/modes/interactive/components/user-message.d.ts +0 -10
  592. package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  593. package/dist/modes/interactive/components/user-message.js +0 -29
  594. package/dist/modes/interactive/components/user-message.js.map +0 -1
  595. package/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  596. package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  597. package/dist/modes/interactive/components/visual-truncate.js +0 -33
  598. package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  599. package/dist/modes/interactive/interactive-mode.d.ts +0 -359
  600. package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  601. package/dist/modes/interactive/interactive-mode.js +0 -4573
  602. package/dist/modes/interactive/interactive-mode.js.map +0 -1
  603. package/dist/modes/interactive/theme/aery.json +0 -84
  604. package/dist/modes/interactive/theme/catppuccin-mocha.json +0 -81
  605. package/dist/modes/interactive/theme/dark.json +0 -85
  606. package/dist/modes/interactive/theme/dracula.json +0 -81
  607. package/dist/modes/interactive/theme/light.json +0 -84
  608. package/dist/modes/interactive/theme/nord.json +0 -81
  609. package/dist/modes/interactive/theme/theme-schema.json +0 -335
  610. package/dist/modes/interactive/theme/theme.d.ts +0 -81
  611. package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
  612. package/dist/modes/interactive/theme/theme.js +0 -975
  613. package/dist/modes/interactive/theme/theme.js.map +0 -1
  614. package/dist/modes/interactive/theme/tokyo-night.json +0 -81
  615. package/dist/modes/print-mode.d.ts +0 -28
  616. package/dist/modes/print-mode.d.ts.map +0 -1
  617. package/dist/modes/print-mode.js +0 -131
  618. package/dist/modes/print-mode.js.map +0 -1
  619. package/dist/modes/rpc/jsonl.d.ts +0 -17
  620. package/dist/modes/rpc/jsonl.d.ts.map +0 -1
  621. package/dist/modes/rpc/jsonl.js +0 -49
  622. package/dist/modes/rpc/jsonl.js.map +0 -1
  623. package/dist/modes/rpc/rpc-client.d.ts +0 -224
  624. package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  625. package/dist/modes/rpc/rpc-client.js +0 -410
  626. package/dist/modes/rpc/rpc-client.js.map +0 -1
  627. package/dist/modes/rpc/rpc-mode.d.ts +0 -20
  628. package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  629. package/dist/modes/rpc/rpc-mode.js +0 -597
  630. package/dist/modes/rpc/rpc-mode.js.map +0 -1
  631. package/dist/modes/rpc/rpc-types.d.ts +0 -419
  632. package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  633. package/dist/modes/rpc/rpc-types.js +0 -8
  634. package/dist/modes/rpc/rpc-types.js.map +0 -1
  635. package/dist/package-manager-cli.d.ts +0 -4
  636. package/dist/package-manager-cli.d.ts.map +0 -1
  637. package/dist/package-manager-cli.js +0 -468
  638. package/dist/package-manager-cli.js.map +0 -1
  639. package/dist/utils/aery-user-agent.d.ts +0 -2
  640. package/dist/utils/aery-user-agent.d.ts.map +0 -1
  641. package/dist/utils/aery-user-agent.js +0 -5
  642. package/dist/utils/aery-user-agent.js.map +0 -1
  643. package/dist/utils/changelog.d.ts +0 -21
  644. package/dist/utils/changelog.d.ts.map +0 -1
  645. package/dist/utils/changelog.js +0 -87
  646. package/dist/utils/changelog.js.map +0 -1
  647. package/dist/utils/child-process.d.ts +0 -11
  648. package/dist/utils/child-process.d.ts.map +0 -1
  649. package/dist/utils/child-process.js +0 -78
  650. package/dist/utils/child-process.js.map +0 -1
  651. package/dist/utils/clipboard-image.d.ts +0 -11
  652. package/dist/utils/clipboard-image.d.ts.map +0 -1
  653. package/dist/utils/clipboard-image.js +0 -245
  654. package/dist/utils/clipboard-image.js.map +0 -1
  655. package/dist/utils/clipboard-native.d.ts +0 -8
  656. package/dist/utils/clipboard-native.d.ts.map +0 -1
  657. package/dist/utils/clipboard-native.js +0 -14
  658. package/dist/utils/clipboard-native.js.map +0 -1
  659. package/dist/utils/clipboard.d.ts +0 -2
  660. package/dist/utils/clipboard.d.ts.map +0 -1
  661. package/dist/utils/clipboard.js +0 -110
  662. package/dist/utils/clipboard.js.map +0 -1
  663. package/dist/utils/exif-orientation.d.ts +0 -5
  664. package/dist/utils/exif-orientation.d.ts.map +0 -1
  665. package/dist/utils/exif-orientation.js +0 -158
  666. package/dist/utils/exif-orientation.js.map +0 -1
  667. package/dist/utils/frontmatter.d.ts +0 -8
  668. package/dist/utils/frontmatter.d.ts.map +0 -1
  669. package/dist/utils/frontmatter.js +0 -26
  670. package/dist/utils/frontmatter.js.map +0 -1
  671. package/dist/utils/fs-watch.d.ts +0 -5
  672. package/dist/utils/fs-watch.d.ts.map +0 -1
  673. package/dist/utils/fs-watch.js +0 -25
  674. package/dist/utils/fs-watch.js.map +0 -1
  675. package/dist/utils/git.d.ts +0 -26
  676. package/dist/utils/git.d.ts.map +0 -1
  677. package/dist/utils/git.js +0 -163
  678. package/dist/utils/git.js.map +0 -1
  679. package/dist/utils/image-convert.d.ts +0 -9
  680. package/dist/utils/image-convert.d.ts.map +0 -1
  681. package/dist/utils/image-convert.js +0 -39
  682. package/dist/utils/image-convert.js.map +0 -1
  683. package/dist/utils/image-resize.d.ts +0 -36
  684. package/dist/utils/image-resize.d.ts.map +0 -1
  685. package/dist/utils/image-resize.js +0 -137
  686. package/dist/utils/image-resize.js.map +0 -1
  687. package/dist/utils/mime.d.ts +0 -2
  688. package/dist/utils/mime.d.ts.map +0 -1
  689. package/dist/utils/mime.js +0 -26
  690. package/dist/utils/mime.js.map +0 -1
  691. package/dist/utils/paths.d.ts +0 -14
  692. package/dist/utils/paths.d.ts.map +0 -1
  693. package/dist/utils/paths.js +0 -34
  694. package/dist/utils/paths.js.map +0 -1
  695. package/dist/utils/photon.d.ts +0 -21
  696. package/dist/utils/photon.d.ts.map +0 -1
  697. package/dist/utils/photon.js +0 -121
  698. package/dist/utils/photon.js.map +0 -1
  699. package/dist/utils/shell.d.ts +0 -30
  700. package/dist/utils/shell.d.ts.map +0 -1
  701. package/dist/utils/shell.js +0 -190
  702. package/dist/utils/shell.js.map +0 -1
  703. package/dist/utils/sleep.d.ts +0 -5
  704. package/dist/utils/sleep.d.ts.map +0 -1
  705. package/dist/utils/sleep.js +0 -17
  706. package/dist/utils/sleep.js.map +0 -1
  707. package/dist/utils/tools-manager.d.ts +0 -3
  708. package/dist/utils/tools-manager.d.ts.map +0 -1
  709. package/dist/utils/tools-manager.js +0 -256
  710. package/dist/utils/tools-manager.js.map +0 -1
  711. package/dist/utils/version-check.d.ts +0 -7
  712. package/dist/utils/version-check.d.ts.map +0 -1
  713. package/dist/utils/version-check.js +0 -70
  714. package/dist/utils/version-check.js.map +0 -1
@@ -1,699 +0,0 @@
1
- /**
2
- * Model registry - manages built-in and custom models, provides API key resolution.
3
- */
4
- import { getModels, getProviders, registerApiProvider, resetApiProviders, } from "@eminent337/aery-ai";
5
- import { registerOAuthProvider, resetOAuthProviders } from "@eminent337/aery-ai/oauth";
6
- import { existsSync, readFileSync } from "fs";
7
- import { join } from "path";
8
- import { Type } from "typebox";
9
- import { Compile } from "typebox/compile";
10
- import { getAgentDir } from "../config.js";
11
- import { clearConfigValueCache, resolveConfigValueOrThrow, resolveConfigValueUncached, resolveHeadersOrThrow, } from "./resolve-config-value.js";
12
- // Schema for OpenRouter routing preferences
13
- const PercentileCutoffsSchema = Type.Object({
14
- p50: Type.Optional(Type.Number()),
15
- p75: Type.Optional(Type.Number()),
16
- p90: Type.Optional(Type.Number()),
17
- p99: Type.Optional(Type.Number()),
18
- });
19
- const OpenRouterRoutingSchema = Type.Object({
20
- allow_fallbacks: Type.Optional(Type.Boolean()),
21
- require_parameters: Type.Optional(Type.Boolean()),
22
- data_collection: Type.Optional(Type.Union([Type.Literal("deny"), Type.Literal("allow")])),
23
- zdr: Type.Optional(Type.Boolean()),
24
- enforce_distillable_text: Type.Optional(Type.Boolean()),
25
- order: Type.Optional(Type.Array(Type.String())),
26
- only: Type.Optional(Type.Array(Type.String())),
27
- ignore: Type.Optional(Type.Array(Type.String())),
28
- quantizations: Type.Optional(Type.Array(Type.String())),
29
- sort: Type.Optional(Type.Union([
30
- Type.String(),
31
- Type.Object({
32
- by: Type.Optional(Type.String()),
33
- partition: Type.Optional(Type.Union([Type.String(), Type.Null()])),
34
- }),
35
- ])),
36
- max_price: Type.Optional(Type.Object({
37
- prompt: Type.Optional(Type.Union([Type.Number(), Type.String()])),
38
- completion: Type.Optional(Type.Union([Type.Number(), Type.String()])),
39
- image: Type.Optional(Type.Union([Type.Number(), Type.String()])),
40
- audio: Type.Optional(Type.Union([Type.Number(), Type.String()])),
41
- request: Type.Optional(Type.Union([Type.Number(), Type.String()])),
42
- })),
43
- preferred_min_throughput: Type.Optional(Type.Union([Type.Number(), PercentileCutoffsSchema])),
44
- preferred_max_latency: Type.Optional(Type.Union([Type.Number(), PercentileCutoffsSchema])),
45
- });
46
- // Schema for Vercel AI Gateway routing preferences
47
- const VercelGatewayRoutingSchema = Type.Object({
48
- only: Type.Optional(Type.Array(Type.String())),
49
- order: Type.Optional(Type.Array(Type.String())),
50
- });
51
- // Schema for OpenAI compatibility settings
52
- const ReasoningEffortMapSchema = Type.Object({
53
- minimal: Type.Optional(Type.String()),
54
- low: Type.Optional(Type.String()),
55
- medium: Type.Optional(Type.String()),
56
- high: Type.Optional(Type.String()),
57
- xhigh: Type.Optional(Type.String()),
58
- });
59
- const OpenAICompletionsCompatSchema = Type.Object({
60
- supportsStore: Type.Optional(Type.Boolean()),
61
- supportsDeveloperRole: Type.Optional(Type.Boolean()),
62
- supportsReasoningEffort: Type.Optional(Type.Boolean()),
63
- reasoningEffortMap: Type.Optional(ReasoningEffortMapSchema),
64
- supportsUsageInStreaming: Type.Optional(Type.Boolean()),
65
- maxTokensField: Type.Optional(Type.Union([Type.Literal("max_completion_tokens"), Type.Literal("max_tokens")])),
66
- requiresToolResultName: Type.Optional(Type.Boolean()),
67
- requiresAssistantAfterToolResult: Type.Optional(Type.Boolean()),
68
- requiresThinkingAsText: Type.Optional(Type.Boolean()),
69
- requiresReasoningContentOnAssistantMessages: Type.Optional(Type.Boolean()),
70
- thinkingFormat: Type.Optional(Type.Union([
71
- Type.Literal("openai"),
72
- Type.Literal("openrouter"),
73
- Type.Literal("deepseek"),
74
- Type.Literal("zai"),
75
- Type.Literal("qwen"),
76
- Type.Literal("qwen-chat-template"),
77
- ])),
78
- cacheControlFormat: Type.Optional(Type.Literal("anthropic")),
79
- openRouterRouting: Type.Optional(OpenRouterRoutingSchema),
80
- vercelGatewayRouting: Type.Optional(VercelGatewayRoutingSchema),
81
- supportsStrictMode: Type.Optional(Type.Boolean()),
82
- supportsLongCacheRetention: Type.Optional(Type.Boolean()),
83
- });
84
- const OpenAIResponsesCompatSchema = Type.Object({
85
- sendSessionIdHeader: Type.Optional(Type.Boolean()),
86
- supportsLongCacheRetention: Type.Optional(Type.Boolean()),
87
- });
88
- const AnthropicMessagesCompatSchema = Type.Object({
89
- supportsEagerToolInputStreaming: Type.Optional(Type.Boolean()),
90
- supportsLongCacheRetention: Type.Optional(Type.Boolean()),
91
- });
92
- const ProviderCompatSchema = Type.Union([
93
- OpenAICompletionsCompatSchema,
94
- OpenAIResponsesCompatSchema,
95
- AnthropicMessagesCompatSchema,
96
- ]);
97
- // Schema for custom model definition
98
- // Most fields are optional with sensible defaults for local models (Ollama, LM Studio, etc.)
99
- const ModelDefinitionSchema = Type.Object({
100
- id: Type.String({ minLength: 1 }),
101
- name: Type.Optional(Type.String({ minLength: 1 })),
102
- api: Type.Optional(Type.String({ minLength: 1 })),
103
- baseUrl: Type.Optional(Type.String({ minLength: 1 })),
104
- reasoning: Type.Optional(Type.Boolean()),
105
- input: Type.Optional(Type.Array(Type.Union([Type.Literal("text"), Type.Literal("image")]))),
106
- cost: Type.Optional(Type.Object({
107
- input: Type.Number(),
108
- output: Type.Number(),
109
- cacheRead: Type.Number(),
110
- cacheWrite: Type.Number(),
111
- })),
112
- contextWindow: Type.Optional(Type.Number()),
113
- maxTokens: Type.Optional(Type.Number()),
114
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
115
- compat: Type.Optional(ProviderCompatSchema),
116
- });
117
- // Schema for per-model overrides (all fields optional, merged with built-in model)
118
- const ModelOverrideSchema = Type.Object({
119
- name: Type.Optional(Type.String({ minLength: 1 })),
120
- reasoning: Type.Optional(Type.Boolean()),
121
- input: Type.Optional(Type.Array(Type.Union([Type.Literal("text"), Type.Literal("image")]))),
122
- cost: Type.Optional(Type.Object({
123
- input: Type.Optional(Type.Number()),
124
- output: Type.Optional(Type.Number()),
125
- cacheRead: Type.Optional(Type.Number()),
126
- cacheWrite: Type.Optional(Type.Number()),
127
- })),
128
- contextWindow: Type.Optional(Type.Number()),
129
- maxTokens: Type.Optional(Type.Number()),
130
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
131
- compat: Type.Optional(ProviderCompatSchema),
132
- });
133
- const ProviderConfigSchema = Type.Object({
134
- baseUrl: Type.Optional(Type.String({ minLength: 1 })),
135
- apiKey: Type.Optional(Type.String({ minLength: 1 })),
136
- api: Type.Optional(Type.String({ minLength: 1 })),
137
- headers: Type.Optional(Type.Record(Type.String(), Type.String())),
138
- compat: Type.Optional(ProviderCompatSchema),
139
- authHeader: Type.Optional(Type.Boolean()),
140
- models: Type.Optional(Type.Array(ModelDefinitionSchema)),
141
- modelOverrides: Type.Optional(Type.Record(Type.String(), ModelOverrideSchema)),
142
- });
143
- const ModelsConfigSchema = Type.Object({
144
- providers: Type.Record(Type.String(), ProviderConfigSchema),
145
- });
146
- const validateModelsConfig = Compile(ModelsConfigSchema);
147
- function formatValidationPath(error) {
148
- if (error.keyword === "required") {
149
- const requiredProperties = error.params.requiredProperties;
150
- const requiredProperty = requiredProperties?.[0];
151
- if (requiredProperty) {
152
- const basePath = error.instancePath.replace(/^\//, "").replace(/\//g, ".");
153
- return basePath ? `${basePath}.${requiredProperty}` : requiredProperty;
154
- }
155
- }
156
- const path = error.instancePath.replace(/^\//, "").replace(/\//g, ".");
157
- return path || "root";
158
- }
159
- function emptyCustomModelsResult(error) {
160
- return { models: [], overrides: new Map(), modelOverrides: new Map(), error };
161
- }
162
- function mergeCompat(baseCompat, overrideCompat) {
163
- if (!overrideCompat)
164
- return baseCompat;
165
- const base = baseCompat;
166
- const override = overrideCompat;
167
- const merged = { ...base, ...override };
168
- const baseCompletions = base;
169
- const overrideCompletions = override;
170
- const mergedCompletions = merged;
171
- if (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {
172
- mergedCompletions.openRouterRouting = {
173
- ...baseCompletions?.openRouterRouting,
174
- ...overrideCompletions.openRouterRouting,
175
- };
176
- }
177
- if (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {
178
- mergedCompletions.vercelGatewayRouting = {
179
- ...baseCompletions?.vercelGatewayRouting,
180
- ...overrideCompletions.vercelGatewayRouting,
181
- };
182
- }
183
- return merged;
184
- }
185
- /**
186
- * Deep merge a model override into a model.
187
- * Handles nested objects (cost, compat) by merging rather than replacing.
188
- */
189
- function applyModelOverride(model, override) {
190
- const result = { ...model };
191
- // Simple field overrides
192
- if (override.name !== undefined)
193
- result.name = override.name;
194
- if (override.reasoning !== undefined)
195
- result.reasoning = override.reasoning;
196
- if (override.input !== undefined)
197
- result.input = override.input;
198
- if (override.contextWindow !== undefined)
199
- result.contextWindow = override.contextWindow;
200
- if (override.maxTokens !== undefined)
201
- result.maxTokens = override.maxTokens;
202
- // Merge cost (partial override)
203
- if (override.cost) {
204
- result.cost = {
205
- input: override.cost.input ?? model.cost.input,
206
- output: override.cost.output ?? model.cost.output,
207
- cacheRead: override.cost.cacheRead ?? model.cost.cacheRead,
208
- cacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,
209
- };
210
- }
211
- // Deep merge compat
212
- result.compat = mergeCompat(model.compat, override.compat);
213
- return result;
214
- }
215
- /** Clear the config value command cache. Exported for testing. */
216
- export const clearApiKeyCache = clearConfigValueCache;
217
- /**
218
- * Model registry - loads and manages models, resolves API keys via AuthStorage.
219
- */
220
- export class ModelRegistry {
221
- authStorage;
222
- modelsJsonPath;
223
- models = [];
224
- providerRequestConfigs = new Map();
225
- modelRequestHeaders = new Map();
226
- registeredProviders = new Map();
227
- loadError = undefined;
228
- constructor(authStorage, modelsJsonPath) {
229
- this.authStorage = authStorage;
230
- this.modelsJsonPath = modelsJsonPath;
231
- this.loadModels();
232
- }
233
- static create(authStorage, modelsJsonPath = join(getAgentDir(), "models.json")) {
234
- return new ModelRegistry(authStorage, modelsJsonPath);
235
- }
236
- static inMemory(authStorage) {
237
- return new ModelRegistry(authStorage, undefined);
238
- }
239
- /**
240
- * Reload models from disk (built-in + custom from models.json).
241
- */
242
- refresh() {
243
- this.providerRequestConfigs.clear();
244
- this.modelRequestHeaders.clear();
245
- this.loadError = undefined;
246
- // Ensure dynamic API/OAuth registrations are rebuilt from current provider state.
247
- resetApiProviders();
248
- resetOAuthProviders();
249
- this.loadModels();
250
- for (const [providerName, config] of this.registeredProviders.entries()) {
251
- this.applyProviderConfig(providerName, config);
252
- }
253
- }
254
- /**
255
- * Get any error from loading models.json (undefined if no error).
256
- */
257
- getError() {
258
- return this.loadError;
259
- }
260
- loadModels() {
261
- // Load custom models and overrides from models.json
262
- const { models: customModels, overrides, modelOverrides, error, } = this.modelsJsonPath ? this.loadCustomModels(this.modelsJsonPath) : emptyCustomModelsResult();
263
- if (error) {
264
- this.loadError = error;
265
- // Keep built-in models even if custom models failed to load
266
- }
267
- const builtInModels = this.loadBuiltInModels(overrides, modelOverrides);
268
- let combined = this.mergeCustomModels(builtInModels, customModels);
269
- // Let OAuth providers modify their models (e.g., update baseUrl)
270
- for (const oauthProvider of this.authStorage.getOAuthProviders()) {
271
- const cred = this.authStorage.get(oauthProvider.id);
272
- if (cred?.type === "oauth" && oauthProvider.modifyModels) {
273
- combined = oauthProvider.modifyModels(combined, cred);
274
- }
275
- }
276
- this.models = combined;
277
- }
278
- /** Load built-in models and apply provider/model overrides */
279
- loadBuiltInModels(overrides, modelOverrides) {
280
- return getProviders().flatMap((provider) => {
281
- const models = getModels(provider);
282
- const providerOverride = overrides.get(provider);
283
- const perModelOverrides = modelOverrides.get(provider);
284
- return models.map((m) => {
285
- let model = m;
286
- // Apply provider-level baseUrl/headers/compat override
287
- if (providerOverride) {
288
- model = {
289
- ...model,
290
- baseUrl: providerOverride.baseUrl ?? model.baseUrl,
291
- compat: mergeCompat(model.compat, providerOverride.compat),
292
- };
293
- }
294
- // Apply per-model override
295
- const modelOverride = perModelOverrides?.get(m.id);
296
- if (modelOverride) {
297
- model = applyModelOverride(model, modelOverride);
298
- }
299
- return model;
300
- });
301
- });
302
- }
303
- /** Merge custom models into built-in list by provider+id (custom wins on conflicts). */
304
- mergeCustomModels(builtInModels, customModels) {
305
- const merged = [...builtInModels];
306
- for (const customModel of customModels) {
307
- const existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);
308
- if (existingIndex >= 0) {
309
- merged[existingIndex] = customModel;
310
- }
311
- else {
312
- merged.push(customModel);
313
- }
314
- }
315
- return merged;
316
- }
317
- loadCustomModels(modelsJsonPath) {
318
- if (!existsSync(modelsJsonPath)) {
319
- return emptyCustomModelsResult();
320
- }
321
- try {
322
- const content = readFileSync(modelsJsonPath, "utf-8");
323
- const parsed = JSON.parse(content);
324
- if (!validateModelsConfig.Check(parsed)) {
325
- const errors = validateModelsConfig
326
- .Errors(parsed)
327
- .map((error) => ` - ${formatValidationPath(error)}: ${error.message}`)
328
- .join("\n") || "Unknown schema error";
329
- return emptyCustomModelsResult(`Invalid models.json schema:\n${errors}\n\nFile: ${modelsJsonPath}`);
330
- }
331
- const config = parsed;
332
- // Additional validation
333
- this.validateConfig(config);
334
- const overrides = new Map();
335
- const modelOverrides = new Map();
336
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
337
- if (providerConfig.baseUrl || providerConfig.compat) {
338
- overrides.set(providerName, {
339
- baseUrl: providerConfig.baseUrl,
340
- compat: providerConfig.compat,
341
- });
342
- }
343
- this.storeProviderRequestConfig(providerName, providerConfig);
344
- if (providerConfig.modelOverrides) {
345
- modelOverrides.set(providerName, new Map(Object.entries(providerConfig.modelOverrides)));
346
- for (const [modelId, modelOverride] of Object.entries(providerConfig.modelOverrides)) {
347
- this.storeModelHeaders(providerName, modelId, modelOverride.headers);
348
- }
349
- }
350
- }
351
- return { models: this.parseModels(config), overrides, modelOverrides, error: undefined };
352
- }
353
- catch (error) {
354
- if (error instanceof SyntaxError) {
355
- return emptyCustomModelsResult(`Failed to parse models.json: ${error.message}\n\nFile: ${modelsJsonPath}`);
356
- }
357
- return emptyCustomModelsResult(`Failed to load models.json: ${error instanceof Error ? error.message : error}\n\nFile: ${modelsJsonPath}`);
358
- }
359
- }
360
- validateConfig(config) {
361
- const builtInProviders = new Set(getProviders());
362
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
363
- const isBuiltIn = builtInProviders.has(providerName);
364
- const hasProviderApi = !!providerConfig.api;
365
- const models = providerConfig.models ?? [];
366
- const hasModelOverrides = providerConfig.modelOverrides && Object.keys(providerConfig.modelOverrides).length > 0;
367
- if (models.length === 0) {
368
- // Override-only config: needs baseUrl, headers, compat, modelOverrides, or some combination.
369
- if (!providerConfig.baseUrl && !providerConfig.headers && !providerConfig.compat && !hasModelOverrides) {
370
- throw new Error(`Provider ${providerName}: must specify "baseUrl", "headers", "compat", "modelOverrides", or "models".`);
371
- }
372
- }
373
- else if (!isBuiltIn) {
374
- // Non-built-in providers with custom models require endpoint + auth.
375
- if (!providerConfig.baseUrl) {
376
- throw new Error(`Provider ${providerName}: "baseUrl" is required when defining custom models.`);
377
- }
378
- if (!providerConfig.apiKey) {
379
- throw new Error(`Provider ${providerName}: "apiKey" is required when defining custom models.`);
380
- }
381
- }
382
- // Built-in providers with custom models: baseUrl/apiKey/api are optional,
383
- // inherited from built-in models. Auth comes from env vars / auth storage.
384
- for (const modelDef of models) {
385
- const hasModelApi = !!modelDef.api;
386
- if (!hasProviderApi && !hasModelApi && !isBuiltIn) {
387
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: no "api" specified. Set at provider or model level.`);
388
- }
389
- // For built-in providers, api is optional — inherited from built-in models.
390
- if (!modelDef.id)
391
- throw new Error(`Provider ${providerName}: model missing "id"`);
392
- // Validate contextWindow/maxTokens only if provided (they have defaults)
393
- if (modelDef.contextWindow !== undefined && modelDef.contextWindow <= 0)
394
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: invalid contextWindow`);
395
- if (modelDef.maxTokens !== undefined && modelDef.maxTokens <= 0)
396
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: invalid maxTokens`);
397
- }
398
- }
399
- }
400
- parseModels(config) {
401
- const models = [];
402
- const builtInProviders = new Set(getProviders());
403
- // Cache built-in defaults (api, baseUrl) per provider, extracted from first model.
404
- const builtInDefaultsCache = new Map();
405
- const getBuiltInDefaults = (providerName) => {
406
- if (!builtInProviders.has(providerName))
407
- return undefined;
408
- if (builtInDefaultsCache.has(providerName))
409
- return builtInDefaultsCache.get(providerName);
410
- const builtIn = getModels(providerName);
411
- if (builtIn.length === 0)
412
- return undefined;
413
- const defaults = { api: builtIn[0].api, baseUrl: builtIn[0].baseUrl };
414
- builtInDefaultsCache.set(providerName, defaults);
415
- return defaults;
416
- };
417
- for (const [providerName, providerConfig] of Object.entries(config.providers)) {
418
- const modelDefs = providerConfig.models ?? [];
419
- if (modelDefs.length === 0)
420
- continue; // Override-only, no custom models
421
- const builtInDefaults = getBuiltInDefaults(providerName);
422
- for (const modelDef of modelDefs) {
423
- const api = modelDef.api ?? providerConfig.api ?? builtInDefaults?.api;
424
- if (!api)
425
- continue;
426
- const baseUrl = modelDef.baseUrl ?? providerConfig.baseUrl ?? builtInDefaults?.baseUrl;
427
- if (!baseUrl)
428
- continue;
429
- const compat = mergeCompat(providerConfig.compat, modelDef.compat);
430
- this.storeModelHeaders(providerName, modelDef.id, modelDef.headers);
431
- const defaultCost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
432
- models.push({
433
- id: modelDef.id,
434
- name: modelDef.name ?? modelDef.id,
435
- api: api,
436
- provider: providerName,
437
- baseUrl,
438
- reasoning: modelDef.reasoning ?? false,
439
- input: (modelDef.input ?? ["text"]),
440
- cost: modelDef.cost ?? defaultCost,
441
- contextWindow: modelDef.contextWindow ?? 128000,
442
- maxTokens: modelDef.maxTokens ?? 16384,
443
- headers: undefined,
444
- compat,
445
- });
446
- }
447
- }
448
- return models;
449
- }
450
- /**
451
- * Get all models (built-in + custom).
452
- * If models.json had errors, returns only built-in models.
453
- */
454
- getAll() {
455
- return this.models;
456
- }
457
- /**
458
- * Get only models that have auth configured.
459
- * This is a fast check that doesn't refresh OAuth tokens.
460
- */
461
- getAvailable() {
462
- return this.models.filter((m) => this.hasConfiguredAuth(m));
463
- }
464
- /**
465
- * Find a model by provider and ID.
466
- */
467
- find(provider, modelId) {
468
- return this.models.find((m) => m.provider === provider && m.id === modelId);
469
- }
470
- /**
471
- * Get API key for a model.
472
- */
473
- hasConfiguredAuth(model) {
474
- return (this.authStorage.hasAuth(model.provider) ||
475
- this.providerRequestConfigs.get(model.provider)?.apiKey !== undefined);
476
- }
477
- getModelRequestKey(provider, modelId) {
478
- return `${provider}:${modelId}`;
479
- }
480
- storeProviderRequestConfig(providerName, config) {
481
- if (!config.apiKey && !config.headers && !config.authHeader) {
482
- return;
483
- }
484
- this.providerRequestConfigs.set(providerName, {
485
- apiKey: config.apiKey,
486
- headers: config.headers,
487
- authHeader: config.authHeader,
488
- });
489
- }
490
- storeModelHeaders(providerName, modelId, headers) {
491
- const key = this.getModelRequestKey(providerName, modelId);
492
- if (!headers || Object.keys(headers).length === 0) {
493
- this.modelRequestHeaders.delete(key);
494
- return;
495
- }
496
- this.modelRequestHeaders.set(key, headers);
497
- }
498
- /**
499
- * Get API key and request headers for a model.
500
- */
501
- async getApiKeyAndHeaders(model) {
502
- try {
503
- const providerConfig = this.providerRequestConfigs.get(model.provider);
504
- const apiKeyFromAuthStorage = await this.authStorage.getApiKey(model.provider, { includeFallback: false });
505
- const apiKey = apiKeyFromAuthStorage ??
506
- (providerConfig?.apiKey
507
- ? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider "${model.provider}"`)
508
- : undefined);
509
- const providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider "${model.provider}"`);
510
- const modelHeaders = resolveHeadersOrThrow(this.modelRequestHeaders.get(this.getModelRequestKey(model.provider, model.id)), `model "${model.provider}/${model.id}"`);
511
- let headers = model.headers || providerHeaders || modelHeaders
512
- ? { ...model.headers, ...providerHeaders, ...modelHeaders }
513
- : undefined;
514
- if (providerConfig?.authHeader) {
515
- if (!apiKey) {
516
- return { ok: false, error: `No API key found for "${model.provider}"` };
517
- }
518
- headers = { ...headers, Authorization: `Bearer ${apiKey}` };
519
- }
520
- return {
521
- ok: true,
522
- apiKey,
523
- headers: headers && Object.keys(headers).length > 0 ? headers : undefined,
524
- };
525
- }
526
- catch (error) {
527
- return {
528
- ok: false,
529
- error: error instanceof Error ? error.message : String(error),
530
- };
531
- }
532
- }
533
- /**
534
- * Return auth status for a provider, including request auth configured in models.json.
535
- * This intentionally does not execute command-backed config values.
536
- */
537
- getProviderAuthStatus(provider) {
538
- const authStatus = this.authStorage.getAuthStatus(provider);
539
- if (authStatus.source) {
540
- return authStatus;
541
- }
542
- const providerApiKey = this.providerRequestConfigs.get(provider)?.apiKey;
543
- if (!providerApiKey) {
544
- return authStatus;
545
- }
546
- if (providerApiKey.startsWith("!")) {
547
- return { configured: true, source: "models_json_command" };
548
- }
549
- if (process.env[providerApiKey]) {
550
- return { configured: true, source: "environment", label: providerApiKey };
551
- }
552
- return { configured: true, source: "models_json_key" };
553
- }
554
- /**
555
- * Get API key for a provider.
556
- */
557
- async getApiKeyForProvider(provider) {
558
- const apiKey = await this.authStorage.getApiKey(provider, { includeFallback: false });
559
- if (apiKey !== undefined) {
560
- return apiKey;
561
- }
562
- const providerApiKey = this.providerRequestConfigs.get(provider)?.apiKey;
563
- return providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;
564
- }
565
- /**
566
- * Check if a model is using OAuth credentials (subscription).
567
- */
568
- isUsingOAuth(model) {
569
- const cred = this.authStorage.get(model.provider);
570
- return cred?.type === "oauth";
571
- }
572
- /**
573
- * Register a provider dynamically (from extensions).
574
- *
575
- * If provider has models: replaces all existing models for this provider.
576
- * If provider has only baseUrl/headers: overrides existing models' URLs.
577
- * If provider has oauth: registers OAuth provider for /login support.
578
- */
579
- registerProvider(providerName, config) {
580
- this.validateProviderConfig(providerName, config);
581
- this.applyProviderConfig(providerName, config);
582
- this.upsertRegisteredProvider(providerName, config);
583
- }
584
- /**
585
- * Unregister a previously registered provider.
586
- *
587
- * Removes the provider from the registry and reloads models from disk so that
588
- * built-in models overridden by this provider are restored to their original state.
589
- * Also resets dynamic OAuth and API stream registrations before reapplying
590
- * remaining dynamic providers.
591
- * Has no effect if the provider was never registered.
592
- */
593
- unregisterProvider(providerName) {
594
- if (!this.registeredProviders.has(providerName))
595
- return;
596
- this.registeredProviders.delete(providerName);
597
- this.refresh();
598
- }
599
- /**
600
- * Upsert a provider config into registeredProviders.
601
- * If the provider is already registered, defined values in the incoming config
602
- * override existing ones; undefined values are preserved from the stored config.
603
- * If the provider is not registered, the incoming config is stored as-is.
604
- */
605
- upsertRegisteredProvider(providerName, config) {
606
- const existing = this.registeredProviders.get(providerName);
607
- if (!existing) {
608
- this.registeredProviders.set(providerName, config);
609
- return;
610
- }
611
- for (const k of Object.keys(config)) {
612
- if (config[k] !== undefined) {
613
- existing[k] = config[k];
614
- }
615
- }
616
- }
617
- validateProviderConfig(providerName, config) {
618
- if (config.streamSimple && !config.api) {
619
- throw new Error(`Provider ${providerName}: "api" is required when registering streamSimple.`);
620
- }
621
- if (!config.models || config.models.length === 0) {
622
- return;
623
- }
624
- if (!config.baseUrl) {
625
- throw new Error(`Provider ${providerName}: "baseUrl" is required when defining models.`);
626
- }
627
- if (!config.apiKey && !config.oauth) {
628
- throw new Error(`Provider ${providerName}: "apiKey" or "oauth" is required when defining models.`);
629
- }
630
- for (const modelDef of config.models) {
631
- const api = modelDef.api || config.api;
632
- if (!api) {
633
- throw new Error(`Provider ${providerName}, model ${modelDef.id}: no "api" specified.`);
634
- }
635
- }
636
- }
637
- applyProviderConfig(providerName, config) {
638
- // Register OAuth provider if provided
639
- if (config.oauth) {
640
- // Ensure the OAuth provider ID matches the provider name
641
- const oauthProvider = {
642
- ...config.oauth,
643
- id: providerName,
644
- };
645
- registerOAuthProvider(oauthProvider);
646
- }
647
- if (config.streamSimple) {
648
- const streamSimple = config.streamSimple;
649
- registerApiProvider({
650
- api: config.api,
651
- stream: (model, context, options) => streamSimple(model, context, options),
652
- streamSimple,
653
- }, `provider:${providerName}`);
654
- }
655
- this.storeProviderRequestConfig(providerName, config);
656
- if (config.models && config.models.length > 0) {
657
- // Full replacement: remove existing models for this provider
658
- this.models = this.models.filter((m) => m.provider !== providerName);
659
- // Parse and add new models
660
- for (const modelDef of config.models) {
661
- const api = modelDef.api || config.api;
662
- this.storeModelHeaders(providerName, modelDef.id, modelDef.headers);
663
- this.models.push({
664
- id: modelDef.id,
665
- name: modelDef.name,
666
- api: api,
667
- provider: providerName,
668
- baseUrl: config.baseUrl,
669
- reasoning: modelDef.reasoning,
670
- input: modelDef.input,
671
- cost: modelDef.cost,
672
- contextWindow: modelDef.contextWindow,
673
- maxTokens: modelDef.maxTokens,
674
- headers: undefined,
675
- compat: modelDef.compat,
676
- });
677
- }
678
- // Apply OAuth modifyModels if credentials exist (e.g., to update baseUrl)
679
- if (config.oauth?.modifyModels) {
680
- const cred = this.authStorage.get(providerName);
681
- if (cred?.type === "oauth") {
682
- this.models = config.oauth.modifyModels(this.models, cred);
683
- }
684
- }
685
- }
686
- else if (config.baseUrl || config.headers) {
687
- // Override-only: update baseUrl for existing models. Request headers are resolved per request.
688
- this.models = this.models.map((m) => {
689
- if (m.provider !== providerName)
690
- return m;
691
- return {
692
- ...m,
693
- baseUrl: config.baseUrl ?? m.baseUrl,
694
- };
695
- });
696
- }
697
- }
698
- }
699
- //# sourceMappingURL=model-registry.js.map