@sixb/core 0.1.11 → 0.1.13

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 (910) hide show
  1. package/dist/actions/builders/params.d.ts +1 -22
  2. package/dist/actions/builders/params.d.ts.map +1 -1
  3. package/dist/actions/index.d.ts +2 -2
  4. package/dist/actions/index.d.ts.map +1 -1
  5. package/dist/actions/index.js +33 -30
  6. package/dist/actions/index.js.map +1 -1
  7. package/dist/actions/read-facade.d.ts +14 -16
  8. package/dist/actions/read-facade.d.ts.map +1 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run-dispatch.d.ts +2 -0
  11. package/dist/actions/run-dispatch.d.ts.map +1 -1
  12. package/dist/actions/types/context.d.ts +18 -31
  13. package/dist/actions/types/context.d.ts.map +1 -1
  14. package/dist/actions/types/params.d.ts +11 -44
  15. package/dist/actions/types/params.d.ts.map +1 -1
  16. package/dist/actions/validation.d.ts.map +1 -1
  17. package/dist/actions/worker.js +3 -2
  18. package/dist/actions/worker.js.map +2 -2
  19. package/dist/agents/errors.d.ts +1 -1
  20. package/dist/agents/errors.d.ts.map +1 -1
  21. package/dist/agents/execution.d.ts +15 -9
  22. package/dist/agents/execution.d.ts.map +1 -1
  23. package/dist/agents/ids.d.ts +2 -0
  24. package/dist/agents/ids.d.ts.map +1 -1
  25. package/dist/agents/index.d.ts +1 -1
  26. package/dist/agents/index.d.ts.map +1 -1
  27. package/dist/agents/index.js +52 -44
  28. package/dist/agents/index.js.map +1 -1
  29. package/dist/agents/request.d.ts.map +1 -1
  30. package/dist/agents/sandbox.d.ts +5 -0
  31. package/dist/agents/sandbox.d.ts.map +1 -0
  32. package/dist/agents/streams/index.js +4 -3
  33. package/dist/agents/streams/index.js.map +1 -1
  34. package/dist/agents/streams/internal.js +4 -3
  35. package/dist/agents/streams/internal.js.map +1 -1
  36. package/dist/agents/validation.d.ts.map +1 -1
  37. package/dist/assert-never.d.ts +6 -0
  38. package/dist/assert-never.d.ts.map +1 -0
  39. package/dist/auth/client-address.d.ts +3 -0
  40. package/dist/auth/client-address.d.ts.map +1 -0
  41. package/dist/auth/csrf.d.ts +5 -1
  42. package/dist/auth/csrf.d.ts.map +1 -1
  43. package/dist/auth/index.d.ts +3 -2
  44. package/dist/auth/index.d.ts.map +1 -1
  45. package/dist/auth/index.js +15 -7
  46. package/dist/auth/index.js.map +1 -1
  47. package/dist/auth/runtime.d.ts +58 -41
  48. package/dist/auth/runtime.d.ts.map +1 -1
  49. package/dist/auth/session-cache.d.ts +10 -3
  50. package/dist/auth/session-cache.d.ts.map +1 -1
  51. package/dist/auth/sessions.d.ts +12 -0
  52. package/dist/auth/sessions.d.ts.map +1 -1
  53. package/dist/auth/strategy.js +1 -1
  54. package/dist/auth/types.d.ts +8 -15
  55. package/dist/auth/types.d.ts.map +1 -1
  56. package/dist/authorization/index.js +5 -4
  57. package/dist/authorization/index.js.map +1 -1
  58. package/dist/bootstrap/index.d.ts +1 -1
  59. package/dist/bootstrap/index.d.ts.map +1 -1
  60. package/dist/bootstrap/index.js +54 -48
  61. package/dist/bootstrap/index.js.map +1 -1
  62. package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
  63. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  64. package/dist/{chunk-q5gz3g2j.js → chunk-0321g649.js} +2 -16
  65. package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
  66. package/dist/{chunk-d63nnr5b.js → chunk-04h4t2b5.js} +39 -53
  67. package/dist/{chunk-d63nnr5b.js.map → chunk-04h4t2b5.js.map} +5 -6
  68. package/dist/chunk-2fv8sajb.js +84 -0
  69. package/dist/chunk-2fv8sajb.js.map +10 -0
  70. package/dist/{chunk-1yefycb1.js → chunk-2hbhn1ff.js} +2 -2
  71. package/dist/{chunk-ap0g1g74.js → chunk-3nx8vj5a.js} +43 -6
  72. package/dist/chunk-3nx8vj5a.js.map +12 -0
  73. package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
  74. package/dist/{chunk-0y39rgsb.js → chunk-4tnrzqqh.js} +1 -1
  75. package/dist/chunk-58geavnf.js +29 -0
  76. package/dist/chunk-58geavnf.js.map +10 -0
  77. package/dist/{chunk-01kj2pbh.js → chunk-63fp9x3q.js} +97 -67
  78. package/dist/chunk-63fp9x3q.js.map +20 -0
  79. package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
  80. package/dist/chunk-69266efg.js.map +12 -0
  81. package/dist/{chunk-sepyxgpc.js → chunk-693f3zn8.js} +70 -28
  82. package/dist/chunk-693f3zn8.js.map +15 -0
  83. package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
  84. package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
  85. package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
  86. package/dist/{chunk-a0e6x5hd.js → chunk-898y24dd.js} +165 -90
  87. package/dist/chunk-898y24dd.js.map +15 -0
  88. package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
  89. package/dist/chunk-91kcnbf0.js.map +10 -0
  90. package/dist/{chunk-z0s4axeh.js → chunk-91wthfwe.js} +97 -21
  91. package/dist/{chunk-z0s4axeh.js.map → chunk-91wthfwe.js.map} +8 -7
  92. package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
  93. package/dist/chunk-96yw3pwd.js.map +10 -0
  94. package/dist/chunk-98cw09sw.js.map +2 -2
  95. package/dist/{chunk-g00bfdq6.js → chunk-9pfw47qx.js} +318 -257
  96. package/dist/chunk-9pfw47qx.js.map +44 -0
  97. package/dist/{chunk-5hz0fnca.js → chunk-a0073121.js} +64 -60
  98. package/dist/chunk-a0073121.js.map +12 -0
  99. package/dist/{chunk-cfvakeax.js → chunk-a69fkrtr.js} +5 -5
  100. package/dist/{chunk-72w2pxk7.js → chunk-bdhfn0ww.js} +11 -3
  101. package/dist/{chunk-72w2pxk7.js.map → chunk-bdhfn0ww.js.map} +3 -3
  102. package/dist/chunk-bep5rrdq.js +81 -0
  103. package/dist/chunk-bep5rrdq.js.map +10 -0
  104. package/dist/chunk-bxx3ms5t.js +29 -0
  105. package/dist/chunk-bxx3ms5t.js.map +10 -0
  106. package/dist/{chunk-v2vcg0w6.js → chunk-cbn96bve.js} +2 -2
  107. package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
  108. package/dist/chunk-cd234ba4.js.map +14 -0
  109. package/dist/{chunk-gq8vhakp.js → chunk-cvrbhvtr.js} +292 -104
  110. package/dist/chunk-cvrbhvtr.js.map +46 -0
  111. package/dist/{chunk-ms2tmn1k.js → chunk-d8yes9yx.js} +355 -100
  112. package/dist/chunk-d8yes9yx.js.map +20 -0
  113. package/dist/{chunk-pr2h4bv4.js → chunk-darm7eeg.js} +9 -9
  114. package/dist/{chunk-pr2h4bv4.js.map → chunk-darm7eeg.js.map} +3 -3
  115. package/dist/chunk-dmn70ztd.js.map +2 -2
  116. package/dist/chunk-drz59ve0.js +57 -0
  117. package/dist/chunk-drz59ve0.js.map +10 -0
  118. package/dist/{chunk-skz0hst3.js → chunk-dsfw1bdr.js} +6 -86
  119. package/dist/{chunk-skz0hst3.js.map → chunk-dsfw1bdr.js.map} +3 -3
  120. package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
  121. package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
  122. package/dist/chunk-ffwvdgk1.js +85 -0
  123. package/dist/chunk-ffwvdgk1.js.map +10 -0
  124. package/dist/chunk-gbcrz0gr.js +552 -0
  125. package/dist/chunk-gbcrz0gr.js.map +17 -0
  126. package/dist/{chunk-gqm76kse.js → chunk-gc226ten.js} +434 -177
  127. package/dist/chunk-gc226ten.js.map +62 -0
  128. package/dist/{chunk-awbhdqyc.js → chunk-gmt22nxx.js} +10 -16
  129. package/dist/chunk-gmt22nxx.js.map +10 -0
  130. package/dist/chunk-h89wz928.js +42 -0
  131. package/dist/chunk-h89wz928.js.map +10 -0
  132. package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
  133. package/dist/chunk-hgqpcmyr.js.map +12 -0
  134. package/dist/{chunk-gqh45d2n.js → chunk-ht4a7mjg.js} +76 -6
  135. package/dist/chunk-ht4a7mjg.js.map +15 -0
  136. package/dist/{chunk-x9m9x2eq.js → chunk-jhyc777j.js} +3 -3
  137. package/dist/{chunk-fh8kgex1.js → chunk-jmwy25mf.js} +76 -58
  138. package/dist/{chunk-fh8kgex1.js.map → chunk-jmwy25mf.js.map} +3 -3
  139. package/dist/{chunk-rb1xx120.js → chunk-k4kkp58d.js} +25 -8
  140. package/dist/chunk-k4kkp58d.js.map +11 -0
  141. package/dist/{chunk-jsy70480.js → chunk-ky7zpbtt.js} +366 -98
  142. package/dist/chunk-ky7zpbtt.js.map +19 -0
  143. package/dist/chunk-m4ehq95f.js +9 -0
  144. package/dist/chunk-m4ehq95f.js.map +10 -0
  145. package/dist/{chunk-17kfctj6.js → chunk-m8zkvep1.js} +2 -2
  146. package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
  147. package/dist/chunk-mdnw7nj8.js.map +15 -0
  148. package/dist/{chunk-4zhmdsx6.js → chunk-mf6hwpzh.js} +121 -28
  149. package/dist/{chunk-4zhmdsx6.js.map → chunk-mf6hwpzh.js.map} +6 -6
  150. package/dist/{chunk-z30bv4ga.js → chunk-mr60an99.js} +5 -3
  151. package/dist/{chunk-z30bv4ga.js.map → chunk-mr60an99.js.map} +3 -3
  152. package/dist/chunk-n33e8dz8.js +191 -0
  153. package/dist/chunk-n33e8dz8.js.map +11 -0
  154. package/dist/chunk-p1683c0v.js +104 -0
  155. package/dist/chunk-p1683c0v.js.map +11 -0
  156. package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
  157. package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
  158. package/dist/chunk-rdghfsss.js.map +10 -0
  159. package/dist/{chunk-ftv470j8.js → chunk-rqtdtm43.js} +365 -67
  160. package/dist/chunk-rqtdtm43.js.map +50 -0
  161. package/dist/{chunk-dz5h08xv.js → chunk-rzcjp5m2.js} +28 -9
  162. package/dist/chunk-rzcjp5m2.js.map +25 -0
  163. package/dist/{chunk-f4w3yp4f.js → chunk-rzkr70gr.js} +108 -21
  164. package/dist/chunk-rzkr70gr.js.map +13 -0
  165. package/dist/{chunk-3ckk0xfj.js → chunk-s24qbp32.js} +18 -13
  166. package/dist/{chunk-3ckk0xfj.js.map → chunk-s24qbp32.js.map} +3 -3
  167. package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
  168. package/dist/chunk-t6f3tdnr.js.map +10 -0
  169. package/dist/{chunk-93csa55g.js → chunk-tw03bsmb.js} +11 -5
  170. package/dist/chunk-tw03bsmb.js.map +11 -0
  171. package/dist/chunk-vef6qa14.js +363 -0
  172. package/dist/chunk-vef6qa14.js.map +14 -0
  173. package/dist/{chunk-92vk7gta.js → chunk-vn3yh259.js} +1 -1
  174. package/dist/{chunk-g91qxjj0.js → chunk-w9bp61e7.js} +5 -5
  175. package/dist/{chunk-b19g04jk.js → chunk-xgptywp0.js} +4 -3
  176. package/dist/chunk-xgptywp0.js.map +11 -0
  177. package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
  178. package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
  179. package/dist/{chunk-1824gssz.js → chunk-y487ywrv.js} +4 -4
  180. package/dist/{chunk-7apz6hg4.js → chunk-y6vnvayj.js} +8 -4
  181. package/dist/chunk-y6vnvayj.js.map +10 -0
  182. package/dist/{chunk-wf88w4kp.js → chunk-ypj2wqtj.js} +3 -6
  183. package/dist/{chunk-wf88w4kp.js.map → chunk-ypj2wqtj.js.map} +4 -4
  184. package/dist/chunk-z3y5kg1x.js +14 -0
  185. package/dist/chunk-z3y5kg1x.js.map +10 -0
  186. package/dist/{chunk-38zv5rkr.js → chunk-z9h698s8.js} +1 -1
  187. package/dist/{chunk-38zv5rkr.js.map → chunk-z9h698s8.js.map} +2 -2
  188. package/dist/{chunk-8vj0rjgs.js → chunk-zdkcdshk.js} +3 -36
  189. package/dist/{chunk-8vj0rjgs.js.map → chunk-zdkcdshk.js.map} +3 -4
  190. package/dist/{chunk-358caqf5.js → chunk-znw0zvy4.js} +2 -2
  191. package/dist/datasets/validation.d.ts +4 -0
  192. package/dist/datasets/validation.d.ts.map +1 -1
  193. package/dist/datasets/write.d.ts.map +1 -1
  194. package/dist/datasets/write.js +5 -4
  195. package/dist/datasets/write.js.map +1 -1
  196. package/dist/edits/types.d.ts +19 -19
  197. package/dist/edits/types.d.ts.map +1 -1
  198. package/dist/error-reporting/capability.d.ts +3 -2
  199. package/dist/error-reporting/capability.d.ts.map +1 -1
  200. package/dist/error-reporting/internal.js +5 -4
  201. package/dist/error-reporting/internal.js.map +1 -1
  202. package/dist/error-reporting/reports.d.ts +10 -0
  203. package/dist/error-reporting/reports.d.ts.map +1 -1
  204. package/dist/error-reporting/types.d.ts +10 -2
  205. package/dist/error-reporting/types.d.ts.map +1 -1
  206. package/dist/errors/catalog.d.ts +16 -0
  207. package/dist/errors/catalog.d.ts.map +1 -1
  208. package/dist/errors/failure-message.d.ts +8 -0
  209. package/dist/errors/failure-message.d.ts.map +1 -0
  210. package/dist/errors/internal.d.ts.map +1 -1
  211. package/dist/errors/internal.js +3 -2
  212. package/dist/errors/internal.js.map +1 -1
  213. package/dist/events/envelope.d.ts +0 -12
  214. package/dist/events/envelope.d.ts.map +1 -1
  215. package/dist/events/index.d.ts +1 -1
  216. package/dist/events/index.d.ts.map +1 -1
  217. package/dist/events/index.js +5 -4
  218. package/dist/events/index.js.map +1 -1
  219. package/dist/events/service.d.ts +1 -2
  220. package/dist/events/service.d.ts.map +1 -1
  221. package/dist/events/toStoredEvent.d.ts +1 -2
  222. package/dist/events/toStoredEvent.d.ts.map +1 -1
  223. package/dist/events/types/index.d.ts +2 -1
  224. package/dist/events/types/index.d.ts.map +1 -1
  225. package/dist/execution/agent.d.ts +1 -2
  226. package/dist/execution/agent.d.ts.map +1 -1
  227. package/dist/execution/agent.js +48 -43
  228. package/dist/execution/agent.js.map +1 -1
  229. package/dist/execution/authorization.d.ts.map +1 -1
  230. package/dist/execution/authorized-object-reader.d.ts +3 -0
  231. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  232. package/dist/execution/kernel-operation.d.ts +4 -0
  233. package/dist/execution/kernel-operation.d.ts.map +1 -0
  234. package/dist/execution/primitive.d.ts +1 -2
  235. package/dist/execution/primitive.d.ts.map +1 -1
  236. package/dist/execution/primitive.js +47 -42
  237. package/dist/execution/primitive.js.map +3 -3
  238. package/dist/execution/request.d.ts +1 -2
  239. package/dist/execution/request.d.ts.map +1 -1
  240. package/dist/execution/request.js +48 -43
  241. package/dist/execution/request.js.map +3 -3
  242. package/dist/execution/types.d.ts +6 -0
  243. package/dist/execution/types.d.ts.map +1 -1
  244. package/dist/index.d.ts +20 -10
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +77 -62
  247. package/dist/index.js.map +1 -1
  248. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  249. package/dist/lake-storage/index.js +5 -4
  250. package/dist/lake-storage/index.js.map +1 -1
  251. package/dist/maintenance/ontology-maintenance.d.ts +11 -1
  252. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  253. package/dist/materialization/errors.d.ts +4 -2
  254. package/dist/materialization/errors.d.ts.map +1 -1
  255. package/dist/materialization/events.d.ts +27 -2
  256. package/dist/materialization/events.d.ts.map +1 -1
  257. package/dist/materialization/index.d.ts +1 -0
  258. package/dist/materialization/index.d.ts.map +1 -1
  259. package/dist/materialization/index.js +3 -3
  260. package/dist/materialization/model.d.ts +2 -0
  261. package/dist/materialization/model.d.ts.map +1 -1
  262. package/dist/materialization/vectors.d.ts +19 -0
  263. package/dist/materialization/vectors.d.ts.map +1 -0
  264. package/dist/materializer/context.d.ts.map +1 -1
  265. package/dist/materializer/edits/commit.d.ts.map +1 -1
  266. package/dist/materializer/edits/operations.d.ts +2 -1
  267. package/dist/materializer/edits/operations.d.ts.map +1 -1
  268. package/dist/materializer/edits/plan.d.ts +2 -2
  269. package/dist/materializer/edits/plan.d.ts.map +1 -1
  270. package/dist/materializer/edits/user-refs.d.ts +30 -0
  271. package/dist/materializer/edits/user-refs.d.ts.map +1 -0
  272. package/dist/materializer/edits/vector-authority.d.ts +6 -0
  273. package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
  274. package/dist/materializer/edits/vectors.d.ts +6 -0
  275. package/dist/materializer/edits/vectors.d.ts.map +1 -0
  276. package/dist/materializer/effective/build-events.d.ts +2 -2
  277. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  278. package/dist/materializer/effective/validate.d.ts.map +1 -1
  279. package/dist/materializer/effective/vector-indexing.d.ts +7 -0
  280. package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
  281. package/dist/materializer/effective/vectors.d.ts +6 -0
  282. package/dist/materializer/effective/vectors.d.ts.map +1 -0
  283. package/dist/materializer/execution/scope.d.ts +11 -3
  284. package/dist/materializer/execution/scope.d.ts.map +1 -1
  285. package/dist/materializer/execution/work-executor.d.ts +2 -1
  286. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  287. package/dist/materializer/index.js +30 -27
  288. package/dist/materializer/index.js.map +1 -1
  289. package/dist/materializer/projections/replacement-plan.d.ts +2 -0
  290. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  291. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  292. package/dist/materializer/telemetry/plan.d.ts +2 -2
  293. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  294. package/dist/models/catalog-index.d.ts +15 -0
  295. package/dist/models/catalog-index.d.ts.map +1 -0
  296. package/dist/models/catalog.d.ts +27 -6
  297. package/dist/models/catalog.d.ts.map +1 -1
  298. package/dist/models/decision/catalog.d.ts +12 -0
  299. package/dist/models/decision/catalog.d.ts.map +1 -0
  300. package/dist/models/decision/errors.d.ts +7 -0
  301. package/dist/models/decision/errors.d.ts.map +1 -0
  302. package/dist/models/decision/output.d.ts +50 -0
  303. package/dist/models/decision/output.d.ts.map +1 -0
  304. package/dist/models/decision/questions.d.ts +14 -0
  305. package/dist/models/decision/questions.d.ts.map +1 -0
  306. package/dist/models/decision/runtime.d.ts +7 -0
  307. package/dist/models/decision/runtime.d.ts.map +1 -0
  308. package/dist/models/decision/types.d.ts +92 -0
  309. package/dist/models/decision/types.d.ts.map +1 -0
  310. package/dist/models/decision/validation.d.ts +7 -0
  311. package/dist/models/decision/validation.d.ts.map +1 -0
  312. package/dist/models/definitions.d.ts +1 -1
  313. package/dist/models/definitions.d.ts.map +1 -1
  314. package/dist/models/embedding-model.d.ts +60 -0
  315. package/dist/models/embedding-model.d.ts.map +1 -0
  316. package/dist/models/execution/binding.d.ts +2 -0
  317. package/dist/models/execution/binding.d.ts.map +1 -1
  318. package/dist/models/execution/embedding.d.ts +5 -0
  319. package/dist/models/execution/embedding.d.ts.map +1 -0
  320. package/dist/models/execution/index.js +32 -27
  321. package/dist/models/execution/index.js.map +1 -1
  322. package/dist/models/execution/model-call-recorder.d.ts +5 -1
  323. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  324. package/dist/models/execution/session.d.ts +21 -0
  325. package/dist/models/execution/session.d.ts.map +1 -0
  326. package/dist/models/execution.d.ts.map +1 -1
  327. package/dist/models/generation-types.d.ts +2 -0
  328. package/dist/models/generation-types.d.ts.map +1 -1
  329. package/dist/models/index.d.ts +9 -1
  330. package/dist/models/index.d.ts.map +1 -1
  331. package/dist/models/index.js +17 -7
  332. package/dist/models/index.js.map +1 -1
  333. package/dist/models/pricing.d.ts +3 -2
  334. package/dist/models/pricing.d.ts.map +1 -1
  335. package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
  336. package/dist/objects/execution.d.ts +21 -26
  337. package/dist/objects/execution.d.ts.map +1 -1
  338. package/dist/objects/index.js +33 -30
  339. package/dist/objects/index.js.map +1 -1
  340. package/dist/objects/query/executor.d.ts +3 -0
  341. package/dist/objects/query/executor.d.ts.map +1 -1
  342. package/dist/objects/query/index.d.ts +2 -0
  343. package/dist/objects/query/index.d.ts.map +1 -1
  344. package/dist/objects/query/index.js +42 -30
  345. package/dist/objects/query/index.js.map +1 -1
  346. package/dist/objects/query/ir.d.ts +14 -3
  347. package/dist/objects/query/ir.d.ts.map +1 -1
  348. package/dist/objects/query/normalize.d.ts.map +1 -1
  349. package/dist/objects/query/scalar-values.d.ts.map +1 -1
  350. package/dist/objects/query/validate.d.ts.map +1 -1
  351. package/dist/objects/sdk/object-handle.d.ts +6 -2
  352. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  353. package/dist/objects/sdk/object-set.d.ts +2 -3
  354. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  355. package/dist/objects/sdk/query-builder.d.ts +8 -10
  356. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  357. package/dist/objects/sdk/query-executor.d.ts +2 -0
  358. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  359. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  360. package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
  361. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  362. package/dist/objects/sdk/where.d.ts +2 -3
  363. package/dist/objects/sdk/where.d.ts.map +1 -1
  364. package/dist/objects/vectors/handle.d.ts +4 -0
  365. package/dist/objects/vectors/handle.d.ts.map +1 -0
  366. package/dist/objects/vectors/indexing-batch.d.ts +6 -0
  367. package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
  368. package/dist/objects/vectors/indexing-generate.d.ts +11 -0
  369. package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
  370. package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
  371. package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
  372. package/dist/objects/vectors/indexing-shared.d.ts +17 -0
  373. package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
  374. package/dist/objects/vectors/indexing-single.d.ts +4 -0
  375. package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
  376. package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
  377. package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
  378. package/dist/objects/vectors/indexing.d.ts +7 -0
  379. package/dist/objects/vectors/indexing.d.ts.map +1 -0
  380. package/dist/objects/vectors/profile.d.ts +13 -0
  381. package/dist/objects/vectors/profile.d.ts.map +1 -0
  382. package/dist/objects/vectors/query.d.ts +5 -0
  383. package/dist/objects/vectors/query.d.ts.map +1 -0
  384. package/dist/objects/vectors/resolve-query.d.ts +6 -0
  385. package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
  386. package/dist/objects/vectors/types.d.ts +11 -0
  387. package/dist/objects/vectors/types.d.ts.map +1 -0
  388. package/dist/ontology/builders.d.ts +11 -10
  389. package/dist/ontology/builders.d.ts.map +1 -1
  390. package/dist/ontology/index.d.ts +5 -2
  391. package/dist/ontology/index.d.ts.map +1 -1
  392. package/dist/ontology/index.js +7 -5
  393. package/dist/ontology/index.js.map +1 -1
  394. package/dist/ontology/inference/index.d.ts +34 -22
  395. package/dist/ontology/inference/index.d.ts.map +1 -1
  396. package/dist/ontology/internal.d.ts +1 -0
  397. package/dist/ontology/internal.d.ts.map +1 -1
  398. package/dist/ontology/internal.js +10 -7
  399. package/dist/ontology/internal.js.map +1 -1
  400. package/dist/ontology/primitives.d.ts +38 -0
  401. package/dist/ontology/primitives.d.ts.map +1 -0
  402. package/dist/ontology/query-capabilities.d.ts +38 -0
  403. package/dist/ontology/query-capabilities.d.ts.map +1 -0
  404. package/dist/ontology/refs.d.ts +23 -2
  405. package/dist/ontology/refs.d.ts.map +1 -1
  406. package/dist/ontology/registered.d.ts +16 -0
  407. package/dist/ontology/registered.d.ts.map +1 -0
  408. package/dist/ontology/registry.d.ts.map +1 -1
  409. package/dist/ontology/tokens.d.ts +35 -1
  410. package/dist/ontology/tokens.d.ts.map +1 -1
  411. package/dist/ontology/types.d.ts +26 -13
  412. package/dist/ontology/types.d.ts.map +1 -1
  413. package/dist/ontology/user-ref.d.ts +35 -0
  414. package/dist/ontology/user-ref.d.ts.map +1 -0
  415. package/dist/ontology/validation/definition.d.ts +3 -0
  416. package/dist/ontology/validation/definition.d.ts.map +1 -0
  417. package/dist/ontology/validation/index.d.ts +1 -1
  418. package/dist/ontology/validation/index.d.ts.map +1 -1
  419. package/dist/ontology/validation/normalize.d.ts.map +1 -1
  420. package/dist/ontology/validation/properties.d.ts +6 -1
  421. package/dist/ontology/validation/properties.d.ts.map +1 -1
  422. package/dist/ontology/validation/query.d.ts.map +1 -1
  423. package/dist/ontology/validation/schema.d.ts +1 -1
  424. package/dist/ontology/validation/schema.d.ts.map +1 -1
  425. package/dist/ontology/vector-profiles.d.ts +4 -0
  426. package/dist/ontology/vector-profiles.d.ts.map +1 -0
  427. package/dist/pipelines/index.js +32 -29
  428. package/dist/pipelines/index.js.map +1 -1
  429. package/dist/predicates/types.d.ts +53 -3
  430. package/dist/predicates/types.d.ts.map +1 -1
  431. package/dist/projections/builders.d.ts +19 -1
  432. package/dist/projections/builders.d.ts.map +1 -1
  433. package/dist/projections/internal.js +28 -25
  434. package/dist/projections/internal.js.map +1 -1
  435. package/dist/projections/validation.d.ts.map +1 -1
  436. package/dist/query.js +2 -2
  437. package/dist/queues/in-memory.d.ts +3 -2
  438. package/dist/queues/in-memory.d.ts.map +1 -1
  439. package/dist/queues/index.d.ts +1 -1
  440. package/dist/queues/index.d.ts.map +1 -1
  441. package/dist/queues/index.js +1 -1
  442. package/dist/queues/types.d.ts +5 -0
  443. package/dist/queues/types.d.ts.map +1 -1
  444. package/dist/runtime/create.d.ts +4 -3
  445. package/dist/runtime/create.d.ts.map +1 -1
  446. package/dist/runtime/host.d.ts +10 -7
  447. package/dist/runtime/host.d.ts.map +1 -1
  448. package/dist/runtime/index.d.ts +1 -1
  449. package/dist/runtime/index.d.ts.map +1 -1
  450. package/dist/runtime/internal.d.ts +3 -0
  451. package/dist/runtime/internal.d.ts.map +1 -1
  452. package/dist/runtime/internal.js +49 -1
  453. package/dist/runtime/internal.js.map +1 -1
  454. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  455. package/dist/runtime/sixb.d.ts +11 -6
  456. package/dist/runtime/sixb.d.ts.map +1 -1
  457. package/dist/runtime/types.d.ts +182 -187
  458. package/dist/runtime/types.d.ts.map +1 -1
  459. package/dist/sandboxes/auth.d.ts +16 -0
  460. package/dist/sandboxes/auth.d.ts.map +1 -0
  461. package/dist/sandboxes/config.d.ts +5 -0
  462. package/dist/sandboxes/config.d.ts.map +1 -0
  463. package/dist/sandboxes/configuration.d.ts +41 -0
  464. package/dist/sandboxes/configuration.d.ts.map +1 -0
  465. package/dist/sandboxes/environment.d.ts +13 -0
  466. package/dist/sandboxes/environment.d.ts.map +1 -0
  467. package/dist/sandboxes/errors.d.ts +1 -1
  468. package/dist/sandboxes/errors.d.ts.map +1 -1
  469. package/dist/sandboxes/index.d.ts +6 -1
  470. package/dist/sandboxes/index.d.ts.map +1 -1
  471. package/dist/sandboxes/index.js +16 -3
  472. package/dist/sandboxes/index.js.map +1 -1
  473. package/dist/sandboxes/sandbox.d.ts +39 -4
  474. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  475. package/dist/shared/params/builders.d.ts +25 -0
  476. package/dist/shared/params/builders.d.ts.map +1 -0
  477. package/dist/shared/params/types.d.ts +48 -0
  478. package/dist/shared/params/types.d.ts.map +1 -0
  479. package/dist/shared/params/user-refs.d.ts +19 -0
  480. package/dist/shared/params/user-refs.d.ts.map +1 -0
  481. package/dist/shared/params/validation.d.ts +15 -0
  482. package/dist/shared/params/validation.d.ts.map +1 -0
  483. package/dist/shares/compiler.d.ts.map +1 -1
  484. package/dist/shares/internal.js +29 -26
  485. package/dist/shares/internal.js.map +2 -2
  486. package/dist/storage/action-runs/failure.js +4 -3
  487. package/dist/storage/action-runs/failure.js.map +1 -1
  488. package/dist/storage/action-runs/provider.js +1 -1
  489. package/dist/storage/action-runs/types.d.ts +1 -1
  490. package/dist/storage/action-runs/types.d.ts.map +1 -1
  491. package/dist/storage/agents/in-memory.d.ts +2 -1
  492. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  493. package/dist/storage/agents/index.d.ts +1 -1
  494. package/dist/storage/agents/index.d.ts.map +1 -1
  495. package/dist/storage/agents/provider.d.ts +5 -1
  496. package/dist/storage/agents/provider.d.ts.map +1 -1
  497. package/dist/storage/agents/provider.js +8 -4
  498. package/dist/storage/agents/provider.js.map +1 -1
  499. package/dist/storage/agents/types.d.ts +49 -0
  500. package/dist/storage/agents/types.d.ts.map +1 -1
  501. package/dist/storage/ai-cost/analytics.d.ts +1 -0
  502. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  503. package/dist/storage/ai-cost/index.d.ts +1 -1
  504. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  505. package/dist/storage/ai-cost/provider.js +2 -2
  506. package/dist/storage/ai-cost/types.d.ts +14 -2
  507. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  508. package/dist/storage/ai-limits/enforcement.js +4 -3
  509. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  510. package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
  511. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  512. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
  513. package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
  514. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  515. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  516. package/dist/storage/auth/index.d.ts +1 -1
  517. package/dist/storage/auth/index.d.ts.map +1 -1
  518. package/dist/storage/auth/types.d.ts +62 -13
  519. package/dist/storage/auth/types.d.ts.map +1 -1
  520. package/dist/storage/connector-connections/provider.js +3 -2
  521. package/dist/storage/connector-connections/provider.js.map +2 -2
  522. package/dist/storage/executions/provider.d.ts +3 -3
  523. package/dist/storage/executions/provider.d.ts.map +1 -1
  524. package/dist/storage/executions/provider.js +13 -11
  525. package/dist/storage/executions/provider.js.map +3 -3
  526. package/dist/storage/executions/types.d.ts +3 -0
  527. package/dist/storage/executions/types.d.ts.map +1 -1
  528. package/dist/storage/executions/validation.d.ts.map +1 -1
  529. package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
  530. package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
  531. package/dist/storage/file-upload-sessions/index.d.ts +1 -1
  532. package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
  533. package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
  534. package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
  535. package/dist/storage/file-upload-sessions/provider.js +24 -0
  536. package/dist/storage/file-upload-sessions/provider.js.map +9 -0
  537. package/dist/storage/file-upload-sessions/types.d.ts +19 -1
  538. package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
  539. package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
  540. package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
  541. package/dist/storage/index.d.ts +8 -6
  542. package/dist/storage/index.d.ts.map +1 -1
  543. package/dist/storage/index.js +37 -30
  544. package/dist/storage/index.js.map +1 -1
  545. package/dist/storage/internal.js +11 -9
  546. package/dist/storage/internal.js.map +1 -1
  547. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  548. package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
  549. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
  550. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  551. package/dist/storage/objects/in-memory/storage.d.ts +7 -0
  552. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  553. package/dist/storage/objects/types.d.ts +2 -0
  554. package/dist/storage/objects/types.d.ts.map +1 -1
  555. package/dist/storage/ontology/commits.d.ts +7 -2
  556. package/dist/storage/ontology/commits.d.ts.map +1 -1
  557. package/dist/storage/ontology/in-memory/index.d.ts +4 -0
  558. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  559. package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
  560. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  561. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
  562. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  563. package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
  564. package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
  565. package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
  566. package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
  567. package/dist/storage/ontology/index.d.ts +6 -0
  568. package/dist/storage/ontology/index.d.ts.map +1 -1
  569. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  570. package/dist/storage/ontology/provider.d.ts +14 -1
  571. package/dist/storage/ontology/provider.d.ts.map +1 -1
  572. package/dist/storage/ontology/provider.js +9 -3
  573. package/dist/storage/ontology/provider.js.map +1 -1
  574. package/dist/storage/ontology/vector-indexing.d.ts +94 -0
  575. package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
  576. package/dist/storage/ontology/vectors.d.ts +56 -0
  577. package/dist/storage/ontology/vectors.d.ts.map +1 -0
  578. package/dist/storage/operation-scope.d.ts.map +1 -1
  579. package/dist/storage/operation-scope.js +1 -1
  580. package/dist/storage/projection-runs/provider.js +4 -3
  581. package/dist/storage/projection-runs/provider.js.map +1 -1
  582. package/dist/storage/types.d.ts +2 -2
  583. package/dist/storage/types.d.ts.map +1 -1
  584. package/dist/storage/workflow-interventions/index.d.ts +1 -1
  585. package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
  586. package/dist/storage/workflow-interventions/types.d.ts +5 -8
  587. package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
  588. package/dist/storage/workflow-runs/provider.js +10 -8
  589. package/dist/storage/workflow-runs/provider.js.map +1 -1
  590. package/dist/syncs/index.js +33 -30
  591. package/dist/syncs/index.js.map +1 -1
  592. package/dist/testing/action-execution.d.ts +4 -0
  593. package/dist/testing/action-execution.d.ts.map +1 -1
  594. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  595. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  596. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  597. package/dist/testing/execution.d.ts +1 -2
  598. package/dist/testing/execution.d.ts.map +1 -1
  599. package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
  600. package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
  601. package/dist/testing/index.d.ts +2 -0
  602. package/dist/testing/index.d.ts.map +1 -1
  603. package/dist/testing/index.js +2351 -1263
  604. package/dist/testing/index.js.map +19 -17
  605. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  606. package/dist/testing/object-query-contract.d.ts.map +1 -1
  607. package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
  608. package/dist/testing/ontology-contract-fixture.d.ts +8 -0
  609. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  610. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  611. package/dist/testing/queues-contract.d.ts.map +1 -1
  612. package/dist/testing/sandboxes-contract.d.ts.map +1 -1
  613. package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
  614. package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
  615. package/dist/webhooks/internal.js +29 -26
  616. package/dist/webhooks/internal.js.map +2 -2
  617. package/dist/webhooks/types.d.ts +2 -2
  618. package/dist/webhooks/types.d.ts.map +1 -1
  619. package/dist/workers/index.js +3 -2
  620. package/dist/workers/index.js.map +2 -2
  621. package/dist/workflows/failure.d.ts.map +1 -1
  622. package/dist/workflows/index.js +51 -45
  623. package/dist/workflows/index.js.map +1 -1
  624. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  625. package/dist/workflows/types.d.ts +2 -2
  626. package/dist/workflows/types.d.ts.map +1 -1
  627. package/package.json +7 -1
  628. package/src/actions/builders/params.ts +1 -48
  629. package/src/actions/index.ts +0 -3
  630. package/src/actions/read-facade.ts +102 -62
  631. package/src/actions/request.ts +13 -0
  632. package/src/actions/run-dispatch.ts +3 -0
  633. package/src/actions/types/context.ts +17 -65
  634. package/src/actions/types/params.ts +16 -75
  635. package/src/actions/validation.ts +7 -84
  636. package/src/agents/authority.ts +1 -1
  637. package/src/agents/errors.ts +3 -0
  638. package/src/agents/execution.ts +67 -15
  639. package/src/agents/ids.ts +8 -0
  640. package/src/agents/index.ts +1 -0
  641. package/src/agents/request.ts +11 -0
  642. package/src/agents/sandbox.ts +44 -0
  643. package/src/agents/validation.ts +2 -108
  644. package/src/assert-never.ts +7 -0
  645. package/src/auth/client-address.ts +12 -0
  646. package/src/auth/csrf.ts +14 -5
  647. package/src/auth/index.ts +3 -2
  648. package/src/auth/runtime.ts +299 -277
  649. package/src/auth/session-cache.ts +18 -6
  650. package/src/auth/sessions.ts +30 -0
  651. package/src/auth/types.ts +7 -17
  652. package/src/bootstrap/index.ts +1 -0
  653. package/src/bootstrap/ontology-type-manifest.ts +112 -60
  654. package/src/datasets/validation.ts +40 -11
  655. package/src/datasets/write.ts +8 -11
  656. package/src/edits/types.ts +47 -63
  657. package/src/error-reporting/capability.ts +11 -0
  658. package/src/error-reporting/reports.ts +23 -0
  659. package/src/error-reporting/types.ts +12 -1
  660. package/src/errors/catalog.ts +16 -0
  661. package/src/errors/failure-message.ts +15 -0
  662. package/src/errors/internal.ts +57 -25
  663. package/src/events/envelope.ts +0 -13
  664. package/src/events/index.ts +1 -1
  665. package/src/events/service.ts +1 -11
  666. package/src/events/toStoredEvent.ts +1 -3
  667. package/src/events/types/index.ts +1 -1
  668. package/src/execution/agent.ts +1 -2
  669. package/src/execution/authorization.ts +12 -5
  670. package/src/execution/authorized-object-reader.ts +42 -9
  671. package/src/execution/kernel-operation.ts +27 -0
  672. package/src/execution/primitive.ts +1 -2
  673. package/src/execution/request.ts +1 -2
  674. package/src/execution/scopes.ts +2 -0
  675. package/src/execution/types.ts +4 -4
  676. package/src/index.ts +68 -8
  677. package/src/lake-storage/in-memory.ts +5 -3
  678. package/src/maintenance/ontology-maintenance.ts +77 -1
  679. package/src/materialization/errors.ts +4 -2
  680. package/src/materialization/events.ts +27 -2
  681. package/src/materialization/index.ts +1 -0
  682. package/src/materialization/model.ts +2 -0
  683. package/src/materialization/vectors.ts +18 -0
  684. package/src/materializer/README.md +16 -0
  685. package/src/materializer/context.ts +10 -0
  686. package/src/materializer/edits/commit.ts +29 -13
  687. package/src/materializer/edits/operations.ts +32 -4
  688. package/src/materializer/edits/plan.ts +4 -5
  689. package/src/materializer/edits/user-refs.ts +115 -0
  690. package/src/materializer/edits/vector-authority.ts +108 -0
  691. package/src/materializer/edits/vectors.ts +100 -0
  692. package/src/materializer/effective/build-events.ts +4 -5
  693. package/src/materializer/effective/validate.ts +10 -3
  694. package/src/materializer/effective/vector-indexing.ts +84 -0
  695. package/src/materializer/effective/vectors.ts +47 -0
  696. package/src/materializer/execution/scope.ts +40 -7
  697. package/src/materializer/execution/work-executor.ts +11 -3
  698. package/src/materializer/projections/replace.ts +3 -1
  699. package/src/materializer/projections/replacement-plan.ts +4 -0
  700. package/src/materializer/shared/normalize.ts +11 -0
  701. package/src/materializer/telemetry/append.ts +5 -13
  702. package/src/materializer/telemetry/plan.ts +4 -5
  703. package/src/models/catalog-index.ts +38 -0
  704. package/src/models/catalog.ts +66 -38
  705. package/src/models/decision/catalog.ts +32 -0
  706. package/src/models/decision/errors.ts +18 -0
  707. package/src/models/decision/output.ts +101 -0
  708. package/src/models/decision/questions.ts +29 -0
  709. package/src/models/decision/runtime.ts +188 -0
  710. package/src/models/decision/types.ts +109 -0
  711. package/src/models/decision/validation.ts +335 -0
  712. package/src/models/definitions.ts +1 -1
  713. package/src/models/embedding-model.ts +129 -0
  714. package/src/models/execution/README.md +63 -0
  715. package/src/models/execution/binding.ts +2 -0
  716. package/src/models/execution/embedding.ts +133 -0
  717. package/src/models/execution/model-call-recorder.ts +42 -30
  718. package/src/models/execution/session.ts +81 -0
  719. package/src/models/execution.ts +10 -52
  720. package/src/models/generation-types.ts +2 -0
  721. package/src/models/index.ts +37 -0
  722. package/src/models/pricing.ts +1 -2
  723. package/src/objects/authorized-ontology-view.ts +12 -8
  724. package/src/objects/execution.ts +34 -61
  725. package/src/objects/query/executor.ts +25 -7
  726. package/src/objects/query/explain.ts +7 -2
  727. package/src/objects/query/index.ts +2 -0
  728. package/src/objects/query/ir.ts +13 -2
  729. package/src/objects/query/normalize.ts +5 -1
  730. package/src/objects/query/planner.ts +1 -0
  731. package/src/objects/query/scalar-values.ts +19 -0
  732. package/src/objects/query/validate.ts +129 -117
  733. package/src/objects/sdk/object-handle.ts +11 -8
  734. package/src/objects/sdk/object-set.ts +9 -15
  735. package/src/objects/sdk/query-builder.ts +66 -72
  736. package/src/objects/sdk/query-executor.ts +2 -1
  737. package/src/objects/sdk/runtime-query-executor.ts +6 -2
  738. package/src/objects/sdk/telemetry-channel.ts +6 -7
  739. package/src/objects/sdk/where.ts +6 -13
  740. package/src/objects/vectors/README.md +59 -0
  741. package/src/objects/vectors/handle.ts +91 -0
  742. package/src/objects/vectors/indexing-batch.ts +163 -0
  743. package/src/objects/vectors/indexing-generate.ts +184 -0
  744. package/src/objects/vectors/indexing-runtime.ts +17 -0
  745. package/src/objects/vectors/indexing-shared.ts +188 -0
  746. package/src/objects/vectors/indexing-single.ts +51 -0
  747. package/src/objects/vectors/indexing-store-batch.ts +62 -0
  748. package/src/objects/vectors/indexing.ts +23 -0
  749. package/src/objects/vectors/profile.ts +64 -0
  750. package/src/objects/vectors/query.ts +16 -0
  751. package/src/objects/vectors/resolve-query.ts +89 -0
  752. package/src/objects/vectors/types.ts +10 -0
  753. package/src/ontology/builders.ts +15 -11
  754. package/src/ontology/index.ts +6 -0
  755. package/src/ontology/inference/index.ts +56 -36
  756. package/src/ontology/internal.ts +1 -0
  757. package/src/ontology/json-schema.ts +12 -0
  758. package/src/ontology/primitives.ts +91 -0
  759. package/src/ontology/query-capabilities.ts +136 -0
  760. package/src/ontology/refs.ts +33 -6
  761. package/src/ontology/registered.ts +22 -0
  762. package/src/ontology/registry.ts +14 -3
  763. package/src/ontology/tokens.ts +41 -2
  764. package/src/ontology/types.ts +28 -12
  765. package/src/ontology/user-ref.ts +120 -0
  766. package/src/ontology/validation/definition.ts +93 -0
  767. package/src/ontology/validation/index.ts +1 -0
  768. package/src/ontology/validation/normalize.ts +39 -3
  769. package/src/ontology/validation/properties.ts +109 -23
  770. package/src/ontology/validation/query.ts +44 -92
  771. package/src/ontology/validation/schema.ts +101 -23
  772. package/src/ontology/vector-profiles.ts +35 -0
  773. package/src/predicates/types.ts +43 -33
  774. package/src/projections/builders.ts +24 -3
  775. package/src/projections/validation.ts +15 -1
  776. package/src/queues/in-memory.ts +5 -0
  777. package/src/queues/index.ts +1 -0
  778. package/src/queues/types.ts +10 -0
  779. package/src/runtime/create.ts +7 -6
  780. package/src/runtime/host.ts +44 -10
  781. package/src/runtime/index.ts +3 -2
  782. package/src/runtime/internal.ts +3 -0
  783. package/src/runtime/resolve-definitions.ts +19 -1
  784. package/src/runtime/sixb.ts +25 -17
  785. package/src/runtime/types.ts +288 -478
  786. package/src/sandboxes/README.md +41 -0
  787. package/src/sandboxes/auth.ts +17 -0
  788. package/src/sandboxes/config.ts +37 -0
  789. package/src/sandboxes/configuration.ts +268 -0
  790. package/src/sandboxes/environment.ts +107 -0
  791. package/src/sandboxes/errors.ts +1 -1
  792. package/src/sandboxes/index.ts +15 -0
  793. package/src/sandboxes/sandbox.ts +42 -4
  794. package/src/shared/params/builders.ts +50 -0
  795. package/src/shared/params/types.ts +85 -0
  796. package/src/shared/params/user-refs.ts +48 -0
  797. package/src/shared/params/validation.ts +114 -0
  798. package/src/shares/compiler.ts +6 -16
  799. package/src/storage/action-runs/types.ts +1 -0
  800. package/src/storage/agents/in-memory.ts +25 -1
  801. package/src/storage/agents/index.ts +3 -0
  802. package/src/storage/agents/provider.ts +105 -0
  803. package/src/storage/agents/types.ts +54 -0
  804. package/src/storage/ai-cost/analytics.ts +59 -21
  805. package/src/storage/ai-cost/index.ts +1 -0
  806. package/src/storage/ai-cost/types.ts +19 -2
  807. package/src/storage/auth/in-memory/access-tokens.ts +5 -2
  808. package/src/storage/auth/in-memory/auth-storage.ts +5 -8
  809. package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
  810. package/src/storage/auth/in-memory/sessions.ts +69 -1
  811. package/src/storage/auth/in-memory/shared.ts +13 -7
  812. package/src/storage/auth/index.ts +2 -1
  813. package/src/storage/auth/types.ts +57 -13
  814. package/src/storage/executions/provider.ts +24 -12
  815. package/src/storage/executions/types.ts +1 -0
  816. package/src/storage/executions/validation.ts +8 -4
  817. package/src/storage/file-upload-sessions/in-memory.ts +64 -113
  818. package/src/storage/file-upload-sessions/index.ts +1 -0
  819. package/src/storage/file-upload-sessions/provider.ts +258 -0
  820. package/src/storage/file-upload-sessions/types.ts +20 -1
  821. package/src/storage/file-upload-sessions/utils.ts +25 -9
  822. package/src/storage/index.ts +18 -3
  823. package/src/storage/objects/in-memory/query.ts +38 -14
  824. package/src/storage/objects/in-memory/read-scope.ts +9 -2
  825. package/src/storage/objects/in-memory/read-source.ts +5 -0
  826. package/src/storage/objects/in-memory/selected-reader.ts +5 -1
  827. package/src/storage/objects/in-memory/storage.ts +19 -1
  828. package/src/storage/objects/types.ts +2 -0
  829. package/src/storage/ontology/commits.ts +7 -2
  830. package/src/storage/ontology/in-memory/index.ts +20 -0
  831. package/src/storage/ontology/in-memory/materializations.ts +19 -34
  832. package/src/storage/ontology/in-memory/shared-state.ts +9 -0
  833. package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
  834. package/src/storage/ontology/in-memory/vectors.ts +73 -0
  835. package/src/storage/ontology/index.ts +14 -0
  836. package/src/storage/ontology/provider-header-validation.ts +57 -0
  837. package/src/storage/ontology/provider-work.ts +15 -3
  838. package/src/storage/ontology/provider.ts +59 -1
  839. package/src/storage/ontology/vector-indexing.ts +98 -0
  840. package/src/storage/ontology/vectors.ts +48 -0
  841. package/src/storage/operation-scope.ts +2 -0
  842. package/src/storage/types.ts +3 -1
  843. package/src/storage/workflow-interventions/index.ts +0 -1
  844. package/src/storage/workflow-interventions/types.ts +5 -9
  845. package/src/testing/action-execution.ts +13 -3
  846. package/src/testing/agent-storage-contract.ts +246 -0
  847. package/src/testing/ai-cost-storage-contract.ts +134 -0
  848. package/src/testing/auth-storage-contract.ts +149 -62
  849. package/src/testing/execution-storage-contract.ts +1 -2
  850. package/src/testing/execution.ts +4 -7
  851. package/src/testing/file-upload-session-storage-contract.ts +335 -0
  852. package/src/testing/index.ts +8 -0
  853. package/src/testing/materializer-storage-contract.ts +86 -4
  854. package/src/testing/object-query-contract.ts +162 -27
  855. package/src/testing/object-read-scope-contract.ts +1 -5
  856. package/src/testing/ontology-contract-fixture.ts +23 -3
  857. package/src/testing/ontology-storage-contract.ts +58 -0
  858. package/src/testing/queues-contract.ts +31 -0
  859. package/src/testing/sandboxes-contract.ts +27 -0
  860. package/src/testing/workflow-intervention-storage-contract.ts +203 -0
  861. package/src/webhooks/types.ts +2 -2
  862. package/src/workflows/failure.ts +10 -4
  863. package/src/workflows/run-dispatch.ts +12 -1
  864. package/src/workflows/snapshot.ts +16 -7
  865. package/src/workflows/types.ts +2 -2
  866. package/src/workflows/validation.ts +2 -2
  867. package/dist/chunk-01kj2pbh.js.map +0 -19
  868. package/dist/chunk-5hz0fnca.js.map +0 -12
  869. package/dist/chunk-653vwrzr.js.map +0 -10
  870. package/dist/chunk-7apz6hg4.js.map +0 -10
  871. package/dist/chunk-7bs40fe1.js.map +0 -12
  872. package/dist/chunk-860dwwy0.js.map +0 -14
  873. package/dist/chunk-93csa55g.js.map +0 -11
  874. package/dist/chunk-a0e6x5hd.js.map +0 -14
  875. package/dist/chunk-aa6z4a19.js.map +0 -12
  876. package/dist/chunk-ap0g1g74.js.map +0 -11
  877. package/dist/chunk-awbhdqyc.js.map +0 -10
  878. package/dist/chunk-b19g04jk.js.map +0 -11
  879. package/dist/chunk-dz5h08xv.js.map +0 -25
  880. package/dist/chunk-f0rwz2vh.js.map +0 -11
  881. package/dist/chunk-f4w3yp4f.js.map +0 -12
  882. package/dist/chunk-ftv470j8.js.map +0 -45
  883. package/dist/chunk-g00bfdq6.js.map +0 -43
  884. package/dist/chunk-gq8vhakp.js.map +0 -44
  885. package/dist/chunk-gqh45d2n.js.map +0 -15
  886. package/dist/chunk-gqm76kse.js.map +0 -58
  887. package/dist/chunk-jsy70480.js.map +0 -15
  888. package/dist/chunk-mrp7k0pw.js.map +0 -10
  889. package/dist/chunk-ms2tmn1k.js.map +0 -17
  890. package/dist/chunk-rb1xx120.js.map +0 -11
  891. package/dist/chunk-sepyxgpc.js.map +0 -15
  892. package/dist/chunk-yv79ncbv.js.map +0 -10
  893. package/dist/chunk-z0271qkp.js.map +0 -15
  894. package/dist/chunk-z3y411fq.js +0 -99
  895. package/dist/chunk-z3y411fq.js.map +0 -11
  896. /package/dist/{chunk-1yefycb1.js.map → chunk-2hbhn1ff.js.map} +0 -0
  897. /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
  898. /package/dist/{chunk-0y39rgsb.js.map → chunk-4tnrzqqh.js.map} +0 -0
  899. /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
  900. /package/dist/{chunk-cfvakeax.js.map → chunk-a69fkrtr.js.map} +0 -0
  901. /package/dist/{chunk-v2vcg0w6.js.map → chunk-cbn96bve.js.map} +0 -0
  902. /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
  903. /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
  904. /package/dist/{chunk-x9m9x2eq.js.map → chunk-jhyc777j.js.map} +0 -0
  905. /package/dist/{chunk-17kfctj6.js.map → chunk-m8zkvep1.js.map} +0 -0
  906. /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
  907. /package/dist/{chunk-92vk7gta.js.map → chunk-vn3yh259.js.map} +0 -0
  908. /package/dist/{chunk-g91qxjj0.js.map → chunk-w9bp61e7.js.map} +0 -0
  909. /package/dist/{chunk-1824gssz.js.map → chunk-y487ywrv.js.map} +0 -0
  910. /package/dist/{chunk-358caqf5.js.map → chunk-znw0zvy4.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { isDeepStrictEqual } from "node:util"
2
2
  import { normalizeRequesterGroupIds, snapshotRequesterGroupIds } from "../../auth/attribution"
3
+ import { kernelOperationId } from "../../execution/kernel-operation"
3
4
  import type {
4
5
  AuthorizablePrincipal,
5
6
  AuthorizationRef,
@@ -134,6 +135,9 @@ function assertExecutor(executor: DurableExecutionExecutor): void {
134
135
 
135
136
  function assertSource(source: DurableExecutionSource): void {
136
137
  switch (source.type) {
138
+ case "ontologyCommit":
139
+ assertNonBlank(source.commitId, "Execution source commit id")
140
+ return
137
141
  case "http":
138
142
  assertNonBlank(source.requestId, "Execution source request id")
139
143
  return
@@ -336,7 +340,7 @@ async function validateCredential(
336
340
  `[Sixb] Authority access token '${credential.id}' does not exist in project '${record.projectId}'.`
337
341
  )
338
342
  }
339
- if (token.subjectType !== principal.type || token.subjectId !== principal.id) {
343
+ if (!principalsEqual(token.subject, principal)) {
340
344
  throw new ExecutionStorageError(
341
345
  "invalid_credential",
342
346
  `[Sixb] Authority access token '${credential.id}' does not belong to principal '${principal.id}'.`
@@ -427,10 +431,10 @@ function assertPrincipal(principal: AuthorizablePrincipal, label: string): void
427
431
  }
428
432
 
429
433
  function assertKernelOperation(operation: KernelOperation, label: string): void {
430
- if (operation.type !== "ontology.recover") {
434
+ if (operation.type !== "ontology.recover" && operation.type !== "ontology.indexVectors") {
431
435
  invalid(`${label} has unsupported type '${String((operation as { type?: unknown }).type)}'.`)
432
436
  }
433
- assertNonBlank(operation.recoveryId, `${label} recovery id`)
437
+ assertNonBlank(kernelOperationId(operation), `${label} operation id`)
434
438
  }
435
439
 
436
440
  function assertTrustedPrimitiveKind(value: string, label: string): void {
@@ -459,7 +463,7 @@ function principalsEqual(
459
463
  }
460
464
 
461
465
  function kernelOperationsEqual(left: KernelOperation, right: KernelOperation): boolean {
462
- return left.type === right.type && left.recoveryId === right.recoveryId
466
+ return left.type === right.type && kernelOperationId(left) === kernelOperationId(right)
463
467
  }
464
468
 
465
469
  function invalid(message: string): never {
@@ -1,32 +1,37 @@
1
- import type { Principal } from "../../auth"
2
- import type { FileRef, SignedBlobUploadPart } from "../../blob-storage"
3
- import { FileUploadSessionError } from "./errors"
1
+ import {
2
+ DurableFileUploadSessions,
3
+ type FileUploadSessionPersistence,
4
+ type FileUploadSessionPersistenceBackend,
5
+ } from "./provider"
4
6
  import type {
5
7
  CreateFileUploadSessionInput,
6
8
  FileUploadSession,
7
- FileUploadSessionStore,
9
+ ListAbandonedFileUploadSessionsInput,
8
10
  } from "./types"
9
- import {
10
- createFileUploadId,
11
- isFileUploadSessionExpired,
12
- isTerminalFileUploadSessionExpired,
13
- principalKey,
14
- shouldDeleteFileUploadSession,
15
- } from "./utils"
11
+ import { isAbandonedFileUploadSession, shouldDeleteFileUploadSession } from "./utils"
16
12
 
17
13
  export type InMemoryFileUploadSessionsSnapshot = Map<string, FileUploadSession>
18
14
 
19
15
  /**
20
- * In-memory {@link FileUploadSessionStore}.
16
+ * In-memory {@link FileUploadSessionStore}: the shared durable state machine over a Map.
21
17
  *
22
- * Sessions live only in this process's memory: they do not survive a restart and
23
- * are not shared across instances. Staged/direct-put uploads therefore require a
24
- * single-instance deployment for now; a durable (Pg/Sqlite) store is a follow-up.
25
- * Expired sessions are reaped opportunistically on `create` and on demand via
26
- * `cleanupExpired` (there is no background sweeper).
18
+ * Sessions live only in this process's memory: they do not survive a restart and are not
19
+ * shared across instances, so staged uploads need a single instance. `@sixb/pg` and
20
+ * `@sixb/sqlite` provide durable stores. Reapable sessions are also reaped on `create`.
27
21
  */
28
- export class InMemoryFileUploadSessions implements FileUploadSessionStore {
29
- private readonly sessionsById = new Map<string, FileUploadSession>()
22
+ export class InMemoryFileUploadSessions extends DurableFileUploadSessions {
23
+ private readonly sessionsById: Map<string, FileUploadSession>
24
+
25
+ constructor() {
26
+ const sessionsById = new Map<string, FileUploadSession>()
27
+ super(new InMemoryFileUploadSessionBackend(sessionsById))
28
+ this.sessionsById = sessionsById
29
+ }
30
+
31
+ override async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {
32
+ await this.cleanupExpired()
33
+ return super.create(input)
34
+ }
30
35
 
31
36
  snapshot(): InMemoryFileUploadSessionsSnapshot {
32
37
  return structuredClone(this.sessionsById)
@@ -38,100 +43,63 @@ export class InMemoryFileUploadSessions implements FileUploadSessionStore {
38
43
  this.sessionsById.set(id, structuredClone(session))
39
44
  }
40
45
  }
46
+ }
41
47
 
42
- async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {
43
- await this.cleanupExpired()
48
+ class InMemoryFileUploadSessionBackend implements FileUploadSessionPersistenceBackend {
49
+ private readonly persistence: FileUploadSessionPersistence
50
+ // Every await yields; chaining transactions keeps read-modify-write atomic.
51
+ private tail: Promise<unknown> = Promise.resolve()
44
52
 
45
- const session: FileUploadSession = {
46
- id: input.id ?? createFileUploadId(),
47
- projectId: input.projectId,
48
- principalKey: principalKey(input.principal),
49
- strategy: input.strategy,
50
- status: "pending",
51
- ...(input.fileName === undefined ? {} : { fileName: input.fileName }),
52
- ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),
53
- ...(input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath }),
54
- ...(input.expectedSizeBytes === undefined
55
- ? {}
56
- : { expectedSizeBytes: input.expectedSizeBytes }),
57
- ...(input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest }),
58
- ...(input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload }),
59
- signedParts: [],
60
- createdAt: new Date(),
61
- expiresAt: input.expiresAt,
62
- }
53
+ constructor(sessionsById: Map<string, FileUploadSession>) {
54
+ this.persistence = new InMemoryFileUploadSessionPersistence(sessionsById)
55
+ }
63
56
 
64
- this.sessionsById.set(session.id, session)
65
- return session
57
+ read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {
58
+ return run(this.persistence)
66
59
  }
67
60
 
68
- async getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession> {
69
- const session = this.sessionsById.get(uploadId)
70
- if (!session || session.principalKey !== principalKey(principal)) {
71
- throw new FileUploadSessionError("not_found", "File upload session not found.")
72
- }
61
+ transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {
62
+ const result = this.tail.then(() => run(this.persistence))
63
+ this.tail = result.catch(() => undefined)
64
+ return result
65
+ }
66
+ }
73
67
 
74
- const nowMs = Date.now()
75
- if (isFileUploadSessionExpired(session, nowMs)) {
76
- this.sessionsById.delete(uploadId)
77
- throw new FileUploadSessionError("expired", "File upload session has expired.")
78
- }
68
+ class InMemoryFileUploadSessionPersistence implements FileUploadSessionPersistence {
69
+ constructor(private readonly sessionsById: Map<string, FileUploadSession>) {}
79
70
 
80
- if (isTerminalFileUploadSessionExpired(session, nowMs)) {
81
- this.sessionsById.delete(uploadId)
82
- throw new FileUploadSessionError("not_found", "File upload session not found.")
83
- }
84
-
85
- return session
71
+ async now(): Promise<Date> {
72
+ return new Date()
86
73
  }
87
74
 
88
- async markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {
89
- const session = this.requirePending(uploadId)
90
- const updated = {
91
- ...session,
92
- fileRef,
93
- }
94
- this.sessionsById.set(uploadId, updated)
95
- return updated
75
+ async insert(session: FileUploadSession): Promise<boolean> {
76
+ if (this.sessionsById.has(session.id)) return false
77
+ this.sessionsById.set(session.id, session)
78
+ return true
96
79
  }
97
80
 
98
- async addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession> {
99
- const session = this.requirePending(uploadId)
100
- const updated = {
101
- ...session,
102
- signedParts: [
103
- ...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),
104
- part,
105
- ].sort((left, right) => left.partNumber - right.partNumber),
106
- }
107
- this.sessionsById.set(uploadId, updated)
108
- return updated
81
+ async get(uploadId: string): Promise<FileUploadSession | null> {
82
+ return this.sessionsById.get(uploadId) ?? null
109
83
  }
110
84
 
111
- async complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {
112
- const session = this.requirePending(uploadId)
113
- const updated = {
114
- ...session,
115
- status: "completed" as const,
116
- fileRef,
117
- completedAt: new Date(),
118
- }
119
- this.sessionsById.set(uploadId, updated)
120
- return updated
85
+ async update(session: FileUploadSession): Promise<void> {
86
+ this.sessionsById.set(session.id, session)
121
87
  }
122
88
 
123
- async abort(uploadId: string): Promise<FileUploadSession> {
124
- const session = this.requirePending(uploadId)
125
- const updated = {
126
- ...session,
127
- status: "aborted" as const,
128
- abortedAt: new Date(),
129
- }
130
- this.sessionsById.set(uploadId, updated)
131
- return updated
89
+ async listAbandoned(
90
+ input: ListAbandonedFileUploadSessionsInput
91
+ ): Promise<readonly FileUploadSession[]> {
92
+ return [...this.sessionsById.values()]
93
+ .filter(
94
+ (session) =>
95
+ session.projectId === input.projectId &&
96
+ isAbandonedFileUploadSession(session, input.now.getTime())
97
+ )
98
+ .sort((left, right) => left.expiresAt.getTime() - right.expiresAt.getTime())
99
+ .slice(0, input.limit)
132
100
  }
133
101
 
134
- async cleanupExpired(now = new Date()): Promise<number> {
102
+ async deleteReapable(now: Date): Promise<number> {
135
103
  let deleted = 0
136
104
  for (const [id, session] of this.sessionsById) {
137
105
  if (shouldDeleteFileUploadSession(session, now.getTime())) {
@@ -139,23 +107,6 @@ export class InMemoryFileUploadSessions implements FileUploadSessionStore {
139
107
  deleted += 1
140
108
  }
141
109
  }
142
-
143
110
  return deleted
144
111
  }
145
-
146
- private requirePending(uploadId: string): FileUploadSession {
147
- const session = this.sessionsById.get(uploadId)
148
- if (!session) {
149
- throw new FileUploadSessionError("not_found", "File upload session not found.")
150
- }
151
-
152
- if (session.status !== "pending") {
153
- throw new FileUploadSessionError(
154
- session.status === "completed" ? "already_completed" : "already_aborted",
155
- `File upload session is already ${session.status}.`
156
- )
157
- }
158
-
159
- return session
160
- }
161
112
  }
@@ -7,6 +7,7 @@ export type {
7
7
  FileUploadSessionStore,
8
8
  FileUploadStatus,
9
9
  FileUploadStrategy,
10
+ ListAbandonedFileUploadSessionsInput,
10
11
  } from "./types"
11
12
  export {
12
13
  createFileUploadId,
@@ -0,0 +1,258 @@
1
+ import { type Principal, principalsEqual } from "../../auth"
2
+ import type { FileRef, SignedBlobUploadPart } from "../../blob-storage"
3
+ import { FileUploadSessionError } from "./errors"
4
+ import type {
5
+ CreateFileUploadSessionInput,
6
+ FileUploadSession,
7
+ FileUploadSessionStore,
8
+ FileUploadStatus,
9
+ FileUploadStrategy,
10
+ ListAbandonedFileUploadSessionsInput,
11
+ } from "./types"
12
+ import {
13
+ createFileUploadId,
14
+ isFileUploadSessionExpired,
15
+ isTerminalFileUploadSessionExpired,
16
+ } from "./utils"
17
+
18
+ export { fileUploadSessionReapAt } from "./utils"
19
+
20
+ /** Database-specific row access used by the shared upload session state machine. */
21
+ export interface FileUploadSessionPersistence {
22
+ now(): Promise<Date>
23
+ /** Returns false when the id already exists. */
24
+ insert(session: FileUploadSession): Promise<boolean>
25
+ /** Inside `transaction`, must lock the row until the transaction ends. */
26
+ get(uploadId: string): Promise<FileUploadSession | null>
27
+ update(session: FileUploadSession): Promise<void>
28
+ /** The project's `pending` rows holding a provider upload, `expires_at <= now`, oldest first. */
29
+ listAbandoned(input: ListAbandonedFileUploadSessionsInput): Promise<readonly FileUploadSession[]>
30
+ /** Deletes rows whose persisted `fileUploadSessionReapAt` is `<= now`. */
31
+ deleteReapable(now: Date): Promise<number>
32
+ }
33
+
34
+ /** Transaction and lock boundary supplied by a concrete durable storage provider. */
35
+ export interface FileUploadSessionPersistenceBackend {
36
+ read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T>
37
+ transaction<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T>
38
+ }
39
+
40
+ /**
41
+ * Shared durable implementation of the upload session lifecycle. Concrete providers own SQL,
42
+ * transactions and database time; every transition and retention rule lives here so SQLite,
43
+ * PostgreSQL and the in-memory reference cannot drift semantically.
44
+ *
45
+ * Every method is `async`: a storage's operation-scoped facade serializes only async methods, and
46
+ * a plain Promise-returning method would bypass it and join whatever SQLite transaction is open.
47
+ */
48
+ export class DurableFileUploadSessions implements FileUploadSessionStore {
49
+ constructor(private readonly backend: FileUploadSessionPersistenceBackend) {}
50
+
51
+ async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {
52
+ return this.backend.transaction(async (persistence) => {
53
+ const session: FileUploadSession = {
54
+ id: input.id ?? createFileUploadId(),
55
+ projectId: input.projectId,
56
+ principal: input.principal,
57
+ strategy: input.strategy,
58
+ status: "pending",
59
+ ...(input.fileName === undefined ? {} : { fileName: input.fileName }),
60
+ ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),
61
+ ...(input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath }),
62
+ ...(input.expectedSizeBytes === undefined
63
+ ? {}
64
+ : { expectedSizeBytes: input.expectedSizeBytes }),
65
+ ...(input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest }),
66
+ ...(input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload }),
67
+ signedParts: [],
68
+ createdAt: await persistence.now(),
69
+ expiresAt: input.expiresAt,
70
+ }
71
+
72
+ if (!(await persistence.insert(session))) {
73
+ throw new Error(`[Sixb] File upload session '${session.id}' already exists.`)
74
+ }
75
+ return session
76
+ })
77
+ }
78
+
79
+ async getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession> {
80
+ return this.backend.read(async (persistence) => {
81
+ const session = await persistence.get(uploadId)
82
+ if (!session || !principalsEqual(session.principal, principal)) {
83
+ throw new FileUploadSessionError("not_found", "File upload session not found.")
84
+ }
85
+
86
+ const nowMs = (await persistence.now()).getTime()
87
+ if (isFileUploadSessionExpired(session, nowMs)) {
88
+ throw new FileUploadSessionError("expired", "File upload session has expired.")
89
+ }
90
+ if (isTerminalFileUploadSessionExpired(session, nowMs)) {
91
+ throw new FileUploadSessionError("not_found", "File upload session not found.")
92
+ }
93
+ return session
94
+ })
95
+ }
96
+
97
+ async markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {
98
+ return this.transition(uploadId, (session) => ({ ...session, fileRef }))
99
+ }
100
+
101
+ async addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession> {
102
+ return this.transition(uploadId, (session) => ({
103
+ ...session,
104
+ signedParts: [
105
+ ...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),
106
+ part,
107
+ ].sort((left, right) => left.partNumber - right.partNumber),
108
+ }))
109
+ }
110
+
111
+ async complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {
112
+ return this.transition(uploadId, (session, now) => ({
113
+ ...session,
114
+ status: "completed",
115
+ fileRef,
116
+ completedAt: now,
117
+ }))
118
+ }
119
+
120
+ async abort(uploadId: string): Promise<FileUploadSession> {
121
+ return this.transition(uploadId, (session, now) => ({
122
+ ...session,
123
+ status: "aborted",
124
+ abortedAt: now,
125
+ }))
126
+ }
127
+
128
+ async listAbandoned(
129
+ input: ListAbandonedFileUploadSessionsInput
130
+ ): Promise<readonly FileUploadSession[]> {
131
+ if (input.projectId.trim().length === 0) {
132
+ throw new Error("[Sixb] File upload session listAbandoned projectId must not be blank.")
133
+ }
134
+ if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {
135
+ throw new Error("[Sixb] File upload session listAbandoned limit must be a positive integer.")
136
+ }
137
+ return this.backend.read((persistence) => persistence.listAbandoned(input))
138
+ }
139
+
140
+ async cleanupExpired(now?: Date): Promise<number> {
141
+ return this.backend.transaction(async (persistence) =>
142
+ persistence.deleteReapable(now ?? (await persistence.now()))
143
+ )
144
+ }
145
+
146
+ private transition(
147
+ uploadId: string,
148
+ next: (session: FileUploadSession, now: Date) => FileUploadSession
149
+ ): Promise<FileUploadSession> {
150
+ return this.backend.transaction(async (persistence) => {
151
+ const session = await persistence.get(uploadId)
152
+ if (!session) {
153
+ throw new FileUploadSessionError("not_found", "File upload session not found.")
154
+ }
155
+ if (session.status !== "pending") {
156
+ throw new FileUploadSessionError(
157
+ session.status === "completed" ? "already_completed" : "already_aborted",
158
+ `File upload session is already ${session.status}.`
159
+ )
160
+ }
161
+
162
+ const updated = next(session, await persistence.now())
163
+ await persistence.update(updated)
164
+ return updated
165
+ })
166
+ }
167
+ }
168
+
169
+ const STRATEGIES: readonly FileUploadStrategy[] = ["server", "direct-put", "multipart"]
170
+ const STATUSES: readonly FileUploadStatus[] = ["pending", "completed", "aborted"]
171
+ const PRINCIPAL_TYPES: readonly Principal["type"][] = ["user", "serviceAccount", "system"]
172
+
173
+ /**
174
+ * Rebuilds a session from a provider row. JSON columns may arrive parsed (jsonb) or as text
175
+ * (SQLite); nested `expiresAt` values are revived and every other nested field passes through,
176
+ * so blob providers can extend `providerUpload` without a migration. Fails closed on corruption.
177
+ */
178
+ export function parseFileUploadSessionRow(row: {
179
+ readonly [column: string]: unknown
180
+ }): FileUploadSession {
181
+ const id = text(row.id, "id", String(row.id))
182
+ const strategy = text(row.strategy, "strategy", id) as FileUploadStrategy
183
+ const status = text(row.status, "status", id) as FileUploadStatus
184
+ if (!STRATEGIES.includes(strategy)) throw corrupt(id, `unknown strategy '${strategy}'`)
185
+ if (!STATUSES.includes(status)) throw corrupt(id, `unknown status '${status}'`)
186
+ const principalType = text(row.ownerPrincipalType, "ownerPrincipalType", id)
187
+ if (!PRINCIPAL_TYPES.includes(principalType as Principal["type"])) {
188
+ throw corrupt(id, `unknown owner principal type '${principalType}'`)
189
+ }
190
+
191
+ const providerUpload = json(row.providerUpload)
192
+ const fileRef = json(row.fileRef)
193
+ const signedParts = json(row.signedParts)
194
+ if (!Array.isArray(signedParts)) throw corrupt(id, "signedParts is not an array")
195
+
196
+ const optional = <T>(key: string, value: T | null | undefined) =>
197
+ value === null || value === undefined ? {} : { [key]: value }
198
+
199
+ return {
200
+ id,
201
+ projectId: text(row.projectId, "projectId", id),
202
+ principal: {
203
+ type: principalType as Principal["type"],
204
+ id: text(row.ownerPrincipalId, "ownerPrincipalId", id),
205
+ },
206
+ strategy,
207
+ status,
208
+ ...optional("fileName", row.fileName as string | null),
209
+ ...optional("mediaType", row.mediaType as string | null),
210
+ ...optional("logicalPath", row.logicalPath as string | null),
211
+ ...optional(
212
+ "expectedSizeBytes",
213
+ row.expectedSizeBytes === null || row.expectedSizeBytes === undefined
214
+ ? null
215
+ : Number(row.expectedSizeBytes)
216
+ ),
217
+ ...optional("expectedDigest", row.expectedDigest as string | null),
218
+ ...optional(
219
+ "providerUpload",
220
+ providerUpload === null ? null : withExpiresAt(providerUpload, id)
221
+ ),
222
+ signedParts: signedParts.map((part) => withExpiresAt(part, id)) as SignedBlobUploadPart[],
223
+ ...optional("fileRef", fileRef as FileRef | null),
224
+ createdAt: date(row.createdAt, "createdAt", id),
225
+ expiresAt: date(row.expiresAt, "expiresAt", id),
226
+ ...optional(
227
+ "completedAt",
228
+ row.completedAt == null ? null : date(row.completedAt, "completedAt", id)
229
+ ),
230
+ ...optional("abortedAt", row.abortedAt == null ? null : date(row.abortedAt, "abortedAt", id)),
231
+ } as FileUploadSession
232
+ }
233
+
234
+ function json(value: unknown): unknown {
235
+ return typeof value === "string" ? JSON.parse(value) : (value ?? null)
236
+ }
237
+
238
+ function withExpiresAt<T>(value: unknown, id: string): T {
239
+ if (typeof value !== "object" || value === null)
240
+ throw corrupt(id, "nested record is not an object")
241
+ const record = value as Record<string, unknown>
242
+ return { ...record, expiresAt: date(record.expiresAt, "nested expiresAt", id) } as T
243
+ }
244
+
245
+ function text(value: unknown, column: string, id: string): string {
246
+ if (typeof value !== "string" || value.length === 0) throw corrupt(id, `${column} is not text`)
247
+ return value
248
+ }
249
+
250
+ function date(value: unknown, column: string, id: string): Date {
251
+ const parsed = value instanceof Date || typeof value === "string" ? new Date(value) : null
252
+ if (!parsed || !Number.isFinite(parsed.getTime())) throw corrupt(id, `${column} is not a date`)
253
+ return parsed
254
+ }
255
+
256
+ function corrupt(id: string, reason: string): Error {
257
+ return new Error(`[Sixb] Stored file upload session '${id}' is invalid: ${reason}.`)
258
+ }
@@ -26,7 +26,7 @@ export interface CreateFileUploadSessionInput {
26
26
  export interface FileUploadSession {
27
27
  readonly id: string
28
28
  readonly projectId: string
29
- readonly principalKey: string
29
+ readonly principal: Principal
30
30
  readonly strategy: FileUploadStrategy
31
31
  readonly status: FileUploadStatus
32
32
  readonly fileName?: string
@@ -43,19 +43,38 @@ export interface FileUploadSession {
43
43
  readonly abortedAt?: Date
44
44
  }
45
45
 
46
+ export interface ListAbandonedFileUploadSessionsInput {
47
+ readonly projectId: string
48
+ readonly now: Date
49
+ readonly limit: number
50
+ }
51
+
46
52
  /**
47
53
  * State machine for a staged/direct-put upload session. A session is created
48
54
  * `pending`; `markUploaded` records the resolved {@link FileRef} but keeps the
49
55
  * session `pending` (non-terminal), while `complete` and `abort` move it to a
50
56
  * terminal `completed`/`aborted` state. Terminal sessions are retained briefly
51
57
  * (for idempotent retries) then reaped by `cleanupExpired`.
58
+ *
59
+ * An expired `pending` session that still holds a `providerUpload` is abandoned:
60
+ * the provider may be billing for parts only `abortUpload` can release. The store
61
+ * never deletes one. A sweep lists them with `listAbandoned`, aborts the provider
62
+ * upload, then calls `abort` so the row becomes terminal and is reaped normally.
52
63
  */
53
64
  export interface FileUploadSessionStore {
54
65
  create(input: CreateFileUploadSessionInput): Promise<FileUploadSession>
66
+ /**
67
+ * The expiry gate: throws `expired` or `not_found`, and never deletes. Callers check expiry
68
+ * here when a request starts; the transitions below do not re-check it, because a request
69
+ * that passed the gate may finish slow blob I/O after `expiresAt`.
70
+ */
55
71
  getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession>
56
72
  markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession>
57
73
  addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession>
58
74
  complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession>
59
75
  abort(uploadId: string): Promise<FileUploadSession>
76
+ /** One project's abandoned sessions expired at or before `now`, oldest expiry first. */
77
+ listAbandoned(input: ListAbandonedFileUploadSessionsInput): Promise<readonly FileUploadSession[]>
78
+ /** Deletes reapable sessions and returns the count. Never deletes an abandoned session. */
60
79
  cleanupExpired(now?: Date): Promise<number>
61
80
  }
@@ -1,5 +1,4 @@
1
1
  import { randomUUID } from "node:crypto"
2
- import type { Principal } from "../../auth"
3
2
  import type { FileUploadSession } from "./types"
4
3
 
5
4
  export const DEFAULT_FILE_UPLOAD_SESSION_TTL_MS = 60 * 60 * 1000
@@ -13,10 +12,6 @@ export function createFileUploadId(): string {
13
12
  return `upload_${randomUUID().replaceAll("-", "")}`
14
13
  }
15
14
 
16
- export function principalKey(principal: Principal): string {
17
- return `${principal.type}:${principal.id}`
18
- }
19
-
20
15
  export function isFileUploadSessionExpired(
21
16
  session: FileUploadSession,
22
17
  nowMs = Date.now()
@@ -24,12 +19,33 @@ export function isFileUploadSessionExpired(
24
19
  return session.status === "pending" && session.expiresAt.getTime() <= nowMs
25
20
  }
26
21
 
27
- export function shouldDeleteFileUploadSession(session: FileUploadSession, nowMs: number): boolean {
28
- if (isFileUploadSessionExpired(session, nowMs)) {
29
- return true
22
+ /** Expired, still `pending`, and holding a provider upload only `abortUpload` can release. */
23
+ export function isAbandonedFileUploadSession(
24
+ session: FileUploadSession,
25
+ nowMs = Date.now()
26
+ ): boolean {
27
+ return session.providerUpload !== undefined && isFileUploadSessionExpired(session, nowMs)
28
+ }
29
+
30
+ /**
31
+ * When a session may be deleted, or null when only a state change can make it deletable.
32
+ * This is the single retention rule: durable providers persist it as `reap_at` and delete
33
+ * `reap_at <= now`, so SQL never restates it.
34
+ */
35
+ export function fileUploadSessionReapAt(session: FileUploadSession): Date | null {
36
+ if (session.status === "pending") {
37
+ return session.providerUpload === undefined ? session.expiresAt : null
30
38
  }
31
39
 
32
- return isTerminalFileUploadSessionExpired(session, nowMs)
40
+ const terminalAt = session.completedAt ?? session.abortedAt
41
+ return terminalAt
42
+ ? new Date(terminalAt.getTime() + DEFAULT_FILE_UPLOAD_TERMINAL_SESSION_TTL_MS)
43
+ : null
44
+ }
45
+
46
+ export function shouldDeleteFileUploadSession(session: FileUploadSession, nowMs: number): boolean {
47
+ const reapAt = fileUploadSessionReapAt(session)
48
+ return reapAt !== null && reapAt.getTime() <= nowMs
33
49
  }
34
50
 
35
51
  export function isTerminalFileUploadSessionExpired(