@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.
- package/dist/actions/builders/params.d.ts +1 -22
- package/dist/actions/builders/params.d.ts.map +1 -1
- package/dist/actions/index.d.ts +2 -2
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +33 -30
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +14 -16
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-dispatch.d.ts +2 -0
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +18 -31
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/types/params.d.ts +11 -44
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -2
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +15 -9
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/ids.d.ts +2 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +52 -44
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/sandbox.d.ts +5 -0
- package/dist/agents/sandbox.d.ts.map +1 -0
- package/dist/agents/streams/index.js +4 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.js +4 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/assert-never.d.ts +6 -0
- package/dist/assert-never.d.ts.map +1 -0
- package/dist/auth/client-address.d.ts +3 -0
- package/dist/auth/client-address.d.ts.map +1 -0
- package/dist/auth/csrf.d.ts +5 -1
- package/dist/auth/csrf.d.ts.map +1 -1
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +15 -7
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +58 -41
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/session-cache.d.ts +10 -3
- package/dist/auth/session-cache.d.ts.map +1 -1
- package/dist/auth/sessions.d.ts +12 -0
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/strategy.js +1 -1
- package/dist/auth/types.d.ts +8 -15
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +5 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/index.d.ts +1 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +54 -48
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-q5gz3g2j.js → chunk-0321g649.js} +2 -16
- package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
- package/dist/{chunk-d63nnr5b.js → chunk-04h4t2b5.js} +39 -53
- package/dist/{chunk-d63nnr5b.js.map → chunk-04h4t2b5.js.map} +5 -6
- package/dist/chunk-2fv8sajb.js +84 -0
- package/dist/chunk-2fv8sajb.js.map +10 -0
- package/dist/{chunk-1yefycb1.js → chunk-2hbhn1ff.js} +2 -2
- package/dist/{chunk-ap0g1g74.js → chunk-3nx8vj5a.js} +43 -6
- package/dist/chunk-3nx8vj5a.js.map +12 -0
- package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
- package/dist/{chunk-0y39rgsb.js → chunk-4tnrzqqh.js} +1 -1
- package/dist/chunk-58geavnf.js +29 -0
- package/dist/chunk-58geavnf.js.map +10 -0
- package/dist/{chunk-01kj2pbh.js → chunk-63fp9x3q.js} +97 -67
- package/dist/chunk-63fp9x3q.js.map +20 -0
- package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
- package/dist/chunk-69266efg.js.map +12 -0
- package/dist/{chunk-sepyxgpc.js → chunk-693f3zn8.js} +70 -28
- package/dist/chunk-693f3zn8.js.map +15 -0
- package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
- package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
- package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
- package/dist/{chunk-a0e6x5hd.js → chunk-898y24dd.js} +165 -90
- package/dist/chunk-898y24dd.js.map +15 -0
- package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
- package/dist/chunk-91kcnbf0.js.map +10 -0
- package/dist/{chunk-z0s4axeh.js → chunk-91wthfwe.js} +97 -21
- package/dist/{chunk-z0s4axeh.js.map → chunk-91wthfwe.js.map} +8 -7
- package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
- package/dist/chunk-96yw3pwd.js.map +10 -0
- package/dist/chunk-98cw09sw.js.map +2 -2
- package/dist/{chunk-g00bfdq6.js → chunk-9pfw47qx.js} +318 -257
- package/dist/chunk-9pfw47qx.js.map +44 -0
- package/dist/{chunk-5hz0fnca.js → chunk-a0073121.js} +64 -60
- package/dist/chunk-a0073121.js.map +12 -0
- package/dist/{chunk-cfvakeax.js → chunk-a69fkrtr.js} +5 -5
- package/dist/{chunk-72w2pxk7.js → chunk-bdhfn0ww.js} +11 -3
- package/dist/{chunk-72w2pxk7.js.map → chunk-bdhfn0ww.js.map} +3 -3
- package/dist/chunk-bep5rrdq.js +81 -0
- package/dist/chunk-bep5rrdq.js.map +10 -0
- package/dist/chunk-bxx3ms5t.js +29 -0
- package/dist/chunk-bxx3ms5t.js.map +10 -0
- package/dist/{chunk-v2vcg0w6.js → chunk-cbn96bve.js} +2 -2
- package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
- package/dist/chunk-cd234ba4.js.map +14 -0
- package/dist/{chunk-gq8vhakp.js → chunk-cvrbhvtr.js} +292 -104
- package/dist/chunk-cvrbhvtr.js.map +46 -0
- package/dist/{chunk-ms2tmn1k.js → chunk-d8yes9yx.js} +355 -100
- package/dist/chunk-d8yes9yx.js.map +20 -0
- package/dist/{chunk-pr2h4bv4.js → chunk-darm7eeg.js} +9 -9
- package/dist/{chunk-pr2h4bv4.js.map → chunk-darm7eeg.js.map} +3 -3
- package/dist/chunk-dmn70ztd.js.map +2 -2
- package/dist/chunk-drz59ve0.js +57 -0
- package/dist/chunk-drz59ve0.js.map +10 -0
- package/dist/{chunk-skz0hst3.js → chunk-dsfw1bdr.js} +6 -86
- package/dist/{chunk-skz0hst3.js.map → chunk-dsfw1bdr.js.map} +3 -3
- package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
- package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
- package/dist/chunk-ffwvdgk1.js +85 -0
- package/dist/chunk-ffwvdgk1.js.map +10 -0
- package/dist/chunk-gbcrz0gr.js +552 -0
- package/dist/chunk-gbcrz0gr.js.map +17 -0
- package/dist/{chunk-gqm76kse.js → chunk-gc226ten.js} +434 -177
- package/dist/chunk-gc226ten.js.map +62 -0
- package/dist/{chunk-awbhdqyc.js → chunk-gmt22nxx.js} +10 -16
- package/dist/chunk-gmt22nxx.js.map +10 -0
- package/dist/chunk-h89wz928.js +42 -0
- package/dist/chunk-h89wz928.js.map +10 -0
- package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
- package/dist/chunk-hgqpcmyr.js.map +12 -0
- package/dist/{chunk-gqh45d2n.js → chunk-ht4a7mjg.js} +76 -6
- package/dist/chunk-ht4a7mjg.js.map +15 -0
- package/dist/{chunk-x9m9x2eq.js → chunk-jhyc777j.js} +3 -3
- package/dist/{chunk-fh8kgex1.js → chunk-jmwy25mf.js} +76 -58
- package/dist/{chunk-fh8kgex1.js.map → chunk-jmwy25mf.js.map} +3 -3
- package/dist/{chunk-rb1xx120.js → chunk-k4kkp58d.js} +25 -8
- package/dist/chunk-k4kkp58d.js.map +11 -0
- package/dist/{chunk-jsy70480.js → chunk-ky7zpbtt.js} +366 -98
- package/dist/chunk-ky7zpbtt.js.map +19 -0
- package/dist/chunk-m4ehq95f.js +9 -0
- package/dist/chunk-m4ehq95f.js.map +10 -0
- package/dist/{chunk-17kfctj6.js → chunk-m8zkvep1.js} +2 -2
- package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
- package/dist/chunk-mdnw7nj8.js.map +15 -0
- package/dist/{chunk-4zhmdsx6.js → chunk-mf6hwpzh.js} +121 -28
- package/dist/{chunk-4zhmdsx6.js.map → chunk-mf6hwpzh.js.map} +6 -6
- package/dist/{chunk-z30bv4ga.js → chunk-mr60an99.js} +5 -3
- package/dist/{chunk-z30bv4ga.js.map → chunk-mr60an99.js.map} +3 -3
- package/dist/chunk-n33e8dz8.js +191 -0
- package/dist/chunk-n33e8dz8.js.map +11 -0
- package/dist/chunk-p1683c0v.js +104 -0
- package/dist/chunk-p1683c0v.js.map +11 -0
- package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
- package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
- package/dist/chunk-rdghfsss.js.map +10 -0
- package/dist/{chunk-ftv470j8.js → chunk-rqtdtm43.js} +365 -67
- package/dist/chunk-rqtdtm43.js.map +50 -0
- package/dist/{chunk-dz5h08xv.js → chunk-rzcjp5m2.js} +28 -9
- package/dist/chunk-rzcjp5m2.js.map +25 -0
- package/dist/{chunk-f4w3yp4f.js → chunk-rzkr70gr.js} +108 -21
- package/dist/chunk-rzkr70gr.js.map +13 -0
- package/dist/{chunk-3ckk0xfj.js → chunk-s24qbp32.js} +18 -13
- package/dist/{chunk-3ckk0xfj.js.map → chunk-s24qbp32.js.map} +3 -3
- package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
- package/dist/chunk-t6f3tdnr.js.map +10 -0
- package/dist/{chunk-93csa55g.js → chunk-tw03bsmb.js} +11 -5
- package/dist/chunk-tw03bsmb.js.map +11 -0
- package/dist/chunk-vef6qa14.js +363 -0
- package/dist/chunk-vef6qa14.js.map +14 -0
- package/dist/{chunk-92vk7gta.js → chunk-vn3yh259.js} +1 -1
- package/dist/{chunk-g91qxjj0.js → chunk-w9bp61e7.js} +5 -5
- package/dist/{chunk-b19g04jk.js → chunk-xgptywp0.js} +4 -3
- package/dist/chunk-xgptywp0.js.map +11 -0
- package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
- package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
- package/dist/{chunk-1824gssz.js → chunk-y487ywrv.js} +4 -4
- package/dist/{chunk-7apz6hg4.js → chunk-y6vnvayj.js} +8 -4
- package/dist/chunk-y6vnvayj.js.map +10 -0
- package/dist/{chunk-wf88w4kp.js → chunk-ypj2wqtj.js} +3 -6
- package/dist/{chunk-wf88w4kp.js.map → chunk-ypj2wqtj.js.map} +4 -4
- package/dist/chunk-z3y5kg1x.js +14 -0
- package/dist/chunk-z3y5kg1x.js.map +10 -0
- package/dist/{chunk-38zv5rkr.js → chunk-z9h698s8.js} +1 -1
- package/dist/{chunk-38zv5rkr.js.map → chunk-z9h698s8.js.map} +2 -2
- package/dist/{chunk-8vj0rjgs.js → chunk-zdkcdshk.js} +3 -36
- package/dist/{chunk-8vj0rjgs.js.map → chunk-zdkcdshk.js.map} +3 -4
- package/dist/{chunk-358caqf5.js → chunk-znw0zvy4.js} +2 -2
- package/dist/datasets/validation.d.ts +4 -0
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +5 -4
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/types.d.ts +19 -19
- package/dist/edits/types.d.ts.map +1 -1
- package/dist/error-reporting/capability.d.ts +3 -2
- package/dist/error-reporting/capability.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +5 -4
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/error-reporting/reports.d.ts +10 -0
- package/dist/error-reporting/reports.d.ts.map +1 -1
- package/dist/error-reporting/types.d.ts +10 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +16 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/failure-message.d.ts +8 -0
- package/dist/errors/failure-message.d.ts.map +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +3 -2
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/envelope.d.ts +0 -12
- package/dist/events/envelope.d.ts.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +5 -4
- package/dist/events/index.js.map +1 -1
- package/dist/events/service.d.ts +1 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/toStoredEvent.d.ts +1 -2
- package/dist/events/toStoredEvent.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +2 -1
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +1 -2
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +48 -43
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/kernel-operation.d.ts +4 -0
- package/dist/execution/kernel-operation.d.ts.map +1 -0
- package/dist/execution/primitive.d.ts +1 -2
- package/dist/execution/primitive.d.ts.map +1 -1
- package/dist/execution/primitive.js +47 -42
- package/dist/execution/primitive.js.map +3 -3
- package/dist/execution/request.d.ts +1 -2
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +48 -43
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/types.d.ts +6 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +20 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +77 -62
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.js +5 -4
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +11 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/materialization/errors.d.ts +4 -2
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/events.d.ts +27 -2
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -0
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/model.d.ts +2 -0
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materialization/vectors.d.ts +19 -0
- package/dist/materialization/vectors.d.ts.map +1 -0
- package/dist/materializer/context.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/operations.d.ts +2 -1
- package/dist/materializer/edits/operations.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -2
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/user-refs.d.ts +30 -0
- package/dist/materializer/edits/user-refs.d.ts.map +1 -0
- package/dist/materializer/edits/vector-authority.d.ts +6 -0
- package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
- package/dist/materializer/edits/vectors.d.ts +6 -0
- package/dist/materializer/edits/vectors.d.ts.map +1 -0
- package/dist/materializer/effective/build-events.d.ts +2 -2
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/validate.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +7 -0
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
- package/dist/materializer/effective/vectors.d.ts +6 -0
- package/dist/materializer/effective/vectors.d.ts.map +1 -0
- package/dist/materializer/execution/scope.d.ts +11 -3
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/execution/work-executor.d.ts +2 -1
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/index.js +30 -27
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +2 -0
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -2
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/catalog-index.d.ts +15 -0
- package/dist/models/catalog-index.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +27 -6
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/catalog.d.ts +12 -0
- package/dist/models/decision/catalog.d.ts.map +1 -0
- package/dist/models/decision/errors.d.ts +7 -0
- package/dist/models/decision/errors.d.ts.map +1 -0
- package/dist/models/decision/output.d.ts +50 -0
- package/dist/models/decision/output.d.ts.map +1 -0
- package/dist/models/decision/questions.d.ts +14 -0
- package/dist/models/decision/questions.d.ts.map +1 -0
- package/dist/models/decision/runtime.d.ts +7 -0
- package/dist/models/decision/runtime.d.ts.map +1 -0
- package/dist/models/decision/types.d.ts +92 -0
- package/dist/models/decision/types.d.ts.map +1 -0
- package/dist/models/decision/validation.d.ts +7 -0
- package/dist/models/decision/validation.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/embedding-model.d.ts +60 -0
- package/dist/models/embedding-model.d.ts.map +1 -0
- package/dist/models/execution/binding.d.ts +2 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/embedding.d.ts +5 -0
- package/dist/models/execution/embedding.d.ts.map +1 -0
- package/dist/models/execution/index.js +32 -27
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +5 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/session.d.ts +21 -0
- package/dist/models/execution/session.d.ts.map +1 -0
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +9 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +3 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +21 -26
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +33 -30
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -0
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +42 -30
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +14 -3
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/scalar-values.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +6 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -3
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -10
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/sdk/where.d.ts +2 -3
- package/dist/objects/sdk/where.d.ts.map +1 -1
- package/dist/objects/vectors/handle.d.ts +4 -0
- package/dist/objects/vectors/handle.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-generate.d.ts +11 -0
- package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
- package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-shared.d.ts +17 -0
- package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-single.d.ts +4 -0
- package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing.d.ts +7 -0
- package/dist/objects/vectors/indexing.d.ts.map +1 -0
- package/dist/objects/vectors/profile.d.ts +13 -0
- package/dist/objects/vectors/profile.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts +5 -0
- package/dist/objects/vectors/query.d.ts.map +1 -0
- package/dist/objects/vectors/resolve-query.d.ts +6 -0
- package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
- package/dist/objects/vectors/types.d.ts +11 -0
- package/dist/objects/vectors/types.d.ts.map +1 -0
- package/dist/ontology/builders.d.ts +11 -10
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +5 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +7 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +34 -22
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +1 -0
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +10 -7
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/primitives.d.ts +38 -0
- package/dist/ontology/primitives.d.ts.map +1 -0
- package/dist/ontology/query-capabilities.d.ts +38 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +23 -2
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/registered.d.ts +16 -0
- package/dist/ontology/registered.d.ts.map +1 -0
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +35 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +26 -13
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/user-ref.d.ts +35 -0
- package/dist/ontology/user-ref.d.ts.map +1 -0
- package/dist/ontology/validation/definition.d.ts +3 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -0
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/normalize.d.ts.map +1 -1
- package/dist/ontology/validation/properties.d.ts +6 -1
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/ontology/vector-profiles.d.ts +4 -0
- package/dist/ontology/vector-profiles.d.ts.map +1 -0
- package/dist/pipelines/index.js +32 -29
- package/dist/pipelines/index.js.map +1 -1
- package/dist/predicates/types.d.ts +53 -3
- package/dist/predicates/types.d.ts.map +1 -1
- package/dist/projections/builders.d.ts +19 -1
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/internal.js +28 -25
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +3 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +5 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -3
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +10 -7
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +3 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +49 -1
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +11 -6
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +182 -187
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -0
- package/dist/sandboxes/config.d.ts +5 -0
- package/dist/sandboxes/config.d.ts.map +1 -0
- package/dist/sandboxes/configuration.d.ts +41 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -0
- package/dist/sandboxes/environment.d.ts +13 -0
- package/dist/sandboxes/environment.d.ts.map +1 -0
- package/dist/sandboxes/errors.d.ts +1 -1
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +6 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +16 -3
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +39 -4
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/builders.d.ts +25 -0
- package/dist/shared/params/builders.d.ts.map +1 -0
- package/dist/shared/params/types.d.ts +48 -0
- package/dist/shared/params/types.d.ts.map +1 -0
- package/dist/shared/params/user-refs.d.ts +19 -0
- package/dist/shared/params/user-refs.d.ts.map +1 -0
- package/dist/shared/params/validation.d.ts +15 -0
- package/dist/shared/params/validation.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts.map +1 -1
- package/dist/shares/internal.js +29 -26
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +4 -3
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/types.d.ts +1 -1
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +2 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +5 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +8 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +49 -0
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +2 -2
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +4 -3
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
- package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +62 -13
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +3 -2
- package/dist/storage/connector-connections/provider.js.map +2 -2
- package/dist/storage/executions/provider.d.ts +3 -3
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +13 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +3 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
- package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts +1 -1
- package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
- package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +24 -0
- package/dist/storage/file-upload-sessions/provider.js.map +9 -0
- package/dist/storage/file-upload-sessions/types.d.ts +19 -1
- package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
- package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
- package/dist/storage/index.d.ts +8 -6
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +37 -30
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +11 -9
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +7 -0
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +2 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +7 -2
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -0
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -1
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +9 -3
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/vector-indexing.d.ts +94 -0
- package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/vectors.d.ts +56 -0
- package/dist/storage/ontology/vectors.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +4 -3
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/index.d.ts +1 -1
- package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
- package/dist/storage/workflow-interventions/types.d.ts +5 -8
- package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -8
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +33 -30
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-execution.d.ts +4 -0
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution.d.ts +1 -2
- package/dist/testing/execution.d.ts.map +1 -1
- package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
- package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2351 -1263
- package/dist/testing/index.js.map +19 -17
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +8 -0
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/testing/sandboxes-contract.d.ts.map +1 -1
- package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
- package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +29 -26
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/webhooks/types.d.ts +2 -2
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/workers/index.js +3 -2
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +51 -45
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/run-dispatch.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/actions/builders/params.ts +1 -48
- package/src/actions/index.ts +0 -3
- package/src/actions/read-facade.ts +102 -62
- package/src/actions/request.ts +13 -0
- package/src/actions/run-dispatch.ts +3 -0
- package/src/actions/types/context.ts +17 -65
- package/src/actions/types/params.ts +16 -75
- package/src/actions/validation.ts +7 -84
- package/src/agents/authority.ts +1 -1
- package/src/agents/errors.ts +3 -0
- package/src/agents/execution.ts +67 -15
- package/src/agents/ids.ts +8 -0
- package/src/agents/index.ts +1 -0
- package/src/agents/request.ts +11 -0
- package/src/agents/sandbox.ts +44 -0
- package/src/agents/validation.ts +2 -108
- package/src/assert-never.ts +7 -0
- package/src/auth/client-address.ts +12 -0
- package/src/auth/csrf.ts +14 -5
- package/src/auth/index.ts +3 -2
- package/src/auth/runtime.ts +299 -277
- package/src/auth/session-cache.ts +18 -6
- package/src/auth/sessions.ts +30 -0
- package/src/auth/types.ts +7 -17
- package/src/bootstrap/index.ts +1 -0
- package/src/bootstrap/ontology-type-manifest.ts +112 -60
- package/src/datasets/validation.ts +40 -11
- package/src/datasets/write.ts +8 -11
- package/src/edits/types.ts +47 -63
- package/src/error-reporting/capability.ts +11 -0
- package/src/error-reporting/reports.ts +23 -0
- package/src/error-reporting/types.ts +12 -1
- package/src/errors/catalog.ts +16 -0
- package/src/errors/failure-message.ts +15 -0
- package/src/errors/internal.ts +57 -25
- package/src/events/envelope.ts +0 -13
- package/src/events/index.ts +1 -1
- package/src/events/service.ts +1 -11
- package/src/events/toStoredEvent.ts +1 -3
- package/src/events/types/index.ts +1 -1
- package/src/execution/agent.ts +1 -2
- package/src/execution/authorization.ts +12 -5
- package/src/execution/authorized-object-reader.ts +42 -9
- package/src/execution/kernel-operation.ts +27 -0
- package/src/execution/primitive.ts +1 -2
- package/src/execution/request.ts +1 -2
- package/src/execution/scopes.ts +2 -0
- package/src/execution/types.ts +4 -4
- package/src/index.ts +68 -8
- package/src/lake-storage/in-memory.ts +5 -3
- package/src/maintenance/ontology-maintenance.ts +77 -1
- package/src/materialization/errors.ts +4 -2
- package/src/materialization/events.ts +27 -2
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +2 -0
- package/src/materialization/vectors.ts +18 -0
- package/src/materializer/README.md +16 -0
- package/src/materializer/context.ts +10 -0
- package/src/materializer/edits/commit.ts +29 -13
- package/src/materializer/edits/operations.ts +32 -4
- package/src/materializer/edits/plan.ts +4 -5
- package/src/materializer/edits/user-refs.ts +115 -0
- package/src/materializer/edits/vector-authority.ts +108 -0
- package/src/materializer/edits/vectors.ts +100 -0
- package/src/materializer/effective/build-events.ts +4 -5
- package/src/materializer/effective/validate.ts +10 -3
- package/src/materializer/effective/vector-indexing.ts +84 -0
- package/src/materializer/effective/vectors.ts +47 -0
- package/src/materializer/execution/scope.ts +40 -7
- package/src/materializer/execution/work-executor.ts +11 -3
- package/src/materializer/projections/replace.ts +3 -1
- package/src/materializer/projections/replacement-plan.ts +4 -0
- package/src/materializer/shared/normalize.ts +11 -0
- package/src/materializer/telemetry/append.ts +5 -13
- package/src/materializer/telemetry/plan.ts +4 -5
- package/src/models/catalog-index.ts +38 -0
- package/src/models/catalog.ts +66 -38
- package/src/models/decision/catalog.ts +32 -0
- package/src/models/decision/errors.ts +18 -0
- package/src/models/decision/output.ts +101 -0
- package/src/models/decision/questions.ts +29 -0
- package/src/models/decision/runtime.ts +188 -0
- package/src/models/decision/types.ts +109 -0
- package/src/models/decision/validation.ts +335 -0
- package/src/models/definitions.ts +1 -1
- package/src/models/embedding-model.ts +129 -0
- package/src/models/execution/README.md +63 -0
- package/src/models/execution/binding.ts +2 -0
- package/src/models/execution/embedding.ts +133 -0
- package/src/models/execution/model-call-recorder.ts +42 -30
- package/src/models/execution/session.ts +81 -0
- package/src/models/execution.ts +10 -52
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +37 -0
- package/src/models/pricing.ts +1 -2
- package/src/objects/authorized-ontology-view.ts +12 -8
- package/src/objects/execution.ts +34 -61
- package/src/objects/query/executor.ts +25 -7
- package/src/objects/query/explain.ts +7 -2
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +13 -2
- package/src/objects/query/normalize.ts +5 -1
- package/src/objects/query/planner.ts +1 -0
- package/src/objects/query/scalar-values.ts +19 -0
- package/src/objects/query/validate.ts +129 -117
- package/src/objects/sdk/object-handle.ts +11 -8
- package/src/objects/sdk/object-set.ts +9 -15
- package/src/objects/sdk/query-builder.ts +66 -72
- package/src/objects/sdk/query-executor.ts +2 -1
- package/src/objects/sdk/runtime-query-executor.ts +6 -2
- package/src/objects/sdk/telemetry-channel.ts +6 -7
- package/src/objects/sdk/where.ts +6 -13
- package/src/objects/vectors/README.md +59 -0
- package/src/objects/vectors/handle.ts +91 -0
- package/src/objects/vectors/indexing-batch.ts +163 -0
- package/src/objects/vectors/indexing-generate.ts +184 -0
- package/src/objects/vectors/indexing-runtime.ts +17 -0
- package/src/objects/vectors/indexing-shared.ts +188 -0
- package/src/objects/vectors/indexing-single.ts +51 -0
- package/src/objects/vectors/indexing-store-batch.ts +62 -0
- package/src/objects/vectors/indexing.ts +23 -0
- package/src/objects/vectors/profile.ts +64 -0
- package/src/objects/vectors/query.ts +16 -0
- package/src/objects/vectors/resolve-query.ts +89 -0
- package/src/objects/vectors/types.ts +10 -0
- package/src/ontology/builders.ts +15 -11
- package/src/ontology/index.ts +6 -0
- package/src/ontology/inference/index.ts +56 -36
- package/src/ontology/internal.ts +1 -0
- package/src/ontology/json-schema.ts +12 -0
- package/src/ontology/primitives.ts +91 -0
- package/src/ontology/query-capabilities.ts +136 -0
- package/src/ontology/refs.ts +33 -6
- package/src/ontology/registered.ts +22 -0
- package/src/ontology/registry.ts +14 -3
- package/src/ontology/tokens.ts +41 -2
- package/src/ontology/types.ts +28 -12
- package/src/ontology/user-ref.ts +120 -0
- package/src/ontology/validation/definition.ts +93 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/normalize.ts +39 -3
- package/src/ontology/validation/properties.ts +109 -23
- package/src/ontology/validation/query.ts +44 -92
- package/src/ontology/validation/schema.ts +101 -23
- package/src/ontology/vector-profiles.ts +35 -0
- package/src/predicates/types.ts +43 -33
- package/src/projections/builders.ts +24 -3
- package/src/projections/validation.ts +15 -1
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/types.ts +10 -0
- package/src/runtime/create.ts +7 -6
- package/src/runtime/host.ts +44 -10
- package/src/runtime/index.ts +3 -2
- package/src/runtime/internal.ts +3 -0
- package/src/runtime/resolve-definitions.ts +19 -1
- package/src/runtime/sixb.ts +25 -17
- package/src/runtime/types.ts +288 -478
- package/src/sandboxes/README.md +41 -0
- package/src/sandboxes/auth.ts +17 -0
- package/src/sandboxes/config.ts +37 -0
- package/src/sandboxes/configuration.ts +268 -0
- package/src/sandboxes/environment.ts +107 -0
- package/src/sandboxes/errors.ts +1 -1
- package/src/sandboxes/index.ts +15 -0
- package/src/sandboxes/sandbox.ts +42 -4
- package/src/shared/params/builders.ts +50 -0
- package/src/shared/params/types.ts +85 -0
- package/src/shared/params/user-refs.ts +48 -0
- package/src/shared/params/validation.ts +114 -0
- package/src/shares/compiler.ts +6 -16
- package/src/storage/action-runs/types.ts +1 -0
- package/src/storage/agents/in-memory.ts +25 -1
- package/src/storage/agents/index.ts +3 -0
- package/src/storage/agents/provider.ts +105 -0
- package/src/storage/agents/types.ts +54 -0
- package/src/storage/ai-cost/analytics.ts +59 -21
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/types.ts +19 -2
- package/src/storage/auth/in-memory/access-tokens.ts +5 -2
- package/src/storage/auth/in-memory/auth-storage.ts +5 -8
- package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
- package/src/storage/auth/in-memory/sessions.ts +69 -1
- package/src/storage/auth/in-memory/shared.ts +13 -7
- package/src/storage/auth/index.ts +2 -1
- package/src/storage/auth/types.ts +57 -13
- package/src/storage/executions/provider.ts +24 -12
- package/src/storage/executions/types.ts +1 -0
- package/src/storage/executions/validation.ts +8 -4
- package/src/storage/file-upload-sessions/in-memory.ts +64 -113
- package/src/storage/file-upload-sessions/index.ts +1 -0
- package/src/storage/file-upload-sessions/provider.ts +258 -0
- package/src/storage/file-upload-sessions/types.ts +20 -1
- package/src/storage/file-upload-sessions/utils.ts +25 -9
- package/src/storage/index.ts +18 -3
- package/src/storage/objects/in-memory/query.ts +38 -14
- package/src/storage/objects/in-memory/read-scope.ts +9 -2
- package/src/storage/objects/in-memory/read-source.ts +5 -0
- package/src/storage/objects/in-memory/selected-reader.ts +5 -1
- package/src/storage/objects/in-memory/storage.ts +19 -1
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +7 -2
- package/src/storage/ontology/in-memory/index.ts +20 -0
- package/src/storage/ontology/in-memory/materializations.ts +19 -34
- package/src/storage/ontology/in-memory/shared-state.ts +9 -0
- package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
- package/src/storage/ontology/in-memory/vectors.ts +73 -0
- package/src/storage/ontology/index.ts +14 -0
- package/src/storage/ontology/provider-header-validation.ts +57 -0
- package/src/storage/ontology/provider-work.ts +15 -3
- package/src/storage/ontology/provider.ts +59 -1
- package/src/storage/ontology/vector-indexing.ts +98 -0
- package/src/storage/ontology/vectors.ts +48 -0
- package/src/storage/operation-scope.ts +2 -0
- package/src/storage/types.ts +3 -1
- package/src/storage/workflow-interventions/index.ts +0 -1
- package/src/storage/workflow-interventions/types.ts +5 -9
- package/src/testing/action-execution.ts +13 -3
- package/src/testing/agent-storage-contract.ts +246 -0
- package/src/testing/ai-cost-storage-contract.ts +134 -0
- package/src/testing/auth-storage-contract.ts +149 -62
- package/src/testing/execution-storage-contract.ts +1 -2
- package/src/testing/execution.ts +4 -7
- package/src/testing/file-upload-session-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -0
- package/src/testing/materializer-storage-contract.ts +86 -4
- package/src/testing/object-query-contract.ts +162 -27
- package/src/testing/object-read-scope-contract.ts +1 -5
- package/src/testing/ontology-contract-fixture.ts +23 -3
- package/src/testing/ontology-storage-contract.ts +58 -0
- package/src/testing/queues-contract.ts +31 -0
- package/src/testing/sandboxes-contract.ts +27 -0
- package/src/testing/workflow-intervention-storage-contract.ts +203 -0
- package/src/webhooks/types.ts +2 -2
- package/src/workflows/failure.ts +10 -4
- package/src/workflows/run-dispatch.ts +12 -1
- package/src/workflows/snapshot.ts +16 -7
- package/src/workflows/types.ts +2 -2
- package/src/workflows/validation.ts +2 -2
- package/dist/chunk-01kj2pbh.js.map +0 -19
- package/dist/chunk-5hz0fnca.js.map +0 -12
- package/dist/chunk-653vwrzr.js.map +0 -10
- package/dist/chunk-7apz6hg4.js.map +0 -10
- package/dist/chunk-7bs40fe1.js.map +0 -12
- package/dist/chunk-860dwwy0.js.map +0 -14
- package/dist/chunk-93csa55g.js.map +0 -11
- package/dist/chunk-a0e6x5hd.js.map +0 -14
- package/dist/chunk-aa6z4a19.js.map +0 -12
- package/dist/chunk-ap0g1g74.js.map +0 -11
- package/dist/chunk-awbhdqyc.js.map +0 -10
- package/dist/chunk-b19g04jk.js.map +0 -11
- package/dist/chunk-dz5h08xv.js.map +0 -25
- package/dist/chunk-f0rwz2vh.js.map +0 -11
- package/dist/chunk-f4w3yp4f.js.map +0 -12
- package/dist/chunk-ftv470j8.js.map +0 -45
- package/dist/chunk-g00bfdq6.js.map +0 -43
- package/dist/chunk-gq8vhakp.js.map +0 -44
- package/dist/chunk-gqh45d2n.js.map +0 -15
- package/dist/chunk-gqm76kse.js.map +0 -58
- package/dist/chunk-jsy70480.js.map +0 -15
- package/dist/chunk-mrp7k0pw.js.map +0 -10
- package/dist/chunk-ms2tmn1k.js.map +0 -17
- package/dist/chunk-rb1xx120.js.map +0 -11
- package/dist/chunk-sepyxgpc.js.map +0 -15
- package/dist/chunk-yv79ncbv.js.map +0 -10
- package/dist/chunk-z0271qkp.js.map +0 -15
- package/dist/chunk-z3y411fq.js +0 -99
- package/dist/chunk-z3y411fq.js.map +0 -11
- /package/dist/{chunk-1yefycb1.js.map → chunk-2hbhn1ff.js.map} +0 -0
- /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
- /package/dist/{chunk-0y39rgsb.js.map → chunk-4tnrzqqh.js.map} +0 -0
- /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
- /package/dist/{chunk-cfvakeax.js.map → chunk-a69fkrtr.js.map} +0 -0
- /package/dist/{chunk-v2vcg0w6.js.map → chunk-cbn96bve.js.map} +0 -0
- /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
- /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
- /package/dist/{chunk-x9m9x2eq.js.map → chunk-jhyc777j.js.map} +0 -0
- /package/dist/{chunk-17kfctj6.js.map → chunk-m8zkvep1.js.map} +0 -0
- /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
- /package/dist/{chunk-92vk7gta.js.map → chunk-vn3yh259.js.map} +0 -0
- /package/dist/{chunk-g91qxjj0.js.map → chunk-w9bp61e7.js.map} +0 -0
- /package/dist/{chunk-1824gssz.js.map → chunk-y487ywrv.js.map} +0 -0
- /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.
|
|
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
|
|
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
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
DurableFileUploadSessions,
|
|
3
|
+
type FileUploadSessionPersistence,
|
|
4
|
+
type FileUploadSessionPersistenceBackend,
|
|
5
|
+
} from "./provider"
|
|
4
6
|
import type {
|
|
5
7
|
CreateFileUploadSessionInput,
|
|
6
8
|
FileUploadSession,
|
|
7
|
-
|
|
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
|
-
*
|
|
24
|
-
*
|
|
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
|
|
29
|
-
private readonly sessionsById
|
|
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
|
-
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
65
|
-
return
|
|
57
|
+
read<T>(run: (persistence: FileUploadSessionPersistence) => Promise<T>): Promise<T> {
|
|
58
|
+
return run(this.persistence)
|
|
66
59
|
}
|
|
67
60
|
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
99
|
-
|
|
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
|
|
112
|
-
|
|
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
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
|
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
|
}
|
|
@@ -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
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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(
|