@bastani/atomic 0.9.11-alpha.7 → 0.9.11-alpha.8

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 (325) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +3 -5
  3. package/dist/builtin/intercom/package.json +1 -1
  4. package/dist/builtin/mcp/package.json +1 -1
  5. package/dist/builtin/mcp/sampling-handler.ts +1 -5
  6. package/dist/builtin/subagents/package.json +1 -1
  7. package/dist/builtin/web-access/package.json +1 -1
  8. package/dist/builtin/workflows/CHANGELOG.md +1 -0
  9. package/dist/builtin/workflows/README.md +1 -1
  10. package/dist/builtin/workflows/package.json +1 -1
  11. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +1 -24
  12. package/dist/builtin/workflows/src/extension/index.bundle.mjs +31 -28
  13. package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +26 -0
  14. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +3 -2
  15. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +5 -5
  16. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +3 -3
  17. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +2 -2
  18. package/dist/cli/list-models.d.ts +2 -2
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js +5 -5
  21. package/dist/cli/list-models.js.map +1 -1
  22. package/dist/core/agent-session-accessors.js +1 -1
  23. package/dist/core/agent-session-accessors.js.map +1 -1
  24. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  25. package/dist/core/agent-session-auto-compaction.js +2 -5
  26. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  27. package/dist/core/agent-session-compaction.js +1 -1
  28. package/dist/core/agent-session-compaction.js.map +1 -1
  29. package/dist/core/agent-session-extension-bindings.js +5 -5
  30. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  31. package/dist/core/agent-session-methods.d.ts +4 -4
  32. package/dist/core/agent-session-methods.d.ts.map +1 -1
  33. package/dist/core/agent-session-methods.js.map +1 -1
  34. package/dist/core/agent-session-models.d.ts +1 -1
  35. package/dist/core/agent-session-models.d.ts.map +1 -1
  36. package/dist/core/agent-session-models.js +18 -14
  37. package/dist/core/agent-session-models.js.map +1 -1
  38. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  39. package/dist/core/agent-session-post-tool-compaction.js +2 -4
  40. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  41. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  42. package/dist/core/agent-session-prompt.js +3 -7
  43. package/dist/core/agent-session-prompt.js.map +1 -1
  44. package/dist/core/agent-session-retry.js +1 -1
  45. package/dist/core/agent-session-retry.js.map +1 -1
  46. package/dist/core/agent-session-runtime-auth.d.ts +3 -3
  47. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
  48. package/dist/core/agent-session-runtime-auth.js +4 -14
  49. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  50. package/dist/core/agent-session-runtime.d.ts +1 -1
  51. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  52. package/dist/core/agent-session-runtime.js +3 -3
  53. package/dist/core/agent-session-runtime.js.map +1 -1
  54. package/dist/core/agent-session-services.d.ts +3 -8
  55. package/dist/core/agent-session-services.d.ts.map +1 -1
  56. package/dist/core/agent-session-services.js +16 -23
  57. package/dist/core/agent-session-services.js.map +1 -1
  58. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  59. package/dist/core/agent-session-tool-registry.js +2 -1
  60. package/dist/core/agent-session-tool-registry.js.map +1 -1
  61. package/dist/core/agent-session-types.d.ts +2 -2
  62. package/dist/core/agent-session-types.d.ts.map +1 -1
  63. package/dist/core/agent-session-types.js.map +1 -1
  64. package/dist/core/agent-session.d.ts +2 -2
  65. package/dist/core/agent-session.d.ts.map +1 -1
  66. package/dist/core/agent-session.js +1 -1
  67. package/dist/core/agent-session.js.map +1 -1
  68. package/dist/core/auth-storage-backends.d.ts +1 -0
  69. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  70. package/dist/core/auth-storage-backends.js +18 -4
  71. package/dist/core/auth-storage-backends.js.map +1 -1
  72. package/dist/core/auth-storage.d.ts +12 -139
  73. package/dist/core/auth-storage.d.ts.map +1 -1
  74. package/dist/core/auth-storage.js +68 -374
  75. package/dist/core/auth-storage.js.map +1 -1
  76. package/dist/core/copilot-env-routing.d.ts +36 -0
  77. package/dist/core/copilot-env-routing.d.ts.map +1 -0
  78. package/dist/core/copilot-env-routing.js +94 -0
  79. package/dist/core/copilot-env-routing.js.map +1 -0
  80. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  81. package/dist/core/extensions/loader-virtual-modules.js +10 -2
  82. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  83. package/dist/core/extensions/provider-types.d.ts +0 -40
  84. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  85. package/dist/core/extensions/provider-types.js.map +1 -1
  86. package/dist/core/fallback-models.d.ts +4 -4
  87. package/dist/core/fallback-models.d.ts.map +1 -1
  88. package/dist/core/fallback-models.js +3 -3
  89. package/dist/core/fallback-models.js.map +1 -1
  90. package/dist/core/model-config.d.ts +542 -0
  91. package/dist/core/model-config.d.ts.map +1 -0
  92. package/dist/core/{model-registry-schemas.js → model-config.js} +85 -34
  93. package/dist/core/model-config.js.map +1 -0
  94. package/dist/core/model-registry.d.ts +25 -85
  95. package/dist/core/model-registry.d.ts.map +1 -1
  96. package/dist/core/model-registry.js +65 -388
  97. package/dist/core/model-registry.js.map +1 -1
  98. package/dist/core/model-resolver-cli.d.ts +2 -2
  99. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  100. package/dist/core/model-resolver-cli.js +2 -2
  101. package/dist/core/model-resolver-cli.js.map +1 -1
  102. package/dist/core/model-resolver-initial.d.ts +4 -4
  103. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  104. package/dist/core/model-resolver-initial.js +17 -17
  105. package/dist/core/model-resolver-initial.js.map +1 -1
  106. package/dist/core/model-resolver-scope.d.ts +3 -3
  107. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  108. package/dist/core/model-resolver-scope.js +4 -4
  109. package/dist/core/model-resolver-scope.js.map +1 -1
  110. package/dist/core/model-runtime-auth.d.ts +7 -0
  111. package/dist/core/model-runtime-auth.d.ts.map +1 -0
  112. package/dist/core/model-runtime-auth.js +14 -0
  113. package/dist/core/model-runtime-auth.js.map +1 -0
  114. package/dist/core/model-runtime-providers.d.ts +6 -0
  115. package/dist/core/model-runtime-providers.d.ts.map +1 -0
  116. package/dist/core/model-runtime-providers.js +22 -0
  117. package/dist/core/model-runtime-providers.js.map +1 -0
  118. package/dist/core/model-runtime-restoration.d.ts +6 -0
  119. package/dist/core/model-runtime-restoration.d.ts.map +1 -0
  120. package/dist/core/model-runtime-restoration.js +21 -0
  121. package/dist/core/model-runtime-restoration.js.map +1 -0
  122. package/dist/core/model-runtime-snapshot.d.ts +16 -0
  123. package/dist/core/model-runtime-snapshot.d.ts.map +1 -0
  124. package/dist/core/model-runtime-snapshot.js +52 -0
  125. package/dist/core/model-runtime-snapshot.js.map +1 -0
  126. package/dist/core/model-runtime-streaming.d.ts +17 -0
  127. package/dist/core/model-runtime-streaming.d.ts.map +1 -0
  128. package/dist/core/model-runtime-streaming.js +66 -0
  129. package/dist/core/model-runtime-streaming.js.map +1 -0
  130. package/dist/core/model-runtime-types.d.ts +21 -0
  131. package/dist/core/model-runtime-types.d.ts.map +1 -0
  132. package/dist/core/model-runtime-types.js +2 -0
  133. package/dist/core/model-runtime-types.js.map +1 -0
  134. package/dist/core/model-runtime.d.ts +50 -29
  135. package/dist/core/model-runtime.d.ts.map +1 -1
  136. package/dist/core/model-runtime.js +330 -90
  137. package/dist/core/model-runtime.js.map +1 -1
  138. package/dist/core/models-store.d.ts +2 -10
  139. package/dist/core/models-store.d.ts.map +1 -1
  140. package/dist/core/models-store.js +2 -29
  141. package/dist/core/models-store.js.map +1 -1
  142. package/dist/core/oauth-login.d.ts +24 -0
  143. package/dist/core/oauth-login.d.ts.map +1 -0
  144. package/dist/core/oauth-login.js +87 -0
  145. package/dist/core/oauth-login.js.map +1 -0
  146. package/dist/core/oauth-provider-metadata.d.ts +5 -0
  147. package/dist/core/oauth-provider-metadata.d.ts.map +1 -0
  148. package/dist/core/oauth-provider-metadata.js +19 -0
  149. package/dist/core/oauth-provider-metadata.js.map +1 -0
  150. package/dist/core/provider-composer-internal.d.ts +53 -0
  151. package/dist/core/provider-composer-internal.d.ts.map +1 -0
  152. package/dist/core/provider-composer-internal.js +273 -0
  153. package/dist/core/provider-composer-internal.js.map +1 -0
  154. package/dist/core/provider-composer.d.ts +16 -0
  155. package/dist/core/provider-composer.d.ts.map +1 -0
  156. package/dist/core/provider-composer.js +108 -0
  157. package/dist/core/provider-composer.js.map +1 -0
  158. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  159. package/dist/core/remote-catalog-provider.js +74 -122
  160. package/dist/core/remote-catalog-provider.js.map +1 -1
  161. package/dist/core/resolve-config-value.d.ts +8 -7
  162. package/dist/core/resolve-config-value.d.ts.map +1 -1
  163. package/dist/core/resolve-config-value.js +26 -23
  164. package/dist/core/resolve-config-value.js.map +1 -1
  165. package/dist/core/runtime-credentials.d.ts +16 -0
  166. package/dist/core/runtime-credentials.d.ts.map +1 -0
  167. package/dist/core/runtime-credentials.js +42 -0
  168. package/dist/core/runtime-credentials.js.map +1 -0
  169. package/dist/core/sdk-types.d.ts +1 -7
  170. package/dist/core/sdk-types.d.ts.map +1 -1
  171. package/dist/core/sdk-types.js.map +1 -1
  172. package/dist/core/sdk.d.ts.map +1 -1
  173. package/dist/core/sdk.js +27 -28
  174. package/dist/core/sdk.js.map +1 -1
  175. package/dist/extensions/llama/index.js +1 -1
  176. package/dist/extensions/llama/index.js.map +1 -1
  177. package/dist/extensions/llama/provider.d.ts +2 -4
  178. package/dist/extensions/llama/provider.d.ts.map +1 -1
  179. package/dist/extensions/llama/provider.js +25 -17
  180. package/dist/extensions/llama/provider.js.map +1 -1
  181. package/dist/index.d.ts +2 -3
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +3 -4
  184. package/dist/index.js.map +1 -1
  185. package/dist/main-runtime-api-key.d.ts +6 -0
  186. package/dist/main-runtime-api-key.d.ts.map +1 -0
  187. package/dist/main-runtime-api-key.js +6 -0
  188. package/dist/main-runtime-api-key.js.map +1 -0
  189. package/dist/main-session-options.d.ts +2 -2
  190. package/dist/main-session-options.d.ts.map +1 -1
  191. package/dist/main-session-options.js +3 -3
  192. package/dist/main-session-options.js.map +1 -1
  193. package/dist/main.d.ts.map +1 -1
  194. package/dist/main.js +9 -11
  195. package/dist/main.js.map +1 -1
  196. package/dist/modes/interactive/components/footer.js +1 -1
  197. package/dist/modes/interactive/components/footer.js.map +1 -1
  198. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  199. package/dist/modes/interactive/components/login-dialog.js +1 -3
  200. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  201. package/dist/modes/interactive/components/model-selector.d.ts +4 -3
  202. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  203. package/dist/modes/interactive/components/model-selector.js +56 -73
  204. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  205. package/dist/modes/interactive/components/oauth-selector.d.ts +4 -3
  206. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  207. package/dist/modes/interactive/components/oauth-selector.js +15 -24
  208. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  209. package/dist/modes/interactive/interactive-agent-events.js +1 -1
  210. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  211. package/dist/modes/interactive/interactive-auth-login.js +20 -31
  212. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  213. package/dist/modes/interactive/interactive-auth-routing.d.ts +1 -1
  214. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  215. package/dist/modes/interactive/interactive-auth-routing.js +21 -47
  216. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  217. package/dist/modes/interactive/interactive-autocomplete.js +3 -3
  218. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  219. package/dist/modes/interactive/interactive-deferred-startup.js +8 -8
  220. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  221. package/dist/modes/interactive/interactive-extension-runtime.js +2 -1
  222. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  223. package/dist/modes/interactive/interactive-model-catalog-startup.js +2 -2
  224. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  225. package/dist/modes/interactive/interactive-model-routing.js +11 -11
  226. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  227. package/dist/modes/interactive/interactive-render-chat.js +1 -1
  228. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  229. package/dist/modes/interactive/interactive-slash-commands.js +2 -2
  230. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  231. package/dist/modes/interactive/interactive-startup.js +1 -1
  232. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  233. package/dist/modes/interactive-engine/isolated-auth.d.ts +2 -2
  234. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
  235. package/dist/modes/interactive-engine/isolated-auth.js +4 -3
  236. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  237. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  238. package/dist/modes/interactive-engine/isolated-runtime.js +4 -3
  239. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  240. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +0 -1
  241. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  242. package/dist/modes/interactive-engine/remote-model-catalog.js +11 -50
  243. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  244. package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
  245. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  246. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  247. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  248. package/dist/modes/rpc/rpc-command-handler.js +26 -19
  249. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  250. package/dist/modes/rpc/rpc-oauth-client.d.ts +1 -1
  251. package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -1
  252. package/dist/modes/rpc/rpc-oauth-client.js +1 -1
  253. package/dist/modes/rpc/rpc-oauth-client.js.map +1 -1
  254. package/dist/modes/rpc/rpc-oauth-interaction.d.ts +1 -1
  255. package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -1
  256. package/dist/modes/rpc/rpc-oauth-interaction.js +1 -1
  257. package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -1
  258. package/dist/modes/rpc/rpc-provider-auth.d.ts +4 -5
  259. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
  260. package/dist/modes/rpc/rpc-provider-auth.js +19 -66
  261. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  262. package/dist/modes/rpc/rpc-session-binding.js +1 -1
  263. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  264. package/dist/modes/rpc/rpc-types.d.ts +7 -4
  265. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  266. package/dist/modes/rpc/rpc-types.js.map +1 -1
  267. package/dist/package-manager-cli.d.ts.map +1 -1
  268. package/dist/package-manager-cli.js +5 -7
  269. package/dist/package-manager-cli.js.map +1 -1
  270. package/docs/changelog.mdx +1 -1
  271. package/docs/custom-provider.md +1 -1
  272. package/docs/models.md +4 -6
  273. package/docs/providers.md +13 -0
  274. package/docs/quickstart.md +2 -1
  275. package/docs/sdk.md +32 -49
  276. package/docs/workflows.md +3 -3
  277. package/examples/sdk/02-custom-model.ts +8 -10
  278. package/examples/sdk/09-api-keys-and-oauth.ts +17 -23
  279. package/examples/sdk/12-full-control.ts +9 -11
  280. package/examples/sdk/README.md +17 -21
  281. package/npm-shrinkwrap.json +23 -23
  282. package/package.json +2 -2
  283. package/dist/core/model-registry-auth.d.ts +0 -10
  284. package/dist/core/model-registry-auth.d.ts.map +0 -1
  285. package/dist/core/model-registry-auth.js +0 -98
  286. package/dist/core/model-registry-auth.js.map +0 -1
  287. package/dist/core/model-registry-builtins.d.ts +0 -8
  288. package/dist/core/model-registry-builtins.d.ts.map +0 -1
  289. package/dist/core/model-registry-builtins.js +0 -104
  290. package/dist/core/model-registry-builtins.js.map +0 -1
  291. package/dist/core/model-registry-custom-loader.d.ts +0 -3
  292. package/dist/core/model-registry-custom-loader.d.ts.map +0 -1
  293. package/dist/core/model-registry-custom-loader.js +0 -255
  294. package/dist/core/model-registry-custom-loader.js.map +0 -1
  295. package/dist/core/model-registry-dynamic.d.ts +0 -7
  296. package/dist/core/model-registry-dynamic.d.ts.map +0 -1
  297. package/dist/core/model-registry-dynamic.js +0 -189
  298. package/dist/core/model-registry-dynamic.js.map +0 -1
  299. package/dist/core/model-registry-extension-refresh.d.ts +0 -23
  300. package/dist/core/model-registry-extension-refresh.d.ts.map +0 -1
  301. package/dist/core/model-registry-extension-refresh.js +0 -32
  302. package/dist/core/model-registry-extension-refresh.js.map +0 -1
  303. package/dist/core/model-registry-loader.d.ts +0 -5
  304. package/dist/core/model-registry-loader.d.ts.map +0 -1
  305. package/dist/core/model-registry-loader.js +0 -29
  306. package/dist/core/model-registry-loader.js.map +0 -1
  307. package/dist/core/model-registry-schemas.d.ts +0 -1399
  308. package/dist/core/model-registry-schemas.d.ts.map +0 -1
  309. package/dist/core/model-registry-schemas.js.map +0 -1
  310. package/dist/core/model-registry-types.d.ts +0 -91
  311. package/dist/core/model-registry-types.d.ts.map +0 -1
  312. package/dist/core/model-registry-types.js +0 -2
  313. package/dist/core/model-registry-types.js.map +0 -1
  314. package/dist/core/model-registry-validation.d.ts +0 -7
  315. package/dist/core/model-registry-validation.d.ts.map +0 -1
  316. package/dist/core/model-registry-validation.js +0 -12
  317. package/dist/core/model-registry-validation.js.map +0 -1
  318. package/dist/core/oauth-compat.d.ts +0 -17
  319. package/dist/core/oauth-compat.d.ts.map +0 -1
  320. package/dist/core/oauth-compat.js +0 -2
  321. package/dist/core/oauth-compat.js.map +0 -1
  322. package/dist/core/oauth-provider-bridge.d.ts +0 -63
  323. package/dist/core/oauth-provider-bridge.d.ts.map +0 -1
  324. package/dist/core/oauth-provider-bridge.js +0 -232
  325. package/dist/core/oauth-provider-bridge.js.map +0 -1
@@ -6,26 +6,25 @@
6
6
 
7
7
  import { getModel } from "@earendil-works/pi-ai/compat";
8
8
  import {
9
- AuthStorage,
10
9
  createAgentSession,
11
10
  createExtensionRuntime,
12
- ModelRegistry,
11
+ ModelRuntime,
13
12
  type ResourceLoader,
14
13
  SessionManager,
15
14
  SettingsManager,
16
15
  } from "@bastani/atomic";
17
16
 
18
- // Custom auth storage location
19
- const authStorage = AuthStorage.create("/tmp/my-agent/auth.json");
17
+ // Custom credential location with no custom models.json
18
+ const modelRuntime = await ModelRuntime.create({
19
+ authPath: "/tmp/my-agent/auth.json",
20
+ modelsPath: null,
21
+ });
20
22
 
21
23
  // Runtime API key override (not persisted)
22
24
  if (process.env.MY_ANTHROPIC_KEY) {
23
- authStorage.setRuntimeApiKey("anthropic", process.env.MY_ANTHROPIC_KEY);
25
+ await modelRuntime.setRuntimeApiKey("anthropic", process.env.MY_ANTHROPIC_KEY);
24
26
  }
25
27
 
26
- // Model registry with no custom models.json
27
- const modelRegistry = ModelRegistry.inMemory(authStorage);
28
-
29
28
  const model = getModel("anthropic", "claude-sonnet-4-5");
30
29
  if (!model) throw new Error("Model not found");
31
30
 
@@ -46,7 +45,7 @@ const resourceLoader: ResourceLoader = {
46
45
  getSystemPrompt: () => `You are a minimal assistant.
47
46
  Available: read, bash. Be concise.`,
48
47
  getAppendSystemPrompt: () => [],
49
- extendResources: () => {},
48
+ extendResources: async () => {},
50
49
  reload: async () => {},
51
50
  };
52
51
 
@@ -55,8 +54,7 @@ const { session } = await createAgentSession({
55
54
  agentDir: "/tmp/my-agent",
56
55
  model,
57
56
  thinkingLevel: "off",
58
- authStorage,
59
- modelRegistry,
57
+ modelRuntime,
60
58
  resourceLoader,
61
59
  tools: ["read", "bash"],
62
60
  sessionManager: SessionManager.inMemory(cwd),
@@ -34,50 +34,48 @@ bun examples/sdk/01-minimal.ts
34
34
  ```typescript
35
35
  import { getModel } from "@earendil-works/pi-ai/compat";
36
36
  import {
37
- AuthStorage,
38
37
  createAgentSession,
39
38
  DefaultResourceLoader,
40
- ModelRegistry,
39
+ ModelRuntime,
41
40
  SessionManager,
42
41
  SettingsManager,
43
42
  } from "@bastani/atomic";
44
43
 
45
- // Auth and models setup
46
- const authStorage = AuthStorage.create();
47
- const modelRegistry = ModelRegistry.create(authStorage);
44
+ // Credential and model setup
45
+ const modelRuntime = await ModelRuntime.create();
48
46
 
49
- // Minimal
50
- const { session } = await createAgentSession({ authStorage, modelRegistry });
47
+ // Minimal (omitting modelRuntime uses the active agent directory)
48
+ const { session } = await createAgentSession();
51
49
 
52
50
  // Custom model
53
51
  const model = getModel("anthropic", "claude-opus-4-5");
54
- const { session } = await createAgentSession({ model, thinkingLevel: "high", authStorage, modelRegistry });
52
+ const { session } = await createAgentSession({ model, thinkingLevel: "high", modelRuntime });
55
53
 
56
54
  // Modify prompt
57
55
  const loader = new DefaultResourceLoader({
58
56
  systemPromptOverride: (base) => `${base}\n\nBe concise.`,
59
57
  });
60
58
  await loader.reload();
61
- const { session } = await createAgentSession({ resourceLoader: loader, authStorage, modelRegistry });
59
+ const { session } = await createAgentSession({ resourceLoader: loader, modelRuntime });
62
60
 
63
61
  // Read-only
64
- const { session } = await createAgentSession({ tools: ["read", "search", "find", "ls"], authStorage, modelRegistry });
62
+ const { session } = await createAgentSession({ tools: ["read", "search", "find", "ls"], modelRuntime });
65
63
 
66
64
  // Defaults minus one tool
67
- const { session } = await createAgentSession({ excludedTools: ["ask_user_question"], authStorage, modelRegistry });
65
+ const { session } = await createAgentSession({ excludedTools: ["ask_user_question"], modelRuntime });
68
66
 
69
67
  // In-memory
70
68
  const { session } = await createAgentSession({
71
69
  sessionManager: SessionManager.inMemory(),
72
- authStorage,
73
- modelRegistry,
70
+ modelRuntime,
74
71
  });
75
72
 
76
73
  // Full control
77
- const customAuth = AuthStorage.create("/my/app/auth.json");
78
- customAuth.setRuntimeApiKey("anthropic", process.env.MY_KEY!);
79
- const customRegistry = ModelRegistry.create(customAuth);
80
-
74
+ const customRuntime = await ModelRuntime.create({
75
+ authPath: "/my/app/auth.json",
76
+ modelsPath: "/my/app/models.json",
77
+ });
78
+ await customRuntime.setRuntimeApiKey("anthropic", process.env.MY_KEY!);
81
79
  const resourceLoader = new DefaultResourceLoader({
82
80
  systemPromptOverride: () => "You are helpful.",
83
81
  extensionFactories: [myExtension],
@@ -89,8 +87,7 @@ await resourceLoader.reload();
89
87
 
90
88
  const { session } = await createAgentSession({
91
89
  model,
92
- authStorage: customAuth,
93
- modelRegistry: customRegistry,
90
+ modelRuntime: customRuntime,
94
91
  resourceLoader,
95
92
  tools: ["read", "bash", "my_tool"],
96
93
  customTools: [myTool],
@@ -111,8 +108,7 @@ await session.prompt("Hello");
111
108
 
112
109
  | Option | Default | Description |
113
110
  |--------|---------|-------------|
114
- | `authStorage` | `AuthStorage.create()` | Credential storage |
115
- | `modelRegistry` | `ModelRegistry.create(authStorage)` | Model registry |
111
+ | `modelRuntime` | Runtime created from the active agent directory | Credential and model runtime override |
116
112
  | `cwd` | `process.cwd()` | Working directory |
117
113
  | `agentDir` | `~/.atomic/agent` (legacy `~/.pi/agent` also works) | Config directory |
118
114
  | `model` | From settings/first available | Model to use |
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.11-alpha.7",
3
+ "version": "0.9.11-alpha.8",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bastani/atomic",
9
- "version": "0.9.11-alpha.7",
9
+ "version": "0.9.11-alpha.8",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@bastani/atomic-natives": "0.9.11-alpha.7",
12
+ "@bastani/atomic-natives": "0.9.11-alpha.8",
13
13
  "@dbos-inc/dbos-sdk": "4.23.6",
14
14
  "@earendil-works/pi-agent-core": "^0.82.1",
15
15
  "@earendil-works/pi-ai": "^0.82.1",
@@ -515,16 +515,16 @@
515
515
  }
516
516
  },
517
517
  "node_modules/@bastani/atomic-natives": {
518
- "version": "0.9.11-alpha.7",
519
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.11-alpha.7.tgz",
518
+ "version": "0.9.11-alpha.8",
519
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.11-alpha.8.tgz",
520
520
  "license": "MIT",
521
521
  "optionalDependencies": {
522
- "@bastani/atomic-natives-darwin-arm64": "0.9.11-alpha.7",
523
- "@bastani/atomic-natives-darwin-x64": "0.9.11-alpha.7",
524
- "@bastani/atomic-natives-linux-arm64-gnu": "0.9.11-alpha.7",
525
- "@bastani/atomic-natives-linux-x64-gnu": "0.9.11-alpha.7",
526
- "@bastani/atomic-natives-win32-arm64-msvc": "0.9.11-alpha.7",
527
- "@bastani/atomic-natives-win32-x64-msvc": "0.9.11-alpha.7"
522
+ "@bastani/atomic-natives-darwin-arm64": "0.9.11-alpha.8",
523
+ "@bastani/atomic-natives-darwin-x64": "0.9.11-alpha.8",
524
+ "@bastani/atomic-natives-linux-arm64-gnu": "0.9.11-alpha.8",
525
+ "@bastani/atomic-natives-linux-x64-gnu": "0.9.11-alpha.8",
526
+ "@bastani/atomic-natives-win32-arm64-msvc": "0.9.11-alpha.8",
527
+ "@bastani/atomic-natives-win32-x64-msvc": "0.9.11-alpha.8"
528
528
  },
529
529
  "engines": {
530
530
  "bun": ">=1.3.14",
@@ -532,8 +532,8 @@
532
532
  }
533
533
  },
534
534
  "node_modules/@bastani/atomic-natives-darwin-arm64": {
535
- "version": "0.9.11-alpha.7",
536
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.11-alpha.7.tgz",
535
+ "version": "0.9.11-alpha.8",
536
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.11-alpha.8.tgz",
537
537
  "license": "MIT",
538
538
  "os": [
539
539
  "darwin"
@@ -544,8 +544,8 @@
544
544
  "optional": true
545
545
  },
546
546
  "node_modules/@bastani/atomic-natives-darwin-x64": {
547
- "version": "0.9.11-alpha.7",
548
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.11-alpha.7.tgz",
547
+ "version": "0.9.11-alpha.8",
548
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.11-alpha.8.tgz",
549
549
  "license": "MIT",
550
550
  "os": [
551
551
  "darwin"
@@ -556,8 +556,8 @@
556
556
  "optional": true
557
557
  },
558
558
  "node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
559
- "version": "0.9.11-alpha.7",
560
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.11-alpha.7.tgz",
559
+ "version": "0.9.11-alpha.8",
560
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.11-alpha.8.tgz",
561
561
  "license": "MIT",
562
562
  "os": [
563
563
  "linux"
@@ -571,8 +571,8 @@
571
571
  "optional": true
572
572
  },
573
573
  "node_modules/@bastani/atomic-natives-linux-x64-gnu": {
574
- "version": "0.9.11-alpha.7",
575
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.11-alpha.7.tgz",
574
+ "version": "0.9.11-alpha.8",
575
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.11-alpha.8.tgz",
576
576
  "license": "MIT",
577
577
  "os": [
578
578
  "linux"
@@ -586,8 +586,8 @@
586
586
  "optional": true
587
587
  },
588
588
  "node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
589
- "version": "0.9.11-alpha.7",
590
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.11-alpha.7.tgz",
589
+ "version": "0.9.11-alpha.8",
590
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.11-alpha.8.tgz",
591
591
  "license": "MIT",
592
592
  "os": [
593
593
  "win32"
@@ -598,8 +598,8 @@
598
598
  "optional": true
599
599
  },
600
600
  "node_modules/@bastani/atomic-natives-win32-x64-msvc": {
601
- "version": "0.9.11-alpha.7",
602
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.11-alpha.7.tgz",
601
+ "version": "0.9.11-alpha.8",
602
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.11-alpha.8.tgz",
603
603
  "license": "MIT",
604
604
  "os": [
605
605
  "win32"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.11-alpha.7",
3
+ "version": "0.9.11-alpha.8",
4
4
  "description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "atomicConfig": {
@@ -78,7 +78,7 @@
78
78
  "prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
79
79
  },
80
80
  "dependencies": {
81
- "@bastani/atomic-natives": "0.9.11-alpha.7",
81
+ "@bastani/atomic-natives": "0.9.11-alpha.8",
82
82
  "@dbos-inc/dbos-sdk": "4.23.6",
83
83
  "@earendil-works/pi-agent-core": "^0.82.1",
84
84
  "@earendil-works/pi-ai": "^0.82.1",
@@ -1,10 +0,0 @@
1
- import type { ModelAuth } from "@earendil-works/pi-ai";
2
- import type { Api, Model } from "@earendil-works/pi-ai/compat";
3
- import type { AuthStatus, AuthStorage } from "./auth-storage.ts";
4
- import type { ProviderRequestConfig, ResolvedRequestAuth } from "./model-registry-types.ts";
5
- import type { ProviderApiKeyAuthResult } from "./extensions/provider-types.ts";
6
- export declare function getProviderResolvedAuth(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): Promise<ProviderApiKeyAuthResult | undefined>;
7
- export declare function getModelRequestAuth(model: Model<Api>, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>, modelRequestHeaders: Map<string, Record<string, string>>, providerAuth?: ModelAuth): Promise<ResolvedRequestAuth>;
8
- export declare function getProviderAuthStatusFromConfig(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): AuthStatus;
9
- export declare function getApiKeyForProviderFromConfig(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): Promise<string | undefined>;
10
- //# sourceMappingURL=model-registry-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry-auth.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAS5F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAiB/E,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAE/C;AAkBD,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC1D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxD,YAAY,CAAC,EAAE,SAAS,GACtB,OAAO,CAAC,mBAAmB,CAAC,CA8C9B;AAED,wBAAgB,+BAA+B,CAC9C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,UAAU,CAuBZ;AAED,wBAAsB,8BAA8B,CACnD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B"}
@@ -1,98 +0,0 @@
1
- import { getConfigValueEnvVarNames, isCommandConfigValue, isConfigValueConfigured, resolveConfigValueOrThrow, resolveConfigValueUncached, resolveHeadersOrThrow, } from "./resolve-config-value.js";
2
- async function resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs) {
3
- const resolver = providerRequestConfigs.get(provider)?.auth?.apiKey?.resolve;
4
- if (!resolver)
5
- return undefined;
6
- const stored = authStorage.get(provider);
7
- const credential = stored?.type === "api_key" ? stored : undefined;
8
- return resolver({
9
- credential,
10
- ctx: { env: async (name) => credential?.env?.[name] ?? process.env[name] },
11
- });
12
- }
13
- export async function getProviderResolvedAuth(provider, authStorage, providerRequestConfigs) {
14
- return resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs);
15
- }
16
- function mergeHeaders(base, override) {
17
- if (!base && !override)
18
- return undefined;
19
- const merged = {};
20
- for (const source of [base, override]) {
21
- for (const [name, value] of Object.entries(source ?? {})) {
22
- for (const existing of Object.keys(merged)) {
23
- if (existing.toLowerCase() === name.toLowerCase())
24
- delete merged[existing];
25
- }
26
- merged[name] = value;
27
- }
28
- }
29
- return Object.keys(merged).length > 0 ? merged : undefined;
30
- }
31
- export async function getModelRequestAuth(model, authStorage, providerRequestConfigs, modelRequestHeaders, providerAuth) {
32
- try {
33
- const providerConfig = providerRequestConfigs.get(model.provider);
34
- const customAuth = await resolveCustomApiKeyAuth(model.provider, authStorage, providerRequestConfigs);
35
- const storedAuth = await authStorage.getModelAuth(model.provider, { includeFallback: false });
36
- const apiKey = providerAuth?.apiKey ??
37
- customAuth?.auth.apiKey ??
38
- storedAuth?.apiKey ??
39
- (providerConfig?.apiKey
40
- ? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider "${model.provider}"`)
41
- : undefined);
42
- const providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider "${model.provider}"`);
43
- const modelHeaders = resolveHeadersOrThrow(modelRequestHeaders.get(`${model.provider}:${model.id}`), `model "${model.provider}/${model.id}"`);
44
- let headers = providerAuth
45
- ? mergeHeaders(model.headers, providerAuth.headers)
46
- : mergeHeaders(storedAuth?.headers, model.headers);
47
- headers = mergeHeaders(headers, customAuth?.auth.headers);
48
- headers = mergeHeaders(headers, providerHeaders);
49
- headers = mergeHeaders(headers, modelHeaders);
50
- if (providerConfig?.authHeader) {
51
- if (!apiKey) {
52
- return { ok: false, error: `No API key found for "${model.provider}"` };
53
- }
54
- headers = { ...headers, Authorization: `Bearer ${apiKey}` };
55
- }
56
- return {
57
- ok: true,
58
- apiKey,
59
- headers: headers && Object.keys(headers).length > 0 ? headers : undefined,
60
- baseUrl: providerAuth?.baseUrl ?? customAuth?.auth.baseUrl ?? storedAuth?.baseUrl,
61
- };
62
- }
63
- catch (error) {
64
- return {
65
- ok: false,
66
- error: error instanceof Error ? error.message : String(error),
67
- };
68
- }
69
- }
70
- export function getProviderAuthStatusFromConfig(provider, authStorage, providerRequestConfigs) {
71
- const authStatus = authStorage.getAuthStatus(provider);
72
- if (authStatus.source) {
73
- return authStatus;
74
- }
75
- const providerApiKey = providerRequestConfigs.get(provider)?.apiKey;
76
- if (!providerApiKey) {
77
- return authStatus;
78
- }
79
- if (isCommandConfigValue(providerApiKey)) {
80
- return { configured: true, source: "models_json_command" };
81
- }
82
- const envVarNames = getConfigValueEnvVarNames(providerApiKey);
83
- if (envVarNames.length > 0) {
84
- return isConfigValueConfigured(providerApiKey)
85
- ? { configured: true, source: "environment", label: envVarNames.join(", ") }
86
- : { configured: false };
87
- }
88
- return { configured: true, source: "models_json_key" };
89
- }
90
- export async function getApiKeyForProviderFromConfig(provider, authStorage, providerRequestConfigs) {
91
- const apiKey = await authStorage.getApiKey(provider, { includeFallback: false });
92
- if (apiKey !== undefined) {
93
- return apiKey;
94
- }
95
- const providerApiKey = providerRequestConfigs.get(provider)?.apiKey;
96
- return providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;
97
- }
98
- //# sourceMappingURL=model-registry-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry-auth.js","sourceRoot":"","sources":["../../src/core/model-registry-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelAuth, ProviderHeaders } from \"@earendil-works/pi-ai\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AuthStatus, AuthStorage } from \"./auth-storage.ts\";\nimport type { ProviderRequestConfig, ResolvedRequestAuth } from \"./model-registry-types.ts\";\nimport {\n\tgetConfigValueEnvVarNames,\n\tisCommandConfigValue,\n\tisConfigValueConfigured,\n\tresolveConfigValueOrThrow,\n\tresolveConfigValueUncached,\n\tresolveHeadersOrThrow,\n} from \"./resolve-config-value.ts\";\nimport type { ProviderApiKeyAuthResult } from \"./extensions/provider-types.ts\";\n\nasync function resolveCustomApiKeyAuth(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<ProviderApiKeyAuthResult | undefined> {\n\tconst resolver = providerRequestConfigs.get(provider)?.auth?.apiKey?.resolve;\n\tif (!resolver) return undefined;\n\tconst stored = authStorage.get(provider);\n\tconst credential = stored?.type === \"api_key\" ? stored : undefined;\n\treturn resolver({\n\t\tcredential,\n\t\tctx: { env: async (name) => credential?.env?.[name] ?? process.env[name] },\n\t});\n}\n\nexport async function getProviderResolvedAuth(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<ProviderApiKeyAuthResult | undefined> {\n\treturn resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs);\n}\nfunction mergeHeaders(\n\tbase: ProviderHeaders | undefined,\n\toverride: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!base && !override) return undefined;\n\tconst merged: ProviderHeaders = {};\n\tfor (const source of [base, override]) {\n\t\tfor (const [name, value] of Object.entries(source ?? {})) {\n\t\t\tfor (const existing of Object.keys(merged)) {\n\t\t\t\tif (existing.toLowerCase() === name.toLowerCase()) delete merged[existing];\n\t\t\t}\n\t\t\tmerged[name] = value;\n\t\t}\n\t}\n\treturn Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nexport async function getModelRequestAuth(\n\tmodel: Model<Api>,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n\tmodelRequestHeaders: Map<string, Record<string, string>>,\n\tproviderAuth?: ModelAuth,\n): Promise<ResolvedRequestAuth> {\n\ttry {\n\t\tconst providerConfig = providerRequestConfigs.get(model.provider);\n\t\tconst customAuth = await resolveCustomApiKeyAuth(model.provider, authStorage, providerRequestConfigs);\n\t\tconst storedAuth = await authStorage.getModelAuth(model.provider, { includeFallback: false });\n\t\tconst apiKey =\n\t\t\tproviderAuth?.apiKey ??\n\t\t\tcustomAuth?.auth.apiKey ??\n\t\t\tstoredAuth?.apiKey ??\n\t\t\t(providerConfig?.apiKey\n\t\t\t\t? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider \"${model.provider}\"`)\n\t\t\t\t: undefined);\n\n\t\tconst providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider \"${model.provider}\"`);\n\t\tconst modelHeaders = resolveHeadersOrThrow(\n\t\t\tmodelRequestHeaders.get(`${model.provider}:${model.id}`),\n\t\t\t`model \"${model.provider}/${model.id}\"`,\n\t\t);\n\n\t\tlet headers = providerAuth\n\t\t\t? mergeHeaders(model.headers, providerAuth.headers)\n\t\t\t: mergeHeaders(storedAuth?.headers, model.headers);\n\t\theaders = mergeHeaders(headers, customAuth?.auth.headers);\n\t\theaders = mergeHeaders(headers, providerHeaders);\n\t\theaders = mergeHeaders(headers, modelHeaders);\n\n\t\tif (providerConfig?.authHeader) {\n\t\t\tif (!apiKey) {\n\t\t\t\treturn { ok: false, error: `No API key found for \"${model.provider}\"` };\n\t\t\t}\n\t\t\theaders = { ...headers, Authorization: `Bearer ${apiKey}` };\n\t\t}\n\n\n\t\treturn {\n\t\t\tok: true,\n\t\t\tapiKey,\n\t\t\theaders: headers && Object.keys(headers).length > 0 ? headers : undefined,\n\t\t\tbaseUrl: providerAuth?.baseUrl ?? customAuth?.auth.baseUrl ?? storedAuth?.baseUrl,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n}\n\nexport function getProviderAuthStatusFromConfig(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): AuthStatus {\n\tconst authStatus = authStorage.getAuthStatus(provider);\n\tif (authStatus.source) {\n\t\treturn authStatus;\n\t}\n\n\tconst providerApiKey = providerRequestConfigs.get(provider)?.apiKey;\n\tif (!providerApiKey) {\n\t\treturn authStatus;\n\t}\n\n\tif (isCommandConfigValue(providerApiKey)) {\n\t\treturn { configured: true, source: \"models_json_command\" };\n\t}\n\n\tconst envVarNames = getConfigValueEnvVarNames(providerApiKey);\n\tif (envVarNames.length > 0) {\n\t\treturn isConfigValueConfigured(providerApiKey)\n\t\t\t? { configured: true, source: \"environment\", label: envVarNames.join(\", \") }\n\t\t\t: { configured: false };\n\t}\n\n\treturn { configured: true, source: \"models_json_key\" };\n}\n\nexport async function getApiKeyForProviderFromConfig(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<string | undefined> {\n\tconst apiKey = await authStorage.getApiKey(provider, { includeFallback: false });\n\tif (apiKey !== undefined) {\n\t\treturn apiKey;\n\t}\n\n\tconst providerApiKey = providerRequestConfigs.get(provider)?.apiKey;\n\treturn providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;\n}\n"]}
@@ -1,8 +0,0 @@
1
- import { type Api, type Model } from "@earendil-works/pi-ai/compat";
2
- import type { ModelOverride } from "./model-registry-schemas.ts";
3
- import type { ProviderOverride } from "./model-registry-types.ts";
4
- export declare function mergeCompat(baseCompat: Model<Api>["compat"], overrideCompat: ModelOverride["compat"] | Model<Api>["compat"]): Model<Api>["compat"] | undefined;
5
- export declare function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<Api>;
6
- export declare function loadBuiltInModels(overrides: Map<string, ProviderOverride>, modelOverrides: Map<string, Map<string, ModelOverride>>, baseModels?: readonly Model<Api>[]): Model<Api>[];
7
- export declare function mergeCustomModels(builtInModels: Model<Api>[], customModels: Model<Api>[]): Model<Api>[];
8
- //# sourceMappingURL=model-registry-builtins.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry-builtins.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAAG,EAIR,KAAK,KAAK,EAEV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlF,wBAAgB,WAAW,CAC1B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAChC,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAiClC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CA4BzF;AAED,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EACvD,UAAU,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,GAChC,KAAK,CAAC,GAAG,CAAC,EAAE,CA4Bd;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAWvG"}
@@ -1,104 +0,0 @@
1
- import { getModels, getProviders, } from "@earendil-works/pi-ai/compat";
2
- import { normalizeGrammarToolCapability } from "./model-capabilities.js";
3
- export function mergeCompat(baseCompat, overrideCompat) {
4
- if (!overrideCompat)
5
- return normalizeGrammarToolCapability(baseCompat);
6
- const base = baseCompat;
7
- const override = overrideCompat;
8
- const merged = { ...base, ...override };
9
- const baseCompletions = base;
10
- const overrideCompletions = override;
11
- const mergedCompletions = merged;
12
- if (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {
13
- mergedCompletions.openRouterRouting = {
14
- ...baseCompletions?.openRouterRouting,
15
- ...overrideCompletions.openRouterRouting,
16
- };
17
- }
18
- if (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {
19
- mergedCompletions.vercelGatewayRouting = {
20
- ...baseCompletions?.vercelGatewayRouting,
21
- ...overrideCompletions.vercelGatewayRouting,
22
- };
23
- }
24
- if (baseCompletions?.chatTemplateKwargs || overrideCompletions.chatTemplateKwargs) {
25
- mergedCompletions.chatTemplateKwargs = {
26
- ...baseCompletions?.chatTemplateKwargs,
27
- ...overrideCompletions.chatTemplateKwargs,
28
- };
29
- }
30
- return normalizeGrammarToolCapability(merged);
31
- }
32
- export function applyModelOverride(model, override) {
33
- const result = { ...model };
34
- if (override.name !== undefined)
35
- result.name = override.name;
36
- if (override.reasoning !== undefined)
37
- result.reasoning = override.reasoning;
38
- if (override.thinkingLevelMap !== undefined) {
39
- result.thinkingLevelMap = { ...model.thinkingLevelMap, ...override.thinkingLevelMap };
40
- }
41
- if (override.input !== undefined)
42
- result.input = override.input;
43
- if (override.contextWindow !== undefined)
44
- result.contextWindow = override.contextWindow;
45
- if (override.maxTokens !== undefined)
46
- result.maxTokens = override.maxTokens;
47
- if (override.cost) {
48
- result.cost = {
49
- input: override.cost.input ?? model.cost.input,
50
- output: override.cost.output ?? model.cost.output,
51
- cacheRead: override.cost.cacheRead ?? model.cost.cacheRead,
52
- cacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,
53
- ...(override.cost.tiers !== undefined
54
- ? { tiers: override.cost.tiers }
55
- : model.cost.tiers !== undefined
56
- ? { tiers: model.cost.tiers }
57
- : {}),
58
- };
59
- }
60
- result.compat = mergeCompat(model.compat, override.compat);
61
- return result;
62
- }
63
- export function loadBuiltInModels(overrides, modelOverrides, baseModels) {
64
- const providers = baseModels
65
- ? [...new Set(baseModels.map((model) => model.provider))]
66
- : getProviders();
67
- return providers.flatMap((provider) => {
68
- const providerModels = baseModels
69
- ? baseModels.filter((model) => model.provider === provider)
70
- : getModels(provider);
71
- const models = [...providerModels];
72
- const providerOverride = overrides.get(provider);
73
- const perModelOverrides = modelOverrides.get(provider);
74
- return models.map((candidate) => {
75
- let model = {
76
- ...candidate,
77
- compat: normalizeGrammarToolCapability(candidate.compat),
78
- };
79
- if (providerOverride) {
80
- model = {
81
- ...model,
82
- baseUrl: providerOverride.baseUrl ?? model.baseUrl,
83
- compat: mergeCompat(model.compat, providerOverride.compat),
84
- };
85
- }
86
- const modelOverride = perModelOverrides?.get(candidate.id);
87
- return modelOverride ? applyModelOverride(model, modelOverride) : model;
88
- });
89
- });
90
- }
91
- export function mergeCustomModels(builtInModels, customModels) {
92
- const merged = [...builtInModels];
93
- for (const customModel of customModels) {
94
- const existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);
95
- if (existingIndex >= 0) {
96
- merged[existingIndex] = customModel;
97
- }
98
- else {
99
- merged.push(customModel);
100
- }
101
- }
102
- return merged;
103
- }
104
- //# sourceMappingURL=model-registry-builtins.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry-builtins.js","sourceRoot":"","sources":["../../src/core/model-registry-builtins.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\tgetModels,\n\tgetProviders,\n\ttype BuiltinProvider,\n\ttype Model,\n\ttype OpenAICompletionsCompat,\n} from \"@earendil-works/pi-ai/compat\";\nimport { normalizeGrammarToolCapability } from \"./model-capabilities.ts\";\nimport type { ModelOverride } from \"./model-registry-schemas.ts\";\nimport type { ProviderCompat, ProviderOverride } from \"./model-registry-types.ts\";\n\n\nexport function mergeCompat(\n\tbaseCompat: Model<Api>[\"compat\"],\n\toverrideCompat: ModelOverride[\"compat\"] | Model<Api>[\"compat\"],\n): Model<Api>[\"compat\"] | undefined {\n\tif (!overrideCompat) return normalizeGrammarToolCapability(baseCompat);\n\n\tconst base = baseCompat as ProviderCompat | undefined;\n\tconst override = overrideCompat as ProviderCompat;\n\tconst merged = { ...base, ...override } as ProviderCompat;\n\n\tconst baseCompletions = base as OpenAICompletionsCompat | undefined;\n\tconst overrideCompletions = override as OpenAICompletionsCompat;\n\tconst mergedCompletions = merged as OpenAICompletionsCompat;\n\n\tif (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {\n\t\tmergedCompletions.openRouterRouting = {\n\t\t\t...baseCompletions?.openRouterRouting,\n\t\t\t...overrideCompletions.openRouterRouting,\n\t\t};\n\t}\n\n\tif (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {\n\t\tmergedCompletions.vercelGatewayRouting = {\n\t\t\t...baseCompletions?.vercelGatewayRouting,\n\t\t\t...overrideCompletions.vercelGatewayRouting,\n\t\t};\n\t}\n\n\tif (baseCompletions?.chatTemplateKwargs || overrideCompletions.chatTemplateKwargs) {\n\t\tmergedCompletions.chatTemplateKwargs = {\n\t\t\t...baseCompletions?.chatTemplateKwargs,\n\t\t\t...overrideCompletions.chatTemplateKwargs,\n\t\t};\n\t}\n\n\treturn normalizeGrammarToolCapability(merged);\n}\n\nexport function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<Api> {\n\tconst result = { ...model };\n\n\tif (override.name !== undefined) result.name = override.name;\n\tif (override.reasoning !== undefined) result.reasoning = override.reasoning;\n\tif (override.thinkingLevelMap !== undefined) {\n\t\tresult.thinkingLevelMap = { ...model.thinkingLevelMap, ...override.thinkingLevelMap };\n\t}\n\tif (override.input !== undefined) result.input = override.input as (\"text\" | \"image\")[];\n\tif (override.contextWindow !== undefined) result.contextWindow = override.contextWindow;\n\tif (override.maxTokens !== undefined) result.maxTokens = override.maxTokens;\n\n\tif (override.cost) {\n\t\tresult.cost = {\n\t\t\tinput: override.cost.input ?? model.cost.input,\n\t\t\toutput: override.cost.output ?? model.cost.output,\n\t\t\tcacheRead: override.cost.cacheRead ?? model.cost.cacheRead,\n\t\t\tcacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,\n\t\t\t...(override.cost.tiers !== undefined\n\t\t\t\t? { tiers: override.cost.tiers }\n\t\t\t\t: model.cost.tiers !== undefined\n\t\t\t\t\t? { tiers: model.cost.tiers }\n\t\t\t\t\t: {}),\n\t\t};\n\t}\n\n\tresult.compat = mergeCompat(model.compat, override.compat);\n\treturn result;\n}\n\nexport function loadBuiltInModels(\n\toverrides: Map<string, ProviderOverride>,\n\tmodelOverrides: Map<string, Map<string, ModelOverride>>,\n\tbaseModels?: readonly Model<Api>[],\n): Model<Api>[] {\n\tconst providers = baseModels\n\t\t? [...new Set(baseModels.map((model) => model.provider))]\n\t\t: getProviders();\n\treturn providers.flatMap((provider) => {\n\t\tconst providerModels = baseModels\n\t\t\t? baseModels.filter((model) => model.provider === provider)\n\t\t\t: getModels(provider as BuiltinProvider) as Model<Api>[];\n\t\tconst models = [...providerModels];\n\t\tconst providerOverride = overrides.get(provider);\n\t\tconst perModelOverrides = modelOverrides.get(provider);\n\n\t\treturn models.map((candidate) => {\n\t\t\tlet model: Model<Api> = {\n\t\t\t\t...candidate,\n\t\t\t\tcompat: normalizeGrammarToolCapability(candidate.compat),\n\t\t\t};\n\t\t\tif (providerOverride) {\n\t\t\t\tmodel = {\n\t\t\t\t\t...model,\n\t\t\t\t\tbaseUrl: providerOverride.baseUrl ?? model.baseUrl,\n\t\t\t\t\tcompat: mergeCompat(model.compat, providerOverride.compat),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst modelOverride = perModelOverrides?.get(candidate.id);\n\t\t\treturn modelOverride ? applyModelOverride(model, modelOverride) : model;\n\t\t});\n\t});\n}\n\nexport function mergeCustomModels(builtInModels: Model<Api>[], customModels: Model<Api>[]): Model<Api>[] {\n\tconst merged = [...builtInModels];\n\tfor (const customModel of customModels) {\n\t\tconst existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);\n\t\tif (existingIndex >= 0) {\n\t\t\tmerged[existingIndex] = customModel;\n\t\t} else {\n\t\t\tmerged.push(customModel);\n\t\t}\n\t}\n\treturn merged;\n}\n"]}
@@ -1,3 +0,0 @@
1
- import type { CustomModelsResult } from "./model-registry-types.ts";
2
- export declare function loadCustomModelsFromPaths(modelsJsonPaths: string[]): CustomModelsResult;
3
- //# sourceMappingURL=model-registry-custom-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-registry-custom-loader.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-custom-loader.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,kBAAkB,EAIlB,MAAM,2BAA2B,CAAC;AA0SnC,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAYvF"}