@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
@@ -1,7 +1,10 @@
1
1
  import type { AgentMessage, AgentMessagePart, AgentMessageRole } from "../../agents/message"
2
+ import type { AgentReasoningLevel } from "../../agents/types"
2
3
  import type { Principal } from "../../auth"
4
+ import type { FileRef } from "../../blob-storage"
3
5
  import type { SixbErrorCode, SixbFailure } from "../../errors/types"
4
6
  import type { JsonValue } from "../../json"
7
+ import type { LanguageModelRef } from "../../models"
5
8
 
6
9
  // ── agent_threads — one conversation with an agent ──────────────────────────────────────────────
7
10
 
@@ -10,7 +13,6 @@ export type AgentThreadStatus = "active" | "archived"
10
13
  export interface AgentThreadRecord {
11
14
  readonly id: string
12
15
  readonly projectId: string
13
- readonly agentId: string
14
16
  /** Who owns/opened the thread. Reuses the canonical auth principal (gains `agent` later for free). */
15
17
  readonly ownerPrincipal: Principal
16
18
  readonly title?: string
@@ -26,7 +28,6 @@ export interface AgentThreadRecord {
26
28
  export interface CreateAgentThreadInput {
27
29
  readonly id: string
28
30
  readonly projectId: string
29
- readonly agentId: string
30
31
  readonly ownerPrincipal: Principal
31
32
  readonly title?: string
32
33
  readonly status?: AgentThreadStatus
@@ -36,9 +37,6 @@ export interface CreateAgentThreadInput {
36
37
 
37
38
  export interface ListAgentThreadsInput {
38
39
  readonly projectId: string
39
- readonly agentId?: string
40
- /** Optional allowlist intersected with `agentId` when both are provided. Empty means no rows. */
41
- readonly agentIds?: readonly string[]
42
40
  readonly statuses?: readonly AgentThreadStatus[]
43
41
  readonly ownerPrincipal?: Principal
44
42
  readonly limit?: number
@@ -58,21 +56,23 @@ export interface ListAgentThreadsResult {
58
56
  export type AgentExecutionStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled"
59
57
 
60
58
  export type AgentRunStatus = AgentExecutionStatus
59
+ export type AgentRunKind = "conversation" | "subagent"
61
60
 
62
61
  /** Error codes an agent execution can persist and expose through its public contract. */
63
62
  export const AGENT_RUN_FAILURE_CODES = [
64
63
  "internal.unexpected",
65
64
  "runtime.cancelled",
66
65
  "agent.execution_failed",
66
+ "ai.usage_limit_exceeded",
67
+ "ai.usage_limit_unavailable",
67
68
  ] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]
68
69
 
69
70
  export type AgentRunFailureCode = (typeof AGENT_RUN_FAILURE_CODES)[number]
70
71
 
71
72
  /**
72
- * Why a run ended — our own SDK-independent vocabulary. It includes the AI SDK's unified finish
73
- * reasons plus platform-level endings such as `timeout`, so reads are typed and exhaustive without
74
- * core depending on `ai`. `other`/`unknown` are catch-alls: an unrecognised provider value still
75
- * records *that* the run ended.
73
+ * Why a run ended — Sixb's provider-independent vocabulary. It includes model-loop reasons plus
74
+ * platform-level endings such as `timeout`, so reads remain typed and exhaustive. `other` and
75
+ * `unknown` preserve terminal state when a provider adds a new reason.
76
76
  */
77
77
  export const AGENT_RUN_FINISH_REASONS = [
78
78
  "stop",
@@ -144,13 +144,10 @@ export interface AgentRunExecution {
144
144
  readonly queueLeaseExpiresAt: Date
145
145
  }
146
146
 
147
- export interface AgentRunRecord {
147
+ interface AgentRunRecordBase {
148
148
  readonly id: string
149
149
  readonly projectId: string
150
150
  readonly executionId: string
151
- readonly threadId: string
152
- readonly agentId: string
153
- readonly triggerMessageId: string
154
151
  /** Durable group memberships snapshotted when the run was admitted. */
155
152
  readonly requesterGroupIds: readonly string[]
156
153
  readonly status: AgentRunStatus
@@ -169,17 +166,73 @@ export interface AgentRunRecord {
169
166
  readonly completedAt?: Date
170
167
  }
171
168
 
169
+ export interface ConversationAgentRunRecord extends AgentRunRecordBase {
170
+ readonly kind: "conversation"
171
+ readonly threadId: string
172
+ readonly triggerMessageId: string
173
+ /** Immutable model selection captured at admission. Absent only on runs predating this field. */
174
+ readonly spec?: ConversationAgentRunSpec
175
+ }
176
+
177
+ /** Immutable, serialisable model selection for one conversational turn. */
178
+ export interface ConversationAgentRunSpec {
179
+ readonly model: LanguageModelRef
180
+ readonly reasoning?: AgentReasoningLevel
181
+ }
182
+
183
+ /** Immutable, serialisable child configuration captured before dispatch. */
184
+ export interface SubagentRunSpec {
185
+ readonly model: LanguageModelRef
186
+ readonly reasoning?: AgentReasoningLevel
187
+ /** Focused task supplied by the parent Agent. */
188
+ readonly task: string
189
+ /** Project tools available when the child was admitted. Runtime tools are injected separately. */
190
+ readonly toolNames: readonly string[]
191
+ readonly maxSteps: number
192
+ }
193
+
194
+ /** Durable child output returned to its parent by `wait_agent`. */
195
+ export interface SubagentRunResult {
196
+ readonly text?: string
197
+ readonly files?: readonly FileRef[]
198
+ }
199
+
200
+ export interface SubagentRunRecord extends AgentRunRecordBase {
201
+ readonly kind: "subagent"
202
+ readonly parentRunId: string
203
+ /** Stable parent-selected key that makes repeated tool execution idempotent. */
204
+ readonly spawnKey: string
205
+ readonly spec: SubagentRunSpec
206
+ readonly result?: SubagentRunResult
207
+ }
208
+
209
+ export type AgentRunRecord = ConversationAgentRunRecord | SubagentRunRecord
210
+
172
211
  export interface CreateAgentRunInput {
173
212
  readonly id: string
174
213
  readonly projectId: string
175
214
  readonly executionId: string
176
215
  readonly threadId: string
177
- readonly agentId: string
178
216
  readonly triggerMessageId: string
217
+ readonly spec: ConversationAgentRunSpec
179
218
  readonly requesterGroupIds: readonly string[]
180
219
  readonly createdAt?: Date
181
220
  }
182
221
 
222
+ export interface CreateSubagentRunInput {
223
+ readonly id: string
224
+ readonly projectId: string
225
+ readonly executionId: string
226
+ readonly parentRunId: string
227
+ /** Current parent delivery token. New children are admitted only while that delivery owns it. */
228
+ readonly parentExecutionToken: string
229
+ readonly spawnKey: string
230
+ readonly spec: SubagentRunSpec
231
+ /** Internal safety bound enforced atomically across worker processes. */
232
+ readonly maxActiveChildren: number
233
+ readonly createdAt?: Date
234
+ }
235
+
183
236
  export interface StartAgentRunInput {
184
237
  readonly id: string
185
238
  readonly projectId: string
@@ -219,6 +272,7 @@ export type FinishAgentRunInput =
219
272
  readonly modelId?: string
220
273
  readonly finishReason?: AgentRunFinishReason
221
274
  readonly diagnostics?: readonly AgentRunDiagnostic[]
275
+ readonly result?: SubagentRunResult
222
276
  readonly completedAt?: Date
223
277
  }
224
278
  | {
@@ -235,8 +289,9 @@ export type FinishAgentRunInput =
235
289
 
236
290
  export interface ListAgentRunsInput {
237
291
  readonly projectId: string
292
+ readonly kinds?: readonly AgentRunKind[]
238
293
  readonly threadId?: string
239
- readonly agentId?: string
294
+ readonly parentRunId?: string
240
295
  readonly statuses?: readonly AgentRunStatus[]
241
296
  /** Effective start time; runs that never started use `createdAt`. */
242
297
  readonly startedAfter?: Date
@@ -371,7 +426,9 @@ export interface AgentThreadStore {
371
426
 
372
427
  export interface AgentRunStore {
373
428
  /** Persist a queued run and atomically claim the thread's single-flight slot. */
374
- create(input: CreateAgentRunInput): Promise<AgentRunRecord>
429
+ create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord>
430
+ /** Persist or replay one idempotent child run while atomically enforcing parent fan-out. */
431
+ createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord>
375
432
  /** Transition a queued run to running and install the first delivery's execution token. */
376
433
  start(input: StartAgentRunInput): Promise<AgentRunRecord>
377
434
  /** Finish a queued run before execution and release the thread's single-flight slot. */
@@ -59,7 +59,8 @@ export interface AiAccountingAggregateFragment {
59
59
  readonly start?: Date
60
60
  readonly providerId?: string
61
61
  readonly modelId?: string
62
- readonly agentId?: string
62
+ readonly agentKind?: "agent" | "workflowAgent"
63
+ readonly agentStepId?: string
63
64
  readonly workflowId?: string
64
65
  readonly modelCallCount: string
65
66
  readonly usage: {
@@ -154,7 +155,19 @@ export function buildAiAccountingOverview(
154
155
  JSON.stringify([item.usage.providerId, item.usage.requestedModelId]),
155
156
  item
156
157
  )
157
- if (item.attribution) appendGrouped(agentItems, item.attribution.agentId, item)
158
+ if (item.attribution?.kind === "agent") {
159
+ appendGrouped(agentItems, JSON.stringify(["agent"]), item)
160
+ } else if (item.attribution?.kind === "workflowAgent") {
161
+ appendGrouped(
162
+ agentItems,
163
+ JSON.stringify([
164
+ "workflowAgent",
165
+ item.attribution.workflowId,
166
+ item.attribution.agentStepId,
167
+ ]),
168
+ item
169
+ )
170
+ }
158
171
  if (item.attribution?.kind === "workflowAgent") {
159
172
  appendGrouped(workflowItems, item.attribution.workflowId, item)
160
173
  }
@@ -171,7 +184,21 @@ export function buildAiAccountingOverview(
171
184
  })
172
185
  .sort(compareModelBreakdowns)
173
186
  const agents: AiAccountingAgentBreakdown[] = [...agentItems]
174
- .map(([agentId, grouped]) => ({ agentId, ...aggregateAccountingItems(grouped) }))
187
+ .map(([key, grouped]) => {
188
+ const [kind, workflowId, agentStepId] = JSON.parse(key) as [
189
+ "agent" | "workflowAgent",
190
+ string?,
191
+ string?,
192
+ ]
193
+ return kind === "agent"
194
+ ? { kind, ...aggregateAccountingItems(grouped) }
195
+ : {
196
+ kind,
197
+ workflowId: requiredFragmentString(workflowId, "workflowId"),
198
+ agentStepId: requiredFragmentString(agentStepId, "agentStepId"),
199
+ ...aggregateAccountingItems(grouped),
200
+ }
201
+ })
175
202
  .sort(compareAgentBreakdowns)
176
203
  const workflows: AiAccountingWorkflowBreakdown[] = [...workflowItems]
177
204
  .map(([workflowId, grouped]) => ({ workflowId, ...aggregateAccountingItems(grouped) }))
@@ -227,7 +254,14 @@ export function buildAiAccountingOverviewFromFragments(
227
254
  )
228
255
  break
229
256
  case "agent":
230
- target = getFragmentAccumulator(agents, requiredFragmentString(fragment.agentId, "agentId"))
257
+ target = getFragmentAccumulator(
258
+ agents,
259
+ JSON.stringify([
260
+ requiredFragmentString(fragment.agentKind, "agentKind"),
261
+ fragment.workflowId,
262
+ fragment.agentStepId,
263
+ ])
264
+ )
231
265
  break
232
266
  case "workflow":
233
267
  target = getFragmentAccumulator(
@@ -254,7 +288,21 @@ export function buildAiAccountingOverviewFromFragments(
254
288
  })
255
289
  .sort(compareModelBreakdowns),
256
290
  agents: [...agents]
257
- .map(([agentId, value]) => ({ agentId, ...finishAggregateFragment(value) }))
291
+ .map(([key, value]) => {
292
+ const [kind, workflowId, agentStepId] = JSON.parse(key) as [
293
+ "agent" | "workflowAgent",
294
+ string?,
295
+ string?,
296
+ ]
297
+ return kind === "agent"
298
+ ? { kind, ...finishAggregateFragment(value) }
299
+ : {
300
+ kind,
301
+ workflowId: requiredFragmentString(workflowId, "workflowId"),
302
+ agentStepId: requiredFragmentString(agentStepId, "agentStepId"),
303
+ ...finishAggregateFragment(value),
304
+ }
305
+ })
258
306
  .sort(compareAgentBreakdowns),
259
307
  workflows: [...workflows]
260
308
  .map(([workflowId, value]) => ({ workflowId, ...finishAggregateFragment(value) }))
@@ -560,7 +608,16 @@ function compareAgentBreakdowns(
560
608
  left: AiAccountingAgentBreakdown,
561
609
  right: AiAccountingAgentBreakdown
562
610
  ): number {
563
- return right.modelCallCount - left.modelCallCount || left.agentId.localeCompare(right.agentId)
611
+ return (
612
+ right.modelCallCount - left.modelCallCount ||
613
+ agentBreakdownKey(left).localeCompare(agentBreakdownKey(right))
614
+ )
615
+ }
616
+
617
+ function agentBreakdownKey(value: AiAccountingAgentBreakdown): string {
618
+ return value.kind === "agent"
619
+ ? "agent"
620
+ : JSON.stringify(["workflowAgent", value.workflowId, value.agentStepId])
564
621
  }
565
622
 
566
623
  function compareWorkflowBreakdowns(
@@ -1,9 +1,16 @@
1
- import type { AiBillableMeter, AiModelCallCostRecord, AiPricingContext } from "./types"
2
- import { normalizeAiPricingContext } from "./validation"
1
+ import type {
2
+ AiBillableMeter,
3
+ AiCostEstimate,
4
+ AiModelCallCostRecord,
5
+ AiPriceSource,
6
+ AiPricingContext,
7
+ } from "./types"
8
+ import { normalizeAiCostEstimate, normalizeAiPricingContext } from "./validation"
3
9
 
4
10
  export interface AiModelCallCostDetails {
11
+ readonly estimate?: AiCostEstimate
5
12
  readonly pricingContext: AiPricingContext
6
- readonly priceSource: Omit<AiModelCallCostRecord["priceSource"], "observedAt"> & {
13
+ readonly priceSource?: Omit<AiPriceSource, "observedAt"> & {
7
14
  readonly observedAt: string
8
15
  }
9
16
  readonly components?: Extract<AiModelCallCostRecord, { status: "rated" }>["components"]
@@ -12,8 +19,16 @@ export interface AiModelCallCostDetails {
12
19
 
13
20
  export function aiModelCallCostDetails(record: AiModelCallCostRecord): AiModelCallCostDetails {
14
21
  return {
22
+ ...(record.estimate === undefined ? {} : { estimate: record.estimate }),
15
23
  pricingContext: record.pricingContext,
16
- priceSource: { ...record.priceSource, observedAt: record.priceSource.observedAt.toISOString() },
24
+ ...(record.priceSource === undefined
25
+ ? {}
26
+ : {
27
+ priceSource: {
28
+ ...record.priceSource,
29
+ observedAt: record.priceSource.observedAt.toISOString(),
30
+ },
31
+ }),
17
32
  ...(record.status === "rated" ? { components: record.components } : {}),
18
33
  ...(record.status === "unpriceable" && record.missingMeters
19
34
  ? { missingMeters: record.missingMeters }
@@ -25,18 +40,25 @@ export function parseAiModelCallCostDetails(value: unknown): AiModelCallCostDeta
25
40
  const parsed: unknown = typeof value === "string" ? JSON.parse(value) : value
26
41
  if (!isRecord(parsed)) throw invalidDetails()
27
42
  const priceSource = parsed.priceSource
28
- if (!isRecord(priceSource)) throw invalidDetails()
43
+ if (priceSource !== undefined && !isRecord(priceSource)) throw invalidDetails()
29
44
  const components = parsed.components
30
45
  const missingMeters = parsed.missingMeters
31
46
  return {
47
+ ...(parsed.estimate === undefined
48
+ ? {}
49
+ : { estimate: normalizeAiCostEstimate(parsed.estimate) }),
32
50
  pricingContext: pricingContextFromUnknown(parsed.pricingContext),
33
- priceSource: {
34
- sourceId: requiredString(priceSource.sourceId),
35
- sourceEntryId: requiredString(priceSource.sourceEntryId),
36
- sourceVersion: requiredString(priceSource.sourceVersion),
37
- sourceUrl: requiredString(priceSource.sourceUrl),
38
- observedAt: requiredString(priceSource.observedAt),
39
- },
51
+ ...(priceSource === undefined
52
+ ? {}
53
+ : {
54
+ priceSource: {
55
+ sourceId: requiredString(priceSource.sourceId),
56
+ sourceEntryId: requiredString(priceSource.sourceEntryId),
57
+ sourceVersion: requiredString(priceSource.sourceVersion),
58
+ ...optionalStringProperty(priceSource, "sourceUrl"),
59
+ observedAt: requiredString(priceSource.observedAt),
60
+ },
61
+ }),
40
62
  ...(components === undefined ? {} : { components: costComponentsFromUnknown(components) }),
41
63
  ...(missingMeters === undefined ? {} : { missingMeters: metersFromUnknown(missingMeters) }),
42
64
  }
@@ -50,6 +72,7 @@ function pricingContextFromUnknown(value: unknown): AiPricingContext {
50
72
  ...optionalStringProperty(value, "region"),
51
73
  ...optionalStringProperty(value, "inferenceGeo"),
52
74
  ...optionalStringProperty(value, "routedProviderId"),
75
+ ...optionalStringProperty(value, "routedModelId"),
53
76
  ...optionalStringProperty(value, "deploymentId"),
54
77
  ...optionalStringProperty(value, "inferenceProfileId"),
55
78
  ...optionalNumberProperty(value, "cacheWriteTtlSeconds"),
@@ -83,6 +106,8 @@ function billableMeter(value: unknown): AiBillableMeter {
83
106
  value !== "tokens.input.uncached" &&
84
107
  value !== "tokens.input.cacheRead" &&
85
108
  value !== "tokens.input.cacheWrite" &&
109
+ value !== "tokens.input.cacheWrite5m" &&
110
+ value !== "tokens.input.cacheWrite1h" &&
86
111
  value !== "tokens.output.total" &&
87
112
  value !== "tokens.output.text" &&
88
113
  value !== "tokens.output.reasoning"
@@ -0,0 +1,248 @@
1
+ import type { AiAccountingRecordSetItem } from "./analytics"
2
+ import { aiAccountingItemMatchesQuery, normalizeAiModelCallAccountingQuery } from "./analytics"
3
+ import type {
4
+ AiAccountingAttribution,
5
+ AiBillingIdentity,
6
+ AiCostSummary,
7
+ AiModelCallExecutionSummary,
8
+ AiModelCallGroup,
9
+ AiModelCallGroupSummary,
10
+ AiMoney,
11
+ ListAiModelCallGroupsInput,
12
+ ListAiModelCallGroupsResult,
13
+ } from "./types"
14
+
15
+ export interface AiAccountingGroupIdentity {
16
+ readonly executionId: string
17
+ readonly attribution?: AiAccountingAttribution
18
+ }
19
+
20
+ /** A compact SQL aggregate, never the raw provider response or a page of individual calls. */
21
+ export interface AiModelCallGroupFragment {
22
+ readonly root: AiAccountingGroupIdentity
23
+ readonly execution: AiAccountingGroupIdentity
24
+ readonly model: AiBillingIdentity
25
+ readonly firstCallAt: Date
26
+ readonly lastCallAt: Date
27
+ readonly callCount: string
28
+ readonly tokenCount: string
29
+ readonly totalTokens: string | null
30
+ readonly valuationStatus: "rated" | "unpriceable" | "unvalued"
31
+ readonly money?: AiMoney
32
+ }
33
+
34
+ /** Common provider projection; SQL groups meters before returning rows to the runtime. */
35
+ export interface AiModelCallGroupRow {
36
+ readonly root_execution_id: string
37
+ readonly execution_id: string
38
+ readonly provider_id: string
39
+ readonly requested_model_id: string
40
+ readonly first_call_at: Date | string
41
+ readonly last_call_at: Date | string
42
+ readonly call_count: string
43
+ readonly token_count: string
44
+ readonly total_tokens: string | null
45
+ readonly valuation_status: AiModelCallGroupFragment["valuationStatus"]
46
+ readonly amount_currency: string | null
47
+ readonly amount_high: string | null
48
+ readonly amount_middle: string | null
49
+ readonly amount_low: string | null
50
+ readonly root_agent_run_id: string | null
51
+ readonly root_thread_id: string | null
52
+ readonly direct_kind: string | null
53
+ readonly direct_run_id: string | null
54
+ readonly parent_run_id: string | null
55
+ readonly workflow_agent_step_id: string | null
56
+ readonly workflow_node_run_id: string | null
57
+ readonly workflow_id: string | null
58
+ readonly workflow_run_id: string | null
59
+ }
60
+
61
+ export function aiModelCallGroupFragmentFromRow(
62
+ row: AiModelCallGroupRow
63
+ ): AiModelCallGroupFragment {
64
+ let attribution: AiAccountingAttribution | undefined
65
+ if (row.root_agent_run_id && row.root_thread_id) {
66
+ attribution = {
67
+ kind: "agent",
68
+ agentRunId: row.root_agent_run_id,
69
+ threadId: row.root_thread_id,
70
+ }
71
+ } else if (
72
+ row.workflow_agent_step_id &&
73
+ row.workflow_node_run_id &&
74
+ row.workflow_id &&
75
+ row.workflow_run_id
76
+ ) {
77
+ attribution = {
78
+ kind: "workflowAgent",
79
+ agentStepId: row.workflow_agent_step_id,
80
+ nodeRunId: row.workflow_node_run_id,
81
+ workflowId: row.workflow_id,
82
+ workflowRunId: row.workflow_run_id,
83
+ }
84
+ }
85
+ const executionAttribution: AiAccountingAttribution | undefined =
86
+ row.direct_kind === "subagent" && row.direct_run_id && row.parent_run_id
87
+ ? { kind: "subagent", subagentRunId: row.direct_run_id, parentRunId: row.parent_run_id }
88
+ : attribution
89
+ return {
90
+ root: { executionId: row.root_execution_id, attribution },
91
+ execution: { executionId: row.execution_id, attribution: executionAttribution },
92
+ model: { providerId: row.provider_id, modelId: row.requested_model_id },
93
+ firstCallAt: new Date(row.first_call_at),
94
+ lastCallAt: new Date(row.last_call_at),
95
+ callCount: row.call_count,
96
+ tokenCount: row.token_count,
97
+ totalTokens: row.total_tokens,
98
+ valuationStatus: row.valuation_status,
99
+ ...(row.amount_currency === null
100
+ ? {}
101
+ : {
102
+ money: {
103
+ currency: row.amount_currency,
104
+ amountNanos: (
105
+ BigInt(row.amount_high ?? "0") * 1_000_000_000_000n +
106
+ BigInt(row.amount_middle ?? "0") * 1_000_000n +
107
+ BigInt(row.amount_low ?? "0")
108
+ ).toString(),
109
+ },
110
+ }),
111
+ }
112
+ }
113
+
114
+ export function buildAiModelCallGroupsFromFragments(
115
+ fragments: readonly AiModelCallGroupFragment[]
116
+ ): readonly AiModelCallGroup[] {
117
+ const roots = new Map<string, AiModelCallGroupFragment[]>()
118
+ for (const fragment of fragments) append(roots, fragment.root.executionId, fragment)
119
+ return [...roots.values()]
120
+ .map((rootFragments): AiModelCallGroup => {
121
+ const first = rootFragments[0]!
122
+ const executions = new Map<string, AiModelCallGroupFragment[]>()
123
+ for (const fragment of rootFragments)
124
+ append(executions, fragment.execution.executionId, fragment)
125
+ return {
126
+ ...first.root,
127
+ ...summarize(rootFragments),
128
+ ...timeRange(rootFragments),
129
+ executions: [...executions.values()]
130
+ .map(
131
+ (items): AiModelCallExecutionSummary => ({
132
+ ...items[0]!.execution,
133
+ ...summarize(items),
134
+ ...timeRange(items),
135
+ models: [
136
+ ...new Map(items.map(({ model }) => [JSON.stringify(model), model])).values(),
137
+ ].sort(
138
+ (a, b) =>
139
+ compareText(a.providerId, b.providerId) || compareText(a.modelId, b.modelId)
140
+ ),
141
+ })
142
+ )
143
+ .sort(
144
+ (a, b) =>
145
+ a.firstCallAt.getTime() - b.firstCallAt.getTime() ||
146
+ compareText(a.executionId, b.executionId)
147
+ ),
148
+ }
149
+ })
150
+ .sort(
151
+ (a, b) =>
152
+ b.lastCallAt.getTime() - a.lastCallAt.getTime() || compareText(a.executionId, b.executionId)
153
+ )
154
+ }
155
+
156
+ export function buildAiModelCallGroups(
157
+ input: ListAiModelCallGroupsInput,
158
+ source: readonly (AiAccountingRecordSetItem & { readonly root: AiAccountingGroupIdentity })[]
159
+ ): ListAiModelCallGroupsResult {
160
+ const query = normalizeAiModelCallAccountingQuery(input)
161
+ const fragments = source
162
+ .filter(
163
+ (item) =>
164
+ aiAccountingItemMatchesQuery(item, query) &&
165
+ (query.valuationStatus === undefined ||
166
+ (item.cost?.status ?? "unvalued") === query.valuationStatus)
167
+ )
168
+ .map(
169
+ (item): AiModelCallGroupFragment => ({
170
+ root: item.root,
171
+ execution: { executionId: item.usage.executionId, attribution: item.attribution },
172
+ model: { providerId: item.usage.providerId, modelId: item.usage.requestedModelId },
173
+ firstCallAt: item.usage.occurredAt,
174
+ lastCallAt: item.usage.occurredAt,
175
+ callCount: "1",
176
+ tokenCount: item.usage.usage.totalTokens === undefined ? "0" : "1",
177
+ totalTokens: item.usage.usage.totalTokens?.toString() ?? null,
178
+ valuationStatus: item.cost?.status ?? "unvalued",
179
+ ...(item.cost && item.cost.status !== "unpriceable" ? { money: item.cost.money } : {}),
180
+ })
181
+ )
182
+ const groups = buildAiModelCallGroupsFromFragments(fragments)
183
+ const items = groups.slice(query.offset, query.offset + query.limit)
184
+ return structuredClone({
185
+ items,
186
+ total: groups.length,
187
+ hasMore: query.offset + items.length < groups.length,
188
+ })
189
+ }
190
+
191
+ function summarize(items: readonly AiModelCallGroupFragment[]): AiModelCallGroupSummary {
192
+ let calls = 0n
193
+ let tokenCount = 0n
194
+ let tokens = 0n
195
+ const counts = { rated: 0n, unpriceable: 0n, unvalued: 0n }
196
+ const money = new Map<string, bigint>()
197
+ for (const item of items) {
198
+ const count = BigInt(item.callCount)
199
+ calls += count
200
+ tokenCount += BigInt(item.tokenCount)
201
+ tokens += BigInt(item.totalTokens ?? "0")
202
+ counts[item.valuationStatus] += count
203
+ if (item.money)
204
+ money.set(
205
+ item.money.currency,
206
+ (money.get(item.money.currency) ?? 0n) + BigInt(item.money.amountNanos)
207
+ )
208
+ }
209
+ const costs: AiCostSummary = {
210
+ amounts: [...money]
211
+ .sort(([a], [b]) => a.localeCompare(b))
212
+ .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),
213
+ ratedCallCount: safeCount(counts.rated),
214
+ unpriceableCallCount: safeCount(counts.unpriceable),
215
+ unvaluedCallCount: safeCount(counts.unvalued),
216
+ }
217
+ return {
218
+ modelCallCount: safeCount(calls),
219
+ ...(calls === tokenCount ? { totalTokens: safeCount(tokens) } : {}),
220
+ costs,
221
+ }
222
+ }
223
+
224
+ function timeRange(items: readonly AiModelCallGroupFragment[]) {
225
+ let first = items[0]!.firstCallAt.getTime()
226
+ let last = items[0]!.lastCallAt.getTime()
227
+ for (const item of items) {
228
+ first = Math.min(first, item.firstCallAt.getTime())
229
+ last = Math.max(last, item.lastCallAt.getTime())
230
+ }
231
+ return { firstCallAt: new Date(first), lastCallAt: new Date(last) }
232
+ }
233
+
234
+ function compareText(a: string, b: string): number {
235
+ return a === b ? 0 : a < b ? -1 : 1
236
+ }
237
+
238
+ function safeCount(value: bigint): number {
239
+ if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER))
240
+ throw new RangeError("[Sixb] AI accounting group count exceeds the safe integer range.")
241
+ return Number(value)
242
+ }
243
+
244
+ function append<T>(map: Map<string, T[]>, key: string, item: T): void {
245
+ const items = map.get(key)
246
+ if (items) items.push(item)
247
+ else map.set(key, [item])
248
+ }