@sixb/core 0.1.16 → 0.1.18

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 (844) hide show
  1. package/dist/actions/index.js +30 -27
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/read-facade.d.ts +1 -1
  4. package/dist/actions/types/context.d.ts +2 -2
  5. package/dist/actions/types/context.d.ts.map +1 -1
  6. package/dist/actions/validation.d.ts.map +1 -1
  7. package/dist/actions/worker.js +6 -2
  8. package/dist/actions/worker.js.map +3 -3
  9. package/dist/agents/adapters.d.ts +7 -0
  10. package/dist/agents/adapters.d.ts.map +1 -1
  11. package/dist/agents/authority.d.ts +7 -0
  12. package/dist/agents/authority.d.ts.map +1 -1
  13. package/dist/agents/context/entries.d.ts +10 -1
  14. package/dist/agents/context/entries.d.ts.map +1 -1
  15. package/dist/agents/context/index.d.ts +1 -1
  16. package/dist/agents/context/index.d.ts.map +1 -1
  17. package/dist/agents/context/index.js +4 -2
  18. package/dist/agents/context/index.js.map +1 -1
  19. package/dist/agents/context-compaction.d.ts.map +1 -1
  20. package/dist/agents/errors.d.ts +1 -1
  21. package/dist/agents/errors.d.ts.map +1 -1
  22. package/dist/agents/index.d.ts +6 -4
  23. package/dist/agents/index.d.ts.map +1 -1
  24. package/dist/agents/index.js +54 -46
  25. package/dist/agents/index.js.map +1 -1
  26. package/dist/agents/message.d.ts +8 -1
  27. package/dist/agents/message.d.ts.map +1 -1
  28. package/dist/agents/request.d.ts +19 -5
  29. package/dist/agents/request.d.ts.map +1 -1
  30. package/dist/agents/skills.d.ts +41 -0
  31. package/dist/agents/skills.d.ts.map +1 -0
  32. package/dist/agents/streams/index.js +1 -1
  33. package/dist/agents/streams/internal.js +1 -1
  34. package/dist/agents/types.d.ts +33 -4
  35. package/dist/agents/types.d.ts.map +1 -1
  36. package/dist/auth/index.js +9 -6
  37. package/dist/auth/index.js.map +1 -1
  38. package/dist/auth/runtime.d.ts.map +1 -1
  39. package/dist/auth/types.d.ts +6 -0
  40. package/dist/auth/types.d.ts.map +1 -1
  41. package/dist/authorization/index.js +5 -3
  42. package/dist/authorization/index.js.map +1 -1
  43. package/dist/authorization/resolve.d.ts +1 -1
  44. package/dist/authorization/resolve.d.ts.map +1 -1
  45. package/dist/authorization/types.d.ts +7 -0
  46. package/dist/authorization/types.d.ts.map +1 -1
  47. package/dist/blob-storage/browser.js +1 -1
  48. package/dist/blob-storage/download-urls.d.ts +41 -0
  49. package/dist/blob-storage/download-urls.d.ts.map +1 -0
  50. package/dist/blob-storage/execution.d.ts +9 -1
  51. package/dist/blob-storage/execution.d.ts.map +1 -1
  52. package/dist/blob-storage/file-content.d.ts +18 -0
  53. package/dist/blob-storage/file-content.d.ts.map +1 -0
  54. package/dist/blob-storage/index.d.ts +1 -1
  55. package/dist/blob-storage/index.d.ts.map +1 -1
  56. package/dist/blob-storage/index.js +6 -4
  57. package/dist/blob-storage/index.js.map +1 -1
  58. package/dist/blob-storage/internal.d.ts +4 -0
  59. package/dist/blob-storage/internal.d.ts.map +1 -0
  60. package/dist/blob-storage/internal.js +23 -0
  61. package/dist/blob-storage/internal.js.map +9 -0
  62. package/dist/blob-storage/media-type.d.ts +8 -0
  63. package/dist/blob-storage/media-type.d.ts.map +1 -0
  64. package/dist/blob-storage/types.d.ts +12 -1
  65. package/dist/blob-storage/types.d.ts.map +1 -1
  66. package/dist/blob-storage/validation.d.ts +6 -0
  67. package/dist/blob-storage/validation.d.ts.map +1 -1
  68. package/dist/bootstrap/agent-context.d.ts +33 -0
  69. package/dist/bootstrap/agent-context.d.ts.map +1 -0
  70. package/dist/bootstrap/discovery.d.ts +23 -3
  71. package/dist/bootstrap/discovery.d.ts.map +1 -1
  72. package/dist/bootstrap/index.d.ts +2 -1
  73. package/dist/bootstrap/index.d.ts.map +1 -1
  74. package/dist/bootstrap/index.js +287 -75
  75. package/dist/bootstrap/index.js.map +4 -3
  76. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  77. package/dist/{chunk-kttr5ftm.js → chunk-1b1f2d5f.js} +23 -6
  78. package/dist/chunk-1b1f2d5f.js.map +12 -0
  79. package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
  80. package/dist/chunk-1hqwggsn.js.map +12 -0
  81. package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
  82. package/dist/chunk-1sr8ryzk.js.map +11 -0
  83. package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
  84. package/dist/{chunk-tnvafr7g.js → chunk-29yx306f.js} +124 -9
  85. package/dist/chunk-29yx306f.js.map +22 -0
  86. package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
  87. package/dist/chunk-3zxk45er.js +152 -0
  88. package/dist/chunk-3zxk45er.js.map +11 -0
  89. package/dist/{chunk-gmdvns8f.js → chunk-48e3cn2d.js} +2 -2
  90. package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
  91. package/dist/chunk-4as3wt1c.js.map +12 -0
  92. package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
  93. package/dist/chunk-6gmfggss.js.map +10 -0
  94. package/dist/{chunk-2xvgy3x5.js → chunk-6h5m9xjx.js} +43 -415
  95. package/dist/{chunk-2xvgy3x5.js.map → chunk-6h5m9xjx.js.map} +7 -11
  96. package/dist/{chunk-cq44v1a6.js → chunk-7hpdd6r9.js} +3 -3
  97. package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
  98. package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
  99. package/dist/chunk-b9affek3.js +261 -0
  100. package/dist/chunk-b9affek3.js.map +12 -0
  101. package/dist/{chunk-zvmr2hqk.js → chunk-bs7sqkre.js} +10 -4
  102. package/dist/chunk-bs7sqkre.js.map +12 -0
  103. package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
  104. package/dist/{chunk-667x4drs.js → chunk-d0eb5yy6.js} +143 -7
  105. package/dist/chunk-d0eb5yy6.js.map +14 -0
  106. package/dist/chunk-d62kjtbg.js.map +2 -2
  107. package/dist/{chunk-gkxsenvp.js → chunk-de4z2bj6.js} +31 -7
  108. package/dist/{chunk-gkxsenvp.js.map → chunk-de4z2bj6.js.map} +5 -4
  109. package/dist/{chunk-mdnw7nj8.js → chunk-dnmadg9k.js} +35 -10
  110. package/dist/chunk-dnmadg9k.js.map +15 -0
  111. package/dist/chunk-enpsx8k5.js +127 -0
  112. package/dist/chunk-enpsx8k5.js.map +10 -0
  113. package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
  114. package/dist/chunk-ere85b8y.js.map +15 -0
  115. package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
  116. package/dist/chunk-ewqa58h9.js.map +11 -0
  117. package/dist/{chunk-7g2gjvah.js → chunk-ex496vct.js} +1 -1
  118. package/dist/{chunk-nvymebc1.js → chunk-f1zxad2t.js} +1 -1
  119. package/dist/{chunk-3q7z9hd4.js → chunk-fe52eczz.js} +483 -101
  120. package/dist/chunk-fe52eczz.js.map +49 -0
  121. package/dist/{chunk-8x74221e.js → chunk-fx93hd2n.js} +79 -32
  122. package/dist/chunk-fx93hd2n.js.map +20 -0
  123. package/dist/{chunk-39tqv9hz.js → chunk-gc4ntf7d.js} +6 -7
  124. package/dist/{chunk-39tqv9hz.js.map → chunk-gc4ntf7d.js.map} +3 -4
  125. package/dist/chunk-h8teetr0.js +9 -0
  126. package/dist/chunk-h8teetr0.js.map +10 -0
  127. package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
  128. package/dist/chunk-hkc3jct7.js.map +10 -0
  129. package/dist/chunk-hn2r7z41.js.map +1 -1
  130. package/dist/{chunk-h044jb97.js → chunk-htr6wjmv.js} +282 -58
  131. package/dist/chunk-htr6wjmv.js.map +19 -0
  132. package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
  133. package/dist/chunk-jhm3zsa7.js.map +12 -0
  134. package/dist/{chunk-chdg6eqq.js → chunk-k6hrnf35.js} +5 -5
  135. package/dist/chunk-k6hrnf35.js.map +10 -0
  136. package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
  137. package/dist/chunk-kpx7jrmn.js.map +12 -0
  138. package/dist/{chunk-b9y8hcm2.js → chunk-mfs23znk.js} +1 -1
  139. package/dist/{chunk-kvysp909.js → chunk-ny3xyvcn.js} +32 -19
  140. package/dist/chunk-ny3xyvcn.js.map +17 -0
  141. package/dist/{chunk-h4138ww2.js → chunk-p0dqwj3n.js} +450 -799
  142. package/dist/chunk-p0dqwj3n.js.map +49 -0
  143. package/dist/{chunk-f72rbvsb.js → chunk-p844e0rn.js} +23 -8
  144. package/dist/chunk-p844e0rn.js.map +19 -0
  145. package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
  146. package/dist/chunk-pfp1txq2.js.map +11 -0
  147. package/dist/chunk-pqajwytd.js.map +3 -3
  148. package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
  149. package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
  150. package/dist/{chunk-69kt9q43.js → chunk-qkbx3tf6.js} +17 -128
  151. package/dist/{chunk-69kt9q43.js.map → chunk-qkbx3tf6.js.map} +6 -7
  152. package/dist/{chunk-h866d223.js → chunk-qkvz64nd.js} +2 -2
  153. package/dist/{chunk-vsvrv7n8.js → chunk-qmnnhde6.js} +4 -8
  154. package/dist/{chunk-vsvrv7n8.js.map → chunk-qmnnhde6.js.map} +3 -3
  155. package/dist/{chunk-6z1q7j19.js → chunk-qq90g05n.js} +1128 -782
  156. package/dist/chunk-qq90g05n.js.map +66 -0
  157. package/dist/{chunk-40qb8wpe.js → chunk-qxvp5epv.js} +84 -29
  158. package/dist/{chunk-40qb8wpe.js.map → chunk-qxvp5epv.js.map} +10 -9
  159. package/dist/chunk-rdghfsss.js.map +2 -2
  160. package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
  161. package/dist/chunk-rj69qcrd.js.map +11 -0
  162. package/dist/{chunk-tkdbge6v.js → chunk-rt9p8m9t.js} +1 -1
  163. package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
  164. package/dist/chunk-rz53yb4v.js.map +14 -0
  165. package/dist/{chunk-a7ne02hk.js → chunk-s4jhg8a3.js} +351 -296
  166. package/dist/chunk-s4jhg8a3.js.map +15 -0
  167. package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
  168. package/dist/chunk-s54c868q.js.map +12 -0
  169. package/dist/{chunk-dsv8kdgk.js → chunk-tffvfy6s.js} +8 -7
  170. package/dist/{chunk-dsv8kdgk.js.map → chunk-tffvfy6s.js.map} +3 -3
  171. package/dist/{chunk-sbcm1b92.js → chunk-v6xpd60t.js} +3 -3
  172. package/dist/{chunk-nj0020ay.js → chunk-vgk3hknm.js} +1 -1
  173. package/dist/{chunk-qnd7ehe5.js → chunk-vx2yp45y.js} +2 -2
  174. package/dist/{chunk-vjqt7q3a.js → chunk-vz3gc1tm.js} +607 -45
  175. package/dist/chunk-vz3gc1tm.js.map +41 -0
  176. package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
  177. package/dist/chunk-wt4szfec.js.map +14 -0
  178. package/dist/chunk-xt1zt7gv.js +471 -0
  179. package/dist/chunk-xt1zt7gv.js.map +13 -0
  180. package/dist/{chunk-swxzncrv.js → chunk-y05543x6.js} +51 -8
  181. package/dist/{chunk-swxzncrv.js.map → chunk-y05543x6.js.map} +5 -5
  182. package/dist/{chunk-zdkcdshk.js → chunk-y9jmd7e5.js} +41 -3
  183. package/dist/{chunk-zdkcdshk.js.map → chunk-y9jmd7e5.js.map} +4 -3
  184. package/dist/{chunk-nkbev3tr.js → chunk-yv9czyfr.js} +3 -3
  185. package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
  186. package/dist/chunk-yw9pyg66.js.map +11 -0
  187. package/dist/{chunk-cxj8y8t0.js → chunk-za5yd58j.js} +2 -2
  188. package/dist/{chunk-zb47r1c8.js → chunk-zb77kjth.js} +3 -3
  189. package/dist/{chunk-dp7yk20b.js → chunk-zxawp1n2.js} +1 -1
  190. package/dist/datasets/builders.d.ts +12 -1
  191. package/dist/datasets/builders.d.ts.map +1 -1
  192. package/dist/datasets/execution.d.ts +27 -1
  193. package/dist/datasets/execution.d.ts.map +1 -1
  194. package/dist/datasets/index.d.ts +1 -1
  195. package/dist/datasets/index.d.ts.map +1 -1
  196. package/dist/datasets/types.d.ts +2 -0
  197. package/dist/datasets/types.d.ts.map +1 -1
  198. package/dist/datasets/write.d.ts +5 -0
  199. package/dist/datasets/write.d.ts.map +1 -1
  200. package/dist/datasets/write.js +10 -5
  201. package/dist/datasets/write.js.map +1 -1
  202. package/dist/edits/properties.d.ts.map +1 -1
  203. package/dist/events/execution.d.ts +2 -1
  204. package/dist/events/execution.d.ts.map +1 -1
  205. package/dist/events/types/objects.d.ts +5 -0
  206. package/dist/events/types/objects.d.ts.map +1 -1
  207. package/dist/execution/agent.d.ts +10 -0
  208. package/dist/execution/agent.d.ts.map +1 -1
  209. package/dist/execution/agent.js +49 -43
  210. package/dist/execution/agent.js.map +1 -1
  211. package/dist/execution/authorized-object-reader.d.ts +9 -2
  212. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  213. package/dist/execution/primitive.js +45 -41
  214. package/dist/execution/primitive.js.map +2 -2
  215. package/dist/execution/request.js +46 -42
  216. package/dist/execution/request.js.map +2 -2
  217. package/dist/http/api-routes.d.ts.map +1 -1
  218. package/dist/http/index.js +1 -1
  219. package/dist/index.d.ts +16 -11
  220. package/dist/index.d.ts.map +1 -1
  221. package/dist/index.js +79 -71
  222. package/dist/index.js.map +1 -1
  223. package/dist/lake-storage/in-memory.d.ts +5 -1
  224. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  225. package/dist/lake-storage/index.d.ts +1 -1
  226. package/dist/lake-storage/index.d.ts.map +1 -1
  227. package/dist/lake-storage/index.js +8 -5
  228. package/dist/lake-storage/index.js.map +1 -1
  229. package/dist/lake-storage/types.d.ts +26 -0
  230. package/dist/lake-storage/types.d.ts.map +1 -1
  231. package/dist/maintenance/ontology-maintenance.d.ts +5 -1
  232. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  233. package/dist/maintenance/types.d.ts +1 -4
  234. package/dist/maintenance/types.d.ts.map +1 -1
  235. package/dist/materialization/event-envelopes.d.ts +20 -0
  236. package/dist/materialization/event-envelopes.d.ts.map +1 -0
  237. package/dist/materialization/events.d.ts +29 -3
  238. package/dist/materialization/events.d.ts.map +1 -1
  239. package/dist/materialization/index.d.ts +4 -1
  240. package/dist/materialization/index.d.ts.map +1 -1
  241. package/dist/materialization/index.js +9 -3
  242. package/dist/materialization/index.js.map +1 -1
  243. package/dist/materializer/edits/plan.d.ts +2 -10
  244. package/dist/materializer/edits/plan.d.ts.map +1 -1
  245. package/dist/materializer/effective/build-events.d.ts +5 -21
  246. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  247. package/dist/materializer/effective/vector-indexing.d.ts +2 -3
  248. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
  249. package/dist/materializer/effective/vectors.d.ts +2 -3
  250. package/dist/materializer/effective/vectors.d.ts.map +1 -1
  251. package/dist/materializer/execution/scope.d.ts +1 -11
  252. package/dist/materializer/execution/scope.d.ts.map +1 -1
  253. package/dist/materializer/execution/work-executor.d.ts +5 -7
  254. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  255. package/dist/materializer/execution/work-records.d.ts +1 -3
  256. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  257. package/dist/materializer/index.js +35 -33
  258. package/dist/materializer/index.js.map +1 -1
  259. package/dist/materializer/projections/replace.d.ts.map +1 -1
  260. package/dist/materializer/projections/replacement-plan.d.ts +8 -11
  261. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  262. package/dist/materializer/shared/batching.d.ts +5 -0
  263. package/dist/materializer/shared/batching.d.ts.map +1 -1
  264. package/dist/materializer/telemetry/plan.d.ts +2 -8
  265. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  266. package/dist/models/audio/catalog.d.ts +20 -0
  267. package/dist/models/audio/catalog.d.ts.map +1 -0
  268. package/dist/models/audio/errors.d.ts +8 -0
  269. package/dist/models/audio/errors.d.ts.map +1 -0
  270. package/dist/models/audio/file.d.ts +9 -0
  271. package/dist/models/audio/file.d.ts.map +1 -0
  272. package/dist/models/audio/runtime.d.ts +8 -0
  273. package/dist/models/audio/runtime.d.ts.map +1 -0
  274. package/dist/models/audio/types.d.ts +60 -0
  275. package/dist/models/audio/types.d.ts.map +1 -0
  276. package/dist/models/catalog.d.ts +24 -2
  277. package/dist/models/catalog.d.ts.map +1 -1
  278. package/dist/models/definitions.d.ts +1 -1
  279. package/dist/models/definitions.d.ts.map +1 -1
  280. package/dist/models/events.d.ts +3 -0
  281. package/dist/models/events.d.ts.map +1 -1
  282. package/dist/models/execution/binding.d.ts +6 -0
  283. package/dist/models/execution/binding.d.ts.map +1 -1
  284. package/dist/models/execution/index.js +27 -24
  285. package/dist/models/execution/index.js.map +1 -1
  286. package/dist/models/execution/model-call-admission.d.ts +6 -1
  287. package/dist/models/execution/model-call-admission.d.ts.map +1 -1
  288. package/dist/models/execution/model-call-limits.d.ts.map +1 -1
  289. package/dist/models/execution/model-call-recorder.d.ts +4 -0
  290. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  291. package/dist/models/execution/reranking.d.ts +4 -0
  292. package/dist/models/execution/reranking.d.ts.map +1 -0
  293. package/dist/models/execution/usage.d.ts.map +1 -1
  294. package/dist/models/execution.d.ts +2 -1
  295. package/dist/models/execution.d.ts.map +1 -1
  296. package/dist/models/generation-types.d.ts +2 -0
  297. package/dist/models/generation-types.d.ts.map +1 -1
  298. package/dist/models/index.d.ts +7 -1
  299. package/dist/models/index.d.ts.map +1 -1
  300. package/dist/models/index.js +6 -2
  301. package/dist/models/index.js.map +1 -1
  302. package/dist/models/language-model.d.ts +6 -0
  303. package/dist/models/language-model.d.ts.map +1 -1
  304. package/dist/models/pricing.d.ts +2 -2
  305. package/dist/models/pricing.d.ts.map +1 -1
  306. package/dist/models/reranking-model.d.ts +49 -0
  307. package/dist/models/reranking-model.d.ts.map +1 -0
  308. package/dist/objects/context/index.d.ts +1 -1
  309. package/dist/objects/context/index.d.ts.map +1 -1
  310. package/dist/objects/context/types.d.ts +6 -0
  311. package/dist/objects/context/types.d.ts.map +1 -1
  312. package/dist/objects/execution.d.ts +2 -1
  313. package/dist/objects/execution.d.ts.map +1 -1
  314. package/dist/objects/index.js +31 -27
  315. package/dist/objects/index.js.map +1 -1
  316. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  317. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  318. package/dist/objects/object/upsert.d.ts.map +1 -1
  319. package/dist/objects/property-clearance.d.ts +41 -0
  320. package/dist/objects/property-clearance.d.ts.map +1 -0
  321. package/dist/objects/query/executor.d.ts +5 -1
  322. package/dist/objects/query/executor.d.ts.map +1 -1
  323. package/dist/objects/query/index.d.ts +1 -1
  324. package/dist/objects/query/index.d.ts.map +1 -1
  325. package/dist/objects/query/index.js +27 -24
  326. package/dist/objects/query/index.js.map +1 -1
  327. package/dist/objects/query/ir.d.ts +8 -1
  328. package/dist/objects/query/ir.d.ts.map +1 -1
  329. package/dist/objects/query/normalize.d.ts.map +1 -1
  330. package/dist/objects/query/planner.d.ts +1 -1
  331. package/dist/objects/query/planner.d.ts.map +1 -1
  332. package/dist/objects/query/primary-id.d.ts +7 -0
  333. package/dist/objects/query/primary-id.d.ts.map +1 -0
  334. package/dist/objects/query/reranking-executor.d.ts +13 -0
  335. package/dist/objects/query/reranking-executor.d.ts.map +1 -0
  336. package/dist/objects/query/reranking-limits.d.ts +3 -0
  337. package/dist/objects/query/reranking-limits.d.ts.map +1 -0
  338. package/dist/objects/query/reranking-query.d.ts +4 -0
  339. package/dist/objects/query/reranking-query.d.ts.map +1 -0
  340. package/dist/objects/query/validate.d.ts +10 -1
  341. package/dist/objects/query/validate.d.ts.map +1 -1
  342. package/dist/objects/sdk/file-handle.d.ts +6 -0
  343. package/dist/objects/sdk/file-handle.d.ts.map +1 -0
  344. package/dist/objects/sdk/object-handle.d.ts +2 -2
  345. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  346. package/dist/objects/sdk/object-set.d.ts +2 -0
  347. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  348. package/dist/objects/sdk/query-builder.d.ts +8 -0
  349. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  350. package/dist/objects/sdk/query-executor.d.ts +2 -2
  351. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  352. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  353. package/dist/objects/vectors/indexing-dispatch.d.ts +21 -0
  354. package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
  355. package/dist/objects/vectors/query.d.ts.map +1 -1
  356. package/dist/ontology/builders.d.ts +12 -1
  357. package/dist/ontology/builders.d.ts.map +1 -1
  358. package/dist/ontology/docs-markdown.d.ts +35 -0
  359. package/dist/ontology/docs-markdown.d.ts.map +1 -0
  360. package/dist/ontology/docs.d.ts +50 -0
  361. package/dist/ontology/docs.d.ts.map +1 -0
  362. package/dist/ontology/index.d.ts +1 -1
  363. package/dist/ontology/index.d.ts.map +1 -1
  364. package/dist/ontology/index.js +7 -4
  365. package/dist/ontology/index.js.map +1 -1
  366. package/dist/ontology/inference/index.d.ts +19 -0
  367. package/dist/ontology/inference/index.d.ts.map +1 -1
  368. package/dist/ontology/internal.d.ts +3 -1
  369. package/dist/ontology/internal.d.ts.map +1 -1
  370. package/dist/ontology/internal.js +276 -3
  371. package/dist/ontology/internal.js.map +4 -3
  372. package/dist/ontology/query-capabilities.d.ts +1 -0
  373. package/dist/ontology/query-capabilities.d.ts.map +1 -1
  374. package/dist/ontology/tokens.d.ts +8 -1
  375. package/dist/ontology/tokens.d.ts.map +1 -1
  376. package/dist/ontology/types.d.ts +25 -0
  377. package/dist/ontology/types.d.ts.map +1 -1
  378. package/dist/ontology/validation/index.d.ts +1 -1
  379. package/dist/ontology/validation/index.d.ts.map +1 -1
  380. package/dist/ontology/validation/query.d.ts.map +1 -1
  381. package/dist/ontology/validation/schema.d.ts +7 -0
  382. package/dist/ontology/validation/schema.d.ts.map +1 -1
  383. package/dist/pipelines/index.js +29 -26
  384. package/dist/pipelines/index.js.map +1 -1
  385. package/dist/projections/internal.js +27 -24
  386. package/dist/projections/internal.js.map +1 -1
  387. package/dist/query.d.ts +4 -2
  388. package/dist/query.d.ts.map +1 -1
  389. package/dist/query.js +2 -2
  390. package/dist/queues/in-memory.d.ts +3 -0
  391. package/dist/queues/in-memory.d.ts.map +1 -1
  392. package/dist/queues/index.js +1 -1
  393. package/dist/queues/types.d.ts +4 -0
  394. package/dist/queues/types.d.ts.map +1 -1
  395. package/dist/runtime/create.d.ts +11 -2
  396. package/dist/runtime/create.d.ts.map +1 -1
  397. package/dist/runtime/definitions.d.ts +3 -1
  398. package/dist/runtime/definitions.d.ts.map +1 -1
  399. package/dist/runtime/host.d.ts +14 -2
  400. package/dist/runtime/host.d.ts.map +1 -1
  401. package/dist/runtime/index.d.ts +1 -1
  402. package/dist/runtime/index.d.ts.map +1 -1
  403. package/dist/runtime/internal.d.ts +1 -0
  404. package/dist/runtime/internal.d.ts.map +1 -1
  405. package/dist/runtime/internal.js +32 -27
  406. package/dist/runtime/internal.js.map +1 -1
  407. package/dist/runtime/locale.d.ts +9 -0
  408. package/dist/runtime/locale.d.ts.map +1 -0
  409. package/dist/runtime/public-origin.d.ts +10 -0
  410. package/dist/runtime/public-origin.d.ts.map +1 -0
  411. package/dist/runtime/resolve-definitions.d.ts +4 -2
  412. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  413. package/dist/runtime/sixb.d.ts +1 -0
  414. package/dist/runtime/sixb.d.ts.map +1 -1
  415. package/dist/runtime/types.d.ts +42 -5
  416. package/dist/runtime/types.d.ts.map +1 -1
  417. package/dist/sandboxes/index.js +7 -6
  418. package/dist/sandboxes/index.js.map +1 -1
  419. package/dist/scheduler/index.js +1 -1
  420. package/dist/scheduler/runtime.d.ts +3 -0
  421. package/dist/scheduler/runtime.d.ts.map +1 -1
  422. package/dist/security/builders.d.ts +11 -2
  423. package/dist/security/builders.d.ts.map +1 -1
  424. package/dist/security/index.d.ts +4 -4
  425. package/dist/security/index.d.ts.map +1 -1
  426. package/dist/security/markings.d.ts +19 -0
  427. package/dist/security/markings.d.ts.map +1 -0
  428. package/dist/security/redactions.d.ts +4 -0
  429. package/dist/security/redactions.d.ts.map +1 -0
  430. package/dist/security/registry.d.ts +7 -1
  431. package/dist/security/registry.d.ts.map +1 -1
  432. package/dist/security/types.d.ts +25 -0
  433. package/dist/security/types.d.ts.map +1 -1
  434. package/dist/security/validation.d.ts +4 -1
  435. package/dist/security/validation.d.ts.map +1 -1
  436. package/dist/shares/internal.js +24 -21
  437. package/dist/shares/internal.js.map +2 -2
  438. package/dist/storage/agents/provider.d.ts.map +1 -1
  439. package/dist/storage/agents/provider.js +5 -4
  440. package/dist/storage/agents/provider.js.map +1 -1
  441. package/dist/storage/agents/types.d.ts +15 -9
  442. package/dist/storage/agents/types.d.ts.map +1 -1
  443. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  444. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  445. package/dist/storage/ai-cost/provider.js +3 -3
  446. package/dist/storage/ai-cost/types.d.ts +1 -1
  447. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  448. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  449. package/dist/storage/ai-limits/enforcement.js +2 -2
  450. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
  451. package/dist/storage/ai-limits/provider.d.ts +7 -2
  452. package/dist/storage/ai-limits/provider.d.ts.map +1 -1
  453. package/dist/storage/ai-limits/provider.js +4 -2
  454. package/dist/storage/ai-limits/provider.js.map +1 -1
  455. package/dist/storage/ai-limits/types.d.ts +3 -0
  456. package/dist/storage/ai-limits/types.d.ts.map +1 -1
  457. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  458. package/dist/storage/ai-usage/types.d.ts +8 -4
  459. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  460. package/dist/storage/ai-usage/usage.d.ts.map +1 -1
  461. package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
  462. package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
  463. package/dist/storage/file-download-grants/index.d.ts +3 -0
  464. package/dist/storage/file-download-grants/index.d.ts.map +1 -0
  465. package/dist/storage/file-download-grants/record.d.ts +11 -0
  466. package/dist/storage/file-download-grants/record.d.ts.map +1 -0
  467. package/dist/storage/file-download-grants/types.d.ts +44 -0
  468. package/dist/storage/file-download-grants/types.d.ts.map +1 -0
  469. package/dist/storage/file-upload-sessions/provider.js +10 -7
  470. package/dist/storage/file-upload-sessions/provider.js.map +1 -1
  471. package/dist/storage/in-memory/index.d.ts +4 -0
  472. package/dist/storage/in-memory/index.d.ts.map +1 -1
  473. package/dist/storage/index.d.ts +6 -3
  474. package/dist/storage/index.d.ts.map +1 -1
  475. package/dist/storage/index.js +35 -32
  476. package/dist/storage/index.js.map +1 -1
  477. package/dist/storage/internal.d.ts +1 -0
  478. package/dist/storage/internal.d.ts.map +1 -1
  479. package/dist/storage/internal.js +9 -4
  480. package/dist/storage/internal.js.map +1 -1
  481. package/dist/storage/migrations/index.d.ts +1 -1
  482. package/dist/storage/migrations/index.d.ts.map +1 -1
  483. package/dist/storage/migrations/migrate-storage.d.ts +3 -3
  484. package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
  485. package/dist/storage/migrations/types.d.ts +7 -0
  486. package/dist/storage/migrations/types.d.ts.map +1 -1
  487. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  488. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  489. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  490. package/dist/storage/objects/query-preparation.d.ts +39 -0
  491. package/dist/storage/objects/query-preparation.d.ts.map +1 -0
  492. package/dist/storage/objects/types.d.ts +9 -0
  493. package/dist/storage/objects/types.d.ts.map +1 -1
  494. package/dist/storage/ontology/commits.d.ts +1 -6
  495. package/dist/storage/ontology/commits.d.ts.map +1 -1
  496. package/dist/storage/ontology/in-memory/index.d.ts +4 -2
  497. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  498. package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
  499. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  500. package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
  501. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  502. package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
  503. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  504. package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
  505. package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
  506. package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
  507. package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
  508. package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
  509. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  510. package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
  511. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
  512. package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
  513. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  514. package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
  515. package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
  516. package/dist/storage/ontology/index.d.ts +6 -3
  517. package/dist/storage/ontology/index.d.ts.map +1 -1
  518. package/dist/storage/ontology/materializations.d.ts +40 -59
  519. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  520. package/dist/storage/ontology/outbox.d.ts +4 -6
  521. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  522. package/dist/storage/ontology/provider-work.d.ts +114 -3
  523. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  524. package/dist/storage/ontology/provider.d.ts +14 -39
  525. package/dist/storage/ontology/provider.d.ts.map +1 -1
  526. package/dist/storage/ontology/provider.js +26 -12
  527. package/dist/storage/ontology/provider.js.map +1 -1
  528. package/dist/storage/ontology/replacement-plans.d.ts +103 -0
  529. package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
  530. package/dist/storage/ontology/sources.d.ts +0 -8
  531. package/dist/storage/ontology/sources.d.ts.map +1 -1
  532. package/dist/storage/operation-scope.d.ts.map +1 -1
  533. package/dist/storage/operation-scope.js +1 -1
  534. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  535. package/dist/storage/projection-runs/types.d.ts +2 -0
  536. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  537. package/dist/storage/types.d.ts +2 -0
  538. package/dist/storage/types.d.ts.map +1 -1
  539. package/dist/storage/workflow-runs/provider.js +10 -7
  540. package/dist/storage/workflow-runs/provider.js.map +1 -1
  541. package/dist/syncs/index.js +30 -27
  542. package/dist/syncs/index.js.map +1 -1
  543. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  544. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
  545. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  546. package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
  547. package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
  548. package/dist/testing/index.d.ts +1 -0
  549. package/dist/testing/index.d.ts.map +1 -1
  550. package/dist/testing/index.js +2556 -1495
  551. package/dist/testing/index.js.map +14 -13
  552. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  553. package/dist/testing/materializer-storage-contract.d.ts +14 -0
  554. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  555. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  556. package/dist/testing/ontology-contract-fixture.d.ts +5 -1
  557. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  558. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  559. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  560. package/dist/testing/queues-contract.d.ts.map +1 -1
  561. package/dist/webhooks/internal.js +25 -22
  562. package/dist/webhooks/internal.js.map +2 -2
  563. package/dist/workers/index.js +15 -17
  564. package/dist/workers/index.js.map +3 -3
  565. package/dist/workers/queue-worker.d.ts +3 -2
  566. package/dist/workers/queue-worker.d.ts.map +1 -1
  567. package/dist/workflows/builders.d.ts.map +1 -1
  568. package/dist/workflows/index.js +51 -47
  569. package/dist/workflows/index.js.map +1 -1
  570. package/dist/workflows/request.d.ts.map +1 -1
  571. package/dist/workflows/types.d.ts +6 -3
  572. package/dist/workflows/types.d.ts.map +1 -1
  573. package/dist/workflows/validation.d.ts +2 -1
  574. package/dist/workflows/validation.d.ts.map +1 -1
  575. package/package.json +7 -1
  576. package/src/actions/read-facade.ts +2 -1
  577. package/src/actions/types/context.ts +5 -2
  578. package/src/actions/validation.ts +4 -1
  579. package/src/agents/adapters.ts +15 -0
  580. package/src/agents/authority.ts +15 -0
  581. package/src/agents/context/entries.ts +48 -4
  582. package/src/agents/context/index.ts +1 -0
  583. package/src/agents/context-compaction.ts +6 -0
  584. package/src/agents/errors.ts +3 -0
  585. package/src/agents/index.ts +13 -1
  586. package/src/agents/message.ts +9 -0
  587. package/src/agents/request.ts +178 -22
  588. package/src/agents/skills.ts +63 -0
  589. package/src/agents/types.ts +35 -5
  590. package/src/auth/runtime.ts +14 -0
  591. package/src/auth/types.ts +6 -0
  592. package/src/authorization/resolve.ts +6 -1
  593. package/src/authorization/types.ts +7 -0
  594. package/src/blob-storage/download-urls.ts +138 -0
  595. package/src/blob-storage/execution.ts +44 -1
  596. package/src/blob-storage/file-content.ts +106 -0
  597. package/src/blob-storage/index.ts +1 -0
  598. package/src/blob-storage/internal.ts +8 -0
  599. package/src/blob-storage/media-type.ts +29 -0
  600. package/src/blob-storage/types.ts +13 -1
  601. package/src/blob-storage/validation.ts +13 -0
  602. package/src/bootstrap/agent-context.ts +356 -0
  603. package/src/bootstrap/discovery.ts +100 -33
  604. package/src/bootstrap/index.ts +1 -1
  605. package/src/bootstrap/ontology-type-manifest.ts +3 -38
  606. package/src/datasets/builders.ts +17 -1
  607. package/src/datasets/execution.ts +110 -2
  608. package/src/datasets/index.ts +7 -1
  609. package/src/datasets/types.ts +2 -0
  610. package/src/datasets/write.ts +21 -2
  611. package/src/edits/properties.ts +3 -0
  612. package/src/events/execution.ts +15 -16
  613. package/src/events/types/objects.ts +5 -0
  614. package/src/execution/agent.ts +27 -0
  615. package/src/execution/authorization.ts +1 -0
  616. package/src/execution/authorized-object-reader.ts +104 -35
  617. package/src/execution/scopes.ts +2 -6
  618. package/src/http/api-routes.ts +4 -3
  619. package/src/index.ts +52 -2
  620. package/src/lake-storage/in-memory.ts +38 -9
  621. package/src/lake-storage/index.ts +2 -0
  622. package/src/lake-storage/types.ts +30 -0
  623. package/src/maintenance/ontology-maintenance.ts +50 -23
  624. package/src/maintenance/types.ts +1 -4
  625. package/src/materialization/event-envelopes.ts +168 -0
  626. package/src/materialization/events.ts +40 -4
  627. package/src/materialization/index.ts +9 -1
  628. package/src/materializer/README.md +55 -10
  629. package/src/materializer/edits/commit.ts +3 -19
  630. package/src/materializer/edits/plan.ts +20 -71
  631. package/src/materializer/effective/build-events.ts +42 -136
  632. package/src/materializer/effective/vector-indexing.ts +2 -3
  633. package/src/materializer/effective/vectors.ts +2 -3
  634. package/src/materializer/execution/scope.ts +1 -38
  635. package/src/materializer/execution/work-executor.ts +21 -115
  636. package/src/materializer/execution/work-records.ts +0 -15
  637. package/src/materializer/projections/replace.ts +106 -63
  638. package/src/materializer/projections/replacement-plan.ts +73 -218
  639. package/src/materializer/shared/batching.ts +7 -0
  640. package/src/materializer/telemetry/append.ts +2 -14
  641. package/src/materializer/telemetry/plan.ts +6 -43
  642. package/src/models/audio/catalog.ts +90 -0
  643. package/src/models/audio/errors.ts +19 -0
  644. package/src/models/audio/file.ts +78 -0
  645. package/src/models/audio/runtime.ts +182 -0
  646. package/src/models/audio/types.ts +69 -0
  647. package/src/models/catalog.ts +78 -7
  648. package/src/models/definitions.ts +8 -1
  649. package/src/models/events.ts +3 -0
  650. package/src/models/execution/README.md +24 -4
  651. package/src/models/execution/binding.ts +6 -0
  652. package/src/models/execution/model-call-admission.ts +6 -1
  653. package/src/models/execution/model-call-limits.ts +21 -11
  654. package/src/models/execution/model-call-recorder.ts +11 -0
  655. package/src/models/execution/model-call-recovery.ts +1 -0
  656. package/src/models/execution/reranking.ts +137 -0
  657. package/src/models/execution/session.ts +2 -2
  658. package/src/models/execution/usage.ts +1 -0
  659. package/src/models/execution.ts +11 -3
  660. package/src/models/generation-types.ts +2 -0
  661. package/src/models/index.ts +32 -0
  662. package/src/models/language-model.ts +6 -0
  663. package/src/models/pricing.ts +2 -1
  664. package/src/models/reranking-model.ts +114 -0
  665. package/src/objects/context/index.ts +1 -0
  666. package/src/objects/context/types.ts +7 -0
  667. package/src/objects/execution.ts +4 -1
  668. package/src/objects/materializer-adapter.ts +3 -0
  669. package/src/objects/object/upsert-batch.ts +4 -1
  670. package/src/objects/object/upsert.ts +3 -1
  671. package/src/objects/property-clearance.ts +209 -0
  672. package/src/objects/query/executor.ts +85 -38
  673. package/src/objects/query/explain.ts +8 -0
  674. package/src/objects/query/index.ts +1 -0
  675. package/src/objects/query/ir.ts +10 -0
  676. package/src/objects/query/normalize.ts +2 -0
  677. package/src/objects/query/planner.ts +12 -1
  678. package/src/objects/query/primary-id.ts +56 -0
  679. package/src/objects/query/reranking-executor.ts +91 -0
  680. package/src/objects/query/reranking-limits.ts +3 -0
  681. package/src/objects/query/reranking-query.ts +8 -0
  682. package/src/objects/query/validate.ts +166 -15
  683. package/src/objects/sdk/file-handle.ts +77 -0
  684. package/src/objects/sdk/object-handle.ts +8 -4
  685. package/src/objects/sdk/object-set.ts +5 -2
  686. package/src/objects/sdk/query-builder.ts +15 -2
  687. package/src/objects/sdk/query-executor.ts +2 -2
  688. package/src/objects/sdk/runtime-query-executor.ts +7 -4
  689. package/src/objects/vectors/README.md +6 -2
  690. package/src/objects/vectors/indexing-dispatch.ts +83 -0
  691. package/src/objects/vectors/query.ts +3 -0
  692. package/src/ontology/builders.ts +19 -2
  693. package/src/ontology/docs-markdown.ts +394 -0
  694. package/src/ontology/docs.ts +196 -0
  695. package/src/ontology/index.ts +2 -0
  696. package/src/ontology/inference/index.ts +25 -0
  697. package/src/ontology/internal.ts +7 -0
  698. package/src/ontology/query-capabilities.ts +1 -1
  699. package/src/ontology/tokens.ts +13 -2
  700. package/src/ontology/types.ts +26 -0
  701. package/src/ontology/validation/index.ts +1 -0
  702. package/src/ontology/validation/query.ts +57 -0
  703. package/src/ontology/validation/schema.ts +26 -1
  704. package/src/query.ts +4 -0
  705. package/src/queues/in-memory.ts +54 -19
  706. package/src/queues/types.ts +4 -0
  707. package/src/runtime/create.ts +34 -4
  708. package/src/runtime/definitions.ts +3 -1
  709. package/src/runtime/host.ts +73 -2
  710. package/src/runtime/index.ts +4 -0
  711. package/src/runtime/internal.ts +1 -0
  712. package/src/runtime/locale.ts +26 -0
  713. package/src/runtime/public-origin.ts +33 -0
  714. package/src/runtime/resolve-definitions.ts +28 -1
  715. package/src/runtime/sixb.ts +14 -3
  716. package/src/runtime/types.ts +51 -5
  717. package/src/scheduler/runtime.ts +11 -2
  718. package/src/security/builders.ts +49 -5
  719. package/src/security/index.ts +6 -1
  720. package/src/security/markings.ts +313 -0
  721. package/src/security/redactions.ts +6 -0
  722. package/src/security/registry.ts +21 -1
  723. package/src/security/types.ts +26 -0
  724. package/src/security/validation.ts +59 -2
  725. package/src/storage/agents/provider.ts +11 -0
  726. package/src/storage/agents/types.ts +15 -7
  727. package/src/storage/ai-cost/analytics.ts +2 -0
  728. package/src/storage/ai-cost/codec.ts +2 -1
  729. package/src/storage/ai-cost/types.ts +1 -0
  730. package/src/storage/ai-cost/validation.ts +21 -8
  731. package/src/storage/ai-limits/in-memory.ts +10 -2
  732. package/src/storage/ai-limits/provider.ts +29 -2
  733. package/src/storage/ai-limits/types.ts +3 -0
  734. package/src/storage/ai-usage/record.ts +9 -0
  735. package/src/storage/ai-usage/types.ts +8 -4
  736. package/src/storage/ai-usage/usage.ts +2 -0
  737. package/src/storage/file-download-grants/in-memory.ts +73 -0
  738. package/src/storage/file-download-grants/index.ts +8 -0
  739. package/src/storage/file-download-grants/record.ts +47 -0
  740. package/src/storage/file-download-grants/types.ts +48 -0
  741. package/src/storage/in-memory/index.ts +13 -2
  742. package/src/storage/index.ts +32 -13
  743. package/src/storage/internal.ts +1 -0
  744. package/src/storage/migrations/index.ts +1 -0
  745. package/src/storage/migrations/migrate-storage.ts +36 -12
  746. package/src/storage/migrations/types.ts +8 -0
  747. package/src/storage/objects/in-memory/query.ts +2 -0
  748. package/src/storage/objects/in-memory/selected-reader.ts +1 -0
  749. package/src/storage/objects/in-memory/storage.ts +1 -0
  750. package/src/storage/objects/query-preparation.ts +77 -0
  751. package/src/storage/objects/types.ts +9 -0
  752. package/src/storage/ontology/commits.ts +1 -6
  753. package/src/storage/ontology/in-memory/index.ts +28 -9
  754. package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
  755. package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
  756. package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
  757. package/src/storage/ontology/in-memory/materializations.ts +172 -653
  758. package/src/storage/ontology/in-memory/outbox.ts +37 -29
  759. package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
  760. package/src/storage/ontology/in-memory/shared-state.ts +24 -2
  761. package/src/storage/ontology/in-memory/source-roots.ts +7 -2
  762. package/src/storage/ontology/in-memory/sources.ts +7 -33
  763. package/src/storage/ontology/in-memory/state-reader.ts +245 -0
  764. package/src/storage/ontology/index.ts +19 -13
  765. package/src/storage/ontology/materializations.ts +45 -74
  766. package/src/storage/ontology/outbox.ts +4 -7
  767. package/src/storage/ontology/provider-header-validation.ts +0 -57
  768. package/src/storage/ontology/provider-work.ts +381 -90
  769. package/src/storage/ontology/provider.ts +74 -171
  770. package/src/storage/ontology/replacement-plans.ts +117 -0
  771. package/src/storage/ontology/sources.ts +0 -12
  772. package/src/storage/operation-scope.ts +33 -1
  773. package/src/storage/projection-runs/in-memory.ts +7 -1
  774. package/src/storage/projection-runs/types.ts +2 -0
  775. package/src/storage/types.ts +2 -0
  776. package/src/testing/ai-cost-storage-contract.ts +1 -0
  777. package/src/testing/ai-limit-storage-contract.ts +62 -0
  778. package/src/testing/ai-usage-storage-contract.ts +31 -0
  779. package/src/testing/file-download-grant-storage-contract.ts +139 -0
  780. package/src/testing/index.ts +4 -0
  781. package/src/testing/lake-storage-contract.ts +87 -1
  782. package/src/testing/materializer-storage-contract.ts +1008 -1
  783. package/src/testing/object-read-scope-contract.ts +1 -0
  784. package/src/testing/ontology-contract-fixture.ts +11 -87
  785. package/src/testing/ontology-storage-contract.ts +70 -39
  786. package/src/testing/projection-run-storage-contract.ts +14 -0
  787. package/src/testing/queues-contract.ts +59 -0
  788. package/src/workers/queue-worker.ts +19 -16
  789. package/src/workflows/builders.ts +24 -1
  790. package/src/workflows/request.ts +3 -0
  791. package/src/workflows/types.ts +6 -3
  792. package/src/workflows/validation.ts +32 -4
  793. package/dist/chunk-3q7z9hd4.js.map +0 -46
  794. package/dist/chunk-667x4drs.js.map +0 -12
  795. package/dist/chunk-69266efg.js.map +0 -12
  796. package/dist/chunk-6z1q7j19.js.map +0 -62
  797. package/dist/chunk-7ytf06d3.js +0 -113
  798. package/dist/chunk-7ytf06d3.js.map +0 -10
  799. package/dist/chunk-8x74221e.js.map +0 -20
  800. package/dist/chunk-91kcnbf0.js.map +0 -10
  801. package/dist/chunk-98cw09sw.js.map +0 -10
  802. package/dist/chunk-9vx5e9g1.js.map +0 -11
  803. package/dist/chunk-a0073121.js.map +0 -12
  804. package/dist/chunk-a7ne02hk.js.map +0 -15
  805. package/dist/chunk-cd234ba4.js.map +0 -14
  806. package/dist/chunk-chdg6eqq.js.map +0 -10
  807. package/dist/chunk-dmn70ztd.js.map +0 -11
  808. package/dist/chunk-f72rbvsb.js.map +0 -19
  809. package/dist/chunk-g4rbm4a6.js.map +0 -15
  810. package/dist/chunk-h044jb97.js.map +0 -15
  811. package/dist/chunk-h3v76ams.js.map +0 -11
  812. package/dist/chunk-h4138ww2.js.map +0 -50
  813. package/dist/chunk-hgqpcmyr.js.map +0 -12
  814. package/dist/chunk-jgwb25gc.js.map +0 -12
  815. package/dist/chunk-k4kkp58d.js.map +0 -11
  816. package/dist/chunk-kttr5ftm.js.map +0 -12
  817. package/dist/chunk-kvysp909.js.map +0 -17
  818. package/dist/chunk-mdnw7nj8.js.map +0 -15
  819. package/dist/chunk-s3csryxe.js.map +0 -11
  820. package/dist/chunk-tnvafr7g.js.map +0 -19
  821. package/dist/chunk-vjqt7q3a.js.map +0 -36
  822. package/dist/chunk-xnx96gfy.js.map +0 -15
  823. package/dist/chunk-z5rnrmz1.js.map +0 -11
  824. package/dist/chunk-zvmr2hqk.js.map +0 -12
  825. package/dist/materializer/execution/plan-stream.d.ts +0 -8
  826. package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
  827. package/src/materializer/execution/plan-stream.ts +0 -121
  828. /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
  829. /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
  830. /package/dist/{chunk-gmdvns8f.js.map → chunk-48e3cn2d.js.map} +0 -0
  831. /package/dist/{chunk-cq44v1a6.js.map → chunk-7hpdd6r9.js.map} +0 -0
  832. /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
  833. /package/dist/{chunk-7g2gjvah.js.map → chunk-ex496vct.js.map} +0 -0
  834. /package/dist/{chunk-nvymebc1.js.map → chunk-f1zxad2t.js.map} +0 -0
  835. /package/dist/{chunk-b9y8hcm2.js.map → chunk-mfs23znk.js.map} +0 -0
  836. /package/dist/{chunk-h866d223.js.map → chunk-qkvz64nd.js.map} +0 -0
  837. /package/dist/{chunk-tkdbge6v.js.map → chunk-rt9p8m9t.js.map} +0 -0
  838. /package/dist/{chunk-sbcm1b92.js.map → chunk-v6xpd60t.js.map} +0 -0
  839. /package/dist/{chunk-nj0020ay.js.map → chunk-vgk3hknm.js.map} +0 -0
  840. /package/dist/{chunk-qnd7ehe5.js.map → chunk-vx2yp45y.js.map} +0 -0
  841. /package/dist/{chunk-nkbev3tr.js.map → chunk-yv9czyfr.js.map} +0 -0
  842. /package/dist/{chunk-cxj8y8t0.js.map → chunk-za5yd58j.js.map} +0 -0
  843. /package/dist/{chunk-zb47r1c8.js.map → chunk-zb77kjth.js.map} +0 -0
  844. /package/dist/{chunk-dp7yk20b.js.map → chunk-zxawp1n2.js.map} +0 -0
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/queues/errors.ts", "../src/queues/in-memory.ts", "../src/queues/indexed-heap.ts"],
4
- "sourcesContent": [
5
- "/**\n * Error for queue invariants and invalid queue operations.\n */\nexport class QueueError extends Error {\n readonly name = \"QueueError\"\n}\n",
6
- "import { randomUUID } from \"node:crypto\"\nimport type { SixbErrorCode } from \"../errors/types\"\nimport { QueueError } from \"./errors\"\nimport { IndexedHeap } from \"./indexed-heap\"\nimport type {\n ActionQueueJobFailureCode,\n ActionRunRequestedQueueJob,\n AgentQueueJob,\n AgentQueueJobFailureCode,\n ClaimedQueueJob,\n NewQueueJob,\n PipelineQueueJobFailureCode,\n PipelineRunRequestedQueueJob,\n ProjectionQueueJobFailureCode,\n ProjectionRunRequestedQueueJob,\n Queue,\n QueueJob,\n QueueJobFailure,\n Queues,\n SubagentQueueJob,\n SyncQueueJobFailureCode,\n SyncRunRequestedQueueJob,\n VectorIndexingQueueJob,\n WorkflowQueueJob,\n WorkflowQueueJobFailureCode,\n} from \"./types\"\n\ntype QueueRecordState = \"queued\" | \"completed\" | \"failed\"\n\ninterface QueueRecord<TQueueJob extends QueueJob = QueueJob> {\n readonly sequence: number\n readonly queueId: string\n job: TQueueJob\n availableAtMs: number\n readonly createdAtMs: number\n leaseExpiryMs: number | null\n // A leased job stays \"queued\" until a worker completes or fails it.\n state: QueueRecordState\n failure: QueueJobFailure | null\n leaseId: string | null\n claimedAt: string | null\n leaseExpiresAt: string | null\n}\n\nfunction assertNonEmpty(value: string, fieldName: string): void {\n if (value.trim().length === 0) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must not be empty`)\n }\n}\n\nfunction parseTimestamp(value: string, fieldName: string): number {\n const timestamp = Date.parse(value)\n\n if (Number.isNaN(timestamp)) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must be a valid timestamp`)\n }\n\n return timestamp\n}\n\nfunction assertPositiveNumber(value: number, fieldName: string): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must be greater than 0`)\n }\n}\n\nfunction clearLease(record: QueueRecord): void {\n record.leaseId = null\n record.claimedAt = null\n record.leaseExpiresAt = null\n record.leaseExpiryMs = null\n}\n\n// Best-effort ordering is part of the contract; this keeps the in-memory provider deterministic.\nfunction compareQueueRecords(left: QueueRecord, right: QueueRecord): number {\n const availableDifference = left.availableAtMs - right.availableAtMs\n if (availableDifference !== 0) return availableDifference\n const createdDifference = left.createdAtMs - right.createdAtMs\n if (createdDifference !== 0) return createdDifference\n\n return left.sequence - right.sequence\n}\n\nfunction createQueueJob<TQueueJob extends QueueJob>(\n projectId: string,\n newJob: NewQueueJob<TQueueJob>\n): TQueueJob {\n const createdAt = new Date().toISOString()\n const availableAt = newJob.availableAt ?? createdAt\n parseTimestamp(availableAt, \"availableAt\")\n\n return {\n id: newJob.id ?? randomUUID(),\n projectId,\n createdAt,\n availableAt,\n attempt: 0,\n metadata: newJob.metadata ? structuredClone(newJob.metadata) : undefined,\n type: newJob.type,\n payload: structuredClone(newJob.payload),\n } as TQueueJob\n}\n\nfunction leaseExpiresAtMs(record: QueueRecord): number | null {\n return record.leaseExpiryMs\n}\n\nfunction eligibleAt(record: QueueRecord): number {\n return Math.max(record.availableAtMs, record.leaseExpiryMs ?? -Infinity)\n}\n\ninterface QueueLane {\n // Terminal records remain here for caller-id deduplication, never in the delivery indexes.\n readonly records: Map<string, QueueRecord>\n readonly ready: IndexedHeap<QueueRecord>\n readonly waiting: IndexedHeap<QueueRecord>\n}\n\nfunction toClaimedQueueJob<TQueueJob extends QueueJob>(\n record: QueueRecord<TQueueJob>\n): ClaimedQueueJob<TQueueJob> {\n if (!record.leaseId || !record.claimedAt || !record.leaseExpiresAt) {\n throw new QueueError(`[Sixb] Queue job '${record.job.id}' is not currently leased`)\n }\n\n return {\n leaseId: record.leaseId,\n claimedAt: record.claimedAt,\n leaseExpiresAt: record.leaseExpiresAt,\n job: structuredClone(record.job),\n }\n}\n\nclass InMemoryQueueStore {\n private readonly projects = new Map<string, Map<string, QueueLane>>()\n private nextSequence = 1\n\n add<TQueueJob extends QueueJob>(projectId: string, queueId: string, job: TQueueJob): void {\n const lane = this.lane(projectId, queueId)\n const record: QueueRecord = {\n sequence: this.nextSequence++,\n queueId,\n job,\n availableAtMs: parseTimestamp(job.availableAt, \"job.availableAt\"),\n createdAtMs: parseTimestamp(job.createdAt, \"job.createdAt\"),\n leaseExpiryMs: null,\n state: \"queued\",\n failure: null,\n leaseId: null,\n claimedAt: null,\n leaseExpiresAt: null,\n }\n lane.records.set(job.id, record)\n this.schedule(projectId, record, Date.now())\n }\n\n find<TQueueJob extends QueueJob>(\n projectId: string,\n queueId: string,\n jobId: string\n ): QueueRecord<TQueueJob> | null {\n return (this.projects.get(projectId)?.get(queueId)?.records.get(jobId) ??\n null) as QueueRecord<TQueueJob> | null\n }\n\n schedule(projectId: string, record: QueueRecord, now: number): void {\n const lane = this.lane(projectId, record.queueId)\n if (record.state !== \"queued\") {\n lane.ready.delete(record)\n lane.waiting.delete(record)\n } else if (eligibleAt(record) <= now) {\n lane.waiting.delete(record)\n lane.ready.set(record)\n } else {\n lane.ready.delete(record)\n lane.waiting.set(record)\n }\n }\n\n takeReady<TQueueJob extends QueueJob>(\n projectId: string,\n queueId: string,\n now: number,\n limit: number\n ): QueueRecord<TQueueJob>[] {\n const lane = this.projects.get(projectId)?.get(queueId)\n if (!lane) return []\n // Wake delayed jobs and expired leases, then order all ready jobs by the original contract.\n // A lease expiry controls eligibility, not the priority of a redelivered job.\n while (lane.waiting.peek() && eligibleAt(lane.waiting.peek()!) <= now) {\n lane.ready.set(lane.waiting.pop()!)\n }\n const selected: QueueRecord[] = []\n while (selected.length < limit) {\n const record = lane.ready.peek()\n if (!record || record.availableAtMs > now) break\n lane.ready.pop()\n // A backwards wall-clock adjustment can make a previously expired lease live again.\n if (eligibleAt(record) > now) lane.waiting.set(record)\n else selected.push(record)\n }\n return selected as QueueRecord<TQueueJob>[]\n }\n\n private lane(projectId: string, queueId: string): QueueLane {\n let queues = this.projects.get(projectId)\n if (!queues) {\n queues = new Map()\n this.projects.set(projectId, queues)\n }\n let lane = queues.get(queueId)\n if (!lane) {\n lane = {\n records: new Map(),\n ready: new IndexedHeap(compareQueueRecords),\n waiting: new IndexedHeap(\n (left, right) => eligibleAt(left) - eligibleAt(right) || left.sequence - right.sequence\n ),\n }\n queues.set(queueId, lane)\n }\n return lane\n }\n}\n\nclass InMemoryQueue<TQueueJob extends QueueJob, TFailureCode extends SixbErrorCode>\n implements Queue<TQueueJob, TFailureCode>\n{\n constructor(\n private readonly store: InMemoryQueueStore,\n private readonly queueId: string\n ) {\n assertNonEmpty(queueId, \"queueId\")\n }\n\n async enqueue(params: {\n projectId: string\n jobs: readonly NewQueueJob<TQueueJob>[]\n }): Promise<readonly TQueueJob[]> {\n assertNonEmpty(params.projectId, \"projectId\")\n\n if (params.jobs.length === 0) {\n return []\n }\n\n const createdJobs = params.jobs.map((job) => {\n if (job.id !== undefined) assertNonEmpty(job.id, \"job.id\")\n const existing = job.id\n ? this.store.find<TQueueJob>(params.projectId, this.queueId, job.id)\n : null\n if (existing) return existing.job\n\n const created = createQueueJob(params.projectId, job)\n this.store.add(params.projectId, this.queueId, created)\n return created\n })\n\n return createdJobs.map((job) => structuredClone(job))\n }\n\n async claim(params: {\n projectId: string\n workerId: string\n limit?: number\n leaseMs?: number\n }): Promise<readonly ClaimedQueueJob<TQueueJob>[]> {\n assertNonEmpty(params.projectId, \"projectId\")\n assertNonEmpty(params.workerId, \"workerId\")\n\n const limit = Math.trunc(params.limit ?? 1)\n if (!(limit > 0)) {\n return []\n }\n\n const leaseMs = params.leaseMs ?? 30_000\n assertPositiveNumber(leaseMs, \"leaseMs\")\n\n const now = Date.now()\n const claimedAt = new Date(now).toISOString()\n // Validate before removing candidates, and cache the same millisecond precision we return.\n const leaseExpiry = new Date(now + leaseMs)\n const leaseExpiresAt = leaseExpiry.toISOString()\n const claimable = this.store.takeReady<TQueueJob>(params.projectId, this.queueId, now, limit)\n\n return claimable.map((record) => {\n // Attempts count claims so redelivery after lease expiry or retry is visible to workers.\n record.job = {\n ...record.job,\n attempt: record.job.attempt + 1,\n }\n record.leaseId = randomUUID()\n record.claimedAt = claimedAt\n record.leaseExpiresAt = leaseExpiresAt\n record.leaseExpiryMs = leaseExpiry.getTime()\n this.store.schedule(params.projectId, record, now)\n\n return toClaimedQueueJob(record)\n })\n }\n\n async complete(params: { projectId: string; jobId: string; leaseId: string }): Promise<void> {\n const record = this.requireActiveLease(params)\n record.state = \"completed\"\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async retry(params: {\n projectId: string\n jobId: string\n leaseId: string\n availableAt?: string\n }): Promise<void> {\n const record = this.requireActiveLease(params)\n const availableAt = params.availableAt ?? new Date().toISOString()\n const availableAtMs = parseTimestamp(availableAt, \"availableAt\")\n\n record.availableAtMs = availableAtMs\n record.job = {\n ...record.job,\n availableAt,\n }\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async fail(params: {\n projectId: string\n jobId: string\n leaseId: string\n failure: QueueJobFailure<TFailureCode>\n }): Promise<void> {\n const record = this.requireActiveLease(params)\n record.state = \"failed\"\n record.failure = structuredClone(params.failure)\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async renewLease(params: {\n projectId: string\n jobId: string\n leaseId: string\n leaseMs: number\n }): Promise<ClaimedQueueJob<TQueueJob> | null> {\n assertPositiveNumber(params.leaseMs, \"leaseMs\")\n\n const record = this.store.find<TQueueJob>(params.projectId, this.queueId, params.jobId)\n if (!record || record.state !== \"queued\") {\n return null\n }\n\n const now = Date.now()\n const expiresAt = leaseExpiresAtMs(record)\n if (record.leaseId !== params.leaseId || expiresAt === null) {\n return null\n }\n\n if (expiresAt <= now) {\n return null\n }\n\n const leaseExpiry = new Date(now + params.leaseMs)\n record.leaseExpiresAt = leaseExpiry.toISOString()\n record.leaseExpiryMs = leaseExpiry.getTime()\n this.store.schedule(params.projectId, record, now)\n return toClaimedQueueJob(record)\n }\n\n private requireActiveLease(params: {\n projectId: string\n jobId: string\n leaseId: string\n }): QueueRecord<TQueueJob> {\n assertNonEmpty(params.projectId, \"projectId\")\n assertNonEmpty(params.jobId, \"jobId\")\n assertNonEmpty(params.leaseId, \"leaseId\")\n\n const record = this.store.find<TQueueJob>(params.projectId, this.queueId, params.jobId)\n\n if (!record) {\n throw new QueueError(`[Sixb] Unknown queue job '${params.jobId}'`)\n }\n\n if (record.state !== \"queued\") {\n throw new QueueError(`[Sixb] Queue job '${params.jobId}' is no longer active`)\n }\n\n if (record.leaseId !== params.leaseId || !record.leaseExpiresAt) {\n throw new QueueError(`[Sixb] Lease mismatch for queue job '${params.jobId}'`)\n }\n\n const expiresAt = leaseExpiresAtMs(record)\n if (expiresAt === null || expiresAt <= Date.now()) {\n throw new QueueError(`[Sixb] Lease for queue job '${params.jobId}' has expired`)\n }\n\n return record\n }\n}\n\nexport class InMemoryQueues implements Queues {\n readonly scope = \"process\" as const\n private readonly store = new InMemoryQueueStore()\n\n readonly vectorIndexing = new InMemoryQueue<\n VectorIndexingQueueJob,\n \"internal.unexpected\" | \"runtime.cancelled\"\n >(this.store, \"vector.indexing\")\n readonly syncRuns = new InMemoryQueue<SyncRunRequestedQueueJob, SyncQueueJobFailureCode>(\n this.store,\n \"sync.runs\"\n )\n readonly pipelines = new InMemoryQueue<PipelineRunRequestedQueueJob, PipelineQueueJobFailureCode>(\n this.store,\n \"pipeline.runs\"\n )\n readonly projections = new InMemoryQueue<\n ProjectionRunRequestedQueueJob,\n ProjectionQueueJobFailureCode\n >(this.store, \"projection.runs\")\n readonly workflows = new InMemoryQueue<WorkflowQueueJob, WorkflowQueueJobFailureCode>(\n this.store,\n \"workflow.runs\"\n )\n readonly actions = new InMemoryQueue<ActionRunRequestedQueueJob, ActionQueueJobFailureCode>(\n this.store,\n \"action.runs\"\n )\n readonly agents = new InMemoryQueue<AgentQueueJob, AgentQueueJobFailureCode>(\n this.store,\n \"agent.runs\"\n )\n readonly agentChildren = new InMemoryQueue<SubagentQueueJob, AgentQueueJobFailureCode>(\n this.store,\n \"agent.children\"\n )\n\n /** Nothing to reach: the store is a field of this object. */\n health(): Promise<void> {\n return Promise.resolve()\n }\n}\n",
7
- "/** Internal mutable priority index. Updating or removing an entry never leaves stale copies. */\nexport class IndexedHeap<T> {\n private readonly items: T[] = []\n private readonly positions = new Map<T, number>()\n\n constructor(private readonly compare: (left: T, right: T) => number) {}\n\n peek(): T | undefined {\n return this.items[0]\n }\n\n pop(): T | undefined {\n const first = this.peek()\n if (first !== undefined) this.delete(first)\n return first\n }\n\n set(item: T): void {\n const index = this.positions.get(item)\n if (index === undefined) {\n this.positions.set(item, this.items.length)\n this.items.push(item)\n this.up(this.items.length - 1)\n } else {\n this.down(this.up(index))\n }\n }\n\n delete(item: T): void {\n const index = this.positions.get(item)\n if (index === undefined) return\n const last = this.items.pop()!\n this.positions.delete(item)\n if (index === this.items.length) return\n this.items[index] = last\n this.positions.set(last, index)\n this.down(this.up(index))\n }\n\n private up(start: number): number {\n let index = start\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2)\n if (this.compare(this.items[parent]!, this.items[index]!) <= 0) break\n this.swap(parent, index)\n index = parent\n }\n return index\n }\n\n private down(start: number): void {\n let index = start\n while (index * 2 + 1 < this.items.length) {\n const left = index * 2 + 1\n const right = left + 1\n const child =\n right < this.items.length && this.compare(this.items[right]!, this.items[left]!) < 0\n ? right\n : left\n if (this.compare(this.items[index]!, this.items[child]!) <= 0) break\n this.swap(index, child)\n index = child\n }\n }\n\n private swap(left: number, right: number): void {\n const a = this.items[left]!\n const b = this.items[right]!\n this.items[left] = b\n this.items[right] = a\n this.positions.set(a, right)\n this.positions.set(b, left)\n }\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "50CDF8905DC39EBB64756E2164756E21",
11
- "names": []
12
- }
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/storage/ai-limits/errors.ts", "../src/storage/ai-limits/period.ts", "../src/storage/ai-limits/provider.ts"],
4
- "sourcesContent": [
5
- "export type AiLimitStorageErrorCode =\n | \"duplicate_policy\"\n | \"missing_policy\"\n | \"missing_execution\"\n | \"missing_reservation\"\n | \"missing_usage_record\"\n | \"usage_mismatch\"\n | \"unavailable_actuals\"\n | \"reservation_conflict\"\n | \"reconciliation_conflict\"\n | \"invalid_reservation_state\"\n\n/** Stable storage failure for AI limit policies and reservations. */\nexport class AiLimitStorageError extends Error {\n readonly name = \"AiLimitStorageError\"\n\n constructor(\n readonly code: AiLimitStorageErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
6
- "import type { AiLimitPeriod } from \"./types\"\n\n/** Return the UTC calendar month containing `at`, with an inclusive start and exclusive end. */\nexport function aiLimitCalendarMonth(at: Date): AiLimitPeriod {\n if (!(at instanceof Date) || !Number.isFinite(at.getTime())) {\n throw new TypeError(\"[Sixb] AI limit period date must be a valid Date.\")\n }\n const start = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth(), 1))\n const end = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth() + 1, 1))\n return { kind: \"calendarMonth\", start, end, resetAt: new Date(end) }\n}\n",
7
- "import type { AiMoney } from \"../ai-cost\"\nimport { AiLimitStorageError } from \"./errors\"\nimport { aiLimitCalendarMonth } from \"./period\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitQuantity,\n AiLimitReservationBucket,\n AiLimitSubject,\n AiModelCallReservation,\n AiModelCallReservationIdentity,\n CreateAiLimitPolicyInput,\n ReserveAiModelCallInput,\n UpdateAiLimitPolicyInput,\n} from \"./types\"\n\nconst SIGNED_INT64_MAX = 9_223_372_036_854_775_807n\n\n/** @internal Serialize compound limit operations, including within an existing transaction. */\nexport class AiLimitOperationLock {\n private tail: Promise<void> = Promise.resolve()\n\n /** Wait for already queued operations before the owning transaction commits or rolls back. */\n settle(): Promise<void> {\n return this.tail\n }\n\n async run<T>(operation: () => Promise<T> | T): Promise<T> {\n const previous = this.tail\n let release!: () => void\n this.tail = new Promise<void>((resolve) => {\n release = resolve\n })\n await previous\n try {\n return await operation()\n } finally {\n release()\n }\n }\n}\n\n/** @internal Canonical integer quantity used by storage providers. */\nexport interface NormalizedAiLimitAmount {\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly amount: bigint\n}\n\n/** @internal Minimal immutable accounting facts consumed by limit providers. */\nexport interface AiLimitAccountingEntry {\n readonly projectId: string\n readonly usageRecordId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n readonly occurredAt: Date\n readonly totalTokens?: number\n readonly requesterGroupIds: readonly string[]\n readonly requester?:\n | { readonly type: \"user\"; readonly id: string }\n | { readonly type: \"serviceAccount\"; readonly id: string }\n readonly valuation?:\n | { readonly status: \"rated\"; readonly money: AiMoney }\n | { readonly status: \"unavailable\" }\n}\n\nexport interface ResolvedAiLimitActual {\n readonly amount: bigint\n readonly accountingStatus: \"complete\" | \"unavailable\"\n}\n\nexport function normalizeAiLimitSubject(subject: AiLimitSubject): AiLimitSubject {\n if (!subject || typeof subject !== \"object\") {\n throw new TypeError(\"[Sixb] AI limit subject must be an object.\")\n }\n if (subject.type === \"project\") return { type: \"project\" }\n if (subject.type === \"group\" || subject.type === \"user\" || subject.type === \"serviceAccount\") {\n assertNonBlank(subject.id, \"subject id\")\n return { type: subject.type, id: subject.id }\n }\n throw new TypeError(\"[Sixb] AI limit subject type is unsupported.\")\n}\n\nexport function normalizeAiLimitSubjects(\n subjects: readonly AiLimitSubject[]\n): readonly AiLimitSubject[] {\n if (!Array.isArray(subjects)) {\n throw new TypeError(\"[Sixb] AI limit subjects must be an array.\")\n }\n const normalized = [\n normalizeAiLimitSubject({ type: \"project\" }),\n ...subjects.map(normalizeAiLimitSubject),\n ]\n const byKey = new Map(normalized.map((subject) => [aiLimitSubjectKey(subject), subject]))\n return [...byKey.values()].sort((left, right) =>\n aiLimitSubjectKey(left).localeCompare(aiLimitSubjectKey(right))\n )\n}\n\nexport function aiLimitSubjectKey(subject: AiLimitSubject): string {\n return subject.type === \"project\" ? \"project:\" : `${subject.type}:${subject.id}`\n}\n\nexport function aiLimitSubjectParts(subject: AiLimitSubject): {\n readonly type: AiLimitSubject[\"type\"]\n readonly id: string\n} {\n return { type: subject.type, id: subject.type === \"project\" ? \"\" : subject.id }\n}\n\nexport function aiLimitSubjectFromParts(type: AiLimitSubject[\"type\"], id: string): AiLimitSubject {\n return normalizeAiLimitSubject(type === \"project\" ? { type } : { type, id })\n}\n\nexport function normalizeAiLimitQuantity(quantity: AiLimitQuantity): AiLimitQuantity {\n const normalized = normalizeAiLimitAmount(quantity)\n return aiLimitQuantityFromAmount(normalized)\n}\n\nexport function normalizeAiLimitQuantities(\n quantities: readonly AiLimitQuantity[],\n label: string\n): readonly AiLimitQuantity[] {\n if (!Array.isArray(quantities) || quantities.length === 0) {\n throw new TypeError(`[Sixb] AI limit ${label} must contain at least one quantity.`)\n }\n const byKey = new Map<string, AiLimitQuantity>()\n for (const quantity of quantities) {\n const normalized = normalizeAiLimitQuantity(quantity)\n const key = aiLimitAmountKey(normalizeAiLimitAmount(normalized))\n if (byKey.has(key)) {\n throw new TypeError(`[Sixb] AI limit ${label} contains duplicate meter '${key}'.`)\n }\n byKey.set(key, normalized)\n }\n return [...byKey.values()].sort((left, right) =>\n aiLimitAmountKey(normalizeAiLimitAmount(left)).localeCompare(\n aiLimitAmountKey(normalizeAiLimitAmount(right))\n )\n )\n}\n\nexport function normalizeAiLimitAmount(quantity: AiLimitQuantity): NormalizedAiLimitAmount {\n if (!quantity || typeof quantity !== \"object\") {\n throw new TypeError(\"[Sixb] AI limit quantity must be an object.\")\n }\n if (quantity.meter === \"tokens.total\") {\n if (!Number.isSafeInteger(quantity.amount) || quantity.amount < 0) {\n throw new TypeError(\"[Sixb] AI limit token amount must be a non-negative safe integer.\")\n }\n return { meter: quantity.meter, currency: \"\", amount: BigInt(quantity.amount) }\n }\n if (quantity.meter === \"cost.catalogEstimated\") {\n const money = normalizeAiMoney(quantity.amount)\n return { meter: quantity.meter, currency: money.currency, amount: BigInt(money.amountNanos) }\n }\n throw new TypeError(\"[Sixb] AI limit meter is unsupported.\")\n}\n\nexport function aiLimitQuantityFromAmount(amount: NormalizedAiLimitAmount): AiLimitQuantity {\n if (amount.amount < 0n) {\n throw new TypeError(\"[Sixb] AI limit amount cannot be negative.\")\n }\n if (amount.meter === \"tokens.total\") {\n const tokens = Number(amount.amount)\n if (!Number.isSafeInteger(tokens)) {\n throw new RangeError(\"[Sixb] AI limit token amount exceeds JavaScript's safe integer range.\")\n }\n return { meter: amount.meter, amount: tokens }\n }\n if (amount.currency !== \"USD\") {\n throw new TypeError(\"[Sixb] AI limit catalog-estimated cost currency must be 'USD'.\")\n }\n return {\n meter: amount.meter,\n amount: { currency: \"USD\", amountNanos: amount.amount.toString() },\n }\n}\n\nexport function aiLimitAmountKey(\n amount: Pick<NormalizedAiLimitAmount, \"meter\" | \"currency\">\n): string {\n return `${amount.meter}:${amount.currency}`\n}\n\nexport function normalizeCreateAiLimitPolicy(input: CreateAiLimitPolicyInput): AiLimitPolicy {\n assertNonBlank(input.id, \"policy id\")\n assertNonBlank(input.projectId, \"projectId\")\n const createdAt = cloneValidDate(input.createdAt ?? new Date(), \"createdAt\")\n return {\n id: input.id,\n projectId: input.projectId,\n subject: normalizeAiLimitSubject(input.subject),\n limit: normalizeAiLimitQuantity(input.limit),\n period: \"calendarMonth\",\n enabled: input.enabled ?? true,\n createdAt,\n updatedAt: new Date(createdAt),\n }\n}\n\nexport function normalizeUpdateAiLimitPolicy(input: UpdateAiLimitPolicyInput): {\n readonly projectId: string\n readonly id: string\n readonly limit?: AiLimitQuantity\n readonly enabled?: boolean\n readonly updatedAt: Date\n} {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n if (input.limit === undefined && input.enabled === undefined) {\n throw new TypeError(\"[Sixb] AI limit policy update must change limit or enabled.\")\n }\n if (input.enabled !== undefined && typeof input.enabled !== \"boolean\") {\n throw new TypeError(\"[Sixb] AI limit enabled must be a boolean.\")\n }\n return {\n projectId: input.projectId,\n id: input.id,\n ...(input.limit === undefined ? {} : { limit: normalizeAiLimitQuantity(input.limit) }),\n ...(input.enabled === undefined ? {} : { enabled: input.enabled }),\n updatedAt: cloneValidDate(input.updatedAt ?? new Date(), \"updatedAt\"),\n }\n}\n\nexport function normalizeReserveAiModelCall(input: ReserveAiModelCallInput): {\n readonly identity: AiModelCallReservationIdentity\n readonly subjects: readonly AiLimitSubject[]\n readonly estimates: readonly AiLimitQuantity[]\n readonly period: AiLimitPeriod\n readonly reservedAt: Date\n} {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const reservedAt = cloneValidDate(input.reservedAt ?? new Date(), \"reservedAt\")\n return {\n identity,\n subjects: normalizeAiLimitSubjects(input.subjects),\n estimates: normalizeAiLimitQuantities(input.estimates, \"estimates\"),\n period: aiLimitCalendarMonth(reservedAt),\n reservedAt,\n }\n}\n\nexport function normalizeAiModelCallReservationIdentity(\n input: AiModelCallReservationIdentity\n): AiModelCallReservationIdentity {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.executionId, \"executionId\")\n if (!Number.isSafeInteger(input.attempt) || input.attempt <= 0) {\n throw new TypeError(\"[Sixb] AI limit reservation attempt must be a positive safe integer.\")\n }\n assertNonBlank(input.callId, \"callId\")\n return {\n projectId: input.projectId,\n executionId: input.executionId,\n attempt: input.attempt,\n callId: input.callId,\n }\n}\n\nexport function aiModelCallReservationKey(identity: AiModelCallReservationIdentity): string {\n return JSON.stringify([\n identity.projectId,\n identity.executionId,\n identity.attempt,\n identity.callId,\n ])\n}\n\nexport function aiLimitPolicyDimensionKey(\n policy: Pick<AiLimitPolicy, \"projectId\" | \"subject\" | \"limit\">\n): string {\n const amount = normalizeAiLimitAmount(policy.limit)\n return JSON.stringify([\n policy.projectId,\n aiLimitSubjectKey(policy.subject),\n amount.meter,\n amount.currency,\n ])\n}\n\nexport function aiLimitReservationRequestMatches(\n reservation: AiModelCallReservation,\n request: ReturnType<typeof normalizeReserveAiModelCall>\n): boolean {\n return reservation.requestKey === aiLimitReservationRequestKey(request)\n}\n\nexport function aiLimitReservationRequestKey(\n request: ReturnType<typeof normalizeReserveAiModelCall>\n): string {\n return JSON.stringify([\n request.period.start.toISOString(),\n request.subjects.map(aiLimitSubjectKey),\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [amount.meter, amount.currency, amount.amount.toString()]\n }),\n ])\n}\n\nexport function aiLimitReservationBuckets(\n policies: readonly AiLimitPolicy[],\n subjects: readonly AiLimitSubject[],\n estimates: readonly AiLimitQuantity[]\n): readonly AiLimitReservationBucket[] {\n const subjectKeys = new Set(subjects.map(aiLimitSubjectKey))\n const estimatesByDimension = new Map(\n estimates.map((estimate) => {\n const amount = normalizeAiLimitAmount(estimate)\n return [aiLimitAmountKey(amount), estimate] as const\n })\n )\n return policies\n .filter((policy) => subjectKeys.has(aiLimitSubjectKey(policy.subject)))\n .flatMap((policy) => {\n const estimate = estimatesByDimension.get(\n aiLimitAmountKey(normalizeAiLimitAmount(policy.limit))\n )\n return estimate ? [{ subject: policy.subject, estimate }] : []\n })\n .sort((left, right) => {\n const subject = aiLimitSubjectKey(left.subject).localeCompare(\n aiLimitSubjectKey(right.subject)\n )\n if (subject !== 0) return subject\n return aiLimitAmountKey(normalizeAiLimitAmount(left.estimate)).localeCompare(\n aiLimitAmountKey(normalizeAiLimitAmount(right.estimate))\n )\n })\n}\n\nexport function aiLimitAccountingEntryAppliesToSubject(\n entry: AiLimitAccountingEntry,\n subject: AiLimitSubject\n): boolean {\n if (subject.type === \"project\") return true\n if (subject.type === \"group\") return entry.requesterGroupIds.includes(subject.id)\n return entry.requester?.type === subject.type && entry.requester.id === subject.id\n}\n\nexport function aiLimitSubjectsFromAccountingEntry(\n entry: AiLimitAccountingEntry\n): readonly AiLimitSubject[] {\n return normalizeAiLimitSubjects([\n ...entry.requesterGroupIds.map((id) => ({ type: \"group\" as const, id })),\n ...(entry.requester ? [entry.requester] : []),\n ])\n}\n\nexport function resolveAiLimitActual(\n entries: readonly AiLimitAccountingEntry[],\n dimension: Pick<NormalizedAiLimitAmount, \"meter\" | \"currency\">\n): ResolvedAiLimitActual {\n let amount = 0n\n let accountingStatus: ResolvedAiLimitActual[\"accountingStatus\"] = \"complete\"\n for (const entry of entries) {\n if (dimension.meter === \"tokens.total\") {\n if (entry.totalTokens === undefined) {\n accountingStatus = \"unavailable\"\n } else {\n amount += BigInt(entry.totalTokens)\n }\n continue\n }\n if (\n entry.valuation?.status !== \"rated\" ||\n entry.valuation.money.currency !== dimension.currency\n ) {\n accountingStatus = \"unavailable\"\n continue\n }\n amount += BigInt(entry.valuation.money.amountNanos)\n }\n return { amount, accountingStatus }\n}\n\nexport function assertAiLimitAccountingMatchesReservation(\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry\n): void {\n if (\n entry.projectId !== reservation.projectId ||\n entry.executionId !== reservation.executionId ||\n entry.attempt !== reservation.attempt ||\n entry.callId !== reservation.callId\n ) {\n throw new AiLimitStorageError(\n \"usage_mismatch\",\n `[Sixb] AI usage record '${entry.usageRecordId}' does not belong to reservation '${reservation.callId}'.`\n )\n }\n}\n\nexport function cloneAiLimitPolicy(policy: AiLimitPolicy): AiLimitPolicy {\n return structuredClone(policy)\n}\n\nfunction normalizeAiMoney(money: AiMoney): AiMoney & { readonly currency: \"USD\" } {\n if (!money || typeof money !== \"object\") {\n throw new TypeError(\"[Sixb] AI limit cost amount must be AiMoney.\")\n }\n assertNonBlank(money.currency, \"cost currency\")\n if (money.currency !== \"USD\") {\n throw new TypeError(\"[Sixb] AI limit catalog-estimated cost currency must be 'USD'.\")\n }\n if (!/^(0|[1-9][0-9]*)$/.test(money.amountNanos)) {\n throw new TypeError(\n \"[Sixb] AI limit cost amountNanos must be a canonical non-negative integer string.\"\n )\n }\n if (BigInt(money.amountNanos) > SIGNED_INT64_MAX) {\n throw new RangeError(\"[Sixb] AI limit cost amountNanos exceeds the supported range.\")\n }\n return { currency: \"USD\", amountNanos: money.amountNanos }\n}\n\nexport function assertNonBlank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI limit ${label} must be nonblank.`)\n }\n}\n\nexport function cloneValidDate(value: Date, label: string): Date {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(`[Sixb] AI limit ${label} must be a valid Date.`)\n }\n return new Date(value)\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "04440D13B01DA23A64756E2164756E21",
11
- "names": []
12
- }
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/objects/sdk/where.ts", "../src/objects/sdk/query-builder.ts"],
4
- "sourcesContent": [
5
- "/**\n * Where-clause builder for typed ObjectSet queries.\n *\n * Provides `createWhereBuilder` (predicate DSL) and `resolveWhere` (evaluator).\n * The builder emits object query IR predicates. Property predicates are created\n * on demand through a Proxy, so no runtime ontology access is required —\n * property names are constrained at compile time and validated server-side.\n */\nimport type { ObjectTypeWithPropertyTokens } from \"../../ontology/tokens\"\nimport type { ObjectWhereBuilder, ObjectWhereClause } from \"../../runtime/types\"\nimport type { ObjectQueryPredicate } from \"../query\"\n\nfunction createPropertyPredicate(propertyId: string) {\n const comparison = (op: \"eq\" | \"neq\" | \"lt\" | \"lte\" | \"gt\" | \"gte\") => {\n return (value: unknown) => ({\n propertyId,\n op,\n value,\n })\n }\n\n return {\n eq: comparison(\"eq\"),\n neq: comparison(\"neq\"),\n lt: comparison(\"lt\"),\n lte: comparison(\"lte\"),\n gt: comparison(\"gt\"),\n gte: comparison(\"gte\"),\n in: (values: readonly unknown[]) => ({\n propertyId,\n op: \"in\",\n values,\n }),\n exists: (value = true) => ({\n propertyId,\n op: \"exists\",\n value,\n }),\n contains: (value: unknown) => ({\n propertyId,\n op: \"contains\",\n value,\n }),\n }\n}\n\nexport function createWhereBuilder<\n TObjectType extends ObjectTypeWithPropertyTokens,\n>(): ObjectWhereBuilder<TObjectType> {\n const p = new Proxy(\n {},\n {\n get: (_target, propertyId) =>\n typeof propertyId === \"string\" ? createPropertyPredicate(propertyId) : undefined,\n }\n )\n\n return {\n p,\n and: (...items: readonly ObjectQueryPredicate[]) => ({ op: \"and\", items }),\n or: (...items: readonly ObjectQueryPredicate[]) => ({ op: \"or\", items }),\n not: (item: ObjectQueryPredicate) => ({ op: \"not\", item }),\n } as ObjectWhereBuilder<TObjectType>\n}\n\nexport function resolveWhere<TObjectType extends ObjectTypeWithPropertyTokens>(\n whereFn?: (\n builder: ObjectWhereBuilder<TObjectType>\n ) => ObjectWhereClause<TObjectType> | readonly ObjectWhereClause<TObjectType>[]\n): ObjectQueryPredicate | undefined {\n if (!whereFn) return undefined\n const whereBuilder = createWhereBuilder<TObjectType>()\n const whereInput = whereFn(whereBuilder)\n if (!whereInput) return undefined\n const predicates = (\n Array.isArray(whereInput) ? whereInput : [whereInput]\n ) as readonly ObjectQueryPredicate[]\n if (predicates.length === 0) return undefined\n return predicates.length === 1 ? predicates[0] : { op: \"and\", items: predicates }\n}\n",
6
- "/**\n * Fluent ObjectSet query builder.\n *\n * This is the TypeScript authoring layer for object queries. It builds the\n * provider-neutral object query IR and delegates execution to an\n * `ObjectQueryExecutor` — the server runtime executor or the HTTP client\n * executor — so the same builder serves both sides.\n */\nimport { OntologyValidationError } from \"../../ontology/errors\"\nimport type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from \"../../ontology/tokens\"\nimport { RuntimeError } from \"../../runtime/errors\"\nimport type {\n ListResult,\n ListResultWithoutTotal,\n ObjectExpandBuilder,\n ObjectExpandOptions,\n ObjectQueryBuilder,\n ObjectQueryFacetInput,\n ObjectQueryFacetResult,\n ObjectQueryListOptions,\n ObjectWhereBuilder,\n ObjectWhereClause,\n TwinObject,\n} from \"../../runtime/types\"\nimport { formatObjectQueryExplanation } from \"../query/explain-format\"\nimport type {\n ObjectExpansion,\n ObjectQuery,\n ObjectQueryDirection,\n ObjectQuerySortDirection,\n ObjectQuerySortField,\n} from \"../query/ir\"\nimport { normalizeObjectQuery } from \"../query/normalize\"\nimport type { ObjectQueryExecutor } from \"./query-executor\"\nimport { resolveWhere } from \"./where\"\n\ntype QueryBuilderParams = {\n query: ObjectQuery\n executor: ObjectQueryExecutor\n}\n\nexport function createObjectQueryBuilder<TObjectType extends ObjectTypeWithPropertyTokens>(\n params: QueryBuilderParams\n): ObjectQueryBuilder<TObjectType> {\n return new ObjectQueryBuilderImpl<TObjectType>(\n params\n ) as unknown as ObjectQueryBuilder<TObjectType>\n}\n\n/**\n * Returns the same query running through the executor `decorate` wraps around the builder's own.\n *\n * Refinements copy their builder's executor, so every query derived from the result, and every\n * terminal it runs, goes through the decorated executor too.\n */\nexport function decorateObjectQueryExecutor<TObjectType extends ObjectTypeWithPropertyTokens>(\n builder: ObjectQueryBuilder<TObjectType>,\n decorate: (executor: ObjectQueryExecutor) => ObjectQueryExecutor\n): ObjectQueryBuilder<TObjectType> {\n // Narrowed from `unknown`: narrowing the builder interface to the class relates both structures.\n const source: unknown = builder\n if (!(source instanceof ObjectQueryBuilderImpl)) {\n throw new RuntimeError(\n \"[Sixb] Only query builders created by createObjectQueryBuilder can change executor.\"\n )\n }\n return new ObjectQueryBuilderImpl<TObjectType>({\n ...source.params,\n executor: decorate(source.params.executor),\n }) as unknown as ObjectQueryBuilder<TObjectType>\n}\n\nclass ObjectQueryBuilderImpl<TObjectType extends ObjectTypeWithPropertyTokens> {\n /** Not private because `decorateObjectQueryExecutor` reads it; the class is not exported. */\n constructor(readonly params: QueryBuilderParams) {}\n\n get ir(): ObjectQuery {\n return normalizeObjectQuery(this.params.query)\n }\n\n where(\n whereFn: (\n builder: ObjectWhereBuilder<TObjectType>\n ) => ObjectWhereClause<TObjectType> | readonly ObjectWhereClause<TObjectType>[]\n ): ObjectQueryBuilder<TObjectType> {\n const predicate = resolveWhere<TObjectType>(whereFn)\n if (!predicate) return this as unknown as ObjectQueryBuilder<TObjectType>\n\n return this.withQuery({\n kind: \"filter\",\n input: this.ir,\n predicate,\n })\n }\n\n search(\n query: string,\n options?: { fields?: readonly PropertyToken<TObjectType[\"id\"], string>[] }\n ): ObjectQueryBuilder<TObjectType> {\n return this.withQuery({\n kind: \"text\",\n input: this.ir,\n query,\n fields: options?.fields?.map(propertyTokenToId),\n })\n }\n\n vector(profile: string, vector: string, options: { k: number }): ObjectQueryBuilder<TObjectType> {\n if (typeof profile !== \"string\" || typeof vector !== \"string\") {\n throw new Error(\"[Sixb] Vector search requires a named profile and search text\")\n }\n return this.withQuery({\n kind: \"vector\",\n input: this.ir,\n profile,\n vector,\n k: options.k,\n })\n }\n\n traverse(\n link: LinkToken<TObjectType[\"id\"], string, string>,\n options?: { direction?: \"outgoing\" }\n ): ObjectQueryBuilder<ObjectTypeWithPropertyTokens>\n traverse(\n link: LinkToken<string, string, TObjectType[\"id\"] | readonly TObjectType[\"id\"][]>,\n options: { direction: \"incoming\" }\n ): ObjectQueryBuilder<ObjectTypeWithPropertyTokens>\n traverse(\n link: LinkToken,\n options: { direction?: ObjectQueryDirection } = {}\n ): ObjectQueryBuilder<ObjectTypeWithPropertyTokens> {\n const direction = options.direction ?? \"outgoing\"\n if (direction === \"outgoing\") {\n requireSingleTargetObjectTypeId(link)\n }\n\n return new ObjectQueryBuilderImpl<ObjectTypeWithPropertyTokens>({\n ...this.params,\n query: {\n kind: \"traverse\",\n input: this.ir,\n linkId: link.id,\n direction,\n // Several object types can declare a link with the same id. The token\n // names exactly one source type, so incoming traversal pins it —\n // matching the result type the fluent API advertises.\n ...(direction === \"incoming\" ? { sourceObjectTypeId: link.objectTypeId } : {}),\n },\n }) as unknown as ObjectQueryBuilder<ObjectTypeWithPropertyTokens>\n }\n\n expand(\n link: LinkToken<string, string, string | readonly string[]>,\n optionsOrBuild?: ObjectExpandOptions<ObjectTypeWithPropertyTokens> | NestedExpandBuild,\n build?: NestedExpandBuild\n ): ObjectQueryBuilder<TObjectType> {\n return this.withQuery({\n kind: \"expand\",\n input: this.ir,\n expansions: [buildExpansion(link, optionsOrBuild, build)],\n })\n }\n\n orderBy(\n property: PropertyToken<TObjectType[\"id\"], string>,\n direction?: ObjectQuerySortDirection\n ): ObjectQueryBuilder<TObjectType> {\n return this.withQuery(\n appendSortField(this.ir, {\n kind: \"property\",\n propertyId: property.id,\n direction,\n })\n )\n }\n\n orderByRelevance(direction?: ObjectQuerySortDirection): ObjectQueryBuilder<TObjectType> {\n return this.withQuery(\n appendSortField(this.ir, {\n kind: \"relevance\",\n direction,\n })\n )\n }\n\n limit(limit: number): ObjectQueryBuilder<TObjectType> {\n return this.withQuery({\n kind: \"limit\",\n input: this.ir,\n limit,\n })\n }\n\n page(input: { pageSize: number; pageToken?: string }): ObjectQueryBuilder<TObjectType> {\n return this.withQuery({\n kind: \"page\",\n input: this.ir,\n pageSize: input.pageSize,\n pageToken: input.pageToken,\n })\n }\n\n validate() {\n if (!this.params.executor.validate) {\n throw new OntologyValidationError(\n \"[Sixb] validate() requires ontology access and is not supported by this query executor. Execute the query to get server-side validation.\"\n )\n }\n return this.params.executor.validate(this.ir)\n }\n\n explain() {\n if (!this.params.executor.explain) {\n throw new OntologyValidationError(\n \"[Sixb] explain() requires ontology access and is not supported by this query executor.\"\n )\n }\n return this.params.executor.explain(this.ir)\n }\n\n formatExplanation(): string {\n return formatObjectQueryExplanation(this.explain())\n }\n\n async list(): Promise<ListResult<TwinObject<TObjectType>>>\n async list(options: {\n includeTotal: false\n signal?: AbortSignal\n }): Promise<ListResultWithoutTotal<TwinObject<TObjectType>>>\n async list(options: {\n includeTotal?: true\n signal?: AbortSignal\n }): Promise<ListResult<TwinObject<TObjectType>>>\n async list(\n options?: ObjectQueryListOptions\n ): Promise<\n ListResult<TwinObject<TObjectType>> | ListResultWithoutTotal<TwinObject<TObjectType>>\n > {\n const result = await this.params.executor.list(this.ir, {\n includeTotal: options?.includeTotal,\n signal: options?.signal,\n })\n const objects = result.objects.map((row) => row as unknown as TwinObject<TObjectType>)\n\n if (options?.includeTotal === false) {\n return {\n objects,\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n }\n }\n\n return {\n objects,\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n total: result.total ?? result.objects.length,\n }\n }\n\n async count(): Promise<number> {\n return this.params.executor.count(this.ir)\n }\n\n async exists(): Promise<boolean> {\n return this.params.executor.exists(this.ir)\n }\n\n async facets(\n input: readonly ObjectQueryFacetInput<TObjectType>[]\n ): Promise<ObjectQueryFacetResult[]> {\n return this.params.executor.facets(\n this.ir,\n input.map((facet) => ({\n propertyId: facet.property.id,\n limit: facet.limit,\n }))\n )\n }\n\n async first(): Promise<TwinObject<TObjectType> | null> {\n const result = await this.params.executor.list({ kind: \"limit\", input: this.ir, limit: 1 })\n const row = result.objects[0]\n return row ? (row as unknown as TwinObject<TObjectType>) : null\n }\n\n private withQuery(query: ObjectQuery): ObjectQueryBuilder<TObjectType> {\n return new ObjectQueryBuilderImpl<TObjectType>({\n ...this.params,\n query,\n }) as unknown as ObjectQueryBuilder<TObjectType>\n }\n}\n\ntype AnyExpandBuilder = ObjectExpandBuilder<ObjectTypeWithPropertyTokens>\ntype NestedExpandBuild = (nested: AnyExpandBuilder) => AnyExpandBuilder\n\n/**\n * Runtime backing for the nested `.expand(..., (e) => …)` callback. Immutable,\n * mirroring the query builder: each `expand` returns a new instance so the\n * accumulated expansions are never shared between branches.\n */\nclass ObjectExpandBuilderImpl {\n constructor(readonly expansions: readonly ObjectExpansion[] = []) {}\n\n expand(\n link: LinkToken<string, string, string | readonly string[]>,\n optionsOrBuild?: ObjectExpandOptions<ObjectTypeWithPropertyTokens> | NestedExpandBuild,\n build?: NestedExpandBuild\n ): ObjectExpandBuilderImpl {\n return new ObjectExpandBuilderImpl([\n ...this.expansions,\n buildExpansion(link, optionsOrBuild, build),\n ])\n }\n}\n\nfunction buildExpansion(\n link: LinkToken<string, string, string | readonly string[]>,\n optionsOrBuild: ObjectExpandOptions<ObjectTypeWithPropertyTokens> | NestedExpandBuild | undefined,\n build: NestedExpandBuild | undefined\n): ObjectExpansion {\n // `.expand(link, build)` and `.expand(link, options, build)` are both valid:\n // a function in the second slot is the nested builder, otherwise it is options.\n const options = typeof optionsOrBuild === \"function\" ? undefined : optionsOrBuild\n const nestedBuild = typeof optionsOrBuild === \"function\" ? optionsOrBuild : build\n\n let nested: readonly ObjectExpansion[] = []\n if (nestedBuild) {\n const result = nestedBuild(new ObjectExpandBuilderImpl() as unknown as AnyExpandBuilder)\n nested = (result as unknown as ObjectExpandBuilderImpl).expansions\n }\n\n return {\n linkId: link.id,\n direction: \"outgoing\",\n ...(options?.limit !== undefined ? { limit: options.limit } : {}),\n ...(options?.orderBy ? { orderBy: options.orderBy.map(expansionSortToField) } : {}),\n ...(nested.length > 0 ? { expand: nested } : {}),\n }\n}\n\nfunction expansionSortToField(sort: {\n property: PropertyToken\n direction?: ObjectQuerySortDirection\n}): ObjectQuerySortField {\n return { kind: \"property\", propertyId: sort.property.id, direction: sort.direction }\n}\n\nfunction appendSortField(\n query: ObjectQuery,\n field: Extract<ObjectQuery, { kind: \"sort\" }>[\"fields\"][number]\n): ObjectQuery {\n if (query.kind === \"sort\") {\n return {\n ...query,\n fields: [...query.fields, field],\n }\n }\n\n return {\n kind: \"sort\",\n input: query,\n fields: [field],\n }\n}\n\nfunction propertyTokenToId(token: PropertyToken): string {\n return token.id\n}\n\nfunction requireSingleTargetObjectTypeId(link: LinkToken): void {\n const target = link.targetObjectTypeId\n if (target === \"*\" || typeof target !== \"string\") {\n throw new OntologyValidationError(\n \"[Sixb] Object query traverse requires a single concrete outgoing target type\"\n )\n }\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "F6C84C869163827C64756E2164756E21",
10
- "names": []
11
- }
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/workflows/agent-step-identity.ts", "../src/workflows/builders.ts", "../src/workflows/failure.ts"],
4
- "sourcesContent": [
5
- "/** Stable internal actor id for one workflow Agent step. */\nexport function workflowAgentStepActorId(workflowId: string, stepId: string): string {\n return `workflow:${encodeURIComponent(workflowId)}:step:${encodeURIComponent(stepId)}`\n}\n",
6
- "import type { ActionDefinition } from \"../actions\"\nimport { isActionDefinition } from \"../actions\"\nimport { AGENT_REASONING_LEVELS, isAgentToolDefinition } from \"../agents\"\nimport { isModelReasoning } from \"../models/language-model\"\nimport type { SchemaOrRef } from \"../ontology\"\nimport type { ScheduleDefinition, ScheduleDefinitionForEvent } from \"../schedules\"\nimport { isScheduleDefinition } from \"../schedules\"\nimport { isGroupDefinition } from \"../security\"\nimport { WorkflowDefinitionError } from \"./errors\"\nimport type {\n AgentStepBuilder,\n AgentStepDefinition,\n DefineAgentStepConfig,\n InterventionBuilder,\n InterventionDefaultsRuntimeHandler,\n InterventionDefinition,\n InterventionFieldConfig,\n StepBuilder,\n StepDefinition,\n StepHandler,\n WorkflowBuilder,\n WorkflowChainDefinition,\n WorkflowNodeDefinition,\n WorkflowScheduleMapper,\n WorkflowTriggerDefinition,\n} from \"./types\"\nimport {\n assertNonEmpty,\n isAgentStepDefinition,\n isInterventionDefinition,\n isStepDefinition,\n} from \"./validation\"\n\ntype InterventionOptions = {\n description?: string\n}\n\ntype RuntimeWorkflowInput = Record<string, SchemaOrRef>\ntype RuntimeWorkflowValueInput = Record<string, unknown>\ntype RuntimeWorkflowMapper = (...args: never[]) => unknown\ntype RuntimeWorkflowScheduleMapper = WorkflowScheduleMapper<unknown, RuntimeWorkflowValueInput>\ntype RuntimeWorkflowThenDefinition =\n | StepDefinition\n | InterventionDefinition\n | ActionDefinition\n | AgentStepDefinition\ntype RuntimeWorkflowThen = (\n nodeDefinition: RuntimeWorkflowThenDefinition,\n mapper?: RuntimeWorkflowMapper\n) => WorkflowChainDefinition\ntype RuntimeWorkflowDraftBuilder = {\n when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n readonly then: RuntimeWorkflowThen\n}\n\n/**\n * See the action-param helper for why widened booleans are rejected. Optional\n * response fields must be an explicit literal decision so inference stays honest.\n */\ntype StrictBoolean<T extends boolean> = boolean extends T ? never : T\n\ntype InterventionFieldResult<TSchema extends SchemaOrRef, TRequired extends boolean> = {\n readonly schema: TSchema\n readonly required: TRequired\n readonly description?: string\n}\n\nexport function interventionField<const TSchema extends SchemaOrRef>(\n schema: TSchema\n): InterventionFieldResult<TSchema, true>\nexport function interventionField<\n const TSchema extends SchemaOrRef,\n const TRequired extends boolean = true,\n>(\n schema: TSchema,\n options: {\n required?: StrictBoolean<TRequired>\n description?: string\n }\n): InterventionFieldResult<TSchema, TRequired>\nexport function interventionField(\n schema: SchemaOrRef,\n options?: { required?: boolean; description?: string }\n): InterventionFieldConfig {\n return {\n schema,\n required: options?.required ?? true,\n ...(options?.description !== undefined ? { description: options.description } : {}),\n }\n}\n\nexport function defineWorkflowStep<const TId extends string>(id: TId): StepBuilder<TId> {\n assertNonEmpty(id, \"Step\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n run(handler: StepHandler<Record<string, unknown>, Record<string, unknown>>): unknown {\n return {\n kind: \"step\",\n id,\n input,\n output,\n handler,\n }\n },\n }\n },\n }\n },\n } as unknown as StepBuilder<TId>\n}\n\nexport function defineAgentStep<const TId extends string>(\n id: TId,\n config: DefineAgentStepConfig\n): AgentStepBuilder<TId> {\n assertNonEmpty(id, \"Agent step\", \"id\")\n if (!isRecord(config)) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" config must be an object.`)\n }\n if (typeof config.instructions !== \"string\" || !config.instructions.trim()) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" instructions must not be empty.`)\n }\n if (config.reasoning !== undefined && !isModelReasoning(config.reasoning)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${id}\" reasoning must be one of: ${AGENT_REASONING_LEVELS.join(\", \")}, or a nonnegative budgetTokens object.`\n )\n }\n const { model, reasoning, instructions } = config\n const groupIds = groupIdsFromAgentStepConfig(id, config)\n const toolNames = toolNamesFromAgentStepConfig(id, config)\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n prompt(prompt: unknown): unknown {\n if (typeof prompt !== \"function\") {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" prompt must be a function.`)\n }\n return {\n kind: \"agentStep\",\n id,\n ...(model === undefined ? {} : { model }),\n ...(reasoning === undefined ? {} : { reasoning }),\n instructions,\n groupIds,\n toolNames,\n input,\n output,\n prompt,\n }\n },\n }\n },\n }\n },\n } as unknown as AgentStepBuilder<TId>\n}\n\nfunction groupIdsFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.groups !== undefined && !Array.isArray(config.groups)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must be an array of group definitions.`\n )\n }\n const groupIds = Array.from(config.groups ?? [], (group) => {\n if (!isGroupDefinition(group)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must contain only group definitions.`\n )\n }\n return group.id\n })\n assertUniqueAgentStepValues(stepId, \"group\", groupIds)\n return Object.freeze(groupIds)\n}\n\nfunction toolNamesFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.tools !== undefined && !Array.isArray(config.tools)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must be an array of agent tool definitions.`\n )\n }\n const toolNames = Array.from(config.tools ?? [], (tool) => {\n if (!isAgentToolDefinition(tool)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must contain only agent tool definitions.`\n )\n }\n return tool.name\n })\n assertUniqueAgentStepValues(stepId, \"tool\", toolNames)\n return Object.freeze(toolNames)\n}\n\nfunction assertUniqueAgentStepValues(\n stepId: string,\n kind: \"group\" | \"tool\",\n values: readonly string[]\n): void {\n const seen = new Set<string>()\n for (const value of values) {\n if (seen.has(value)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" ${kind}s contains duplicate ${kind} '${value}'.`\n )\n }\n seen.add(value)\n }\n}\n\nexport function defineIntervention<const TId extends string>(\n id: TId,\n options?: InterventionOptions\n): InterventionBuilder<TId> {\n assertNonEmpty(id, \"Intervention\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n response(response: Record<string, unknown>): unknown {\n return createInterventionDefinition({\n id,\n input,\n response,\n description: options?.description,\n })\n },\n }\n },\n } as unknown as InterventionBuilder<TId>\n}\n\nexport function defineWorkflow<const TId extends string>(id: TId): WorkflowBuilder<TId> {\n assertNonEmpty(id, \"Workflow\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return createWorkflowDraftBuilder(id, input)\n },\n } as unknown as WorkflowBuilder<TId>\n}\n\nfunction createWorkflowDraftBuilder(\n id: string,\n input: RuntimeWorkflowInput\n): RuntimeWorkflowDraftBuilder {\n const triggers: WorkflowTriggerDefinition[] = []\n const nodes: WorkflowNodeDefinition[] = []\n let definition: WorkflowChainDefinition | null = null\n\n const appendNode = (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): WorkflowChainDefinition => {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n if (isStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createStepNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isAgentStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createAgentNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isInterventionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createInterventionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isActionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createActionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n let draft: RuntimeWorkflowDraftBuilder\n\n function when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n function when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n function when(\n schedule: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): RuntimeWorkflowDraftBuilder {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) call.`)\n }\n\n if (isScheduleDefinition(schedule)) {\n if (mapper !== undefined && schedule.trigger.type !== \"event\") {\n throw new WorkflowDefinitionError(`Workflow \"${id}\" cron schedules do not accept a mapper.`)\n }\n if (mapper !== undefined && !isRuntimeWorkflowScheduleMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) schedule mapper.`)\n }\n\n triggers.push({\n type: \"schedule\",\n scheduleId: schedule.id,\n ...(mapper !== undefined ? { mapper } : {}),\n })\n return draft\n }\n\n throw new WorkflowDefinitionError(`Workflow \"${id}\" .when(...) only accepts schedules.`)\n }\n\n draft = {\n when,\n // biome-ignore lint/suspicious/noThenProperty: Workflows intentionally expose a chainable .then(...) DSL.\n then: appendNode,\n }\n\n return draft\n}\n\nfunction createWorkflowDefinition(\n id: string,\n input: RuntimeWorkflowInput,\n triggers: readonly WorkflowTriggerDefinition[],\n nodes: readonly WorkflowNodeDefinition[],\n then: (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ) => WorkflowChainDefinition\n): WorkflowChainDefinition {\n return {\n kind: \"workflow\",\n id,\n input,\n triggers,\n nodes,\n then,\n } as unknown as WorkflowChainDefinition\n}\n\nfunction createStepNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n step: StepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(step.id)\n assertNodeKey(workflowId, step.id, key)\n assertUniqueNode(workflowId, nodes, step.id, key)\n\n return {\n type: \"step\",\n id: step.id,\n key,\n step,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createAgentNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n agentStep: AgentStepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(agentStep.id)\n assertNodeKey(workflowId, agentStep.id, key)\n assertUniqueNode(workflowId, nodes, agentStep.id, key)\n\n return {\n type: \"agent\",\n id: agentStep.id,\n key,\n agentStep,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionDefinition(input: {\n readonly id: string\n readonly input: RuntimeWorkflowInput\n readonly response: Record<string, unknown>\n readonly description?: string\n}): unknown {\n const base = {\n kind: \"intervention\" as const,\n id: input.id,\n input: input.input,\n response: input.response,\n ...(input.description !== undefined ? { description: input.description } : {}),\n }\n\n const defaults = (handlerOrContext: unknown) => {\n if (typeof handlerOrContext === \"function\") {\n return {\n ...base,\n defaults: handlerOrContext as InterventionDefaultsRuntimeHandler,\n }\n }\n\n // A no-defaults intervention is still usable as a definition immediately after\n // `.response(...)`. Treating the builder method as an empty default handler keeps\n // future executor code simple if it calls `definition.defaults?.(ctx) ?? {}`.\n return {}\n }\n\n Object.defineProperty(base, \"defaults\", {\n value: defaults,\n enumerable: false,\n })\n\n return base\n}\n\nfunction createActionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n action: ActionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(action.id)\n assertNodeKey(workflowId, action.id, key)\n assertUniqueNode(workflowId, nodes, action.id, key)\n\n return {\n type: \"action\",\n id: action.id,\n key,\n action,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n intervention: InterventionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(intervention.id)\n assertNodeKey(workflowId, intervention.id, key)\n assertUniqueNode(workflowId, nodes, intervention.id, key)\n\n return {\n type: \"intervention\",\n id: intervention.id,\n key,\n intervention,\n ...(mapper !== undefined ? { mapper } : {}),\n } as WorkflowNodeDefinition\n}\n\nfunction assertNodeKey(workflowId: string, nodeId: string, key: string): void {\n if (key.length === 0) {\n throw new WorkflowDefinitionError(\n `Workflow \"${workflowId}\" node id \"${nodeId}\" must contain at least one letter or number.`\n )\n }\n}\n\nfunction assertUniqueNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n nodeId: string,\n key: string\n): void {\n const duplicateId = nodes.find((node) => node.id === nodeId)\n if (duplicateId) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node id \"${nodeId}\" in workflow \"${workflowId}\".`\n )\n }\n\n const duplicateKey = nodes.find((node) => node.key === key)\n if (duplicateKey) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node key \"${key}\" in workflow \"${workflowId}\". Node ids \"${duplicateKey.id}\" and \"${nodeId}\" derive the same key.`\n )\n }\n}\n\nfunction deriveWorkflowNodeKey(id: string): string {\n const segments = id\n .trim()\n .split(/[^A-Za-z0-9]+/)\n .filter((segment) => segment.length > 0)\n\n return segments\n .map((segment, index) => {\n const normalized = uncapitalize(segment)\n return index === 0 ? normalized : capitalize(normalized)\n })\n .join(\"\")\n}\n\nfunction uncapitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toLowerCase()}${value.slice(1)}`\n}\n\nfunction capitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toUpperCase()}${value.slice(1)}`\n}\n\nfunction isRuntimeWorkflowMapper(value: unknown): value is RuntimeWorkflowMapper {\n return typeof value === \"function\"\n}\n\nfunction isRuntimeWorkflowScheduleMapper(value: unknown): value is RuntimeWorkflowScheduleMapper {\n return typeof value === \"function\"\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
7
- "import { withFailureMessage } from \"../errors/failure-message\"\nimport { createSixbError, isSixbError, summarizeErrorMessage } from \"../errors/internal\"\nimport {\n ModelProviderError,\n StructuredOutputError,\n UnsupportedModelFeatureError,\n} from \"../models/errors\"\n\ninterface WorkflowNodeFailureIdentityBase {\n readonly workflowId: string\n readonly workflowRunId: string\n readonly nodeId: string\n readonly nodeRunId?: string\n readonly failurePhase?: \"output-preflight\" | \"agent-loop\" | \"structured-finalizer\"\n readonly modelId?: string\n}\n\nexport interface WorkflowNodeFailureIdentity extends WorkflowNodeFailureIdentityBase {\n readonly child:\n | { readonly type: \"step\"; readonly stepId: string }\n | {\n readonly type: \"action\"\n readonly actionId: string\n readonly actionRunId?: string\n }\n | { readonly type: \"agent\"; readonly agentStepId: string }\n | { readonly type: \"intervention\"; readonly interventionId: string }\n}\n\n/** Translate a node-local failure into the workflow primitive's durable vocabulary. */\nexport function createWorkflowNodeFailure(error: unknown, identity: WorkflowNodeFailureIdentity) {\n const modelDetails = safeModelFailureDetails(error)\n const failure = createSixbError(\n \"workflow.node_failed\",\n summarizeErrorMessage(error, \"Workflow node execution failed.\"),\n {\n cause: error,\n details: {\n ...workflowNodeFailureDetails(identity),\n ...modelDetails,\n },\n }\n )\n return modelDetails.modelFailure\n ? withFailureMessage(failure, modelDetails.modelFailure.message)\n : failure\n}\n\n/** Only controlled diagnostics cross the durable boundary; provider messages/output stay private. */\nfunction safeModelFailureDetails(error: unknown): {\n modelFailure?: { source: string; reason: string; message: string; status?: number }\n} {\n if (error instanceof UnsupportedModelFeatureError) {\n const reason = error.reason ?? \"unsupported-feature\"\n const messages = {\n \"unsupported-feature\":\n \"The adapter cannot support a requested model feature. Check provider configuration.\",\n \"unsupported-model\":\n \"The model is configured without structured-output support. Choose a supported model.\",\n \"unsupported-schema\":\n \"The output schema is incompatible with the adapter. Use valid JSON Schema types, require every property, and disallow additional properties.\",\n }\n return { modelFailure: { source: \"adapter\", reason, message: messages[reason] } }\n }\n if (error instanceof ModelProviderError) {\n // Interpret only known machine codes, never provider prose (which can echo private inputs).\n const schemaRejected = error.code === \"invalid_json_schema\" || error.code === \"invalid_schema\"\n const modelRejected = error.code === \"model_not_supported\" || error.code === \"unsupported_model\"\n return {\n modelFailure: {\n source: \"provider\",\n reason: schemaRejected\n ? \"unsupported-schema\"\n : modelRejected\n ? \"unsupported-model\"\n : \"provider-rejection\",\n message: schemaRejected\n ? \"The model endpoint rejected the supplied schema. Check the routed provider's supported JSON Schema subset.\"\n : modelRejected\n ? \"The model endpoint does not support the requested model configuration. Choose a supported model or route.\"\n : \"The model endpoint rejected the request or failed its response. Check provider diagnostics for model, schema, authentication, or availability errors.\",\n ...(error.status === undefined ? {} : { status: error.status }),\n },\n }\n }\n if (error instanceof StructuredOutputError) {\n return {\n modelFailure: {\n source: \"validation\",\n reason: \"invalid-output\",\n message:\n \"The model response did not complete with valid output matching the workflow schema.\",\n },\n }\n }\n return {}\n}\n\n/** Recover the native child error for direct callers and error-monitoring integrations. */\nexport function unwrapWorkflowNodeFailure(error: unknown): unknown {\n return isSixbError(error) && error.code === \"workflow.node_failed\" && error.cause !== undefined\n ? error.cause\n : error\n}\n\nfunction workflowNodeFailureDetails(identity: WorkflowNodeFailureIdentity) {\n const base = {\n workflowId: identity.workflowId,\n workflowRunId: identity.workflowRunId,\n nodeId: identity.nodeId,\n ...(identity.nodeRunId ? { nodeRunId: identity.nodeRunId } : {}),\n ...(identity.failurePhase ? { failurePhase: identity.failurePhase } : {}),\n ...(identity.modelId ? { modelId: identity.modelId } : {}),\n }\n\n switch (identity.child.type) {\n case \"step\":\n return { ...base, stepId: identity.child.stepId }\n case \"action\":\n return {\n ...base,\n actionId: identity.child.actionId,\n ...(identity.child.actionRunId ? { actionRunId: identity.child.actionRunId } : {}),\n }\n case \"agent\":\n return { ...base, agentStepId: identity.child.agentStepId }\n case \"intervention\":\n return { ...base, interventionId: identity.child.interventionId }\n }\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "2EC0F96E37462C9E64756E2164756E21",
11
- "names": []
12
- }
@@ -1,17 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/models/execution/model-call-limits.ts", "../src/models/execution/errors.ts", "../src/models/execution/model-call-accounting.ts", "../src/models/execution/usage.ts", "../src/models/execution/model-call-recovery.ts", "../src/models/execution/model-call-recorder.ts", "../src/models/execution/model-call-admission.ts", "../src/models/execution/recovery-queue.ts"],
4
- "sourcesContent": [
5
- "import { isSixbError } from \"../../errors/internal\"\nimport type { AuthorizablePrincipal } from \"../../execution\"\nimport type {\n AiLimitPolicy,\n AiLimitQuantity,\n AiModelCallReservationIdentity,\n ReserveAiModelCallResult,\n} from \"../../storage\"\nimport {\n aiLimitSubjectsFromAttribution,\n aiUsageLimitExceededError,\n aiUsageLimitUnavailableError,\n applicableAiLimitPolicies,\n} from \"../../storage/ai-limits/enforcement\"\nimport type {\n AiModelCallAdmissionDecision,\n AiModelCallAdmissionInput,\n BeforeAiModelCall,\n MarkAiModelCallUnknown,\n} from \"./model-call-admission\"\nimport type { ModelCallAccountingStorage } from \"./types\"\n\nexport interface AiModelCallLimitController {\n readonly beforeModelCall: BeforeAiModelCall\n readonly markModelCallUnknown: MarkAiModelCallUnknown\n}\n\n/** Build the reservation lifecycle for model calls from any execution. */\nexport function createAiModelCallLimitController(input: {\n readonly storage: Pick<ModelCallAccountingStorage, \"aiLimits\">\n readonly projectId: string\n readonly requestedBy?: AuthorizablePrincipal\n readonly requesterGroupIds: readonly string[]\n}): AiModelCallLimitController {\n const subjects = aiLimitSubjectsFromAttribution(input.requestedBy, input.requesterGroupIds)\n\n return {\n beforeModelCall: async (admission) => {\n let applicable: readonly AiLimitPolicy[]\n try {\n const policies = await input.storage.aiLimits.listPolicies({\n projectId: input.projectId,\n })\n applicable = applicableAiLimitPolicies(policies, subjects)\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n // This read is the fast no-policy path. A concurrently created policy linearizes after it;\n // every later call will see it, while existing policies always continue to atomic reserve.\n if (applicable.length === 0) return { reservation: \"none\" }\n\n const estimates = reservationEstimates(\n admission,\n applicable.some((policy) => policy.limit.meter === \"cost.catalogEstimated\")\n )\n if (estimates.length === 0) {\n throw aiUsageLimitUnavailableError([\"missingEstimate\"])\n }\n\n let result: ReserveAiModelCallResult\n try {\n result = await input.storage.aiLimits.reserveModelCall({\n ...reservationIdentity(admission),\n subjects,\n estimates,\n })\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n switch (result.status) {\n case \"reserved\":\n return { reservation: \"active\" } satisfies AiModelCallAdmissionDecision\n case \"notRequired\":\n return { reservation: \"none\" } satisfies AiModelCallAdmissionDecision\n case \"denied\":\n throw aiUsageLimitExceededError(result.resetAt)\n case \"unavailable\":\n throw aiUsageLimitUnavailableError(result.reasons)\n case \"terminal\":\n throw aiUsageLimitUnavailableError([\"terminalReservationReplay\"])\n }\n },\n markModelCallUnknown: async (identity) => {\n try {\n await input.storage.aiLimits.markReservationUnknown(identity)\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n },\n }\n}\n\nfunction reservationEstimates(\n input: AiModelCallAdmissionInput,\n needsCost: boolean\n): readonly AiLimitQuantity[] {\n if (input.inputTokens.status !== \"estimated\" || input.estimatedTotalTokens === undefined) {\n return []\n }\n const estimates: AiLimitQuantity[] = [\n { meter: \"tokens.total\", amount: input.estimatedTotalTokens },\n ]\n if (needsCost) {\n try {\n const money = input.costEstimator?.estimateReservation?.({\n inputTokens: input.inputTokens.tokens,\n outputTokens: input.outputTokenAllowance,\n })\n if (money) estimates.push({ meter: \"cost.catalogEstimated\", amount: money })\n } catch {\n // An unavailable price must not prevent a token-only policy from being evaluated.\n return estimates\n }\n }\n return estimates\n}\n\nfunction reservationIdentity(input: AiModelCallAdmissionInput): AiModelCallReservationIdentity {\n return {\n projectId: input.projectId,\n executionId: input.executionId,\n attempt: input.attempt,\n callId: input.callId,\n }\n}\n\nfunction limitStorageUnavailable(error: unknown): unknown {\n if (\n isSixbError(error) &&\n (error.code === \"ai.usage_limit_exceeded\" || error.code === \"ai.usage_limit_unavailable\")\n ) {\n return error\n }\n return aiUsageLimitUnavailableError([\"limitStorageUnavailable\"])\n}\n",
6
- "/** A provider call was not recorded synchronously, so its execution must stop. */\nexport class ModelUsageRecordingError extends Error {\n readonly name = \"ModelUsageRecordingError\"\n\n constructor(\n readonly executionId: string,\n readonly callId: string,\n readonly recoveryScheduled: boolean,\n options?: ErrorOptions\n ) {\n super(\n recoveryScheduled\n ? `[SixbModels] AI usage for call '${callId}' in execution '${executionId}' was deferred to durable recovery.`\n : `[SixbModels] Could not preserve AI usage for call '${callId}' in execution '${executionId}'.`,\n options\n )\n }\n}\n",
7
- "import { createHash } from \"node:crypto\"\nimport { assertJsonObject } from \"../../json\"\nimport type {\n AiBillableMeter,\n AiCostStorage,\n AiLimitStorage,\n AiModelCallCostRecord,\n AiModelCallUsageRecord,\n AiPricingContext,\n AiUsageStorage,\n RecordAiModelCallResult,\n Storage,\n} from \"../../storage\"\nimport {\n aiModelCallCostMatchesUsage,\n normalizeAiModelCallCostRecord,\n} from \"../../storage/ai-cost/provider\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport type { ModelCostEstimate } from \"../pricing\"\nimport type { ModelCallAccountingStorage, RecoverAiModelCallInput } from \"./types\"\n\ninterface RecordAiModelCallAccountingInput extends RecoverAiModelCallInput {\n readonly storage: Pick<ModelCallAccountingStorage, \"transaction\">\n}\n\ninterface AiAccountingCapabilities {\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n}\n\n/** Atomically append one provider call's usage and the valuation captured by the model runtime. */\nexport async function recordAiModelCallAccounting(\n input: RecordAiModelCallAccountingInput\n): Promise<RecordAiModelCallResult> {\n return input.storage.transaction(async (tx) => {\n const { aiUsage, aiCosts, aiLimits } = requireAccountingCapabilities(tx)\n const usage = await aiUsage.recordModelCall(input.usage)\n // Usage deduplicates provider lifecycle replays by execution/call identity. Always attach the\n // valuation to the canonical row it returns, not the fresh candidate ID from a replay.\n const canonical = normalizeModelCallAccounting({\n ...input,\n usage: usage.record,\n ratedAt: usage.record.recordedAt,\n })\n const record = modelCostRecord(canonical, usage.record.id)\n const estimate =\n canonical.cost.status !== \"reported\" || canonical.estimate === undefined\n ? undefined\n : modelCostRecord({ ...canonical, cost: canonical.estimate }, usage.record.id)\n await aiCosts.recordModelCallCost({\n ...record,\n ...(estimate === undefined\n ? {}\n : {\n estimate:\n estimate.status === \"rated\"\n ? { status: \"rated\", money: estimate.money, components: estimate.components }\n : {\n status: \"unpriceable\",\n reason: estimate.reason,\n ...(estimate.missingMeters === undefined\n ? {}\n : { missingMeters: estimate.missingMeters }),\n },\n }),\n })\n if (usage.created) {\n await aiLimits.recordModelCallActuals({\n projectId: usage.record.projectId,\n usageRecordId: usage.record.id,\n recordedAt: input.ratedAt,\n })\n }\n if (input.reconcileLimitReservation) {\n await aiLimits.reconcileModelCall({\n projectId: usage.record.projectId,\n executionId: usage.record.executionId,\n attempt: usage.record.attempt,\n callId: usage.record.callId,\n usageRecordId: usage.record.id,\n reconciledAt: input.ratedAt,\n })\n }\n return usage\n })\n}\n\n/** Sanitize optional enrichment before either persistence or a JSON-safe recovery handoff. */\nexport function normalizeModelCallAccounting(\n input: RecoverAiModelCallInput\n): RecoverAiModelCallInput {\n const usage = normalizeAiModelCallRecord(input.usage)\n return {\n ...input,\n cost:\n input.cost.status === \"reported\" ? input.cost : validatedEstimate(input.cost, input, usage),\n ...(input.estimate === undefined\n ? {}\n : { estimate: validatedEstimate(input.estimate, input, usage) }),\n }\n}\n\nfunction validatedEstimate(\n cost: ModelCostEstimate,\n input: RecoverAiModelCallInput,\n usage: AiModelCallUsageRecord\n): ModelCostEstimate {\n try {\n assertJsonObject(cost, \"model cost estimate\")\n const record = normalizeAiModelCallCostRecord(modelCostRecord({ ...input, cost }, usage.id))\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new TypeError(\"Estimate quantities do not match recorded usage.\")\n }\n return structuredClone(cost)\n } catch {\n console.warn(\n \"[SixbModels] Invalid model cost estimate; preserving call usage and provider cost.\"\n )\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n}\n\nfunction modelCostRecord(\n input: RecoverAiModelCallInput,\n usageRecordId: string\n): AiModelCallCostRecord {\n const billingIdentity = {\n providerId: input.usage.providerId,\n modelId: input.usage.requestedModelId,\n }\n const pricingContext: AiPricingContext = {\n ...(input.route?.providerId === undefined ? {} : { routedProviderId: input.route.providerId }),\n ...(input.route?.modelId === undefined ? {} : { routedModelId: input.route.modelId }),\n }\n if (input.cost.status === \"reported\" || input.cost.status === \"rated\") {\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"rated\",\n billingIdentity,\n pricingContext,\n priceSource: costPriceSource(input.usage, input.cost),\n money: input.cost.money,\n components: input.cost.status === \"rated\" ? input.cost.components : [],\n ratedAt: new Date(input.ratedAt),\n }\n }\n\n const reason =\n input.cost.reason === \"missing-rate-card\"\n ? \"missingRateCard\"\n : input.cost.reason === \"missing-usage\"\n ? \"missingUsageMeter\"\n : \"invalidUsageForFormula\"\n const missingMeters =\n reason === \"missingUsageMeter\" ? normalizeMissingMeters(input.cost.missingMeters) : undefined\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"unpriceable\",\n billingIdentity,\n pricingContext,\n reason,\n ...(missingMeters === undefined ? {} : { missingMeters }),\n ratedAt: new Date(input.ratedAt),\n }\n}\n\nfunction costPriceSource(\n usage: RecoverAiModelCallInput[\"usage\"],\n cost: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"reported\" | \"rated\" }>\n) {\n if (cost.status === \"reported\") {\n return {\n sourceId: \"provider-reported\",\n sourceEntryId: `${usage.providerId}/${usage.responseId}`,\n sourceVersion: \"response-v1\",\n observedAt: new Date(usage.occurredAt),\n }\n }\n const rates = cost.components.map(({ meter, rateAmountNanosPerMillion }) => ({\n meter,\n rateAmountNanosPerMillion,\n }))\n const version = createHash(\"sha256\").update(JSON.stringify(rates)).digest(\"hex\")\n return {\n sourceId: \"model-rate-card\",\n sourceEntryId: `${usage.providerId}/${usage.requestedModelId}`,\n sourceVersion: `sha256:${version}`,\n observedAt: new Date(usage.occurredAt),\n }\n}\n\nfunction normalizeMissingMeters(\n meters: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"unpriceable\" }>[\"missingMeters\"]\n): readonly AiBillableMeter[] {\n const fallback: readonly AiBillableMeter[] = [\"tokens.input.total\", \"tokens.output.total\"]\n return [...new Set<AiBillableMeter>(meters ?? fallback)]\n}\n\nexport function requireAccountingCapabilities(\n storage: Pick<Storage, \"aiUsage\" | \"aiCosts\" | \"aiLimits\">\n): AiAccountingCapabilities {\n if (!storage.aiUsage || !storage.aiCosts || !storage.aiLimits) {\n throw new Error(\n \"[SixbModels] AI model-call accounting requires storage.aiUsage, storage.aiCosts, and storage.aiLimits.\"\n )\n }\n return { aiUsage: storage.aiUsage, aiCosts: storage.aiCosts, aiLimits: storage.aiLimits }\n}\n",
8
- "import type { AiModelCallUsageInput } from \"../../storage\"\nimport type { ModelUsage } from \"../events\"\n\n/** Map one provider-neutral model call into Sixb's durable accounting vocabulary. */\nexport function aiModelCallUsageFromModel(usage: ModelUsage): AiModelCallUsageInput {\n return {\n ...(usage.inputTokens === undefined ? {} : { inputTokens: usage.inputTokens }),\n ...(usage.outputTokens === undefined ? {} : { outputTokens: usage.outputTokens }),\n ...(usage.uncachedInputTokens === undefined\n ? {}\n : { uncachedInputTokens: usage.uncachedInputTokens }),\n ...(usage.cacheReadInputTokens === undefined\n ? {}\n : { cacheReadInputTokens: usage.cacheReadInputTokens }),\n ...(usage.cacheWriteInputTokens === undefined\n ? {}\n : { cacheWriteInputTokens: usage.cacheWriteInputTokens }),\n ...(usage.textOutputTokens === undefined ? {} : { textOutputTokens: usage.textOutputTokens }),\n ...(usage.reasoningOutputTokens === undefined\n ? {}\n : { reasoningOutputTokens: usage.reasoningOutputTokens }),\n }\n}\n",
9
- "import type { RecordAiModelCallInput, RecordAiModelCallResult } from \"../../storage\"\nimport { AiCostStorageError, AiLimitStorageError, AiUsageStorageError } from \"../../storage\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport { recordAiModelCallAccounting } from \"./model-call-accounting\"\nimport type {\n AiModelCallAccountingPayload,\n AiModelCallRecordPayload,\n AiModelCallRecoveryRecord,\n ModelCallAccountingStorage,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nclass InvalidAiUsageRecoveryJobError extends Error {\n readonly name = \"InvalidAiUsageRecoveryJobError\"\n\n constructor(message: string, options?: ErrorOptions) {\n super(`[SixbModels] ${message}`, options)\n }\n}\n\n/** Encode one failed accounting transaction for a durable, JSON-safe handoff. */\nexport function modelCallRecoveryPayload(input: RecoverAiModelCallInput): {\n readonly record: AiModelCallRecordPayload\n readonly accounting: AiModelCallAccountingPayload\n} {\n normalizeAiModelCallRecord(input.usage)\n return {\n record: toQueuePayload(input.usage),\n accounting: toAccountingPayload(input),\n }\n}\n\n/** Replay one durable handoff through the idempotent atomic accounting boundary. */\nexport async function recordRecoveredAiModelCall(\n storage: Pick<ModelCallAccountingStorage, \"transaction\">,\n job: AiModelCallRecoveryRecord\n): Promise<RecordAiModelCallResult> {\n const usage = fromQueuePayload(job)\n const accounting = accountingFromQueuePayload(job)\n return recordAiModelCallAccounting({ storage, usage, ...accounting })\n}\n\n/** Validation and referential-integrity failures cannot become valid through queue redelivery. */\nexport function isPermanentAiUsageRecoveryError(error: unknown): boolean {\n return (\n error instanceof InvalidAiUsageRecoveryJobError ||\n error instanceof TypeError ||\n (error instanceof AiUsageStorageError &&\n (error.code === \"duplicate_id\" || error.code === \"missing_execution\")) ||\n (error instanceof AiCostStorageError &&\n (error.code === \"missing_usage\" || error.code === \"cost_mismatch\")) ||\n (error instanceof AiLimitStorageError &&\n (error.code === \"missing_execution\" ||\n error.code === \"missing_reservation\" ||\n error.code === \"missing_usage_record\" ||\n error.code === \"usage_mismatch\" ||\n error.code === \"reservation_conflict\" ||\n error.code === \"reconciliation_conflict\" ||\n error.code === \"invalid_reservation_state\"))\n )\n}\n\nfunction toQueuePayload(record: RecordAiModelCallInput): AiModelCallRecordPayload {\n return {\n id: record.id,\n executionId: record.executionId,\n attempt: record.attempt,\n callId: record.callId,\n requesterGroupIds: [...record.requesterGroupIds],\n providerId: record.providerId,\n ...(record.providerIds === undefined\n ? {}\n : { providerIds: structuredClone(record.providerIds) }),\n requestedModelId: record.requestedModelId,\n ...(record.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: structuredClone(record.requestedReasoning) }),\n ...(record.responseModelId === undefined ? {} : { responseModelId: record.responseModelId }),\n responseId: record.responseId,\n usage: aiModelCallUsageFromModel(record.usage),\n ...(record.rawUsage === undefined ? {} : { rawUsage: structuredClone(record.rawUsage) }),\n occurredAt: record.occurredAt.toISOString(),\n }\n}\n\nfunction toAccountingPayload(input: RecoverAiModelCallInput): AiModelCallAccountingPayload {\n return {\n cost: structuredClone(input.cost),\n ...(input.estimate === undefined ? {} : { estimate: structuredClone(input.estimate) }),\n ...(input.route === undefined ? {} : { route: structuredClone(input.route) }),\n ratedAt: input.ratedAt.toISOString(),\n ...(input.reconcileLimitReservation ? { reconcileLimitReservation: true } : {}),\n }\n}\n\nfunction fromQueuePayload(job: AiModelCallRecoveryRecord): RecordAiModelCallInput {\n const occurredAt = parseDate(job.payload.record.occurredAt, job.id, \"occurredAt\")\n return { ...job.payload.record, projectId: job.projectId, occurredAt }\n}\n\nfunction accountingFromQueuePayload(\n job: AiModelCallRecoveryRecord\n): Omit<RecoverAiModelCallInput, \"usage\"> {\n const accounting = job.payload.accounting\n return {\n cost: structuredClone(accounting.cost),\n ...(accounting.estimate === undefined\n ? {}\n : { estimate: structuredClone(accounting.estimate) }),\n ...(accounting.route === undefined ? {} : { route: structuredClone(accounting.route) }),\n ratedAt: parseDate(accounting.ratedAt, job.id, \"ratedAt\"),\n reconcileLimitReservation: accounting.reconcileLimitReservation === true,\n }\n}\n\nfunction parseDate(value: string, jobId: string, field: string): Date {\n const date = new Date(value)\n if (!Number.isFinite(date.getTime())) {\n throw new InvalidAiUsageRecoveryJobError(\n `AI usage recovery job '${jobId}' has an invalid ${field} timestamp.`\n )\n }\n return date\n}\n",
10
- "import { randomUUID } from \"node:crypto\"\nimport type { ReadonlyJsonObject, RecordAiModelCallInput } from \"../../storage\"\nimport type { ModelCallEndEvent, ModelUsage } from \"../events\"\nimport type { LanguageModel } from \"../language-model\"\nimport { ModelUsageRecordingError } from \"./errors\"\nimport {\n normalizeModelCallAccounting,\n recordAiModelCallAccounting,\n requireAccountingCapabilities,\n} from \"./model-call-accounting\"\nimport {\n type AiModelCallAdmissionInput,\n aiModelCallOutputTokenAllowance,\n estimateAiModelCallInputTokens,\n estimatedAiModelCallTotalTokens,\n} from \"./model-call-admission\"\nimport type { AiModelCallLimitController } from \"./model-call-limits\"\nimport { isPermanentAiUsageRecoveryError } from \"./model-call-recovery\"\nimport type {\n ModelCallAccountingStorage,\n RecoverAiModelCall,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nconst STORAGE_RETRY_DELAYS_MS = [50, 200, 600] as const\n\nexport interface AiModelCallRecorderInput {\n readonly storage: ModelCallAccountingStorage\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly limits: AiModelCallLimitController\n readonly recoverAiModelCall: RecoverAiModelCall\n}\n\ninterface AiModelCallRecorderInternals {\n readonly generateId?: () => string\n readonly now?: () => Date\n readonly retryDelaysMs?: readonly number[]\n readonly sleep?: (ms: number) => Promise<void>\n readonly recordAccounting?: (input: RecoverAiModelCallInput) => Promise<void>\n}\n\n/** Persist every completed provider call before another billable loop step can start. */\nexport class AiModelCallRecorder {\n private readonly generateId: () => string\n private readonly now: () => Date\n private readonly retryDelaysMs: readonly number[]\n private readonly sleep: (ms: number) => Promise<void>\n private readonly recordAccounting: (input: RecoverAiModelCallInput) => Promise<void>\n private readonly reservations = new Set<string>()\n private admissionError: unknown\n private recordingError: ModelUsageRecordingError | undefined\n\n constructor(\n private readonly input: AiModelCallRecorderInput,\n internals: AiModelCallRecorderInternals = {}\n ) {\n requireAccountingCapabilities(input.storage)\n this.generateId = internals.generateId ?? (() => `ai_usage_${randomUUID()}`)\n this.now = internals.now ?? (() => new Date())\n this.retryDelaysMs = internals.retryDelaysMs ?? STORAGE_RETRY_DELAYS_MS\n this.sleep = internals.sleep ?? sleep\n this.recordAccounting =\n internals.recordAccounting ??\n (async (recovery) => {\n await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery })\n })\n }\n\n /** Wrap the resolved model so all calls in an execution share admission. */\n wrapModel(model: LanguageModel): LanguageModel {\n return {\n providerId: model.providerId,\n modelId: model.modelId,\n definition: model.definition,\n costEstimator: model.costEstimator,\n ...(model.validateResponseFormat === undefined\n ? {}\n : { validateResponseFormat: model.validateResponseFormat.bind(model) }),\n stream: async (request) => {\n this.assertHealthy()\n const inputTokens = estimateAiModelCallInputTokens({\n prompt: request.messages,\n tools: request.tools,\n responseFormat: request.responseFormat,\n })\n const outputTokenAllowance = aiModelCallOutputTokenAllowance(request.maxOutputTokens)\n await this.admitCall({\n callId: request.callId,\n providerId: model.providerId,\n modelId: model.modelId,\n costEstimator: model.costEstimator,\n inputTokens,\n outputTokenAllowance,\n estimatedTotalTokens: estimatedAiModelCallTotalTokens(inputTokens, outputTokenAllowance),\n })\n try {\n return await model.stream(request)\n } catch (error) {\n await this.markCallUnknown(request.callId)\n throw error\n }\n },\n }\n }\n\n /** Admit one provider attempt, independently of its language or embedding protocol. */\n async admitCall(\n call: Omit<\n AiModelCallAdmissionInput,\n \"projectId\" | \"executionId\" | \"attempt\" | \"requesterGroupIds\"\n >\n ): Promise<void> {\n this.assertHealthy()\n try {\n const decision = await this.input.limits.beforeModelCall({\n ...call,\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n requesterGroupIds: this.input.requesterGroupIds,\n })\n if (decision.reservation === \"active\") this.reservations.add(call.callId)\n } catch (error) {\n // Execution boundaries must retain the original coded admission failure.\n this.admissionError = error\n throw error\n }\n }\n\n /** Keep an unresolved reservation when an attempted call's billable outcome is unknown. */\n private async markCallUnknown(callId: string): Promise<void> {\n if (!this.reservations.has(callId)) return\n await this.input.limits.markModelCallUnknown({\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId,\n })\n }\n\n readonly onModelCallEnd = async (event: ModelCallEndEvent): Promise<void> => {\n // Calls already in flight still need their own accounting after another call fails.\n // Only admission is gated by the execution's sticky failure.\n try {\n const occurredAt = this.now()\n const record: RecordAiModelCallInput = {\n id: this.generateId(),\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId: event.callId,\n requesterGroupIds: this.input.requesterGroupIds,\n providerId: event.providerId,\n ...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),\n requestedModelId: event.modelId,\n ...(event.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: event.requestedReasoning }),\n ...(event.responseModelId === undefined ? {} : { responseModelId: event.responseModelId }),\n responseId: event.responseId,\n usage: aiModelCallUsageFromModel(event.usage),\n ...(event.usage.raw === undefined ? {} : { rawUsage: rawUsage(event.usage) }),\n occurredAt,\n }\n const recoveryInput = normalizeModelCallAccounting({\n usage: record,\n cost: event.cost,\n ...(event.estimate === undefined ? {} : { estimate: event.estimate }),\n ...(event.route === undefined ? {} : { route: event.route }),\n ratedAt: new Date(occurredAt),\n ...(this.reservations.has(event.callId) ? { reconcileLimitReservation: true } : {}),\n })\n\n try {\n await retryOperation(\n () => this.recordAccounting(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (storageError) {\n if (isPermanentAiUsageRecoveryError(storageError)) throw storageError\n\n try {\n await retryOperation(\n () => this.input.recoverAiModelCall(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (recoveryError) {\n throw new AggregateError(\n [storageError, recoveryError],\n \"Direct AI accounting and durable recovery both failed.\"\n )\n }\n throw new ModelUsageRecordingError(this.input.executionId, event.callId, true, {\n cause: storageError,\n })\n }\n } catch (error) {\n const recordingError =\n error instanceof ModelUsageRecordingError\n ? error\n : new ModelUsageRecordingError(this.input.executionId, event.callId, false, {\n cause: error,\n })\n this.recordingError ??= recordingError\n throw recordingError\n }\n }\n\n assertHealthy(): void {\n if (this.admissionError !== undefined) throw this.admissionError\n if (this.recordingError) throw this.recordingError\n }\n}\n\nfunction rawUsage(usage: ModelUsage): ReadonlyJsonObject {\n return structuredClone(usage.raw ?? {})\n}\n\nasync function retryOperation<TResult>(\n operation: () => Promise<TResult>,\n retryDelaysMs: readonly number[],\n wait: (ms: number) => Promise<void>,\n shouldRetry: (error: unknown) => boolean\n): Promise<TResult> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await operation()\n } catch (error) {\n if (!shouldRetry(error)) throw error\n const delay = retryDelaysMs[attempt]\n if (delay === undefined) throw error\n await wait(delay)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n",
11
- "import type { AiModelCallReservationIdentity } from \"../../storage\"\nimport type { ModelCostEstimator } from \"../pricing\"\n\n/** Default output ceiling when a call and its resolved model supply no limit. */\nexport const AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE = 4_096\n\nexport type AiModelCallInputTokenEstimate =\n | {\n readonly status: \"estimated\"\n readonly tokens: number\n readonly method: \"utf8BytesDividedByFour\"\n }\n | {\n readonly status: \"unavailable\"\n readonly reason: \"nonTextInput\" | \"unserializableInput\"\n }\n\n/** Provider-neutral snapshot passed to aggregate-budget admission before a provider request. */\nexport interface AiModelCallAdmissionInput {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly callId: string\n readonly providerId: string\n readonly modelId: string\n readonly costEstimator?: ModelCostEstimator\n readonly inputTokens: AiModelCallInputTokenEstimate\n readonly outputTokenAllowance: number\n readonly estimatedTotalTokens?: number\n}\n\nexport interface AiModelCallAdmissionDecision {\n /** Active means accounting must reconcile the reservation for this provider attempt. */\n readonly reservation: \"active\" | \"none\"\n}\n\nexport type BeforeAiModelCall = (\n input: AiModelCallAdmissionInput\n) => AiModelCallAdmissionDecision | Promise<AiModelCallAdmissionDecision>\n\nexport type MarkAiModelCallUnknown = (input: AiModelCallReservationIdentity) => void | Promise<void>\n\n/**\n * Estimate the exact, prepared provider request without requiring a provider-specific tokenizer.\n *\n * The heuristic is intentionally explicit so reservations are reproducible. Non-text inputs are\n * reported as unavailable; an enforced token or cost policy can then fail closed instead of\n * pretending that an image, file, or provider-defined payload has no token cost.\n */\nexport function estimateAiModelCallInputTokens(input: {\n readonly prompt: unknown\n readonly tools: unknown\n readonly responseFormat: unknown\n}): AiModelCallInputTokenEstimate {\n if (containsNonTextInput(input.prompt)) {\n return { status: \"unavailable\", reason: \"nonTextInput\" }\n }\n\n let serialized: string | undefined\n try {\n serialized = JSON.stringify(input)\n } catch {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n if (serialized === undefined) {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n\n const bytes = new TextEncoder().encode(serialized).byteLength\n return {\n status: \"estimated\",\n tokens: Math.ceil(bytes / 4),\n method: \"utf8BytesDividedByFour\",\n }\n}\n\nexport function aiModelCallOutputTokenAllowance(maxOutputTokens: number | undefined): number {\n if (maxOutputTokens === undefined) return AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE\n if (!Number.isSafeInteger(maxOutputTokens) || maxOutputTokens <= 0) {\n throw new TypeError(\n \"[SixbModels] AI model-call maxOutputTokens must be a positive safe integer.\"\n )\n }\n return maxOutputTokens\n}\n\nexport function estimatedAiModelCallTotalTokens(\n inputTokens: AiModelCallInputTokenEstimate,\n outputTokenAllowance: number\n): number | undefined {\n if (inputTokens.status !== \"estimated\") return undefined\n const total = inputTokens.tokens + outputTokenAllowance\n if (!Number.isSafeInteger(total)) {\n throw new TypeError(\"[SixbModels] AI model-call token estimate exceeds the safe range.\")\n }\n return total\n}\n\nfunction containsNonTextInput(value: unknown, seen = new WeakSet<object>()): boolean {\n if (value === null || typeof value !== \"object\") return false\n if (\n value instanceof URL ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n (typeof Blob !== \"undefined\" && value instanceof Blob)\n ) {\n return true\n }\n if (seen.has(value)) return false\n seen.add(value)\n\n if (!Array.isArray(value)) {\n const type = Reflect.get(value, \"type\")\n if (\n type === \"image\" ||\n type === \"file\" ||\n type === \"reasoning-file\" ||\n type === \"custom\" ||\n type === \"provider-state\"\n ) {\n return true\n }\n }\n\n return Object.values(value).some((entry) => containsNonTextInput(entry, seen))\n}\n",
12
- "import { createSixbError } from \"../../errors/internal\"\nimport type { AgentQueueJob, Queue } from \"../../queues\"\nimport { modelCallRecoveryPayload } from \"./model-call-recovery\"\nimport type { RecoverAiModelCallInput } from \"./types\"\n\n/** Stable queue identity: a lost enqueue response can safely retry the same accounting handoff. */\nfunction agentAiUsageRecoveryJobId(recordId: string): string {\n return `agt_usage_job_${recordId}`\n}\n\n/** Transport adapter for the agent worker's existing durable recovery lane. */\nexport async function enqueueAiModelCallRecovery(\n queue: Pick<Queue<AgentQueueJob>, \"enqueue\">,\n input: RecoverAiModelCallInput\n): Promise<void> {\n const payload = modelCallRecoveryPayload(input)\n const record = input.usage\n const jobId = agentAiUsageRecoveryJobId(record.id)\n const [job] = await queue.enqueue({\n projectId: record.projectId,\n jobs: [{ id: jobId, type: \"agent.ai-usage.record.requested\", payload }],\n })\n\n if (job?.id !== jobId || job.type !== \"agent.ai-usage.record.requested\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbModels] Agent queue did not confirm AI usage recovery job '${jobId}'.`,\n { details: { jobId } }\n )\n }\n}\n"
13
- ],
14
- "mappings": "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",
15
- "debugId": "2551F06B44879D0464756E2164756E21",
16
- "names": []
17
- }