@sixb/core 0.1.5 → 0.1.7

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 (564) hide show
  1. package/dist/actions/index.js +37 -33
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/types/definitions.d.ts +8 -2
  4. package/dist/actions/types/definitions.d.ts.map +1 -1
  5. package/dist/actions/worker.js +3 -3
  6. package/dist/agents/adapters.d.ts +33 -76
  7. package/dist/agents/adapters.d.ts.map +1 -1
  8. package/dist/agents/authority.d.ts +22 -6
  9. package/dist/agents/authority.d.ts.map +1 -1
  10. package/dist/agents/builders.d.ts +3 -11
  11. package/dist/agents/builders.d.ts.map +1 -1
  12. package/dist/agents/context.js +2 -2
  13. package/dist/agents/dispatch.d.ts +9 -1
  14. package/dist/agents/dispatch.d.ts.map +1 -1
  15. package/dist/agents/errors.d.ts +2 -2
  16. package/dist/agents/errors.d.ts.map +1 -1
  17. package/dist/agents/execution.d.ts +9 -10
  18. package/dist/agents/execution.d.ts.map +1 -1
  19. package/dist/agents/ids.d.ts +4 -0
  20. package/dist/agents/ids.d.ts.map +1 -1
  21. package/dist/agents/index.d.ts +13 -9
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +80 -68
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/message.d.ts +17 -10
  26. package/dist/agents/message.d.ts.map +1 -1
  27. package/dist/agents/model-loop.d.ts +56 -0
  28. package/dist/agents/model-loop.d.ts.map +1 -0
  29. package/dist/agents/reference.d.ts +4 -0
  30. package/dist/agents/reference.d.ts.map +1 -0
  31. package/dist/agents/request.d.ts +10 -8
  32. package/dist/agents/request.d.ts.map +1 -1
  33. package/dist/agents/retired-config.d.ts +4 -0
  34. package/dist/agents/retired-config.d.ts.map +1 -0
  35. package/dist/agents/streams.d.ts +13 -8
  36. package/dist/agents/streams.d.ts.map +1 -1
  37. package/dist/agents/streams.js +7 -5
  38. package/dist/agents/streams.js.map +1 -1
  39. package/dist/agents/tool-catalog.d.ts +9 -0
  40. package/dist/agents/tool-catalog.d.ts.map +1 -0
  41. package/dist/agents/tool-definition.d.ts +1 -0
  42. package/dist/agents/tool-definition.d.ts.map +1 -1
  43. package/dist/agents/types.d.ts +31 -68
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/validation.d.ts +4 -10
  46. package/dist/agents/validation.d.ts.map +1 -1
  47. package/dist/ai-usage/execution.d.ts +53 -0
  48. package/dist/ai-usage/execution.d.ts.map +1 -0
  49. package/dist/ai-usage/index.d.ts +3 -0
  50. package/dist/ai-usage/index.d.ts.map +1 -0
  51. package/dist/auth/index.d.ts +1 -1
  52. package/dist/auth/index.d.ts.map +1 -1
  53. package/dist/auth/index.js +7 -7
  54. package/dist/auth/runtime.d.ts.map +1 -1
  55. package/dist/auth/strategy.d.ts +1 -1
  56. package/dist/auth/strategy.d.ts.map +1 -1
  57. package/dist/auth/types.d.ts +13 -0
  58. package/dist/auth/types.d.ts.map +1 -1
  59. package/dist/authorization/decision.d.ts +5 -2
  60. package/dist/authorization/decision.d.ts.map +1 -1
  61. package/dist/authorization/grant-kinds.d.ts +24 -8
  62. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  63. package/dist/authorization/index.d.ts +1 -1
  64. package/dist/authorization/index.d.ts.map +1 -1
  65. package/dist/authorization/index.js +8 -6
  66. package/dist/authorization/index.js.map +1 -1
  67. package/dist/authorization/resolve.d.ts +3 -3
  68. package/dist/authorization/resolve.d.ts.map +1 -1
  69. package/dist/authorization/types.d.ts +7 -5
  70. package/dist/authorization/types.d.ts.map +1 -1
  71. package/dist/blob-storage/browser.js +2 -2
  72. package/dist/blob-storage/index.js +3 -3
  73. package/dist/bootstrap/discovery.d.ts +1 -7
  74. package/dist/bootstrap/discovery.d.ts.map +1 -1
  75. package/dist/bootstrap/index.js +52 -48
  76. package/dist/bootstrap/index.js.map +1 -1
  77. package/dist/broker/index.js +2 -2
  78. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  79. package/dist/{chunk-xdf9yswn.js → chunk-08twe8m6.js} +93 -8
  80. package/dist/chunk-08twe8m6.js.map +12 -0
  81. package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
  82. package/dist/{chunk-h6h91mfy.js → chunk-2b5qtban.js} +12 -12
  83. package/dist/{chunk-h6h91mfy.js.map → chunk-2b5qtban.js.map} +3 -3
  84. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  85. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  86. package/dist/{chunk-f83ka50g.js → chunk-37wk412q.js} +86 -28
  87. package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
  88. package/dist/{chunk-6d5xdj1q.js → chunk-3fqt22c4.js} +4 -4
  89. package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
  90. package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
  91. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  92. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  93. package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
  94. package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
  95. package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
  96. package/dist/{chunk-v0egge8b.js → chunk-6ed5bwnd.js} +666 -81
  97. package/dist/chunk-6ed5bwnd.js.map +57 -0
  98. package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.js} +1 -1
  99. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  100. package/dist/chunk-7y0f6rf1.js.map +10 -0
  101. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  102. package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +3 -3
  103. package/dist/{chunk-tbv03sx2.js → chunk-9aehf39w.js} +7 -7
  104. package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
  105. package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
  106. package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
  107. package/dist/chunk-c15dr03f.js +43 -0
  108. package/dist/chunk-c15dr03f.js.map +10 -0
  109. package/dist/{chunk-78c6xvyr.js → chunk-d2ndstdf.js} +8 -6
  110. package/dist/{chunk-78c6xvyr.js.map → chunk-d2ndstdf.js.map} +2 -2
  111. package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
  112. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  113. package/dist/chunk-d8qkxt2v.js.map +10 -0
  114. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  115. package/dist/{chunk-4gz41why.js → chunk-dqn23610.js} +1 -1
  116. package/dist/{chunk-z3ga9q5m.js → chunk-e4rvtvpw.js} +13 -11
  117. package/dist/{chunk-z3ga9q5m.js.map → chunk-e4rvtvpw.js.map} +2 -2
  118. package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
  119. package/dist/chunk-gbrpsx4m.js.map +11 -0
  120. package/dist/{chunk-84h6qhmp.js → chunk-h0knpbz5.js} +468 -1236
  121. package/dist/chunk-h0knpbz5.js.map +38 -0
  122. package/dist/{chunk-zp2v2rv6.js → chunk-ha58tjtt.js} +6 -6
  123. package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
  124. package/dist/chunk-jecn6t54.js +307 -0
  125. package/dist/chunk-jecn6t54.js.map +12 -0
  126. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  127. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  128. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  129. package/dist/{chunk-4h947jd8.js → chunk-kt81c11h.js} +2 -2
  130. package/dist/chunk-n2arzn6e.js +1745 -0
  131. package/dist/chunk-n2arzn6e.js.map +20 -0
  132. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  133. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  134. package/dist/chunk-n6jxh8sw.js.map +10 -0
  135. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  136. package/dist/chunk-p03r0h5s.js.map +16 -0
  137. package/dist/chunk-p2vqaxkc.js +528 -0
  138. package/dist/chunk-p2vqaxkc.js.map +15 -0
  139. package/dist/{chunk-gadsm794.js → chunk-qjycjdj6.js} +84 -11
  140. package/dist/chunk-qjycjdj6.js.map +12 -0
  141. package/dist/chunk-qjzp9xyb.js +286 -0
  142. package/dist/chunk-qjzp9xyb.js.map +12 -0
  143. package/dist/{chunk-am6eczah.js → chunk-qv38twt8.js} +50 -69
  144. package/dist/{chunk-am6eczah.js.map → chunk-qv38twt8.js.map} +8 -8
  145. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  146. package/dist/{chunk-r0rry8dn.js → chunk-rp1mvzb4.js} +6 -6
  147. package/dist/{chunk-tkdscva6.js → chunk-rre42skh.js} +187 -18
  148. package/dist/chunk-rre42skh.js.map +39 -0
  149. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  150. package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
  151. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  152. package/dist/chunk-tpnd31c1.js.map +11 -0
  153. package/dist/chunk-trxxmgnf.js +68 -0
  154. package/dist/chunk-trxxmgnf.js.map +11 -0
  155. package/dist/{chunk-ea73pzk7.js → chunk-vjjv9mrb.js} +2 -2
  156. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  157. package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
  158. package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
  159. package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
  160. package/dist/{chunk-1q02e95s.js → chunk-y35ma3mj.js} +11 -16
  161. package/dist/{chunk-1q02e95s.js.map → chunk-y35ma3mj.js.map} +3 -4
  162. package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
  163. package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
  164. package/dist/error-reporting/internal.js +4 -4
  165. package/dist/error-reporting/types.d.ts +7 -2
  166. package/dist/error-reporting/types.d.ts.map +1 -1
  167. package/dist/errors/catalog.d.ts +8 -0
  168. package/dist/errors/catalog.d.ts.map +1 -1
  169. package/dist/errors/internal.js +2 -2
  170. package/dist/events/index.js +4 -4
  171. package/dist/execution/agent.d.ts +18 -9
  172. package/dist/execution/agent.d.ts.map +1 -1
  173. package/dist/execution/agent.js +52 -43
  174. package/dist/execution/agent.js.map +1 -1
  175. package/dist/execution/authorization.d.ts +14 -4
  176. package/dist/execution/authorization.d.ts.map +1 -1
  177. package/dist/execution/primitive.js +45 -43
  178. package/dist/execution/primitive.js.map +2 -2
  179. package/dist/execution/request.d.ts +3 -1
  180. package/dist/execution/request.d.ts.map +1 -1
  181. package/dist/execution/request.js +46 -44
  182. package/dist/execution/request.js.map +3 -3
  183. package/dist/execution/types.d.ts +1 -1
  184. package/dist/execution/types.d.ts.map +1 -1
  185. package/dist/http/api-routes.d.ts.map +1 -1
  186. package/dist/http/index.js +1 -1
  187. package/dist/index.d.ts +9 -6
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +82 -77
  190. package/dist/index.js.map +1 -1
  191. package/dist/json.d.ts +2 -0
  192. package/dist/json.d.ts.map +1 -1
  193. package/dist/lake-storage/index.js +5 -5
  194. package/dist/logging/index.js +3 -3
  195. package/dist/logging/types.js +2 -2
  196. package/dist/materialization/index.js +2 -2
  197. package/dist/materializer/index.js +33 -29
  198. package/dist/materializer/index.js.map +1 -1
  199. package/dist/models/catalog.d.ts +40 -0
  200. package/dist/models/catalog.d.ts.map +1 -0
  201. package/dist/models/definitions.d.ts +25 -0
  202. package/dist/models/definitions.d.ts.map +1 -0
  203. package/dist/models/errors.d.ts +52 -0
  204. package/dist/models/errors.d.ts.map +1 -0
  205. package/dist/models/events.d.ts +192 -0
  206. package/dist/models/events.d.ts.map +1 -0
  207. package/dist/models/index.d.ts +17 -39
  208. package/dist/models/index.d.ts.map +1 -1
  209. package/dist/models/index.js +50 -0
  210. package/dist/models/index.js.map +9 -0
  211. package/dist/models/language-model.d.ts +90 -0
  212. package/dist/models/language-model.d.ts.map +1 -0
  213. package/dist/models/messages.d.ts +74 -0
  214. package/dist/models/messages.d.ts.map +1 -0
  215. package/dist/models/pricing.d.ts +69 -0
  216. package/dist/models/pricing.d.ts.map +1 -0
  217. package/dist/models/rate-card.d.ts +24 -0
  218. package/dist/models/rate-card.d.ts.map +1 -0
  219. package/dist/models/tools.d.ts +24 -0
  220. package/dist/models/tools.d.ts.map +1 -0
  221. package/dist/objects/index.js +38 -34
  222. package/dist/objects/index.js.map +1 -1
  223. package/dist/objects/query/index.js +32 -28
  224. package/dist/objects/query/index.js.map +1 -1
  225. package/dist/ontology/index.js +5 -5
  226. package/dist/ontology/internal.js +4 -4
  227. package/dist/pipelines/index.js +37 -35
  228. package/dist/pipelines/index.js.map +1 -1
  229. package/dist/projections/internal.js +35 -31
  230. package/dist/projections/internal.js.map +1 -1
  231. package/dist/queues/in-memory.d.ts +3 -2
  232. package/dist/queues/in-memory.d.ts.map +1 -1
  233. package/dist/queues/index.d.ts +3 -1
  234. package/dist/queues/index.d.ts.map +1 -1
  235. package/dist/queues/index.js +1 -1
  236. package/dist/queues/types.d.ts +15 -3
  237. package/dist/queues/types.d.ts.map +1 -1
  238. package/dist/runtime/create.d.ts +4 -4
  239. package/dist/runtime/create.d.ts.map +1 -1
  240. package/dist/runtime/definitions.d.ts +2 -2
  241. package/dist/runtime/definitions.d.ts.map +1 -1
  242. package/dist/runtime/host.d.ts +3 -2
  243. package/dist/runtime/host.d.ts.map +1 -1
  244. package/dist/runtime/resolve-definitions.d.ts +2 -2
  245. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  246. package/dist/runtime/sixb.d.ts +4 -2
  247. package/dist/runtime/sixb.d.ts.map +1 -1
  248. package/dist/security/every.d.ts +1 -4
  249. package/dist/security/every.d.ts.map +1 -1
  250. package/dist/security/grants.d.ts +6 -5
  251. package/dist/security/grants.d.ts.map +1 -1
  252. package/dist/security/index.d.ts +1 -1
  253. package/dist/security/index.d.ts.map +1 -1
  254. package/dist/security/registry.d.ts +1 -1
  255. package/dist/security/registry.d.ts.map +1 -1
  256. package/dist/security/types.d.ts +13 -5
  257. package/dist/security/types.d.ts.map +1 -1
  258. package/dist/security/validation.d.ts +4 -2
  259. package/dist/security/validation.d.ts.map +1 -1
  260. package/dist/storage/action-runs/failure.js +3 -3
  261. package/dist/storage/action-runs/provider.js +2 -2
  262. package/dist/storage/agents/errors.d.ts +1 -1
  263. package/dist/storage/agents/errors.d.ts.map +1 -1
  264. package/dist/storage/agents/in-memory.d.ts +3 -2
  265. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  266. package/dist/storage/agents/index.d.ts +1 -1
  267. package/dist/storage/agents/index.d.ts.map +1 -1
  268. package/dist/storage/agents/provider.d.ts +11 -4
  269. package/dist/storage/agents/provider.d.ts.map +1 -1
  270. package/dist/storage/agents/provider.js +18 -15
  271. package/dist/storage/agents/provider.js.map +1 -1
  272. package/dist/storage/agents/types.d.ts +65 -17
  273. package/dist/storage/agents/types.d.ts.map +1 -1
  274. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  275. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  276. package/dist/storage/ai-cost/codec.d.ts +3 -2
  277. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  278. package/dist/storage/ai-cost/groups.d.ts +51 -0
  279. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  280. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  281. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  282. package/dist/storage/ai-cost/index.d.ts +1 -1
  283. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  284. package/dist/storage/ai-cost/provider.d.ts +2 -0
  285. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  286. package/dist/storage/ai-cost/provider.js +29 -13
  287. package/dist/storage/ai-cost/provider.js.map +3 -3
  288. package/dist/storage/ai-cost/types.d.ts +64 -15
  289. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  290. package/dist/storage/ai-cost/validation.d.ts +2 -1
  291. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  292. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  293. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  294. package/dist/storage/ai-limits/enforcement.js +21 -0
  295. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  296. package/dist/storage/ai-limits/errors.d.ts +8 -0
  297. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  298. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  299. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  300. package/dist/storage/ai-limits/index.d.ts +7 -0
  301. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  302. package/dist/storage/ai-limits/period.d.ts +4 -0
  303. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  304. package/dist/storage/ai-limits/provider.d.ts +85 -0
  305. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  306. package/dist/storage/ai-limits/provider.js +62 -0
  307. package/dist/storage/ai-limits/provider.js.map +9 -0
  308. package/dist/storage/ai-limits/types.d.ts +175 -0
  309. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  310. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  311. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  312. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  313. package/dist/storage/ai-usage/types.d.ts +6 -2
  314. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  315. package/dist/storage/auth/errors.d.ts +1 -1
  316. package/dist/storage/auth/errors.d.ts.map +1 -1
  317. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  318. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  319. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  320. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  321. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  322. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  323. package/dist/storage/auth/index.d.ts +2 -1
  324. package/dist/storage/auth/index.d.ts.map +1 -1
  325. package/dist/storage/auth/types.d.ts +66 -0
  326. package/dist/storage/auth/types.d.ts.map +1 -1
  327. package/dist/storage/connector-connections/provider.js +2 -2
  328. package/dist/storage/executions/provider.js +1 -1
  329. package/dist/storage/executions/run-link.d.ts +7 -2
  330. package/dist/storage/executions/run-link.d.ts.map +1 -1
  331. package/dist/storage/executions/validation.d.ts.map +1 -1
  332. package/dist/storage/in-memory/index.d.ts +4 -0
  333. package/dist/storage/in-memory/index.d.ts.map +1 -1
  334. package/dist/storage/index.d.ts +8 -5
  335. package/dist/storage/index.d.ts.map +1 -1
  336. package/dist/storage/index.js +51 -38
  337. package/dist/storage/index.js.map +1 -1
  338. package/dist/storage/ontology/in-memory/materializations.d.ts +4 -3
  339. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  340. package/dist/storage/ontology/index.d.ts +1 -1
  341. package/dist/storage/ontology/index.d.ts.map +1 -1
  342. package/dist/storage/ontology/materializations.d.ts +7 -3
  343. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  344. package/dist/storage/ontology/provider.d.ts +2 -2
  345. package/dist/storage/ontology/provider.d.ts.map +1 -1
  346. package/dist/storage/ontology/provider.js +3 -3
  347. package/dist/storage/pipeline-runs/provider.js +2 -2
  348. package/dist/storage/projection-runs/provider.js +4 -4
  349. package/dist/storage/sync-runs/provider.js +2 -2
  350. package/dist/storage/types.d.ts +5 -1
  351. package/dist/storage/types.d.ts.map +1 -1
  352. package/dist/storage/webhook-runs/provider.js +2 -2
  353. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  354. package/dist/storage/workflow-runs/provider.js +10 -11
  355. package/dist/storage/workflow-runs/provider.js.map +1 -1
  356. package/dist/storage/workflow-runs/types.d.ts +5 -4
  357. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  358. package/dist/syncs/index.js +37 -35
  359. package/dist/syncs/index.js.map +1 -1
  360. package/dist/testing/agent-execution.d.ts +3 -1
  361. package/dist/testing/agent-execution.d.ts.map +1 -1
  362. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  363. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  364. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  365. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  366. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  367. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  368. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  369. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  370. package/dist/testing/index.d.ts +2 -0
  371. package/dist/testing/index.d.ts.map +1 -1
  372. package/dist/testing/index.js +3758 -1945
  373. package/dist/testing/index.js.map +15 -13
  374. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  375. package/dist/testing/queues-contract.d.ts.map +1 -1
  376. package/dist/webhooks/internal.js +32 -28
  377. package/dist/webhooks/internal.js.map +2 -2
  378. package/dist/workers/index.js +2 -2
  379. package/dist/workflows/agent-step-identity.d.ts +3 -0
  380. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  381. package/dist/workflows/builders.d.ts +2 -3
  382. package/dist/workflows/builders.d.ts.map +1 -1
  383. package/dist/workflows/execution.d.ts +1 -1
  384. package/dist/workflows/execution.d.ts.map +1 -1
  385. package/dist/workflows/failure.d.ts +1 -1
  386. package/dist/workflows/failure.d.ts.map +1 -1
  387. package/dist/workflows/index.d.ts +3 -2
  388. package/dist/workflows/index.d.ts.map +1 -1
  389. package/dist/workflows/index.js +53 -45
  390. package/dist/workflows/index.js.map +1 -1
  391. package/dist/workflows/types.d.ts +26 -11
  392. package/dist/workflows/types.d.ts.map +1 -1
  393. package/dist/workflows/validation.d.ts +7 -1
  394. package/dist/workflows/validation.d.ts.map +1 -1
  395. package/package.json +19 -4
  396. package/src/actions/types/definitions.ts +24 -2
  397. package/src/agents/adapters.ts +109 -115
  398. package/src/agents/authority.ts +214 -32
  399. package/src/agents/builders.ts +3 -50
  400. package/src/agents/context-compaction.ts +4 -0
  401. package/src/agents/dispatch.ts +59 -2
  402. package/src/agents/errors.ts +5 -2
  403. package/src/agents/execution.ts +53 -52
  404. package/src/agents/ids.ts +16 -1
  405. package/src/agents/index.ts +23 -11
  406. package/src/agents/message.ts +18 -9
  407. package/src/agents/model-loop.ts +1023 -0
  408. package/src/agents/reference.ts +7 -0
  409. package/src/agents/request.ts +141 -74
  410. package/src/agents/retired-config.ts +20 -0
  411. package/src/agents/streams.ts +45 -19
  412. package/src/agents/tool-catalog.ts +21 -0
  413. package/src/agents/tool-definition.ts +23 -0
  414. package/src/agents/types.ts +39 -81
  415. package/src/agents/validation.ts +34 -180
  416. package/src/ai-usage/execution.ts +196 -0
  417. package/src/ai-usage/index.ts +15 -0
  418. package/src/auth/index.ts +1 -0
  419. package/src/auth/runtime.ts +8 -0
  420. package/src/auth/strategy.ts +1 -0
  421. package/src/auth/types.ts +14 -0
  422. package/src/authorization/decision.ts +27 -10
  423. package/src/authorization/grant-kinds.ts +62 -15
  424. package/src/authorization/index.ts +1 -0
  425. package/src/authorization/resolve.ts +12 -5
  426. package/src/authorization/types.ts +7 -5
  427. package/src/bootstrap/discovery.ts +0 -3
  428. package/src/error-reporting/types.ts +4 -2
  429. package/src/errors/catalog.ts +8 -0
  430. package/src/execution/agent.ts +129 -22
  431. package/src/execution/authorization.ts +48 -18
  432. package/src/execution/request.ts +4 -1
  433. package/src/execution/types.ts +1 -1
  434. package/src/http/api-routes.ts +63 -0
  435. package/src/index.ts +36 -7
  436. package/src/json.ts +9 -0
  437. package/src/models/catalog.ts +137 -0
  438. package/src/models/definitions.ts +202 -0
  439. package/src/models/errors.ts +83 -0
  440. package/src/models/events.ts +198 -0
  441. package/src/models/index.ts +89 -71
  442. package/src/models/language-model.ts +143 -0
  443. package/src/models/messages.ts +78 -0
  444. package/src/models/pricing.ts +390 -0
  445. package/src/models/rate-card.ts +101 -0
  446. package/src/models/tools.ts +29 -0
  447. package/src/queues/in-memory.ts +5 -0
  448. package/src/queues/index.ts +11 -0
  449. package/src/queues/types.ts +20 -3
  450. package/src/runtime/create.ts +7 -5
  451. package/src/runtime/definitions.ts +2 -2
  452. package/src/runtime/host.ts +3 -2
  453. package/src/runtime/resolve-definitions.ts +13 -36
  454. package/src/runtime/sixb.ts +6 -8
  455. package/src/security/every.ts +0 -4
  456. package/src/security/grants.ts +55 -11
  457. package/src/security/index.ts +2 -0
  458. package/src/security/registry.ts +6 -5
  459. package/src/security/types.ts +15 -4
  460. package/src/security/validation.ts +30 -9
  461. package/src/storage/agents/errors.ts +1 -0
  462. package/src/storage/agents/in-memory.ts +121 -11
  463. package/src/storage/agents/index.ts +7 -0
  464. package/src/storage/agents/provider.ts +150 -6
  465. package/src/storage/agents/types.ts +73 -16
  466. package/src/storage/ai-cost/analytics.ts +63 -6
  467. package/src/storage/ai-cost/codec.ts +37 -12
  468. package/src/storage/ai-cost/groups.ts +248 -0
  469. package/src/storage/ai-cost/in-memory.ts +42 -0
  470. package/src/storage/ai-cost/index.ts +6 -0
  471. package/src/storage/ai-cost/provider.ts +7 -0
  472. package/src/storage/ai-cost/types.ts +76 -14
  473. package/src/storage/ai-cost/validation.ts +147 -17
  474. package/src/storage/ai-limits/enforcement.ts +68 -0
  475. package/src/storage/ai-limits/errors.ts +23 -0
  476. package/src/storage/ai-limits/in-memory.ts +671 -0
  477. package/src/storage/ai-limits/index.ts +31 -0
  478. package/src/storage/ai-limits/period.ts +11 -0
  479. package/src/storage/ai-limits/provider.ts +430 -0
  480. package/src/storage/ai-limits/types.ts +195 -0
  481. package/src/storage/ai-usage/in-memory.ts +13 -0
  482. package/src/storage/ai-usage/record.ts +17 -0
  483. package/src/storage/ai-usage/types.ts +6 -2
  484. package/src/storage/auth/errors.ts +6 -0
  485. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  486. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  487. package/src/storage/auth/in-memory/shared.ts +7 -0
  488. package/src/storage/auth/index.ts +7 -0
  489. package/src/storage/auth/types.ts +73 -0
  490. package/src/storage/executions/run-link.ts +16 -6
  491. package/src/storage/executions/validation.ts +36 -6
  492. package/src/storage/in-memory/index.ts +48 -4
  493. package/src/storage/index.ts +52 -1
  494. package/src/storage/ontology/in-memory/materializations.ts +34 -22
  495. package/src/storage/ontology/index.ts +1 -0
  496. package/src/storage/ontology/materializations.ts +8 -3
  497. package/src/storage/ontology/provider.ts +2 -2
  498. package/src/storage/types.ts +37 -0
  499. package/src/storage/workflow-runs/in-memory.ts +3 -3
  500. package/src/storage/workflow-runs/provider.ts +2 -2
  501. package/src/storage/workflow-runs/types.ts +6 -3
  502. package/src/testing/agent-execution.ts +40 -28
  503. package/src/testing/agent-storage-contract.ts +249 -28
  504. package/src/testing/ai-cost-storage-contract.ts +96 -8
  505. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  506. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  507. package/src/testing/ai-usage-storage-contract.ts +31 -0
  508. package/src/testing/auth-storage-contract.ts +85 -0
  509. package/src/testing/execution-storage-contract.ts +2 -2
  510. package/src/testing/index.ts +10 -0
  511. package/src/testing/materializer-storage-contract.ts +170 -2
  512. package/src/testing/queues-contract.ts +36 -1
  513. package/src/workflows/agent-step-identity.ts +4 -0
  514. package/src/workflows/builders.ts +95 -9
  515. package/src/workflows/execution.ts +2 -2
  516. package/src/workflows/failure.ts +2 -2
  517. package/src/workflows/index.ts +3 -0
  518. package/src/workflows/types.ts +23 -11
  519. package/src/workflows/validation.ts +100 -7
  520. package/dist/chunk-6gjqgd3d.js.map +0 -11
  521. package/dist/chunk-84h6qhmp.js.map +0 -46
  522. package/dist/chunk-a09jx26t.js +0 -55
  523. package/dist/chunk-a09jx26t.js.map +0 -11
  524. package/dist/chunk-dm72y8wt.js.map +0 -10
  525. package/dist/chunk-drjqm1aa.js.map +0 -15
  526. package/dist/chunk-gadsm794.js.map +0 -11
  527. package/dist/chunk-h9kxd41f.js.map +0 -11
  528. package/dist/chunk-nzw7sm3b.js +0 -137
  529. package/dist/chunk-nzw7sm3b.js.map +0 -10
  530. package/dist/chunk-t0jjkep3.js.map +0 -10
  531. package/dist/chunk-t8t39h7v.js.map +0 -10
  532. package/dist/chunk-tkdscva6.js.map +0 -37
  533. package/dist/chunk-v0egge8b.js.map +0 -56
  534. package/dist/chunk-xdf9yswn.js.map +0 -11
  535. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  536. /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
  537. /package/dist/{chunk-6d5xdj1q.js.map → chunk-3fqt22c4.js.map} +0 -0
  538. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  539. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  540. /package/dist/{chunk-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
  541. /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
  542. /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
  543. /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
  544. /package/dist/{chunk-tbv03sx2.js.map → chunk-9aehf39w.js.map} +0 -0
  545. /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
  546. /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
  547. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  548. /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
  549. /package/dist/{chunk-zp2v2rv6.js.map → chunk-ha58tjtt.js.map} +0 -0
  550. /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.js.map} +0 -0
  551. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  552. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  553. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  554. /package/dist/{chunk-4h947jd8.js.map → chunk-kt81c11h.js.map} +0 -0
  555. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  556. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  557. /package/dist/{chunk-r0rry8dn.js.map → chunk-rp1mvzb4.js.map} +0 -0
  558. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  559. /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
  560. /package/dist/{chunk-ea73pzk7.js.map → chunk-vjjv9mrb.js.map} +0 -0
  561. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  562. /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
  563. /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
  564. /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
@@ -0,0 +1,143 @@
1
+ import type { JsonObject, ReadonlyJsonObject } from "../json"
2
+ import type { LanguageModelDefinitionCatalog, ModelDefinitionCatalog } from "./catalog"
3
+ import type { LanguageModelDefinition } from "./definitions"
4
+ import type { LanguageModelStreamEvent } from "./events"
5
+ import type { ModelMessage } from "./messages"
6
+ import type { ModelCostEstimator } from "./pricing"
7
+
8
+ export const MODEL_REASONING_EFFORTS = ["minimal", "low", "medium", "high", "xhigh", "max"] as const
9
+
10
+ export type ModelReasoningEffort = (typeof MODEL_REASONING_EFFORTS)[number]
11
+
12
+ export const MODEL_REASONING_LEVELS = [
13
+ "provider-default",
14
+ "none",
15
+ ...MODEL_REASONING_EFFORTS,
16
+ ] as const
17
+
18
+ export type ModelReasoningLevel = (typeof MODEL_REASONING_LEVELS)[number]
19
+
20
+ /** Exact provider-native reasoning budget, expressed in tokens. */
21
+ export interface ModelReasoningBudget extends ReadonlyJsonObject {
22
+ readonly budgetTokens: number
23
+ }
24
+
25
+ /** Provider-neutral reasoning preference accepted by every language-model runtime. */
26
+ export type ModelReasoning = ModelReasoningLevel | ModelReasoningBudget
27
+
28
+ export interface ModelReasoningBudgetCapabilities {
29
+ readonly min?: number
30
+ readonly max?: number
31
+ }
32
+
33
+ /** Controls exposed by one concrete model offering through one provider. */
34
+ export interface ModelReasoningCapabilities {
35
+ readonly canDisable?: boolean
36
+ readonly efforts?: readonly ModelReasoningEffort[]
37
+ readonly budgetTokens?: ModelReasoningBudgetCapabilities
38
+ }
39
+
40
+ export interface ModelCapabilities {
41
+ readonly inputMediaTypes?: readonly string[] | "any"
42
+ /** `undefined` is unknown, `false` is unsupported, and an object describes supported controls. */
43
+ readonly reasoning?: false | ModelReasoningCapabilities
44
+ readonly localTools?: boolean
45
+ readonly parallelToolCalls?: boolean
46
+ readonly nativeStructuredOutput?: boolean
47
+ readonly providerExecutedTools?: boolean
48
+ }
49
+
50
+ export interface ModelToolSpecification {
51
+ readonly name: string
52
+ readonly description: string
53
+ readonly inputSchema: JsonObject
54
+ }
55
+
56
+ export interface ModelResponseFormat {
57
+ readonly type: "json"
58
+ readonly name: string
59
+ readonly description?: string
60
+ readonly schema: JsonObject
61
+ }
62
+
63
+ export interface LanguageModelRequest {
64
+ readonly callId: string
65
+ readonly messages: readonly ModelMessage[]
66
+ readonly tools: readonly ModelToolSpecification[]
67
+ readonly reasoning?: ModelReasoning
68
+ /** Per-call output ceiling; providers must not exceed a stricter configured model limit. */
69
+ readonly maxOutputTokens?: number
70
+ /** Disable automatic prompt caching without overriding explicit provider configuration. */
71
+ readonly caching?: "auto" | "off"
72
+ readonly responseFormat?: ModelResponseFormat
73
+ readonly signal: AbortSignal
74
+ }
75
+
76
+ export interface LanguageModelStream {
77
+ readonly events: AsyncIterable<LanguageModelStreamEvent>
78
+ }
79
+
80
+ export interface LanguageModel {
81
+ readonly providerId: string
82
+ readonly modelId: string
83
+ readonly definition: LanguageModelDefinition
84
+ readonly costEstimator?: ModelCostEstimator
85
+ /**
86
+ * Return an executable model pinned to operational metadata, preserving model identity.
87
+ * `offline` requires a local snapshot without catalog I/O. Workers retain this model
88
+ * for generation and compaction; later catalog refreshes must not change its capabilities/limits.
89
+ * Throw ModelCatalogUnavailableError for catalog transport/access failures to allow workers to
90
+ * retry with an offline snapshot. Invalid definitions and other resolver errors remain fatal.
91
+ */
92
+ resolve?(options?: { readonly offline?: boolean }): Promise<LanguageModel>
93
+ stream(request: LanguageModelRequest): Promise<LanguageModelStream>
94
+ }
95
+
96
+ /** The common callable provider shape. Provider packages may accept additional model options. */
97
+ export interface ModelProvider<TCatalog extends ModelDefinitionCatalog = ModelDefinitionCatalog> {
98
+ readonly providerId: string
99
+ readonly catalog: TCatalog
100
+ }
101
+
102
+ export interface LanguageModelProvider extends ModelProvider<LanguageModelDefinitionCatalog> {
103
+ (modelId: string): LanguageModel
104
+ }
105
+
106
+ export function isModelReasoning(value: unknown): value is ModelReasoning {
107
+ if (typeof value === "string") {
108
+ return (MODEL_REASONING_LEVELS as readonly string[]).includes(value)
109
+ }
110
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false
111
+ if (Object.keys(value).length !== 1) return false
112
+ const budgetTokens = (value as { readonly budgetTokens?: unknown }).budgetTokens
113
+ return typeof budgetTokens === "number" && Number.isSafeInteger(budgetTokens) && budgetTokens >= 0
114
+ }
115
+
116
+ /** Explain why a request cannot be represented by known model capabilities. Unknown is allowed. */
117
+ export function modelReasoningSupportIssue(
118
+ capabilities: ModelCapabilities["reasoning"],
119
+ reasoning: unknown
120
+ ): string | undefined {
121
+ if (reasoning === undefined) return undefined
122
+ if (!isModelReasoning(reasoning)) return "the reasoning preference is invalid"
123
+ if (reasoning === "provider-default") return undefined
124
+ if (capabilities === undefined) return undefined
125
+ if (capabilities === false) return "reasoning is not supported"
126
+ if (reasoning === "none") {
127
+ return capabilities.canDisable === true ? undefined : "reasoning cannot be disabled"
128
+ }
129
+ if (typeof reasoning === "string") {
130
+ return capabilities.efforts?.includes(reasoning) === true
131
+ ? undefined
132
+ : `reasoning effort '${reasoning}' is not supported`
133
+ }
134
+ const budget = capabilities.budgetTokens
135
+ if (budget === undefined) return "reasoning token budgets are not supported"
136
+ if (budget.min !== undefined && reasoning.budgetTokens < budget.min) {
137
+ return `reasoning token budget must be at least ${budget.min}`
138
+ }
139
+ if (budget.max !== undefined && reasoning.budgetTokens > budget.max) {
140
+ return `reasoning token budget must not exceed ${budget.max}`
141
+ }
142
+ return undefined
143
+ }
@@ -0,0 +1,78 @@
1
+ import type { JsonValue } from "../json"
2
+
3
+ /** Opaque, JSON-safe provider state. Each provider reads only its own key. */
4
+ export type ProviderData = Readonly<Record<string, JsonValue>>
5
+
6
+ interface ModelPartBase {
7
+ readonly providerData?: ProviderData
8
+ }
9
+
10
+ export interface ModelTextPart extends ModelPartBase {
11
+ readonly type: "text"
12
+ readonly text: string
13
+ }
14
+
15
+ export interface ModelReasoningPart extends ModelPartBase {
16
+ readonly type: "reasoning"
17
+ readonly text: string
18
+ }
19
+
20
+ export interface ModelFilePart extends ModelPartBase {
21
+ readonly type: "file"
22
+ readonly data: URL
23
+ readonly filename?: string
24
+ readonly mediaType: string
25
+ }
26
+
27
+ export interface ModelToolCallPart extends ModelPartBase {
28
+ readonly type: "tool-call"
29
+ readonly toolCallId: string
30
+ readonly toolName: string
31
+ readonly input: JsonValue
32
+ readonly providerExecuted?: boolean
33
+ readonly dynamic?: boolean
34
+ }
35
+
36
+ export type ModelToolOutput =
37
+ | { readonly type: "text"; readonly value: string }
38
+ | { readonly type: "json"; readonly value: JsonValue }
39
+ | { readonly type: "error-text"; readonly value: string }
40
+ | { readonly type: "error-json"; readonly value: JsonValue }
41
+
42
+ export interface ModelToolResultPart extends ModelPartBase {
43
+ readonly type: "tool-result"
44
+ readonly toolCallId: string
45
+ readonly toolName: string
46
+ readonly output: ModelToolOutput
47
+ /** Original durable tool output when the model-facing output is a projection. */
48
+ readonly originalOutput?: JsonValue
49
+ readonly providerExecuted?: boolean
50
+ readonly dynamic?: boolean
51
+ }
52
+
53
+ /** Ordered replay state with no honest portable content representation. */
54
+ export interface ModelProviderStatePart {
55
+ readonly type: "provider-state"
56
+ readonly providerId: string
57
+ readonly data: JsonValue
58
+ }
59
+
60
+ export type ModelAssistantPart =
61
+ | ModelTextPart
62
+ | ModelReasoningPart
63
+ | ModelToolCallPart
64
+ | ModelToolResultPart
65
+ | ModelProviderStatePart
66
+
67
+ export type ModelMessage =
68
+ | {
69
+ readonly role: "system"
70
+ readonly content: string
71
+ readonly providerData?: ProviderData
72
+ }
73
+ | {
74
+ readonly role: "user"
75
+ readonly content: readonly (ModelTextPart | ModelFilePart)[]
76
+ }
77
+ | { readonly role: "assistant"; readonly content: readonly ModelAssistantPart[] }
78
+ | { readonly role: "tool"; readonly content: readonly ModelToolResultPart[] }
@@ -0,0 +1,390 @@
1
+ import type { ModelRoute, ModelUsage } from "./events"
2
+ import type { LanguageModel } from "./language-model"
3
+ import type { LanguageModelRateCard, ModelTokenPrice } from "./rate-card"
4
+
5
+ /** Optional local financial enrichment cannot discard a completed, billable call. */
6
+ export function estimateModelCall(
7
+ model: LanguageModel,
8
+ input: Parameters<ModelCostEstimator["estimate"]>[0]
9
+ ): ModelCostEstimate {
10
+ try {
11
+ return model.costEstimator?.estimate(input) ?? rateModelCall({ usage: input.usage })
12
+ } catch {
13
+ console.warn(
14
+ "[Sixb] Model cost estimation failed; preserving usage and available provider cost."
15
+ )
16
+ return { status: "unpriceable", reason: "missing-rate-card" }
17
+ }
18
+ }
19
+
20
+ export interface ModelMoney {
21
+ readonly currency: "USD"
22
+ /** Billionths of one currency unit, serialized as an integer string. */
23
+ readonly amountNanos: string
24
+ }
25
+
26
+ export interface ModelReportedCost {
27
+ readonly money: ModelMoney
28
+ readonly providerId?: string
29
+ }
30
+
31
+ /** A local estimate is never a provider-reported charge. No financial API is required to run. */
32
+ export type ModelCostEstimate = Exclude<ModelCallCost, { status: "reported" }>
33
+
34
+ export interface ModelCostEstimator {
35
+ /** Conservative token-cost reservation, including cache writes and pricing tiers.
36
+ * Return undefined when routing or non-token charges prevent a safe local estimate. */
37
+ estimateReservation?(input: {
38
+ readonly inputTokens: number
39
+ readonly outputTokens: number
40
+ }): ModelMoney | undefined
41
+
42
+ estimate(input: {
43
+ readonly usage: ModelUsage
44
+ readonly route?: ModelRoute
45
+ readonly responseModelId?: string
46
+ }): ModelCostEstimate
47
+ }
48
+
49
+ export type ModelCostMeter =
50
+ | "tokens.input.total"
51
+ | "tokens.input.uncached"
52
+ | "tokens.input.cacheRead"
53
+ | "tokens.input.cacheWrite"
54
+ | "tokens.input.cacheWrite5m"
55
+ | "tokens.input.cacheWrite1h"
56
+ | "tokens.output.total"
57
+
58
+ export interface ModelCostComponent {
59
+ readonly meter: ModelCostMeter
60
+ readonly quantity: string
61
+ readonly rateAmountNanosPerMillion: string
62
+ readonly chargeAmountNanos: string
63
+ }
64
+
65
+ export type ModelCallCost =
66
+ | { readonly status: "reported"; readonly money: ModelMoney; readonly providerId?: string }
67
+ | {
68
+ readonly status: "rated"
69
+ readonly money: ModelMoney
70
+ readonly components: readonly ModelCostComponent[]
71
+ }
72
+ | {
73
+ readonly status: "unpriceable"
74
+ readonly reason: "missing-rate-card" | "missing-usage" | "inconsistent-usage"
75
+ readonly missingMeters?: readonly ModelCostMeter[]
76
+ }
77
+
78
+ /** Reserve at the highest configured token rates, before cache usage and the final tier are known. */
79
+ export function estimateModelReservation(input: {
80
+ readonly inputTokens: number
81
+ readonly outputTokens: number
82
+ readonly rateCard?: LanguageModelRateCard
83
+ }): ModelMoney | undefined {
84
+ if (!input.rateCard) return undefined
85
+ if (![input.inputTokens, input.outputTokens].every((n) => Number.isSafeInteger(n) && n >= 0)) {
86
+ throw new TypeError(
87
+ "[Sixb] Model reservation token estimates must be nonnegative safe integers."
88
+ )
89
+ }
90
+ const maxRate = (prices: readonly (ModelTokenPrice | undefined)[]) => {
91
+ const rates = prices.flatMap((price) =>
92
+ price === undefined
93
+ ? []
94
+ : typeof price === "string"
95
+ ? [price]
96
+ : [price.default, ...price.tiers.map((tier) => tier.price)]
97
+ )
98
+ return rates.reduce((max, price) => {
99
+ const rate = decimalDollarsToNanos(price)
100
+ return rate > max ? rate : max
101
+ }, 0n)
102
+ }
103
+ const card = input.rateCard
104
+ const inputRate = maxRate([
105
+ card.input,
106
+ card.cacheReadInput,
107
+ card.cacheWriteInput,
108
+ card.cacheWriteInput5m,
109
+ card.cacheWriteInput1h,
110
+ ])
111
+ const outputRate = maxRate([card.output])
112
+ const charge = (tokens: number, rate: bigint) => (BigInt(tokens) * rate + 999_999n) / 1_000_000n
113
+ return {
114
+ currency: "USD",
115
+ amountNanos: (
116
+ charge(input.inputTokens, inputRate) + charge(input.outputTokens, outputRate)
117
+ ).toString(),
118
+ }
119
+ }
120
+
121
+ /** Prefer the provider's bill over rate-card estimates, then rate complete token meters locally. */
122
+ export function rateModelCall(input: {
123
+ readonly usage: ModelUsage
124
+ readonly rateCard?: LanguageModelRateCard
125
+ readonly reported?: undefined
126
+ }): ModelCostEstimate
127
+ export function rateModelCall(input: {
128
+ readonly usage: ModelUsage
129
+ readonly rateCard?: LanguageModelRateCard
130
+ readonly reported?: ModelReportedCost
131
+ }): ModelCallCost
132
+ export function rateModelCall(input: {
133
+ readonly usage: ModelUsage
134
+ readonly rateCard?: LanguageModelRateCard
135
+ readonly reported?: ModelReportedCost
136
+ }): ModelCallCost {
137
+ if (input.reported) {
138
+ assertAmountNanos(input.reported.money.amountNanos)
139
+ return {
140
+ status: "reported",
141
+ money: input.reported.money,
142
+ ...(input.reported.providerId === undefined ? {} : { providerId: input.reported.providerId }),
143
+ }
144
+ }
145
+ if (!input.rateCard) return { status: "unpriceable", reason: "missing-rate-card" }
146
+ const { usage, rateCard } = input
147
+ if (!validUsageCounters(usage)) {
148
+ return { status: "unpriceable", reason: "inconsistent-usage" }
149
+ }
150
+ if (usage.inputTokens === undefined || usage.outputTokens === undefined) {
151
+ return {
152
+ status: "unpriceable",
153
+ reason: "missing-usage",
154
+ missingMeters: [
155
+ ...(usage.inputTokens === undefined ? (["tokens.input.total"] as const) : []),
156
+ ...(usage.outputTokens === undefined ? (["tokens.output.total"] as const) : []),
157
+ ],
158
+ }
159
+ }
160
+
161
+ const partitioned = partitionInputUsage(usage, rateCard)
162
+ if (partitioned.status !== "rated") return partitioned
163
+
164
+ const components: ModelCostComponent[] = []
165
+ if (!partitioned.partitioned) {
166
+ components.push(
167
+ component("tokens.input.total", usage.inputTokens, rateCard.input, usage.inputTokens)
168
+ )
169
+ } else {
170
+ components.push(
171
+ component("tokens.input.uncached", partitioned.uncached, rateCard.input, usage.inputTokens)
172
+ )
173
+ if (partitioned.cacheRead !== undefined) {
174
+ components.push(
175
+ component(
176
+ "tokens.input.cacheRead",
177
+ partitioned.cacheRead,
178
+ rateCard.cacheReadInput!,
179
+ usage.inputTokens
180
+ )
181
+ )
182
+ }
183
+ if (partitioned.cacheWrite !== undefined) {
184
+ components.push(
185
+ component(
186
+ "tokens.input.cacheWrite",
187
+ partitioned.cacheWrite,
188
+ rateCard.cacheWriteInput!,
189
+ usage.inputTokens
190
+ )
191
+ )
192
+ }
193
+ if (partitioned.cacheWrite5m !== undefined) {
194
+ components.push(
195
+ component(
196
+ "tokens.input.cacheWrite5m",
197
+ partitioned.cacheWrite5m,
198
+ rateCard.cacheWriteInput5m ?? rateCard.cacheWriteInput!,
199
+ usage.inputTokens
200
+ )
201
+ )
202
+ }
203
+ if (partitioned.cacheWrite1h !== undefined) {
204
+ components.push(
205
+ component(
206
+ "tokens.input.cacheWrite1h",
207
+ partitioned.cacheWrite1h,
208
+ rateCard.cacheWriteInput1h ?? rateCard.cacheWriteInput!,
209
+ usage.inputTokens
210
+ )
211
+ )
212
+ }
213
+ }
214
+ components.push(
215
+ component("tokens.output.total", usage.outputTokens, rateCard.output, usage.inputTokens)
216
+ )
217
+ const total = components.reduce((sum, entry) => sum + BigInt(entry.chargeAmountNanos), 0n)
218
+ return {
219
+ status: "rated",
220
+ money: { currency: rateCard.currency, amountNanos: total.toString() },
221
+ components,
222
+ }
223
+ }
224
+
225
+ type PartitionResult =
226
+ | { readonly status: "rated"; readonly partitioned: false }
227
+ | {
228
+ readonly status: "rated"
229
+ readonly partitioned: true
230
+ readonly uncached: number
231
+ readonly cacheRead?: number
232
+ readonly cacheWrite?: number
233
+ readonly cacheWrite5m?: number
234
+ readonly cacheWrite1h?: number
235
+ }
236
+ | Extract<ModelCallCost, { status: "unpriceable" }>
237
+
238
+ function partitionInputUsage(usage: ModelUsage, rateCard: LanguageModelRateCard): PartitionResult {
239
+ const hasSpecificWrites =
240
+ usage.cacheWrite5mInputTokens !== undefined || usage.cacheWrite1hInputTokens !== undefined
241
+ const cacheWriteSpecific =
242
+ (usage.cacheWrite5mInputTokens ?? 0) + (usage.cacheWrite1hInputTokens ?? 0)
243
+ if (
244
+ hasSpecificWrites &&
245
+ usage.cacheWriteInputTokens !== undefined &&
246
+ usage.cacheWriteInputTokens !== cacheWriteSpecific
247
+ ) {
248
+ return { status: "unpriceable", reason: "inconsistent-usage" }
249
+ }
250
+
251
+ const partitioned =
252
+ usage.uncachedInputTokens !== undefined ||
253
+ usage.cacheReadInputTokens !== undefined ||
254
+ usage.cacheWriteInputTokens !== undefined ||
255
+ hasSpecificWrites ||
256
+ rateCard.cacheReadInput !== undefined ||
257
+ rateCard.cacheWriteInput !== undefined ||
258
+ rateCard.cacheWriteInput5m !== undefined ||
259
+ rateCard.cacheWriteInput1h !== undefined
260
+ if (!partitioned) return { status: "rated", partitioned: false }
261
+
262
+ const cacheRead = usage.cacheReadInputTokens ?? 0
263
+ const totalWrite = usage.cacheWriteInputTokens ?? cacheWriteSpecific
264
+ if (usage.inputTokens !== undefined && cacheRead + totalWrite > usage.inputTokens) {
265
+ return { status: "unpriceable", reason: "inconsistent-usage" }
266
+ }
267
+
268
+ const missing: ModelCostMeter[] = []
269
+ if (usage.uncachedInputTokens === undefined) missing.push("tokens.input.uncached")
270
+ if (rateCard.cacheReadInput !== undefined && usage.cacheReadInputTokens === undefined) {
271
+ missing.push("tokens.input.cacheRead")
272
+ }
273
+ if (
274
+ rateCard.cacheWriteInput !== undefined &&
275
+ rateCard.cacheWriteInput5m === undefined &&
276
+ rateCard.cacheWriteInput1h === undefined &&
277
+ usage.cacheWriteInputTokens === undefined
278
+ ) {
279
+ missing.push("tokens.input.cacheWrite")
280
+ }
281
+ if (rateCard.cacheWriteInput5m !== undefined && usage.cacheWrite5mInputTokens === undefined) {
282
+ missing.push("tokens.input.cacheWrite5m")
283
+ }
284
+ if (rateCard.cacheWriteInput1h !== undefined && usage.cacheWrite1hInputTokens === undefined) {
285
+ missing.push("tokens.input.cacheWrite1h")
286
+ }
287
+ if (missing.length > 0) {
288
+ return { status: "unpriceable", reason: "missing-usage", missingMeters: missing }
289
+ }
290
+ if (cacheRead > 0 && rateCard.cacheReadInput === undefined) {
291
+ return {
292
+ status: "unpriceable",
293
+ reason: "missing-rate-card",
294
+ missingMeters: ["tokens.input.cacheRead"],
295
+ }
296
+ }
297
+ if (!hasSpecificWrites && totalWrite > 0 && rateCard.cacheWriteInput === undefined) {
298
+ return {
299
+ status: "unpriceable",
300
+ reason: "missing-rate-card",
301
+ missingMeters: ["tokens.input.cacheWrite"],
302
+ }
303
+ }
304
+ if (
305
+ (usage.cacheWrite5mInputTokens ?? 0) > 0 &&
306
+ rateCard.cacheWriteInput5m === undefined &&
307
+ rateCard.cacheWriteInput === undefined
308
+ ) {
309
+ return {
310
+ status: "unpriceable",
311
+ reason: "missing-rate-card",
312
+ missingMeters: ["tokens.input.cacheWrite5m"],
313
+ }
314
+ }
315
+ if (
316
+ (usage.cacheWrite1hInputTokens ?? 0) > 0 &&
317
+ rateCard.cacheWriteInput1h === undefined &&
318
+ rateCard.cacheWriteInput === undefined
319
+ ) {
320
+ return {
321
+ status: "unpriceable",
322
+ reason: "missing-rate-card",
323
+ missingMeters: ["tokens.input.cacheWrite1h"],
324
+ }
325
+ }
326
+
327
+ const uncached = usage.uncachedInputTokens!
328
+ if (uncached + cacheRead + totalWrite !== usage.inputTokens) {
329
+ return { status: "unpriceable", reason: "inconsistent-usage" }
330
+ }
331
+ return {
332
+ status: "rated",
333
+ partitioned: true,
334
+ uncached,
335
+ ...(rateCard.cacheReadInput === undefined ? {} : { cacheRead }),
336
+ ...(hasSpecificWrites
337
+ ? {
338
+ cacheWrite5m: usage.cacheWrite5mInputTokens ?? 0,
339
+ cacheWrite1h: usage.cacheWrite1hInputTokens ?? 0,
340
+ }
341
+ : rateCard.cacheWriteInput === undefined
342
+ ? {}
343
+ : { cacheWrite: totalWrite }),
344
+ }
345
+ }
346
+
347
+ function validUsageCounters(usage: ModelUsage): boolean {
348
+ return Object.entries(usage)
349
+ .filter(([key]) => key !== "raw")
350
+ .every(([, value]) => value === undefined || (Number.isSafeInteger(value) && value >= 0))
351
+ }
352
+
353
+ function component(
354
+ meter: ModelCostMeter,
355
+ quantity: number,
356
+ price: ModelTokenPrice,
357
+ tierTokens: number
358
+ ): ModelCostComponent {
359
+ const rate = decimalDollarsToNanos(resolvePrice(price, tierTokens))
360
+ const charge = (BigInt(quantity) * rate + 500_000n) / 1_000_000n
361
+ return {
362
+ meter,
363
+ quantity: quantity.toString(),
364
+ rateAmountNanosPerMillion: rate.toString(),
365
+ chargeAmountNanos: charge.toString(),
366
+ }
367
+ }
368
+
369
+ function resolvePrice(price: ModelTokenPrice, tokens: number): string {
370
+ if (typeof price === "string") return price
371
+ return (
372
+ price.tiers.find(
373
+ (tier) =>
374
+ tokens >= tier.minTokens && (tier.maxTokens === undefined || tokens < tier.maxTokens)
375
+ )?.price ?? price.default
376
+ )
377
+ }
378
+
379
+ function decimalDollarsToNanos(value: string): bigint {
380
+ const [whole = "0", fraction = ""] = value.split(".")
381
+ const nanos = fraction.slice(0, 9).padEnd(9, "0")
382
+ const roundUp = Number(fraction[9] ?? "0") >= 5
383
+ return BigInt(whole) * 1_000_000_000n + BigInt(nanos) + (roundUp ? 1n : 0n)
384
+ }
385
+
386
+ function assertAmountNanos(value: string): void {
387
+ if (!/^(?:0|[1-9]\d*)$/.test(value)) {
388
+ throw new TypeError("[Sixb] Provider-reported model cost must use nonnegative amountNanos.")
389
+ }
390
+ }