@sixb/core 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (909) hide show
  1. package/dist/actions/delegated-admission.d.ts +24 -0
  2. package/dist/actions/delegated-admission.d.ts.map +1 -0
  3. package/dist/actions/descriptor.d.ts +29 -0
  4. package/dist/actions/descriptor.d.ts.map +1 -0
  5. package/dist/actions/execution.d.ts +5 -5
  6. package/dist/actions/execution.d.ts.map +1 -1
  7. package/dist/actions/index.js +50 -40
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run-authorization.d.ts +20 -0
  11. package/dist/actions/run-authorization.d.ts.map +1 -0
  12. package/dist/actions/run-dispatch.d.ts +3 -1
  13. package/dist/actions/run-dispatch.d.ts.map +1 -1
  14. package/dist/actions/worker.js +5 -5
  15. package/dist/actions/worker.js.map +1 -1
  16. package/dist/agents/adapters.d.ts +6 -166
  17. package/dist/agents/adapters.d.ts.map +1 -1
  18. package/dist/agents/authority.d.ts +22 -6
  19. package/dist/agents/authority.d.ts.map +1 -1
  20. package/dist/agents/builders.d.ts +3 -11
  21. package/dist/agents/builders.d.ts.map +1 -1
  22. package/dist/agents/context-resolution.d.ts.map +1 -1
  23. package/dist/agents/context.js +2 -2
  24. package/dist/agents/dispatch.d.ts +9 -1
  25. package/dist/agents/dispatch.d.ts.map +1 -1
  26. package/dist/agents/errors.d.ts +1 -10
  27. package/dist/agents/errors.d.ts.map +1 -1
  28. package/dist/agents/execution.d.ts +9 -10
  29. package/dist/agents/execution.d.ts.map +1 -1
  30. package/dist/agents/identity.d.ts +3 -0
  31. package/dist/agents/identity.d.ts.map +1 -0
  32. package/dist/agents/ids.d.ts +4 -0
  33. package/dist/agents/ids.d.ts.map +1 -1
  34. package/dist/agents/index.d.ts +15 -11
  35. package/dist/agents/index.d.ts.map +1 -1
  36. package/dist/agents/index.js +90 -78
  37. package/dist/agents/index.js.map +1 -1
  38. package/dist/agents/message.d.ts +19 -13
  39. package/dist/agents/message.d.ts.map +1 -1
  40. package/dist/agents/model-loop.d.ts +58 -0
  41. package/dist/agents/model-loop.d.ts.map +1 -0
  42. package/dist/agents/reference.d.ts +4 -0
  43. package/dist/agents/reference.d.ts.map +1 -0
  44. package/dist/agents/request.d.ts +10 -8
  45. package/dist/agents/request.d.ts.map +1 -1
  46. package/dist/agents/retired-config.d.ts +4 -0
  47. package/dist/agents/retired-config.d.ts.map +1 -0
  48. package/dist/agents/streams.d.ts +13 -8
  49. package/dist/agents/streams.d.ts.map +1 -1
  50. package/dist/agents/streams.js +7 -5
  51. package/dist/agents/streams.js.map +1 -1
  52. package/dist/agents/tool-catalog.d.ts +9 -0
  53. package/dist/agents/tool-catalog.d.ts.map +1 -0
  54. package/dist/agents/tool-definition.d.ts +1 -1
  55. package/dist/agents/tool-definition.d.ts.map +1 -1
  56. package/dist/agents/types.d.ts +31 -68
  57. package/dist/agents/types.d.ts.map +1 -1
  58. package/dist/agents/validation.d.ts +3 -13
  59. package/dist/agents/validation.d.ts.map +1 -1
  60. package/dist/ai-usage/execution.d.ts +53 -0
  61. package/dist/ai-usage/execution.d.ts.map +1 -0
  62. package/dist/ai-usage/index.d.ts +3 -0
  63. package/dist/ai-usage/index.d.ts.map +1 -0
  64. package/dist/auth/index.js +12 -9
  65. package/dist/auth/index.js.map +1 -1
  66. package/dist/authorization/decision.d.ts +14 -3
  67. package/dist/authorization/decision.d.ts.map +1 -1
  68. package/dist/authorization/grant-kinds.d.ts +25 -8
  69. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  70. package/dist/authorization/index.d.ts +1 -1
  71. package/dist/authorization/index.d.ts.map +1 -1
  72. package/dist/authorization/index.js +12 -7
  73. package/dist/authorization/index.js.map +1 -1
  74. package/dist/authorization/resolve.d.ts +3 -3
  75. package/dist/authorization/resolve.d.ts.map +1 -1
  76. package/dist/authorization/types.d.ts +7 -5
  77. package/dist/authorization/types.d.ts.map +1 -1
  78. package/dist/blob-storage/browser.js +2 -2
  79. package/dist/blob-storage/index.js +3 -3
  80. package/dist/bootstrap/discovery.d.ts +6 -6
  81. package/dist/bootstrap/discovery.d.ts.map +1 -1
  82. package/dist/bootstrap/index.js +62 -51
  83. package/dist/bootstrap/index.js.map +1 -1
  84. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  85. package/dist/broker/index.js +2 -2
  86. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  87. package/dist/chunk-19jp6g9d.js +131 -0
  88. package/dist/chunk-19jp6g9d.js.map +11 -0
  89. package/dist/{chunk-3j7573mj.js → chunk-2dw777qw.js} +50 -5
  90. package/dist/{chunk-3j7573mj.js.map → chunk-2dw777qw.js.map} +4 -3
  91. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  92. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  93. package/dist/chunk-359jm1jw.js +147 -0
  94. package/dist/chunk-359jm1jw.js.map +10 -0
  95. package/dist/{chunk-dy311asx.js → chunk-3xep5cjx.js} +58 -23
  96. package/dist/chunk-3xep5cjx.js.map +15 -0
  97. package/dist/{chunk-n4spznws.js → chunk-3z1qec12.js} +83 -12
  98. package/dist/chunk-3z1qec12.js.map +12 -0
  99. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  100. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  101. package/dist/{chunk-cy0n5dms.js → chunk-4jjp5k14.js} +1 -1
  102. package/dist/chunk-4qfkag59.js +1568 -0
  103. package/dist/chunk-4qfkag59.js.map +20 -0
  104. package/dist/{chunk-1e8m6yn3.js → chunk-4sm0aznx.js} +685 -86
  105. package/dist/chunk-4sm0aznx.js.map +43 -0
  106. package/dist/chunk-4yqmp43v.js +159 -0
  107. package/dist/chunk-4yqmp43v.js.map +11 -0
  108. package/dist/{chunk-rdeagz6b.js → chunk-5e3pq99w.js} +3 -7
  109. package/dist/{chunk-rdeagz6b.js.map → chunk-5e3pq99w.js.map} +3 -3
  110. package/dist/{chunk-ezake7g1.js → chunk-5ntny1qx.js} +1 -1
  111. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  112. package/dist/chunk-7y0f6rf1.js.map +10 -0
  113. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  114. package/dist/{chunk-qewtks41.js → chunk-9nbmsvn5.js} +123 -20
  115. package/dist/chunk-9nbmsvn5.js.map +11 -0
  116. package/dist/{chunk-5sxb1168.js → chunk-aa2pen2v.js} +256 -82
  117. package/dist/chunk-aa2pen2v.js.map +34 -0
  118. package/dist/{chunk-819wnjz8.js → chunk-ajnan18g.js} +13 -10
  119. package/dist/chunk-ajnan18g.js.map +12 -0
  120. package/dist/chunk-c15dr03f.js +43 -0
  121. package/dist/chunk-c15dr03f.js.map +10 -0
  122. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  123. package/dist/chunk-d8qkxt2v.js.map +10 -0
  124. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  125. package/dist/{chunk-nkbfrt0c.js → chunk-f26bck4t.js} +7 -7
  126. package/dist/{chunk-x2yw73hy.js → chunk-fvt9rjsa.js} +23 -7
  127. package/dist/chunk-fvt9rjsa.js.map +10 -0
  128. package/dist/{chunk-znagycq7.js → chunk-gbejpkex.js} +5 -5
  129. package/dist/{chunk-znagycq7.js.map → chunk-gbejpkex.js.map} +1 -1
  130. package/dist/{chunk-e42bc6m3.js → chunk-gzasd5b6.js} +5 -5
  131. package/dist/{chunk-e42bc6m3.js.map → chunk-gzasd5b6.js.map} +3 -3
  132. package/dist/{chunk-rnshztfq.js → chunk-h0k55pc7.js} +6 -6
  133. package/dist/{chunk-rnshztfq.js.map → chunk-h0k55pc7.js.map} +1 -1
  134. package/dist/chunk-h5vqbfmd.js +1537 -0
  135. package/dist/chunk-h5vqbfmd.js.map +19 -0
  136. package/dist/chunk-j1sbhm7p.js +45 -0
  137. package/dist/chunk-j1sbhm7p.js.map +10 -0
  138. package/dist/chunk-jecn6t54.js +307 -0
  139. package/dist/chunk-jecn6t54.js.map +12 -0
  140. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  141. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  142. package/dist/{chunk-f6erf2vv.js → chunk-k522z7v6.js} +10 -5
  143. package/dist/chunk-k522z7v6.js.map +10 -0
  144. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  145. package/dist/{chunk-ckxfnx7f.js → chunk-mth82m8t.js} +129 -95
  146. package/dist/chunk-mth82m8t.js.map +14 -0
  147. package/dist/{chunk-5gynx4xn.js → chunk-mwsxn98e.js} +79 -77
  148. package/dist/{chunk-5gynx4xn.js.map → chunk-mwsxn98e.js.map} +8 -8
  149. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  150. package/dist/chunk-n4khvw9n.js +111 -0
  151. package/dist/chunk-n4khvw9n.js.map +11 -0
  152. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  153. package/dist/chunk-n6jxh8sw.js.map +10 -0
  154. package/dist/chunk-nn0tekr1.js +284 -0
  155. package/dist/chunk-nn0tekr1.js.map +12 -0
  156. package/dist/chunk-nx7k8tpr.js +436 -0
  157. package/dist/chunk-nx7k8tpr.js.map +12 -0
  158. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  159. package/dist/chunk-p03r0h5s.js.map +16 -0
  160. package/dist/{chunk-1g8negke.js → chunk-p1rzczbt.js} +93 -8
  161. package/dist/chunk-p1rzczbt.js.map +12 -0
  162. package/dist/{chunk-f83ka50g.js → chunk-p1x242ad.js} +652 -77
  163. package/dist/chunk-p1x242ad.js.map +25 -0
  164. package/dist/chunk-p2vqaxkc.js +528 -0
  165. package/dist/chunk-p2vqaxkc.js.map +15 -0
  166. package/dist/{chunk-a31h57d5.js → chunk-pc7ys28c.js} +70 -7
  167. package/dist/chunk-pc7ys28c.js.map +14 -0
  168. package/dist/{chunk-md8k0r54.js → chunk-q0k9nc5a.js} +281 -89
  169. package/dist/chunk-q0k9nc5a.js.map +14 -0
  170. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  171. package/dist/chunk-r8jrnexe.js +403 -0
  172. package/dist/chunk-r8jrnexe.js.map +10 -0
  173. package/dist/{chunk-h9kxd41f.js → chunk-rafagrwr.js} +48 -7
  174. package/dist/chunk-rafagrwr.js.map +11 -0
  175. package/dist/{chunk-dysw7nsm.js → chunk-rv2hkwwa.js} +2 -2
  176. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  177. package/dist/{chunk-t624af60.js → chunk-sbzzr4kx.js} +1848 -757
  178. package/dist/chunk-sbzzr4kx.js.map +63 -0
  179. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  180. package/dist/chunk-tpnd31c1.js.map +11 -0
  181. package/dist/chunk-trxxmgnf.js +68 -0
  182. package/dist/chunk-trxxmgnf.js.map +11 -0
  183. package/dist/{chunk-0hc5j867.js → chunk-v1xppd0y.js} +17 -13
  184. package/dist/{chunk-0hc5j867.js.map → chunk-v1xppd0y.js.map} +2 -2
  185. package/dist/chunk-v4en4jc2.js +252 -0
  186. package/dist/chunk-v4en4jc2.js.map +10 -0
  187. package/dist/{chunk-xkthy56g.js → chunk-w1tvjszy.js} +1 -1
  188. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  189. package/dist/{chunk-8gv5z0zm.js → chunk-w9tg6yyb.js} +13 -8
  190. package/dist/{chunk-8gv5z0zm.js.map → chunk-w9tg6yyb.js.map} +3 -3
  191. package/dist/{chunk-62c7t4jc.js → chunk-wdage1eb.js} +1 -1
  192. package/dist/{chunk-tg5mee00.js → chunk-wtf06et8.js} +11 -7
  193. package/dist/{chunk-tg5mee00.js.map → chunk-wtf06et8.js.map} +3 -3
  194. package/dist/{chunk-nva1xkjz.js → chunk-xajtptbw.js} +1237 -1434
  195. package/dist/chunk-xajtptbw.js.map +40 -0
  196. package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
  197. package/dist/chunk-yp8ee62z.js.map +11 -0
  198. package/dist/chunk-z4ccwbkz.js +139 -0
  199. package/dist/chunk-z4ccwbkz.js.map +10 -0
  200. package/dist/datasets/builders.d.ts +11 -2
  201. package/dist/datasets/builders.d.ts.map +1 -1
  202. package/dist/datasets/changes.d.ts +14 -4
  203. package/dist/datasets/changes.d.ts.map +1 -1
  204. package/dist/datasets/execution.d.ts +15 -1
  205. package/dist/datasets/execution.d.ts.map +1 -1
  206. package/dist/datasets/index.d.ts +1 -0
  207. package/dist/datasets/index.d.ts.map +1 -1
  208. package/dist/datasets/sequence.d.ts +7 -0
  209. package/dist/datasets/sequence.d.ts.map +1 -0
  210. package/dist/datasets/types.d.ts +1 -0
  211. package/dist/datasets/types.d.ts.map +1 -1
  212. package/dist/datasets/validation.d.ts.map +1 -1
  213. package/dist/datasets/write.d.ts +37 -0
  214. package/dist/datasets/write.d.ts.map +1 -0
  215. package/dist/datasets/write.js +17 -0
  216. package/dist/datasets/write.js.map +9 -0
  217. package/dist/error-reporting/internal.js +4 -4
  218. package/dist/error-reporting/types.d.ts +7 -2
  219. package/dist/error-reporting/types.d.ts.map +1 -1
  220. package/dist/errors/catalog.d.ts +8 -0
  221. package/dist/errors/catalog.d.ts.map +1 -1
  222. package/dist/errors/internal.js +2 -2
  223. package/dist/events/execution.d.ts.map +1 -1
  224. package/dist/events/index.js +4 -4
  225. package/dist/events/types/datasets.d.ts +2 -6
  226. package/dist/events/types/datasets.d.ts.map +1 -1
  227. package/dist/execution/agent.d.ts +18 -9
  228. package/dist/execution/agent.d.ts.map +1 -1
  229. package/dist/execution/agent.js +62 -46
  230. package/dist/execution/agent.js.map +1 -1
  231. package/dist/execution/authorization.d.ts +68 -20
  232. package/dist/execution/authorization.d.ts.map +1 -1
  233. package/dist/execution/authorized-object-reader.d.ts +69 -0
  234. package/dist/execution/authorized-object-reader.d.ts.map +1 -0
  235. package/dist/execution/durable.d.ts.map +1 -1
  236. package/dist/execution/index.d.ts +1 -1
  237. package/dist/execution/index.d.ts.map +1 -1
  238. package/dist/execution/primitive.js +55 -46
  239. package/dist/execution/primitive.js.map +2 -2
  240. package/dist/execution/request.d.ts +14 -1
  241. package/dist/execution/request.d.ts.map +1 -1
  242. package/dist/execution/request.js +92 -54
  243. package/dist/execution/request.js.map +3 -3
  244. package/dist/execution/scopes.d.ts +16 -0
  245. package/dist/execution/scopes.d.ts.map +1 -1
  246. package/dist/execution/types.d.ts +10 -1
  247. package/dist/execution/types.d.ts.map +1 -1
  248. package/dist/http/api-routes.d.ts +2 -0
  249. package/dist/http/api-routes.d.ts.map +1 -1
  250. package/dist/http/index.js +1 -1
  251. package/dist/index.d.ts +15 -9
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +128 -109
  254. package/dist/index.js.map +1 -1
  255. package/dist/json.d.ts +2 -0
  256. package/dist/json.d.ts.map +1 -1
  257. package/dist/lake-storage/definition-updates.d.ts.map +1 -1
  258. package/dist/lake-storage/errors.d.ts +5 -1
  259. package/dist/lake-storage/errors.d.ts.map +1 -1
  260. package/dist/lake-storage/in-memory.d.ts +1 -0
  261. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  262. package/dist/lake-storage/index.d.ts +6 -1
  263. package/dist/lake-storage/index.d.ts.map +1 -1
  264. package/dist/lake-storage/index.js +27 -10
  265. package/dist/lake-storage/index.js.map +1 -1
  266. package/dist/lake-storage/merge-validation.d.ts.map +1 -1
  267. package/dist/lake-storage/merge.d.ts +13 -2
  268. package/dist/lake-storage/merge.d.ts.map +1 -1
  269. package/dist/lake-storage/source-ordering.d.ts +19 -0
  270. package/dist/lake-storage/source-ordering.d.ts.map +1 -0
  271. package/dist/lake-storage/sql-transforms.d.ts +2 -1
  272. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  273. package/dist/lake-storage/types.d.ts +10 -5
  274. package/dist/lake-storage/types.d.ts.map +1 -1
  275. package/dist/lake-storage/version-inputs.d.ts +4 -0
  276. package/dist/lake-storage/version-inputs.d.ts.map +1 -0
  277. package/dist/logging/index.js +3 -3
  278. package/dist/logging/types.js +2 -2
  279. package/dist/materialization/index.js +2 -2
  280. package/dist/materializer/index.js +38 -31
  281. package/dist/materializer/index.js.map +1 -1
  282. package/dist/models/catalog.d.ts +40 -0
  283. package/dist/models/catalog.d.ts.map +1 -0
  284. package/dist/models/definitions.d.ts +25 -0
  285. package/dist/models/definitions.d.ts.map +1 -0
  286. package/dist/models/errors.d.ts +52 -0
  287. package/dist/models/errors.d.ts.map +1 -0
  288. package/dist/models/events.d.ts +192 -0
  289. package/dist/models/events.d.ts.map +1 -0
  290. package/dist/models/index.d.ts +17 -39
  291. package/dist/models/index.d.ts.map +1 -1
  292. package/dist/models/index.js +50 -0
  293. package/dist/models/index.js.map +9 -0
  294. package/dist/models/language-model.d.ts +90 -0
  295. package/dist/models/language-model.d.ts.map +1 -0
  296. package/dist/models/messages.d.ts +74 -0
  297. package/dist/models/messages.d.ts.map +1 -0
  298. package/dist/models/pricing.d.ts +69 -0
  299. package/dist/models/pricing.d.ts.map +1 -0
  300. package/dist/models/rate-card.d.ts +24 -0
  301. package/dist/models/rate-card.d.ts.map +1 -0
  302. package/dist/models/tools.d.ts +24 -0
  303. package/dist/models/tools.d.ts.map +1 -0
  304. package/dist/objects/authorized-ontology-view.d.ts +25 -0
  305. package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
  306. package/dist/objects/execution.d.ts +1 -1
  307. package/dist/objects/execution.d.ts.map +1 -1
  308. package/dist/objects/index.js +43 -36
  309. package/dist/objects/index.js.map +1 -1
  310. package/dist/objects/link/authorization.d.ts +2 -7
  311. package/dist/objects/link/authorization.d.ts.map +1 -1
  312. package/dist/objects/query/executor.d.ts +4 -2
  313. package/dist/objects/query/executor.d.ts.map +1 -1
  314. package/dist/objects/query/index.js +36 -29
  315. package/dist/objects/query/index.js.map +1 -1
  316. package/dist/objects/query/links.d.ts +22 -1
  317. package/dist/objects/query/links.d.ts.map +1 -1
  318. package/dist/objects/query/selected-read-admission.d.ts +27 -0
  319. package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
  320. package/dist/objects/query/validate.d.ts +60 -2
  321. package/dist/objects/query/validate.d.ts.map +1 -1
  322. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  323. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  324. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
  325. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  326. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  327. package/dist/objects/service/list-service.d.ts +2 -3
  328. package/dist/objects/service/list-service.d.ts.map +1 -1
  329. package/dist/objects/telemetry/history.d.ts +8 -6
  330. package/dist/objects/telemetry/history.d.ts.map +1 -1
  331. package/dist/objects/telemetry/index.d.ts +2 -2
  332. package/dist/objects/telemetry/index.d.ts.map +1 -1
  333. package/dist/objects/telemetry/workload.d.ts +11 -0
  334. package/dist/objects/telemetry/workload.d.ts.map +1 -0
  335. package/dist/ontology/index.d.ts +2 -1
  336. package/dist/ontology/index.d.ts.map +1 -1
  337. package/dist/ontology/index.js +15 -14
  338. package/dist/ontology/index.js.map +1 -1
  339. package/dist/ontology/inference/index.d.ts +2 -1
  340. package/dist/ontology/inference/index.d.ts.map +1 -1
  341. package/dist/ontology/internal.d.ts +0 -1
  342. package/dist/ontology/internal.d.ts.map +1 -1
  343. package/dist/ontology/internal.js +5 -10
  344. package/dist/ontology/internal.js.map +3 -3
  345. package/dist/ontology/json-schema.d.ts +10 -6
  346. package/dist/ontology/json-schema.d.ts.map +1 -1
  347. package/dist/ontology/link-path-selection.d.ts +35 -0
  348. package/dist/ontology/link-path-selection.d.ts.map +1 -0
  349. package/dist/ontology/refs.d.ts +2 -0
  350. package/dist/ontology/refs.d.ts.map +1 -1
  351. package/dist/ontology/tokens.d.ts +2 -1
  352. package/dist/ontology/tokens.d.ts.map +1 -1
  353. package/dist/pipelines/execution.d.ts.map +1 -1
  354. package/dist/pipelines/index.js +41 -36
  355. package/dist/pipelines/index.js.map +1 -1
  356. package/dist/pipelines/request.d.ts.map +1 -1
  357. package/dist/projections/execution.d.ts.map +1 -1
  358. package/dist/projections/internal.js +39 -32
  359. package/dist/projections/internal.js.map +1 -1
  360. package/dist/projections/run-dispatch.d.ts.map +1 -1
  361. package/dist/queues/in-memory.d.ts +3 -2
  362. package/dist/queues/in-memory.d.ts.map +1 -1
  363. package/dist/queues/index.d.ts +3 -1
  364. package/dist/queues/index.d.ts.map +1 -1
  365. package/dist/queues/index.js +1 -1
  366. package/dist/queues/types.d.ts +15 -3
  367. package/dist/queues/types.d.ts.map +1 -1
  368. package/dist/rules/execution.d.ts.map +1 -1
  369. package/dist/runtime/create.d.ts +7 -4
  370. package/dist/runtime/create.d.ts.map +1 -1
  371. package/dist/runtime/definitions.d.ts +4 -2
  372. package/dist/runtime/definitions.d.ts.map +1 -1
  373. package/dist/runtime/host.d.ts +5 -2
  374. package/dist/runtime/host.d.ts.map +1 -1
  375. package/dist/runtime/internal.d.ts +1 -0
  376. package/dist/runtime/internal.d.ts.map +1 -1
  377. package/dist/runtime/resolve-definitions.d.ts +4 -2
  378. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  379. package/dist/runtime/sixb.d.ts +8 -2
  380. package/dist/runtime/sixb.d.ts.map +1 -1
  381. package/dist/runtime/types.d.ts +3 -0
  382. package/dist/runtime/types.d.ts.map +1 -1
  383. package/dist/schedules/execution.d.ts +2 -1
  384. package/dist/schedules/execution.d.ts.map +1 -1
  385. package/dist/security/every.d.ts +4 -4
  386. package/dist/security/every.d.ts.map +1 -1
  387. package/dist/security/grants.d.ts +12 -6
  388. package/dist/security/grants.d.ts.map +1 -1
  389. package/dist/security/index.d.ts +1 -1
  390. package/dist/security/index.d.ts.map +1 -1
  391. package/dist/security/registry.d.ts +2 -1
  392. package/dist/security/registry.d.ts.map +1 -1
  393. package/dist/security/types.d.ts +19 -5
  394. package/dist/security/types.d.ts.map +1 -1
  395. package/dist/security/validation.d.ts +6 -2
  396. package/dist/security/validation.d.ts.map +1 -1
  397. package/dist/shares/access-plan.d.ts +22 -0
  398. package/dist/shares/access-plan.d.ts.map +1 -0
  399. package/dist/shares/builders.d.ts +14 -0
  400. package/dist/shares/builders.d.ts.map +1 -0
  401. package/dist/shares/compiler.d.ts +14 -0
  402. package/dist/shares/compiler.d.ts.map +1 -0
  403. package/dist/shares/errors.d.ts +4 -0
  404. package/dist/shares/errors.d.ts.map +1 -0
  405. package/dist/shares/execution.d.ts +57 -0
  406. package/dist/shares/execution.d.ts.map +1 -0
  407. package/dist/shares/index.d.ts +10 -0
  408. package/dist/shares/index.d.ts.map +1 -0
  409. package/dist/shares/internal.d.ts +3 -0
  410. package/dist/shares/internal.d.ts.map +1 -0
  411. package/dist/shares/internal.js +239 -0
  412. package/dist/shares/internal.js.map +10 -0
  413. package/dist/shares/intersection.d.ts +9 -0
  414. package/dist/shares/intersection.d.ts.map +1 -0
  415. package/dist/shares/session-protocol.d.ts +41 -0
  416. package/dist/shares/session-protocol.d.ts.map +1 -0
  417. package/dist/shares/types.d.ts +51 -0
  418. package/dist/shares/types.d.ts.map +1 -0
  419. package/dist/shares/validation.d.ts +11 -0
  420. package/dist/shares/validation.d.ts.map +1 -0
  421. package/dist/storage/action-runs/failure.js +3 -3
  422. package/dist/storage/action-runs/provider.js +2 -2
  423. package/dist/storage/agents/errors.d.ts +1 -1
  424. package/dist/storage/agents/errors.d.ts.map +1 -1
  425. package/dist/storage/agents/in-memory.d.ts +3 -2
  426. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  427. package/dist/storage/agents/index.d.ts +1 -1
  428. package/dist/storage/agents/index.d.ts.map +1 -1
  429. package/dist/storage/agents/provider.d.ts +11 -4
  430. package/dist/storage/agents/provider.d.ts.map +1 -1
  431. package/dist/storage/agents/provider.js +18 -15
  432. package/dist/storage/agents/provider.js.map +1 -1
  433. package/dist/storage/agents/types.d.ts +65 -17
  434. package/dist/storage/agents/types.d.ts.map +1 -1
  435. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  436. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  437. package/dist/storage/ai-cost/codec.d.ts +3 -2
  438. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  439. package/dist/storage/ai-cost/groups.d.ts +51 -0
  440. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  441. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  442. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  443. package/dist/storage/ai-cost/index.d.ts +1 -1
  444. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  445. package/dist/storage/ai-cost/provider.d.ts +2 -0
  446. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  447. package/dist/storage/ai-cost/provider.js +29 -13
  448. package/dist/storage/ai-cost/provider.js.map +3 -3
  449. package/dist/storage/ai-cost/types.d.ts +64 -15
  450. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  451. package/dist/storage/ai-cost/validation.d.ts +2 -1
  452. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  453. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  454. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  455. package/dist/storage/ai-limits/enforcement.js +21 -0
  456. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  457. package/dist/storage/ai-limits/errors.d.ts +8 -0
  458. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  459. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  460. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  461. package/dist/storage/ai-limits/index.d.ts +7 -0
  462. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  463. package/dist/storage/ai-limits/period.d.ts +4 -0
  464. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  465. package/dist/storage/ai-limits/provider.d.ts +85 -0
  466. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  467. package/dist/storage/ai-limits/provider.js +62 -0
  468. package/dist/storage/ai-limits/provider.js.map +9 -0
  469. package/dist/storage/ai-limits/types.d.ts +175 -0
  470. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  471. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  472. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  473. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  474. package/dist/storage/ai-usage/types.d.ts +6 -2
  475. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  476. package/dist/storage/auth/errors.d.ts +1 -1
  477. package/dist/storage/auth/errors.d.ts.map +1 -1
  478. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  479. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  480. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  481. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  482. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  483. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  484. package/dist/storage/auth/index.d.ts +2 -1
  485. package/dist/storage/auth/index.d.ts.map +1 -1
  486. package/dist/storage/auth/types.d.ts +66 -0
  487. package/dist/storage/auth/types.d.ts.map +1 -1
  488. package/dist/storage/connector-connections/provider.js +2 -2
  489. package/dist/storage/executions/in-memory.d.ts +3 -0
  490. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  491. package/dist/storage/executions/provider.d.ts +4 -1
  492. package/dist/storage/executions/provider.d.ts.map +1 -1
  493. package/dist/storage/executions/provider.js +23 -3
  494. package/dist/storage/executions/provider.js.map +3 -3
  495. package/dist/storage/executions/run-link.d.ts +14 -2
  496. package/dist/storage/executions/run-link.d.ts.map +1 -1
  497. package/dist/storage/executions/validation.d.ts +6 -0
  498. package/dist/storage/executions/validation.d.ts.map +1 -1
  499. package/dist/storage/in-memory/index.d.ts +12 -0
  500. package/dist/storage/in-memory/index.d.ts.map +1 -1
  501. package/dist/storage/index.d.ts +15 -6
  502. package/dist/storage/index.d.ts.map +1 -1
  503. package/dist/storage/index.js +78 -36
  504. package/dist/storage/index.js.map +1 -1
  505. package/dist/storage/objects/execution-limits.d.ts +25 -0
  506. package/dist/storage/objects/execution-limits.d.ts.map +1 -0
  507. package/dist/storage/objects/guard.d.ts +16 -0
  508. package/dist/storage/objects/guard.d.ts.map +1 -0
  509. package/dist/storage/objects/in-memory/index.d.ts +3 -0
  510. package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
  511. package/dist/storage/objects/in-memory/keys.d.ts +10 -0
  512. package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
  513. package/dist/storage/objects/in-memory/query.d.ts +31 -0
  514. package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
  515. package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
  516. package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
  517. package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
  518. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
  519. package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
  520. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
  521. package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
  522. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
  523. package/dist/storage/objects/index.d.ts +4 -1
  524. package/dist/storage/objects/index.d.ts.map +1 -1
  525. package/dist/storage/objects/keys.d.ts +1 -1
  526. package/dist/storage/objects/keys.d.ts.map +1 -1
  527. package/dist/storage/objects/read-scope.d.ts +25 -0
  528. package/dist/storage/objects/read-scope.d.ts.map +1 -0
  529. package/dist/storage/objects/types.d.ts +114 -22
  530. package/dist/storage/objects/types.d.ts.map +1 -1
  531. package/dist/storage/ontology/provider.js +3 -3
  532. package/dist/storage/operation-scope.d.ts +3 -0
  533. package/dist/storage/operation-scope.d.ts.map +1 -1
  534. package/dist/storage/operation-scope.js +4 -2
  535. package/dist/storage/operation-scope.js.map +1 -1
  536. package/dist/storage/pipeline-runs/provider.js +2 -2
  537. package/dist/storage/projection-runs/provider.js +4 -4
  538. package/dist/storage/share-grants/errors.d.ts +8 -0
  539. package/dist/storage/share-grants/errors.d.ts.map +1 -0
  540. package/dist/storage/share-grants/in-memory.d.ts +11 -0
  541. package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
  542. package/dist/storage/share-grants/index.d.ts +5 -0
  543. package/dist/storage/share-grants/index.d.ts.map +1 -0
  544. package/dist/storage/share-grants/provider.d.ts +4 -0
  545. package/dist/storage/share-grants/provider.d.ts.map +1 -0
  546. package/dist/storage/share-grants/provider.js +24 -0
  547. package/dist/storage/share-grants/provider.js.map +9 -0
  548. package/dist/storage/share-grants/record.d.ts +11 -0
  549. package/dist/storage/share-grants/record.d.ts.map +1 -0
  550. package/dist/storage/share-grants/types.d.ts +97 -0
  551. package/dist/storage/share-grants/types.d.ts.map +1 -0
  552. package/dist/storage/share-sessions/errors.d.ts +8 -0
  553. package/dist/storage/share-sessions/errors.d.ts.map +1 -0
  554. package/dist/storage/share-sessions/in-memory.d.ts +14 -0
  555. package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
  556. package/dist/storage/share-sessions/index.d.ts +5 -0
  557. package/dist/storage/share-sessions/index.d.ts.map +1 -0
  558. package/dist/storage/share-sessions/provider.d.ts +3 -0
  559. package/dist/storage/share-sessions/provider.d.ts.map +1 -0
  560. package/dist/storage/share-sessions/provider.js +20 -0
  561. package/dist/storage/share-sessions/provider.js.map +9 -0
  562. package/dist/storage/share-sessions/record.d.ts +8 -0
  563. package/dist/storage/share-sessions/record.d.ts.map +1 -0
  564. package/dist/storage/share-sessions/types.d.ts +50 -0
  565. package/dist/storage/share-sessions/types.d.ts.map +1 -0
  566. package/dist/storage/sync-runs/provider.js +2 -2
  567. package/dist/storage/transaction.d.ts +2 -1
  568. package/dist/storage/transaction.d.ts.map +1 -1
  569. package/dist/storage/types.d.ts +13 -1
  570. package/dist/storage/types.d.ts.map +1 -1
  571. package/dist/storage/webhook-runs/provider.js +2 -2
  572. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  573. package/dist/storage/workflow-runs/provider.js +14 -12
  574. package/dist/storage/workflow-runs/provider.js.map +1 -1
  575. package/dist/storage/workflow-runs/types.d.ts +5 -4
  576. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  577. package/dist/syncs/execution.d.ts.map +1 -1
  578. package/dist/syncs/index.js +41 -36
  579. package/dist/syncs/index.js.map +1 -1
  580. package/dist/syncs/request.d.ts.map +1 -1
  581. package/dist/testing/agent-execution.d.ts +3 -1
  582. package/dist/testing/agent-execution.d.ts.map +1 -1
  583. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  584. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  585. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  586. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  587. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  588. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  589. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  590. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  591. package/dist/testing/dataset-sequence-contract.d.ts +4 -0
  592. package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
  593. package/dist/testing/effective-storage-contract.d.ts.map +1 -1
  594. package/dist/testing/execution-storage-contract.d.ts +4 -0
  595. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  596. package/dist/testing/index.d.ts +5 -0
  597. package/dist/testing/index.d.ts.map +1 -1
  598. package/dist/testing/index.js +5392 -2070
  599. package/dist/testing/index.js.map +21 -15
  600. package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
  601. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  602. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  603. package/dist/testing/object-read-scope-contract.d.ts +22 -0
  604. package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
  605. package/dist/testing/queues-contract.d.ts.map +1 -1
  606. package/dist/testing/share-grant-storage-contract.d.ts +10 -0
  607. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
  608. package/dist/testing/share-session-storage-contract.d.ts +9 -0
  609. package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
  610. package/dist/webhooks/internal.js +36 -29
  611. package/dist/webhooks/internal.js.map +2 -2
  612. package/dist/workers/index.js +2 -2
  613. package/dist/workflows/agent-step-identity.d.ts +3 -0
  614. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  615. package/dist/workflows/builders.d.ts +2 -3
  616. package/dist/workflows/builders.d.ts.map +1 -1
  617. package/dist/workflows/execution.d.ts +1 -1
  618. package/dist/workflows/execution.d.ts.map +1 -1
  619. package/dist/workflows/failure.d.ts +1 -1
  620. package/dist/workflows/failure.d.ts.map +1 -1
  621. package/dist/workflows/index.d.ts +3 -2
  622. package/dist/workflows/index.d.ts.map +1 -1
  623. package/dist/workflows/index.js +63 -48
  624. package/dist/workflows/index.js.map +1 -1
  625. package/dist/workflows/request.d.ts.map +1 -1
  626. package/dist/workflows/types.d.ts +26 -11
  627. package/dist/workflows/types.d.ts.map +1 -1
  628. package/dist/workflows/validation.d.ts +7 -1
  629. package/dist/workflows/validation.d.ts.map +1 -1
  630. package/package.json +43 -4
  631. package/src/actions/delegated-admission.ts +72 -0
  632. package/src/actions/descriptor.ts +58 -0
  633. package/src/actions/execution.ts +99 -24
  634. package/src/actions/request.ts +136 -19
  635. package/src/actions/run-authorization.ts +53 -0
  636. package/src/actions/run-dispatch.ts +8 -1
  637. package/src/agents/adapters.ts +60 -456
  638. package/src/agents/authority.ts +215 -34
  639. package/src/agents/builders.ts +3 -50
  640. package/src/agents/context-compaction.ts +4 -0
  641. package/src/agents/context-resolution.ts +1 -4
  642. package/src/agents/dispatch.ts +59 -2
  643. package/src/agents/errors.ts +4 -11
  644. package/src/agents/execution.ts +65 -56
  645. package/src/agents/identity.ts +4 -0
  646. package/src/agents/ids.ts +16 -1
  647. package/src/agents/index.ts +23 -30
  648. package/src/agents/message.ts +20 -12
  649. package/src/agents/model-loop.ts +1071 -0
  650. package/src/agents/reference.ts +7 -0
  651. package/src/agents/request.ts +157 -77
  652. package/src/agents/retired-config.ts +20 -0
  653. package/src/agents/streams.ts +45 -19
  654. package/src/agents/tool-catalog.ts +21 -0
  655. package/src/agents/tool-definition.ts +9 -5
  656. package/src/agents/types.ts +39 -81
  657. package/src/agents/validation.ts +11 -216
  658. package/src/ai-usage/execution.ts +189 -0
  659. package/src/ai-usage/index.ts +15 -0
  660. package/src/authorization/decision.ts +54 -22
  661. package/src/authorization/grant-kinds.ts +72 -15
  662. package/src/authorization/index.ts +2 -0
  663. package/src/authorization/resolve.ts +12 -5
  664. package/src/authorization/types.ts +7 -5
  665. package/src/bootstrap/discovery.ts +3 -3
  666. package/src/bootstrap/ontology-type-manifest.ts +12 -6
  667. package/src/datasets/builders.ts +23 -2
  668. package/src/datasets/changes.ts +16 -4
  669. package/src/datasets/execution.ts +76 -5
  670. package/src/datasets/index.ts +1 -0
  671. package/src/datasets/sequence.ts +77 -0
  672. package/src/datasets/types.ts +1 -0
  673. package/src/datasets/validation.ts +26 -0
  674. package/src/datasets/write.ts +240 -0
  675. package/src/error-reporting/types.ts +4 -2
  676. package/src/errors/catalog.ts +8 -0
  677. package/src/events/execution.ts +57 -7
  678. package/src/events/types/datasets.ts +2 -6
  679. package/src/execution/agent.ts +129 -25
  680. package/src/execution/authorization.ts +493 -83
  681. package/src/execution/authorized-object-reader.ts +695 -0
  682. package/src/execution/durable.ts +10 -2
  683. package/src/execution/index.ts +1 -0
  684. package/src/execution/request.ts +67 -14
  685. package/src/execution/scopes.ts +36 -6
  686. package/src/execution/types.ts +9 -1
  687. package/src/http/api-routes.ts +108 -0
  688. package/src/index.ts +72 -22
  689. package/src/json.ts +9 -0
  690. package/src/lake-storage/definition-updates.ts +9 -0
  691. package/src/lake-storage/errors.ts +6 -1
  692. package/src/lake-storage/in-memory.ts +53 -17
  693. package/src/lake-storage/index.ts +10 -1
  694. package/src/lake-storage/merge-validation.ts +12 -2
  695. package/src/lake-storage/merge.ts +40 -2
  696. package/src/lake-storage/source-ordering.ts +95 -0
  697. package/src/lake-storage/sql-transforms.ts +2 -1
  698. package/src/lake-storage/types.ts +10 -5
  699. package/src/lake-storage/version-inputs.ts +14 -0
  700. package/src/models/catalog.ts +137 -0
  701. package/src/models/definitions.ts +202 -0
  702. package/src/models/errors.ts +83 -0
  703. package/src/models/events.ts +198 -0
  704. package/src/models/index.ts +89 -71
  705. package/src/models/language-model.ts +143 -0
  706. package/src/models/messages.ts +78 -0
  707. package/src/models/pricing.ts +390 -0
  708. package/src/models/rate-card.ts +101 -0
  709. package/src/models/tools.ts +29 -0
  710. package/src/objects/authorized-ontology-view.ts +512 -0
  711. package/src/objects/execution.ts +98 -143
  712. package/src/objects/link/authorization.ts +3 -2
  713. package/src/objects/query/executor.ts +45 -34
  714. package/src/objects/query/links.ts +84 -25
  715. package/src/objects/query/selected-read-admission.ts +310 -0
  716. package/src/objects/query/validate.ts +353 -36
  717. package/src/objects/sdk/object-handle.ts +2 -8
  718. package/src/objects/sdk/object-set.ts +10 -11
  719. package/src/objects/sdk/runtime-query-executor.ts +8 -28
  720. package/src/objects/sdk/telemetry-channel.ts +11 -7
  721. package/src/objects/service/list-service.ts +15 -29
  722. package/src/objects/telemetry/history.ts +297 -17
  723. package/src/objects/telemetry/index.ts +2 -2
  724. package/src/objects/telemetry/workload.ts +79 -0
  725. package/src/ontology/index.ts +7 -1
  726. package/src/ontology/inference/index.ts +4 -1
  727. package/src/ontology/internal.ts +0 -1
  728. package/src/ontology/json-schema.ts +13 -12
  729. package/src/ontology/link-path-selection.ts +193 -0
  730. package/src/ontology/refs.ts +19 -0
  731. package/src/ontology/tokens.ts +15 -8
  732. package/src/pipelines/execution.ts +30 -7
  733. package/src/pipelines/request.ts +5 -0
  734. package/src/projections/execution.ts +72 -11
  735. package/src/projections/run-dispatch.ts +6 -12
  736. package/src/queues/in-memory.ts +5 -0
  737. package/src/queues/index.ts +11 -0
  738. package/src/queues/types.ts +20 -3
  739. package/src/rules/execution.ts +20 -8
  740. package/src/runtime/create.ts +11 -5
  741. package/src/runtime/definitions.ts +4 -2
  742. package/src/runtime/host.ts +28 -8
  743. package/src/runtime/internal.ts +1 -0
  744. package/src/runtime/resolve-definitions.ts +22 -36
  745. package/src/runtime/sixb.ts +29 -10
  746. package/src/runtime/types.ts +3 -0
  747. package/src/schedules/execution.ts +24 -2
  748. package/src/security/every.ts +4 -4
  749. package/src/security/grants.ts +100 -14
  750. package/src/security/index.ts +3 -0
  751. package/src/security/registry.ts +9 -5
  752. package/src/security/types.ts +23 -4
  753. package/src/security/validation.ts +33 -9
  754. package/src/shares/access-plan.ts +225 -0
  755. package/src/shares/builders.ts +381 -0
  756. package/src/shares/compiler.ts +359 -0
  757. package/src/shares/errors.ts +3 -0
  758. package/src/shares/execution.ts +394 -0
  759. package/src/shares/index.ts +28 -0
  760. package/src/shares/internal.ts +9 -0
  761. package/src/shares/intersection.ts +178 -0
  762. package/src/shares/session-protocol.ts +258 -0
  763. package/src/shares/types.ts +76 -0
  764. package/src/shares/validation.ts +40 -0
  765. package/src/storage/agents/errors.ts +1 -0
  766. package/src/storage/agents/in-memory.ts +121 -11
  767. package/src/storage/agents/index.ts +7 -0
  768. package/src/storage/agents/provider.ts +150 -6
  769. package/src/storage/agents/types.ts +73 -16
  770. package/src/storage/ai-cost/analytics.ts +63 -6
  771. package/src/storage/ai-cost/codec.ts +37 -12
  772. package/src/storage/ai-cost/groups.ts +248 -0
  773. package/src/storage/ai-cost/in-memory.ts +42 -0
  774. package/src/storage/ai-cost/index.ts +6 -0
  775. package/src/storage/ai-cost/provider.ts +7 -0
  776. package/src/storage/ai-cost/types.ts +76 -14
  777. package/src/storage/ai-cost/validation.ts +147 -17
  778. package/src/storage/ai-limits/enforcement.ts +68 -0
  779. package/src/storage/ai-limits/errors.ts +23 -0
  780. package/src/storage/ai-limits/in-memory.ts +671 -0
  781. package/src/storage/ai-limits/index.ts +31 -0
  782. package/src/storage/ai-limits/period.ts +11 -0
  783. package/src/storage/ai-limits/provider.ts +430 -0
  784. package/src/storage/ai-limits/types.ts +195 -0
  785. package/src/storage/ai-usage/in-memory.ts +13 -0
  786. package/src/storage/ai-usage/record.ts +17 -0
  787. package/src/storage/ai-usage/types.ts +6 -2
  788. package/src/storage/auth/errors.ts +6 -0
  789. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  790. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  791. package/src/storage/auth/in-memory/shared.ts +7 -0
  792. package/src/storage/auth/index.ts +7 -0
  793. package/src/storage/auth/types.ts +73 -0
  794. package/src/storage/executions/in-memory.ts +9 -1
  795. package/src/storage/executions/provider.ts +30 -1
  796. package/src/storage/executions/run-link.ts +45 -6
  797. package/src/storage/executions/validation.ts +82 -7
  798. package/src/storage/in-memory/index.ts +69 -6
  799. package/src/storage/index.ts +102 -1
  800. package/src/storage/objects/execution-limits.ts +283 -0
  801. package/src/storage/objects/guard.ts +55 -0
  802. package/src/storage/objects/in-memory/index.ts +2 -0
  803. package/src/storage/objects/in-memory/keys.ts +46 -0
  804. package/src/storage/objects/in-memory/query.ts +754 -0
  805. package/src/storage/objects/in-memory/read-scope.ts +211 -0
  806. package/src/storage/objects/in-memory/read-source.ts +10 -0
  807. package/src/storage/objects/in-memory/selected-reader.ts +252 -0
  808. package/src/storage/objects/in-memory/storage.ts +589 -0
  809. package/src/storage/objects/index.ts +21 -0
  810. package/src/storage/objects/keys.ts +1 -1
  811. package/src/storage/objects/read-scope.ts +672 -0
  812. package/src/storage/objects/types.ts +123 -19
  813. package/src/storage/operation-scope.ts +16 -0
  814. package/src/storage/share-grants/errors.ts +14 -0
  815. package/src/storage/share-grants/in-memory.ts +107 -0
  816. package/src/storage/share-grants/index.ts +14 -0
  817. package/src/storage/share-grants/provider.ts +11 -0
  818. package/src/storage/share-grants/record.ts +347 -0
  819. package/src/storage/share-grants/types.ts +112 -0
  820. package/src/storage/share-sessions/errors.ts +14 -0
  821. package/src/storage/share-sessions/in-memory.ts +105 -0
  822. package/src/storage/share-sessions/index.ts +11 -0
  823. package/src/storage/share-sessions/provider.ts +9 -0
  824. package/src/storage/share-sessions/record.ts +176 -0
  825. package/src/storage/share-sessions/types.ts +57 -0
  826. package/src/storage/transaction.ts +14 -2
  827. package/src/storage/types.ts +64 -0
  828. package/src/storage/workflow-runs/in-memory.ts +3 -3
  829. package/src/storage/workflow-runs/provider.ts +2 -2
  830. package/src/storage/workflow-runs/types.ts +6 -3
  831. package/src/syncs/execution.ts +25 -5
  832. package/src/syncs/request.ts +5 -0
  833. package/src/testing/agent-execution.ts +40 -28
  834. package/src/testing/agent-storage-contract.ts +249 -28
  835. package/src/testing/ai-cost-storage-contract.ts +96 -8
  836. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  837. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  838. package/src/testing/ai-usage-storage-contract.ts +31 -0
  839. package/src/testing/auth-storage-contract.ts +85 -0
  840. package/src/testing/dataset-sequence-contract.ts +373 -0
  841. package/src/testing/effective-storage-contract.ts +34 -0
  842. package/src/testing/execution-storage-contract.ts +81 -2
  843. package/src/testing/index.ts +26 -0
  844. package/src/testing/lake-merge-storage-contract.ts +3 -0
  845. package/src/testing/lake-storage-contract.ts +58 -0
  846. package/src/testing/object-read-scope-contract.ts +939 -0
  847. package/src/testing/queues-contract.ts +36 -1
  848. package/src/testing/share-grant-storage-contract.ts +325 -0
  849. package/src/testing/share-session-storage-contract.ts +235 -0
  850. package/src/workflows/agent-step-identity.ts +4 -0
  851. package/src/workflows/builders.ts +95 -9
  852. package/src/workflows/execution.ts +55 -16
  853. package/src/workflows/failure.ts +2 -2
  854. package/src/workflows/index.ts +3 -0
  855. package/src/workflows/request.ts +5 -0
  856. package/src/workflows/types.ts +23 -11
  857. package/src/workflows/validation.ts +100 -7
  858. package/dist/chunk-1e8m6yn3.js.map +0 -37
  859. package/dist/chunk-1g8negke.js.map +0 -11
  860. package/dist/chunk-4gz41why.js +0 -72
  861. package/dist/chunk-4gz41why.js.map +0 -11
  862. package/dist/chunk-5sxb1168.js.map +0 -34
  863. package/dist/chunk-6gjqgd3d.js.map +0 -11
  864. package/dist/chunk-819wnjz8.js.map +0 -12
  865. package/dist/chunk-a31h57d5.js.map +0 -13
  866. package/dist/chunk-a44d5zgd.js +0 -556
  867. package/dist/chunk-a44d5zgd.js.map +0 -16
  868. package/dist/chunk-ckxfnx7f.js.map +0 -13
  869. package/dist/chunk-dm72y8wt.js.map +0 -10
  870. package/dist/chunk-drjqm1aa.js.map +0 -15
  871. package/dist/chunk-dy311asx.js.map +0 -14
  872. package/dist/chunk-f6erf2vv.js.map +0 -10
  873. package/dist/chunk-f83ka50g.js.map +0 -23
  874. package/dist/chunk-fe5ev6mr.js +0 -55
  875. package/dist/chunk-fe5ev6mr.js.map +0 -11
  876. package/dist/chunk-h9kxd41f.js.map +0 -11
  877. package/dist/chunk-hceck7dq.js +0 -137
  878. package/dist/chunk-hceck7dq.js.map +0 -10
  879. package/dist/chunk-md8k0r54.js.map +0 -14
  880. package/dist/chunk-n4spznws.js.map +0 -11
  881. package/dist/chunk-nva1xkjz.js.map +0 -46
  882. package/dist/chunk-qewtks41.js.map +0 -11
  883. package/dist/chunk-t0jjkep3.js.map +0 -10
  884. package/dist/chunk-t624af60.js.map +0 -56
  885. package/dist/chunk-t8t39h7v.js.map +0 -10
  886. package/dist/chunk-t9xghkva.js +0 -28
  887. package/dist/chunk-t9xghkva.js.map +0 -10
  888. package/dist/chunk-x2yw73hy.js.map +0 -10
  889. package/dist/chunk-xc7hq65b.js.map +0 -10
  890. package/dist/storage/objects/in-memory.d.ts.map +0 -1
  891. package/src/storage/objects/in-memory.ts +0 -1241
  892. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  893. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  894. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  895. /package/dist/{chunk-cy0n5dms.js.map → chunk-4jjp5k14.js.map} +0 -0
  896. /package/dist/{chunk-ezake7g1.js.map → chunk-5ntny1qx.js.map} +0 -0
  897. /package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +0 -0
  898. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  899. /package/dist/{chunk-nkbfrt0c.js.map → chunk-f26bck4t.js.map} +0 -0
  900. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  901. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  902. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  903. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  904. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  905. /package/dist/{chunk-dysw7nsm.js.map → chunk-rv2hkwwa.js.map} +0 -0
  906. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  907. /package/dist/{chunk-xkthy56g.js.map → chunk-w1tvjszy.js.map} +0 -0
  908. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  909. /package/dist/{chunk-62c7t4jc.js.map → chunk-wdage1eb.js.map} +0 -0
@@ -0,0 +1,11 @@
1
+ import type { AiLimitPeriod } from "./types"
2
+
3
+ /** Return the UTC calendar month containing `at`, with an inclusive start and exclusive end. */
4
+ export function aiLimitCalendarMonth(at: Date): AiLimitPeriod {
5
+ if (!(at instanceof Date) || !Number.isFinite(at.getTime())) {
6
+ throw new TypeError("[Sixb] AI limit period date must be a valid Date.")
7
+ }
8
+ const start = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth(), 1))
9
+ const end = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth() + 1, 1))
10
+ return { kind: "calendarMonth", start, end, resetAt: new Date(end) }
11
+ }
@@ -0,0 +1,430 @@
1
+ import type { AiMoney } from "../ai-cost"
2
+ import { AiLimitStorageError } from "./errors"
3
+ import { aiLimitCalendarMonth } from "./period"
4
+ import type {
5
+ AiLimitPeriod,
6
+ AiLimitPolicy,
7
+ AiLimitQuantity,
8
+ AiLimitReservationBucket,
9
+ AiLimitSubject,
10
+ AiModelCallReservation,
11
+ AiModelCallReservationIdentity,
12
+ CreateAiLimitPolicyInput,
13
+ ReserveAiModelCallInput,
14
+ UpdateAiLimitPolicyInput,
15
+ } from "./types"
16
+
17
+ const SIGNED_INT64_MAX = 9_223_372_036_854_775_807n
18
+
19
+ /** @internal Serialize compound limit operations, including within an existing transaction. */
20
+ export class AiLimitOperationLock {
21
+ private tail: Promise<void> = Promise.resolve()
22
+
23
+ /** Wait for already queued operations before the owning transaction commits or rolls back. */
24
+ settle(): Promise<void> {
25
+ return this.tail
26
+ }
27
+
28
+ async run<T>(operation: () => Promise<T> | T): Promise<T> {
29
+ const previous = this.tail
30
+ let release!: () => void
31
+ this.tail = new Promise<void>((resolve) => {
32
+ release = resolve
33
+ })
34
+ await previous
35
+ try {
36
+ return await operation()
37
+ } finally {
38
+ release()
39
+ }
40
+ }
41
+ }
42
+
43
+ /** @internal Canonical integer quantity used by storage providers. */
44
+ export interface NormalizedAiLimitAmount {
45
+ readonly meter: AiLimitQuantity["meter"]
46
+ readonly currency: string
47
+ readonly amount: bigint
48
+ }
49
+
50
+ /** @internal Minimal immutable accounting facts consumed by limit providers. */
51
+ export interface AiLimitAccountingEntry {
52
+ readonly projectId: string
53
+ readonly usageRecordId: string
54
+ readonly executionId: string
55
+ readonly attempt: number
56
+ readonly callId: string
57
+ readonly occurredAt: Date
58
+ readonly totalTokens?: number
59
+ readonly requesterGroupIds: readonly string[]
60
+ readonly requester?:
61
+ | { readonly type: "user"; readonly id: string }
62
+ | { readonly type: "serviceAccount"; readonly id: string }
63
+ readonly valuation?:
64
+ | { readonly status: "rated"; readonly money: AiMoney }
65
+ | { readonly status: "unavailable" }
66
+ }
67
+
68
+ export interface ResolvedAiLimitActual {
69
+ readonly amount: bigint
70
+ readonly accountingStatus: "complete" | "unavailable"
71
+ }
72
+
73
+ export function normalizeAiLimitSubject(subject: AiLimitSubject): AiLimitSubject {
74
+ if (!subject || typeof subject !== "object") {
75
+ throw new TypeError("[Sixb] AI limit subject must be an object.")
76
+ }
77
+ if (subject.type === "project") return { type: "project" }
78
+ if (subject.type === "group" || subject.type === "user" || subject.type === "serviceAccount") {
79
+ assertNonBlank(subject.id, "subject id")
80
+ return { type: subject.type, id: subject.id }
81
+ }
82
+ throw new TypeError("[Sixb] AI limit subject type is unsupported.")
83
+ }
84
+
85
+ export function normalizeAiLimitSubjects(
86
+ subjects: readonly AiLimitSubject[]
87
+ ): readonly AiLimitSubject[] {
88
+ if (!Array.isArray(subjects)) {
89
+ throw new TypeError("[Sixb] AI limit subjects must be an array.")
90
+ }
91
+ const normalized = [
92
+ normalizeAiLimitSubject({ type: "project" }),
93
+ ...subjects.map(normalizeAiLimitSubject),
94
+ ]
95
+ const byKey = new Map(normalized.map((subject) => [aiLimitSubjectKey(subject), subject]))
96
+ return [...byKey.values()].sort((left, right) =>
97
+ aiLimitSubjectKey(left).localeCompare(aiLimitSubjectKey(right))
98
+ )
99
+ }
100
+
101
+ export function aiLimitSubjectKey(subject: AiLimitSubject): string {
102
+ return subject.type === "project" ? "project:" : `${subject.type}:${subject.id}`
103
+ }
104
+
105
+ export function aiLimitSubjectParts(subject: AiLimitSubject): {
106
+ readonly type: AiLimitSubject["type"]
107
+ readonly id: string
108
+ } {
109
+ return { type: subject.type, id: subject.type === "project" ? "" : subject.id }
110
+ }
111
+
112
+ export function aiLimitSubjectFromParts(type: AiLimitSubject["type"], id: string): AiLimitSubject {
113
+ return normalizeAiLimitSubject(type === "project" ? { type } : { type, id })
114
+ }
115
+
116
+ export function normalizeAiLimitQuantity(quantity: AiLimitQuantity): AiLimitQuantity {
117
+ const normalized = normalizeAiLimitAmount(quantity)
118
+ return aiLimitQuantityFromAmount(normalized)
119
+ }
120
+
121
+ export function normalizeAiLimitQuantities(
122
+ quantities: readonly AiLimitQuantity[],
123
+ label: string
124
+ ): readonly AiLimitQuantity[] {
125
+ if (!Array.isArray(quantities) || quantities.length === 0) {
126
+ throw new TypeError(`[Sixb] AI limit ${label} must contain at least one quantity.`)
127
+ }
128
+ const byKey = new Map<string, AiLimitQuantity>()
129
+ for (const quantity of quantities) {
130
+ const normalized = normalizeAiLimitQuantity(quantity)
131
+ const key = aiLimitAmountKey(normalizeAiLimitAmount(normalized))
132
+ if (byKey.has(key)) {
133
+ throw new TypeError(`[Sixb] AI limit ${label} contains duplicate meter '${key}'.`)
134
+ }
135
+ byKey.set(key, normalized)
136
+ }
137
+ return [...byKey.values()].sort((left, right) =>
138
+ aiLimitAmountKey(normalizeAiLimitAmount(left)).localeCompare(
139
+ aiLimitAmountKey(normalizeAiLimitAmount(right))
140
+ )
141
+ )
142
+ }
143
+
144
+ export function normalizeAiLimitAmount(quantity: AiLimitQuantity): NormalizedAiLimitAmount {
145
+ if (!quantity || typeof quantity !== "object") {
146
+ throw new TypeError("[Sixb] AI limit quantity must be an object.")
147
+ }
148
+ if (quantity.meter === "tokens.total") {
149
+ if (!Number.isSafeInteger(quantity.amount) || quantity.amount < 0) {
150
+ throw new TypeError("[Sixb] AI limit token amount must be a non-negative safe integer.")
151
+ }
152
+ return { meter: quantity.meter, currency: "", amount: BigInt(quantity.amount) }
153
+ }
154
+ if (quantity.meter === "cost.catalogEstimated") {
155
+ const money = normalizeAiMoney(quantity.amount)
156
+ return { meter: quantity.meter, currency: money.currency, amount: BigInt(money.amountNanos) }
157
+ }
158
+ throw new TypeError("[Sixb] AI limit meter is unsupported.")
159
+ }
160
+
161
+ export function aiLimitQuantityFromAmount(amount: NormalizedAiLimitAmount): AiLimitQuantity {
162
+ if (amount.amount < 0n) {
163
+ throw new TypeError("[Sixb] AI limit amount cannot be negative.")
164
+ }
165
+ if (amount.meter === "tokens.total") {
166
+ const tokens = Number(amount.amount)
167
+ if (!Number.isSafeInteger(tokens)) {
168
+ throw new RangeError("[Sixb] AI limit token amount exceeds JavaScript's safe integer range.")
169
+ }
170
+ return { meter: amount.meter, amount: tokens }
171
+ }
172
+ if (amount.currency !== "USD") {
173
+ throw new TypeError("[Sixb] AI limit catalog-estimated cost currency must be 'USD'.")
174
+ }
175
+ return {
176
+ meter: amount.meter,
177
+ amount: { currency: "USD", amountNanos: amount.amount.toString() },
178
+ }
179
+ }
180
+
181
+ export function aiLimitAmountKey(
182
+ amount: Pick<NormalizedAiLimitAmount, "meter" | "currency">
183
+ ): string {
184
+ return `${amount.meter}:${amount.currency}`
185
+ }
186
+
187
+ export function normalizeCreateAiLimitPolicy(input: CreateAiLimitPolicyInput): AiLimitPolicy {
188
+ assertNonBlank(input.id, "policy id")
189
+ assertNonBlank(input.projectId, "projectId")
190
+ const createdAt = cloneValidDate(input.createdAt ?? new Date(), "createdAt")
191
+ return {
192
+ id: input.id,
193
+ projectId: input.projectId,
194
+ subject: normalizeAiLimitSubject(input.subject),
195
+ limit: normalizeAiLimitQuantity(input.limit),
196
+ period: "calendarMonth",
197
+ enabled: input.enabled ?? true,
198
+ createdAt,
199
+ updatedAt: new Date(createdAt),
200
+ }
201
+ }
202
+
203
+ export function normalizeUpdateAiLimitPolicy(input: UpdateAiLimitPolicyInput): {
204
+ readonly projectId: string
205
+ readonly id: string
206
+ readonly limit?: AiLimitQuantity
207
+ readonly enabled?: boolean
208
+ readonly updatedAt: Date
209
+ } {
210
+ assertNonBlank(input.projectId, "projectId")
211
+ assertNonBlank(input.id, "policy id")
212
+ if (input.limit === undefined && input.enabled === undefined) {
213
+ throw new TypeError("[Sixb] AI limit policy update must change limit or enabled.")
214
+ }
215
+ if (input.enabled !== undefined && typeof input.enabled !== "boolean") {
216
+ throw new TypeError("[Sixb] AI limit enabled must be a boolean.")
217
+ }
218
+ return {
219
+ projectId: input.projectId,
220
+ id: input.id,
221
+ ...(input.limit === undefined ? {} : { limit: normalizeAiLimitQuantity(input.limit) }),
222
+ ...(input.enabled === undefined ? {} : { enabled: input.enabled }),
223
+ updatedAt: cloneValidDate(input.updatedAt ?? new Date(), "updatedAt"),
224
+ }
225
+ }
226
+
227
+ export function normalizeReserveAiModelCall(input: ReserveAiModelCallInput): {
228
+ readonly identity: AiModelCallReservationIdentity
229
+ readonly subjects: readonly AiLimitSubject[]
230
+ readonly estimates: readonly AiLimitQuantity[]
231
+ readonly period: AiLimitPeriod
232
+ readonly reservedAt: Date
233
+ } {
234
+ const identity = normalizeAiModelCallReservationIdentity(input)
235
+ const reservedAt = cloneValidDate(input.reservedAt ?? new Date(), "reservedAt")
236
+ return {
237
+ identity,
238
+ subjects: normalizeAiLimitSubjects(input.subjects),
239
+ estimates: normalizeAiLimitQuantities(input.estimates, "estimates"),
240
+ period: aiLimitCalendarMonth(reservedAt),
241
+ reservedAt,
242
+ }
243
+ }
244
+
245
+ export function normalizeAiModelCallReservationIdentity(
246
+ input: AiModelCallReservationIdentity
247
+ ): AiModelCallReservationIdentity {
248
+ assertNonBlank(input.projectId, "projectId")
249
+ assertNonBlank(input.executionId, "executionId")
250
+ if (!Number.isSafeInteger(input.attempt) || input.attempt <= 0) {
251
+ throw new TypeError("[Sixb] AI limit reservation attempt must be a positive safe integer.")
252
+ }
253
+ assertNonBlank(input.callId, "callId")
254
+ return {
255
+ projectId: input.projectId,
256
+ executionId: input.executionId,
257
+ attempt: input.attempt,
258
+ callId: input.callId,
259
+ }
260
+ }
261
+
262
+ export function aiModelCallReservationKey(identity: AiModelCallReservationIdentity): string {
263
+ return JSON.stringify([
264
+ identity.projectId,
265
+ identity.executionId,
266
+ identity.attempt,
267
+ identity.callId,
268
+ ])
269
+ }
270
+
271
+ export function aiLimitPolicyDimensionKey(
272
+ policy: Pick<AiLimitPolicy, "projectId" | "subject" | "limit">
273
+ ): string {
274
+ const amount = normalizeAiLimitAmount(policy.limit)
275
+ return JSON.stringify([
276
+ policy.projectId,
277
+ aiLimitSubjectKey(policy.subject),
278
+ amount.meter,
279
+ amount.currency,
280
+ ])
281
+ }
282
+
283
+ export function aiLimitReservationRequestMatches(
284
+ reservation: AiModelCallReservation,
285
+ request: ReturnType<typeof normalizeReserveAiModelCall>
286
+ ): boolean {
287
+ return reservation.requestKey === aiLimitReservationRequestKey(request)
288
+ }
289
+
290
+ export function aiLimitReservationRequestKey(
291
+ request: ReturnType<typeof normalizeReserveAiModelCall>
292
+ ): string {
293
+ return JSON.stringify([
294
+ request.period.start.toISOString(),
295
+ request.subjects.map(aiLimitSubjectKey),
296
+ request.estimates.map((quantity) => {
297
+ const amount = normalizeAiLimitAmount(quantity)
298
+ return [amount.meter, amount.currency, amount.amount.toString()]
299
+ }),
300
+ ])
301
+ }
302
+
303
+ export function aiLimitReservationBuckets(
304
+ policies: readonly AiLimitPolicy[],
305
+ subjects: readonly AiLimitSubject[],
306
+ estimates: readonly AiLimitQuantity[]
307
+ ): readonly AiLimitReservationBucket[] {
308
+ const subjectKeys = new Set(subjects.map(aiLimitSubjectKey))
309
+ const estimatesByDimension = new Map(
310
+ estimates.map((estimate) => {
311
+ const amount = normalizeAiLimitAmount(estimate)
312
+ return [aiLimitAmountKey(amount), estimate] as const
313
+ })
314
+ )
315
+ return policies
316
+ .filter((policy) => subjectKeys.has(aiLimitSubjectKey(policy.subject)))
317
+ .flatMap((policy) => {
318
+ const estimate = estimatesByDimension.get(
319
+ aiLimitAmountKey(normalizeAiLimitAmount(policy.limit))
320
+ )
321
+ return estimate ? [{ subject: policy.subject, estimate }] : []
322
+ })
323
+ .sort((left, right) => {
324
+ const subject = aiLimitSubjectKey(left.subject).localeCompare(
325
+ aiLimitSubjectKey(right.subject)
326
+ )
327
+ if (subject !== 0) return subject
328
+ return aiLimitAmountKey(normalizeAiLimitAmount(left.estimate)).localeCompare(
329
+ aiLimitAmountKey(normalizeAiLimitAmount(right.estimate))
330
+ )
331
+ })
332
+ }
333
+
334
+ export function aiLimitAccountingEntryAppliesToSubject(
335
+ entry: AiLimitAccountingEntry,
336
+ subject: AiLimitSubject
337
+ ): boolean {
338
+ if (subject.type === "project") return true
339
+ if (subject.type === "group") return entry.requesterGroupIds.includes(subject.id)
340
+ return entry.requester?.type === subject.type && entry.requester.id === subject.id
341
+ }
342
+
343
+ export function aiLimitSubjectsFromAccountingEntry(
344
+ entry: AiLimitAccountingEntry
345
+ ): readonly AiLimitSubject[] {
346
+ return normalizeAiLimitSubjects([
347
+ ...entry.requesterGroupIds.map((id) => ({ type: "group" as const, id })),
348
+ ...(entry.requester ? [entry.requester] : []),
349
+ ])
350
+ }
351
+
352
+ export function resolveAiLimitActual(
353
+ entries: readonly AiLimitAccountingEntry[],
354
+ dimension: Pick<NormalizedAiLimitAmount, "meter" | "currency">
355
+ ): ResolvedAiLimitActual {
356
+ let amount = 0n
357
+ let accountingStatus: ResolvedAiLimitActual["accountingStatus"] = "complete"
358
+ for (const entry of entries) {
359
+ if (dimension.meter === "tokens.total") {
360
+ if (entry.totalTokens === undefined) {
361
+ accountingStatus = "unavailable"
362
+ } else {
363
+ amount += BigInt(entry.totalTokens)
364
+ }
365
+ continue
366
+ }
367
+ if (
368
+ entry.valuation?.status !== "rated" ||
369
+ entry.valuation.money.currency !== dimension.currency
370
+ ) {
371
+ accountingStatus = "unavailable"
372
+ continue
373
+ }
374
+ amount += BigInt(entry.valuation.money.amountNanos)
375
+ }
376
+ return { amount, accountingStatus }
377
+ }
378
+
379
+ export function assertAiLimitAccountingMatchesReservation(
380
+ reservation: AiModelCallReservation,
381
+ entry: AiLimitAccountingEntry
382
+ ): void {
383
+ if (
384
+ entry.projectId !== reservation.projectId ||
385
+ entry.executionId !== reservation.executionId ||
386
+ entry.attempt !== reservation.attempt ||
387
+ entry.callId !== reservation.callId
388
+ ) {
389
+ throw new AiLimitStorageError(
390
+ "usage_mismatch",
391
+ `[Sixb] AI usage record '${entry.usageRecordId}' does not belong to reservation '${reservation.callId}'.`
392
+ )
393
+ }
394
+ }
395
+
396
+ export function cloneAiLimitPolicy(policy: AiLimitPolicy): AiLimitPolicy {
397
+ return structuredClone(policy)
398
+ }
399
+
400
+ function normalizeAiMoney(money: AiMoney): AiMoney & { readonly currency: "USD" } {
401
+ if (!money || typeof money !== "object") {
402
+ throw new TypeError("[Sixb] AI limit cost amount must be AiMoney.")
403
+ }
404
+ assertNonBlank(money.currency, "cost currency")
405
+ if (money.currency !== "USD") {
406
+ throw new TypeError("[Sixb] AI limit catalog-estimated cost currency must be 'USD'.")
407
+ }
408
+ if (!/^(0|[1-9][0-9]*)$/.test(money.amountNanos)) {
409
+ throw new TypeError(
410
+ "[Sixb] AI limit cost amountNanos must be a canonical non-negative integer string."
411
+ )
412
+ }
413
+ if (BigInt(money.amountNanos) > SIGNED_INT64_MAX) {
414
+ throw new RangeError("[Sixb] AI limit cost amountNanos exceeds the supported range.")
415
+ }
416
+ return { currency: "USD", amountNanos: money.amountNanos }
417
+ }
418
+
419
+ export function assertNonBlank(value: string, label: string): void {
420
+ if (typeof value !== "string" || value.trim().length === 0) {
421
+ throw new TypeError(`[Sixb] AI limit ${label} must be nonblank.`)
422
+ }
423
+ }
424
+
425
+ export function cloneValidDate(value: Date, label: string): Date {
426
+ if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {
427
+ throw new TypeError(`[Sixb] AI limit ${label} must be a valid Date.`)
428
+ }
429
+ return new Date(value)
430
+ }
@@ -0,0 +1,195 @@
1
+ import type { AiMoney } from "../ai-cost"
2
+
3
+ /** A project-wide, group, or durable requester identity charged for AI model calls. */
4
+ export type AiLimitSubject =
5
+ | { readonly type: "project" }
6
+ | { readonly type: "group"; readonly id: string }
7
+ | { readonly type: "user"; readonly id: string }
8
+ | { readonly type: "serviceAccount"; readonly id: string }
9
+
10
+ /** Aggregate meters supported by the first AI usage-limit release. */
11
+ export type AiLimitMeter = "tokens.total" | "cost.catalogEstimated"
12
+
13
+ /** An exact quantity for one supported meter. */
14
+ export type AiLimitQuantity =
15
+ | { readonly meter: "tokens.total"; readonly amount: number }
16
+ | {
17
+ readonly meter: "cost.catalogEstimated"
18
+ readonly amount: AiMoney & { readonly currency: "USD" }
19
+ }
20
+
21
+ export type AiLimitPeriodKind = "calendarMonth"
22
+
23
+ /** Inclusive start and exclusive end of one UTC accounting period. */
24
+ export interface AiLimitPeriod {
25
+ readonly kind: AiLimitPeriodKind
26
+ readonly start: Date
27
+ readonly end: Date
28
+ /** The first instant at which a denied call may be admitted in the next period. */
29
+ readonly resetAt: Date
30
+ }
31
+
32
+ /** Editable policy. Consumption is intentionally stored independently from this record. */
33
+ export interface AiLimitPolicy {
34
+ readonly id: string
35
+ readonly projectId: string
36
+ readonly subject: AiLimitSubject
37
+ readonly limit: AiLimitQuantity
38
+ readonly period: AiLimitPeriodKind
39
+ readonly enabled: boolean
40
+ readonly createdAt: Date
41
+ readonly updatedAt: Date
42
+ }
43
+
44
+ export interface CreateAiLimitPolicyInput {
45
+ readonly id: string
46
+ readonly projectId: string
47
+ readonly subject: AiLimitSubject
48
+ readonly limit: AiLimitQuantity
49
+ readonly enabled?: boolean
50
+ readonly createdAt?: Date
51
+ }
52
+
53
+ export interface UpdateAiLimitPolicyInput {
54
+ readonly projectId: string
55
+ readonly id: string
56
+ /** The meter and cost currency are immutable; only the amount may change. */
57
+ readonly limit?: AiLimitQuantity
58
+ readonly enabled?: boolean
59
+ readonly updatedAt?: Date
60
+ }
61
+
62
+ export interface GetAiLimitPolicyInput {
63
+ readonly projectId: string
64
+ readonly id: string
65
+ }
66
+
67
+ export interface DeleteAiLimitPolicyInput extends GetAiLimitPolicyInput {}
68
+
69
+ export interface ListAiLimitPoliciesInput {
70
+ readonly projectId: string
71
+ readonly includeDisabled?: boolean
72
+ }
73
+
74
+ /** Current-period consumption for one policy, all expressed in the policy's meter. */
75
+ export interface AiLimitConsumption {
76
+ readonly actual: AiLimitQuantity
77
+ readonly reserved: AiLimitQuantity
78
+ readonly unknown: AiLimitQuantity
79
+ readonly remaining: AiLimitQuantity
80
+ }
81
+
82
+ export interface AiLimitPolicyStatus {
83
+ readonly policy: AiLimitPolicy
84
+ readonly period: AiLimitPeriod
85
+ readonly consumption: AiLimitConsumption
86
+ /** Whether every applicable immutable ledger record could be measured for this policy. */
87
+ readonly accountingStatus: "complete" | "unavailable"
88
+ readonly exhausted: boolean
89
+ /** True only when the caller supplied the current group set and this group is absent. */
90
+ readonly orphaned: boolean
91
+ }
92
+
93
+ export interface ListAiLimitPolicyStatusesInput {
94
+ readonly projectId: string
95
+ readonly at?: Date
96
+ readonly includeDisabled?: boolean
97
+ /** Optional current group IDs used to report policies whose snapshotted group disappeared. */
98
+ readonly existingGroupIds?: readonly string[]
99
+ }
100
+
101
+ export interface AiModelCallReservationIdentity {
102
+ readonly projectId: string
103
+ readonly executionId: string
104
+ readonly attempt: number
105
+ readonly callId: string
106
+ }
107
+
108
+ export interface AiLimitReservationBucket {
109
+ readonly subject: AiLimitSubject
110
+ readonly estimate: AiLimitQuantity
111
+ }
112
+
113
+ export type AiModelCallReservationState = "active" | "reconciled" | "unknown"
114
+
115
+ /** Durable reservation for one Sixb-owned provider attempt. */
116
+ export interface AiModelCallReservation extends AiModelCallReservationIdentity {
117
+ /** Only policy dimensions that were applicable at admission time. */
118
+ readonly buckets: readonly AiLimitReservationBucket[]
119
+ /** Canonical admission request used to reject conflicting idempotent replays. */
120
+ readonly requestKey: string
121
+ readonly period: AiLimitPeriod
122
+ readonly state: AiModelCallReservationState
123
+ readonly usageRecordId?: string
124
+ readonly reservedAt: Date
125
+ readonly updatedAt: Date
126
+ }
127
+
128
+ export interface ReserveAiModelCallInput extends AiModelCallReservationIdentity {
129
+ /** The project subject is always added, even when omitted here. */
130
+ readonly subjects: readonly AiLimitSubject[]
131
+ readonly estimates: readonly AiLimitQuantity[]
132
+ readonly reservedAt?: Date
133
+ }
134
+
135
+ export type ReserveAiModelCallResult =
136
+ | {
137
+ readonly status: "reserved"
138
+ readonly reservation: AiModelCallReservation
139
+ /** False when the exact reservation identity and request were replayed. */
140
+ readonly created: boolean
141
+ }
142
+ | {
143
+ /** No enabled policy matched a supplied subject and estimate. */
144
+ readonly status: "notRequired"
145
+ }
146
+ | {
147
+ /** Exact replay of a reservation that can no longer authorize a provider call. */
148
+ readonly status: "terminal"
149
+ readonly reservation: AiModelCallReservation
150
+ readonly created: false
151
+ }
152
+ | {
153
+ readonly status: "denied"
154
+ /** Every applicable policy that the proposed reservation would exceed. */
155
+ readonly exhaustedPolicies: readonly AiLimitPolicyStatus[]
156
+ readonly resetAt: Date
157
+ }
158
+ | {
159
+ /** Admission failed closed because an applicable policy could not be measured safely. */
160
+ readonly status: "unavailable"
161
+ readonly unavailablePolicies: readonly AiLimitPolicyStatus[]
162
+ readonly reasons: readonly ("missingEstimate" | "incompleteAccounting")[]
163
+ }
164
+
165
+ export interface ReconcileAiModelCallInput extends AiModelCallReservationIdentity {
166
+ readonly usageRecordId: string
167
+ readonly reconciledAt?: Date
168
+ }
169
+
170
+ export interface MarkAiModelCallReservationUnknownInput extends AiModelCallReservationIdentity {
171
+ readonly markedAt?: Date
172
+ }
173
+
174
+ export interface RecordAiModelCallLimitActualsInput {
175
+ readonly projectId: string
176
+ readonly usageRecordId: string
177
+ readonly recordedAt?: Date
178
+ }
179
+
180
+ export interface AiLimitStorage {
181
+ createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy>
182
+ updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy>
183
+ deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean>
184
+ getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null>
185
+ listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]>
186
+ listPolicyStatuses(input: ListAiLimitPolicyStatusesInput): Promise<readonly AiLimitPolicyStatus[]>
187
+
188
+ reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult>
189
+ /** Applies a newly-created immutable usage record to initialized period counters. */
190
+ recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void>
191
+ reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation>
192
+ markReservationUnknown(
193
+ input: MarkAiModelCallReservationUnknownInput
194
+ ): Promise<AiModelCallReservation>
195
+ }
@@ -144,6 +144,19 @@ export class InMemoryAiUsageStorage implements AiUsageStorage {
144
144
  replaceMap(this.groupRows, snapshot.groupRows)
145
145
  }
146
146
 
147
+ /** @internal Immutable accounting source used by in-memory AI limit enforcement. */
148
+ getRecord(projectId: string, id: string): AiModelCallUsageRecord | null {
149
+ const record = this.records.get(modelCallRecordKey(projectId, id))
150
+ return record ? structuredClone(record) : null
151
+ }
152
+
153
+ /** @internal Immutable accounting source used by in-memory AI limit status reads. */
154
+ listRecords(projectId: string): readonly AiModelCallUsageRecord[] {
155
+ return [...this.records.values()]
156
+ .filter((record) => record.projectId === projectId)
157
+ .map((record) => structuredClone(record))
158
+ }
159
+
147
160
  private async assertExecutionExists(projectId: string, executionId: string): Promise<void> {
148
161
  const execution = await this.executions.getById({ projectId, id: executionId })
149
162
  if (execution) return
@@ -1,5 +1,7 @@
1
1
  import { normalizeRequesterGroupIds } from "../../auth/attribution"
2
2
  import { assertJsonValue, isPlainRecord } from "../../json"
3
+ import { normalizeModelProviderIds } from "../../models/events"
4
+ import { isModelReasoning } from "../../models/language-model"
3
5
  import type { AiModelCallUsageRecord, RecordAiModelCallInput } from "./types"
4
6
  import { normalizeAiModelCallUsage } from "./usage"
5
7
 
@@ -20,6 +22,7 @@ export function normalizeAiModelCallRecord(input: RecordAiModelCallInput): AiMod
20
22
  const occurredAt = cloneValidDate(input.occurredAt, "occurredAt")
21
23
  const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), "recordedAt")
22
24
  const requesterGroupIds = normalizeRequesterGroupIds(input.requesterGroupIds)
25
+ const requestedReasoning = cloneRequestedReasoning(input.requestedReasoning)
23
26
  const rawUsage = cloneRawUsage(input.rawUsage)
24
27
 
25
28
  return {
@@ -30,7 +33,11 @@ export function normalizeAiModelCallRecord(input: RecordAiModelCallInput): AiMod
30
33
  callId: input.callId,
31
34
  requesterGroupIds,
32
35
  providerId: input.providerId,
36
+ ...(input.providerIds === undefined
37
+ ? {}
38
+ : { providerIds: normalizeModelProviderIds(input.providerIds) }),
33
39
  requestedModelId: input.requestedModelId,
40
+ ...(requestedReasoning === undefined ? {} : { requestedReasoning }),
34
41
  ...(input.responseModelId === undefined ? {} : { responseModelId: input.responseModelId }),
35
42
  responseId: input.responseId,
36
43
  usage: normalizeAiModelCallUsage(input.usage),
@@ -40,6 +47,16 @@ export function normalizeAiModelCallRecord(input: RecordAiModelCallInput): AiMod
40
47
  }
41
48
  }
42
49
 
50
+ function cloneRequestedReasoning(
51
+ reasoning: RecordAiModelCallInput["requestedReasoning"]
52
+ ): RecordAiModelCallInput["requestedReasoning"] {
53
+ if (reasoning === undefined) return undefined
54
+ if (!isModelReasoning(reasoning)) {
55
+ throw new TypeError("[Sixb] AI usage requestedReasoning is invalid.")
56
+ }
57
+ return typeof reasoning === "string" ? reasoning : { budgetTokens: reasoning.budgetTokens }
58
+ }
59
+
43
60
  /** Validate a durable execution reference at storage and query boundaries. */
44
61
  export function assertAiUsageExecutionId(executionId: string): void {
45
62
  assertNonBlank(executionId, "executionId")