@sixb/core 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js +30 -27
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +1 -1
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +6 -2
- package/dist/actions/worker.js.map +3 -3
- package/dist/agents/adapters.d.ts +7 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +7 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context/entries.d.ts +10 -1
- package/dist/agents/context/entries.d.ts.map +1 -1
- package/dist/agents/context/index.d.ts +1 -1
- package/dist/agents/context/index.d.ts.map +1 -1
- package/dist/agents/context/index.js +4 -2
- package/dist/agents/context/index.js.map +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +54 -46
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +8 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/request.d.ts +19 -5
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts +41 -0
- package/dist/agents/skills.d.ts.map +1 -0
- package/dist/agents/streams/index.js +1 -1
- package/dist/agents/streams/internal.js +1 -1
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +9 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/types.d.ts +6 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +5 -3
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/download-urls.d.ts +41 -0
- package/dist/blob-storage/download-urls.d.ts.map +1 -0
- package/dist/blob-storage/execution.d.ts +9 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/file-content.d.ts +18 -0
- package/dist/blob-storage/file-content.d.ts.map +1 -0
- package/dist/blob-storage/index.d.ts +1 -1
- package/dist/blob-storage/index.d.ts.map +1 -1
- package/dist/blob-storage/index.js +6 -4
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/internal.d.ts +4 -0
- package/dist/blob-storage/internal.d.ts.map +1 -0
- package/dist/blob-storage/internal.js +23 -0
- package/dist/blob-storage/internal.js.map +9 -0
- package/dist/blob-storage/media-type.d.ts +8 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -0
- package/dist/blob-storage/types.d.ts +12 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/blob-storage/validation.d.ts +6 -0
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/agent-context.d.ts +33 -0
- package/dist/bootstrap/agent-context.d.ts.map +1 -0
- package/dist/bootstrap/discovery.d.ts +23 -3
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +287 -75
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-kttr5ftm.js → chunk-1b1f2d5f.js} +23 -6
- package/dist/chunk-1b1f2d5f.js.map +12 -0
- package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
- package/dist/chunk-1hqwggsn.js.map +12 -0
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
- package/dist/{chunk-tnvafr7g.js → chunk-29yx306f.js} +124 -9
- package/dist/chunk-29yx306f.js.map +22 -0
- package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
- package/dist/chunk-3zxk45er.js +152 -0
- package/dist/chunk-3zxk45er.js.map +11 -0
- package/dist/{chunk-gmdvns8f.js → chunk-48e3cn2d.js} +2 -2
- package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
- package/dist/chunk-4as3wt1c.js.map +12 -0
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-2xvgy3x5.js → chunk-6h5m9xjx.js} +43 -415
- package/dist/{chunk-2xvgy3x5.js.map → chunk-6h5m9xjx.js.map} +7 -11
- package/dist/{chunk-cq44v1a6.js → chunk-7hpdd6r9.js} +3 -3
- package/dist/{chunk-f85hpqnm.js → chunk-99nd4rc1.js} +3 -3
- package/dist/{chunk-f85hpqnm.js.map → chunk-99nd4rc1.js.map} +3 -3
- package/dist/chunk-b9affek3.js +261 -0
- package/dist/chunk-b9affek3.js.map +12 -0
- package/dist/{chunk-zvmr2hqk.js → chunk-bs7sqkre.js} +10 -4
- package/dist/chunk-bs7sqkre.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-667x4drs.js → chunk-d0eb5yy6.js} +143 -7
- package/dist/chunk-d0eb5yy6.js.map +14 -0
- package/dist/chunk-d62kjtbg.js.map +2 -2
- package/dist/{chunk-gkxsenvp.js → chunk-de4z2bj6.js} +31 -7
- package/dist/{chunk-gkxsenvp.js.map → chunk-de4z2bj6.js.map} +5 -4
- package/dist/{chunk-mdnw7nj8.js → chunk-dnmadg9k.js} +35 -10
- package/dist/chunk-dnmadg9k.js.map +15 -0
- package/dist/chunk-enpsx8k5.js +127 -0
- package/dist/chunk-enpsx8k5.js.map +10 -0
- package/dist/{chunk-xnx96gfy.js → chunk-ere85b8y.js} +17 -8
- package/dist/chunk-ere85b8y.js.map +15 -0
- package/dist/{chunk-k4kkp58d.js → chunk-ewqa58h9.js} +12 -2
- package/dist/chunk-ewqa58h9.js.map +11 -0
- package/dist/{chunk-7g2gjvah.js → chunk-ex496vct.js} +1 -1
- package/dist/{chunk-nvymebc1.js → chunk-f1zxad2t.js} +1 -1
- package/dist/{chunk-3q7z9hd4.js → chunk-fe52eczz.js} +483 -101
- package/dist/chunk-fe52eczz.js.map +49 -0
- package/dist/{chunk-8x74221e.js → chunk-fx93hd2n.js} +79 -32
- package/dist/chunk-fx93hd2n.js.map +20 -0
- package/dist/{chunk-39tqv9hz.js → chunk-gc4ntf7d.js} +6 -7
- package/dist/{chunk-39tqv9hz.js.map → chunk-gc4ntf7d.js.map} +3 -4
- package/dist/chunk-h8teetr0.js +9 -0
- package/dist/chunk-h8teetr0.js.map +10 -0
- package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
- package/dist/chunk-hkc3jct7.js.map +10 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-h044jb97.js → chunk-htr6wjmv.js} +282 -58
- package/dist/chunk-htr6wjmv.js.map +19 -0
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-chdg6eqq.js → chunk-k6hrnf35.js} +5 -5
- package/dist/chunk-k6hrnf35.js.map +10 -0
- package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
- package/dist/chunk-kpx7jrmn.js.map +12 -0
- package/dist/{chunk-b9y8hcm2.js → chunk-mfs23znk.js} +1 -1
- package/dist/{chunk-kvysp909.js → chunk-ny3xyvcn.js} +32 -19
- package/dist/chunk-ny3xyvcn.js.map +17 -0
- package/dist/{chunk-h4138ww2.js → chunk-p0dqwj3n.js} +450 -799
- package/dist/chunk-p0dqwj3n.js.map +49 -0
- package/dist/{chunk-f72rbvsb.js → chunk-p844e0rn.js} +23 -8
- package/dist/chunk-p844e0rn.js.map +19 -0
- package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
- package/dist/chunk-pfp1txq2.js.map +11 -0
- package/dist/chunk-pqajwytd.js.map +3 -3
- package/dist/{chunk-mr60an99.js → chunk-qczk96d9.js} +22 -2
- package/dist/{chunk-mr60an99.js.map → chunk-qczk96d9.js.map} +3 -3
- package/dist/{chunk-69kt9q43.js → chunk-qkbx3tf6.js} +17 -128
- package/dist/{chunk-69kt9q43.js.map → chunk-qkbx3tf6.js.map} +6 -7
- package/dist/{chunk-h866d223.js → chunk-qkvz64nd.js} +2 -2
- package/dist/{chunk-vsvrv7n8.js → chunk-qmnnhde6.js} +4 -8
- package/dist/{chunk-vsvrv7n8.js.map → chunk-qmnnhde6.js.map} +3 -3
- package/dist/{chunk-6z1q7j19.js → chunk-qq90g05n.js} +1128 -782
- package/dist/chunk-qq90g05n.js.map +66 -0
- package/dist/{chunk-40qb8wpe.js → chunk-qxvp5epv.js} +84 -29
- package/dist/{chunk-40qb8wpe.js.map → chunk-qxvp5epv.js.map} +10 -9
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
- package/dist/chunk-rj69qcrd.js.map +11 -0
- package/dist/{chunk-tkdbge6v.js → chunk-rt9p8m9t.js} +1 -1
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-a7ne02hk.js → chunk-s4jhg8a3.js} +351 -296
- package/dist/chunk-s4jhg8a3.js.map +15 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-dsv8kdgk.js → chunk-tffvfy6s.js} +8 -7
- package/dist/{chunk-dsv8kdgk.js.map → chunk-tffvfy6s.js.map} +3 -3
- package/dist/{chunk-sbcm1b92.js → chunk-v6xpd60t.js} +3 -3
- package/dist/{chunk-nj0020ay.js → chunk-vgk3hknm.js} +1 -1
- package/dist/{chunk-qnd7ehe5.js → chunk-vx2yp45y.js} +2 -2
- package/dist/{chunk-vjqt7q3a.js → chunk-vz3gc1tm.js} +607 -45
- package/dist/chunk-vz3gc1tm.js.map +41 -0
- package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
- package/dist/chunk-wt4szfec.js.map +14 -0
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/{chunk-swxzncrv.js → chunk-y05543x6.js} +51 -8
- package/dist/{chunk-swxzncrv.js.map → chunk-y05543x6.js.map} +5 -5
- package/dist/{chunk-zdkcdshk.js → chunk-y9jmd7e5.js} +41 -3
- package/dist/{chunk-zdkcdshk.js.map → chunk-y9jmd7e5.js.map} +4 -3
- package/dist/{chunk-nkbev3tr.js → chunk-yv9czyfr.js} +3 -3
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- package/dist/{chunk-cxj8y8t0.js → chunk-za5yd58j.js} +2 -2
- package/dist/{chunk-zb47r1c8.js → chunk-zb77kjth.js} +3 -3
- package/dist/{chunk-dp7yk20b.js → chunk-zxawp1n2.js} +1 -1
- package/dist/datasets/builders.d.ts +12 -1
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +27 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -1
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/types.d.ts +2 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +5 -0
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +10 -5
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/properties.d.ts.map +1 -1
- package/dist/events/execution.d.ts +2 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/objects.d.ts +5 -0
- package/dist/events/types/objects.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +10 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +49 -43
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +9 -2
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +45 -41
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +46 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +16 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -71
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +5 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +1 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +8 -5
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +26 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts +5 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/maintenance/types.d.ts +1 -4
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +20 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -0
- package/dist/materialization/events.d.ts +29 -3
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +4 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +9 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -10
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/effective/build-events.d.ts +5 -21
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +2 -3
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -1
- package/dist/materializer/effective/vectors.d.ts +2 -3
- package/dist/materializer/effective/vectors.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +1 -11
- package/dist/materializer/execution/scope.d.ts.map +1 -1
- package/dist/materializer/execution/work-executor.d.ts +5 -7
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +1 -3
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +35 -33
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +8 -11
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/batching.d.ts +5 -0
- package/dist/materializer/shared/batching.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +2 -8
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +20 -0
- package/dist/models/audio/catalog.d.ts.map +1 -0
- package/dist/models/audio/errors.d.ts +8 -0
- package/dist/models/audio/errors.d.ts.map +1 -0
- package/dist/models/audio/file.d.ts +9 -0
- package/dist/models/audio/file.d.ts.map +1 -0
- package/dist/models/audio/runtime.d.ts +8 -0
- package/dist/models/audio/runtime.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +60 -0
- package/dist/models/audio/types.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +24 -2
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/events.d.ts +3 -0
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +6 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.js +27 -24
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-admission.d.ts +6 -1
- package/dist/models/execution/model-call-admission.d.ts.map +1 -1
- package/dist/models/execution/model-call-limits.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +4 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/reranking.d.ts +4 -0
- package/dist/models/execution/reranking.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +2 -1
- 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 +7 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +6 -2
- package/dist/models/index.js.map +1 -1
- package/dist/models/language-model.d.ts +6 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/pricing.d.ts +2 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/reranking-model.d.ts +49 -0
- package/dist/models/reranking-model.d.ts.map +1 -0
- package/dist/objects/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +6 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +2 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +31 -27
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +41 -0
- package/dist/objects/property-clearance.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +5 -1
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +1 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +27 -24
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +8 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/primary-id.d.ts +7 -0
- package/dist/objects/query/primary-id.d.ts.map +1 -0
- package/dist/objects/query/reranking-executor.d.ts +13 -0
- package/dist/objects/query/reranking-executor.d.ts.map +1 -0
- package/dist/objects/query/reranking-limits.d.ts +3 -0
- package/dist/objects/query/reranking-limits.d.ts.map +1 -0
- package/dist/objects/query/reranking-query.d.ts +4 -0
- package/dist/objects/query/reranking-query.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +10 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/file-handle.d.ts +6 -0
- package/dist/objects/sdk/file-handle.d.ts.map +1 -0
- package/dist/objects/sdk/object-handle.d.ts +2 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -0
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-builder.d.ts +8 -0
- package/dist/objects/sdk/query-builder.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -2
- 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/vectors/indexing-dispatch.d.ts +21 -0
- package/dist/objects/vectors/indexing-dispatch.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +12 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +35 -0
- package/dist/ontology/docs-markdown.d.ts.map +1 -0
- package/dist/ontology/docs.d.ts +50 -0
- package/dist/ontology/docs.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +1 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +7 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +19 -0
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +3 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +276 -3
- package/dist/ontology/internal.js.map +4 -3
- package/dist/ontology/query-capabilities.d.ts +1 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +8 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +25 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +7 -0
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +29 -26
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +27 -24
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +3 -0
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +4 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +11 -2
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -1
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +14 -2
- 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 +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +32 -27
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/locale.d.ts +9 -0
- package/dist/runtime/locale.d.ts.map +1 -0
- package/dist/runtime/public-origin.d.ts +10 -0
- package/dist/runtime/public-origin.d.ts.map +1 -0
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +1 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +42 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/runtime.d.ts +3 -0
- package/dist/scheduler/runtime.d.ts.map +1 -1
- package/dist/security/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/index.d.ts +4 -4
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/markings.d.ts +19 -0
- package/dist/security/markings.d.ts.map +1 -0
- package/dist/security/redactions.d.ts +4 -0
- package/dist/security/redactions.d.ts.map +1 -0
- package/dist/security/registry.d.ts +7 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +25 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -21
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +5 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +15 -9
- 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/provider.js +3 -3
- package/dist/storage/ai-cost/types.d.ts +1 -1
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +7 -2
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +4 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-limits/types.d.ts +3 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +8 -4
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/file-download-grants/in-memory.d.ts +11 -0
- package/dist/storage/file-download-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/file-download-grants/index.d.ts +3 -0
- package/dist/storage/file-download-grants/index.d.ts.map +1 -0
- package/dist/storage/file-download-grants/record.d.ts +11 -0
- package/dist/storage/file-download-grants/record.d.ts.map +1 -0
- package/dist/storage/file-download-grants/types.d.ts +44 -0
- package/dist/storage/file-download-grants/types.d.ts.map +1 -0
- package/dist/storage/file-upload-sessions/provider.js +10 -7
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/in-memory/index.d.ts +4 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +6 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +35 -32
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +9 -4
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/index.d.ts +1 -1
- package/dist/storage/migrations/index.d.ts.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +3 -3
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/types.d.ts +7 -0
- package/dist/storage/migrations/types.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/query.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.map +1 -1
- package/dist/storage/objects/query-preparation.d.ts +39 -0
- package/dist/storage/objects/query-preparation.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +9 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -6
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -2
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-state.d.ts +0 -2
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-work.d.ts +1 -3
- package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +23 -57
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/outbox.d.ts +3 -2
- package/dist/storage/ontology/in-memory/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts +104 -0
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts +17 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts +3 -1
- package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +1 -2
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/state-reader.d.ts +25 -0
- package/dist/storage/ontology/in-memory/state-reader.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -3
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +40 -59
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +4 -6
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +114 -3
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +14 -39
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +26 -12
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/replacement-plans.d.ts +103 -0
- package/dist/storage/ontology/replacement-plans.d.ts.map +1 -0
- package/dist/storage/ontology/sources.d.ts +0 -8
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/types.d.ts +2 -0
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +30 -27
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-download-grant-storage-contract.d.ts +9 -0
- package/dist/testing/file-download-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2556 -1495
- package/dist/testing/index.js.map +14 -13
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts +14 -0
- package/dist/testing/materializer-storage-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 +5 -1
- 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/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +25 -22
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +15 -17
- package/dist/workers/index.js.map +3 -3
- package/dist/workers/queue-worker.d.ts +3 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +51 -47
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -3
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +2 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +7 -1
- package/src/actions/read-facade.ts +2 -1
- package/src/actions/types/context.ts +5 -2
- package/src/actions/validation.ts +4 -1
- package/src/agents/adapters.ts +15 -0
- package/src/agents/authority.ts +15 -0
- package/src/agents/context/entries.ts +48 -4
- package/src/agents/context/index.ts +1 -0
- package/src/agents/context-compaction.ts +6 -0
- package/src/agents/errors.ts +3 -0
- package/src/agents/index.ts +13 -1
- package/src/agents/message.ts +9 -0
- package/src/agents/request.ts +178 -22
- package/src/agents/skills.ts +63 -0
- package/src/agents/types.ts +35 -5
- package/src/auth/runtime.ts +14 -0
- package/src/auth/types.ts +6 -0
- package/src/authorization/resolve.ts +6 -1
- package/src/authorization/types.ts +7 -0
- package/src/blob-storage/download-urls.ts +138 -0
- package/src/blob-storage/execution.ts +44 -1
- package/src/blob-storage/file-content.ts +106 -0
- package/src/blob-storage/index.ts +1 -0
- package/src/blob-storage/internal.ts +8 -0
- package/src/blob-storage/media-type.ts +29 -0
- package/src/blob-storage/types.ts +13 -1
- package/src/blob-storage/validation.ts +13 -0
- package/src/bootstrap/agent-context.ts +356 -0
- package/src/bootstrap/discovery.ts +100 -33
- package/src/bootstrap/index.ts +1 -1
- package/src/bootstrap/ontology-type-manifest.ts +3 -38
- package/src/datasets/builders.ts +17 -1
- package/src/datasets/execution.ts +110 -2
- package/src/datasets/index.ts +7 -1
- package/src/datasets/types.ts +2 -0
- package/src/datasets/write.ts +21 -2
- package/src/edits/properties.ts +3 -0
- package/src/events/execution.ts +15 -16
- package/src/events/types/objects.ts +5 -0
- package/src/execution/agent.ts +27 -0
- package/src/execution/authorization.ts +1 -0
- package/src/execution/authorized-object-reader.ts +104 -35
- package/src/execution/scopes.ts +2 -6
- package/src/http/api-routes.ts +4 -3
- package/src/index.ts +52 -2
- package/src/lake-storage/in-memory.ts +38 -9
- package/src/lake-storage/index.ts +2 -0
- package/src/lake-storage/types.ts +30 -0
- package/src/maintenance/ontology-maintenance.ts +50 -23
- package/src/maintenance/types.ts +1 -4
- package/src/materialization/event-envelopes.ts +168 -0
- package/src/materialization/events.ts +40 -4
- package/src/materialization/index.ts +9 -1
- package/src/materializer/README.md +55 -10
- package/src/materializer/edits/commit.ts +3 -19
- package/src/materializer/edits/plan.ts +20 -71
- package/src/materializer/effective/build-events.ts +42 -136
- package/src/materializer/effective/vector-indexing.ts +2 -3
- package/src/materializer/effective/vectors.ts +2 -3
- package/src/materializer/execution/scope.ts +1 -38
- package/src/materializer/execution/work-executor.ts +21 -115
- package/src/materializer/execution/work-records.ts +0 -15
- package/src/materializer/projections/replace.ts +106 -63
- package/src/materializer/projections/replacement-plan.ts +73 -218
- package/src/materializer/shared/batching.ts +7 -0
- package/src/materializer/telemetry/append.ts +2 -14
- package/src/materializer/telemetry/plan.ts +6 -43
- package/src/models/audio/catalog.ts +90 -0
- package/src/models/audio/errors.ts +19 -0
- package/src/models/audio/file.ts +78 -0
- package/src/models/audio/runtime.ts +182 -0
- package/src/models/audio/types.ts +69 -0
- package/src/models/catalog.ts +78 -7
- package/src/models/definitions.ts +8 -1
- package/src/models/events.ts +3 -0
- package/src/models/execution/README.md +24 -4
- package/src/models/execution/binding.ts +6 -0
- package/src/models/execution/model-call-admission.ts +6 -1
- package/src/models/execution/model-call-limits.ts +21 -11
- package/src/models/execution/model-call-recorder.ts +11 -0
- package/src/models/execution/model-call-recovery.ts +1 -0
- package/src/models/execution/reranking.ts +137 -0
- package/src/models/execution/session.ts +2 -2
- package/src/models/execution/usage.ts +1 -0
- package/src/models/execution.ts +11 -3
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +32 -0
- package/src/models/language-model.ts +6 -0
- package/src/models/pricing.ts +2 -1
- package/src/models/reranking-model.ts +114 -0
- package/src/objects/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +4 -1
- package/src/objects/materializer-adapter.ts +3 -0
- package/src/objects/object/upsert-batch.ts +4 -1
- package/src/objects/object/upsert.ts +3 -1
- package/src/objects/property-clearance.ts +209 -0
- package/src/objects/query/executor.ts +85 -38
- package/src/objects/query/explain.ts +8 -0
- package/src/objects/query/index.ts +1 -0
- package/src/objects/query/ir.ts +10 -0
- package/src/objects/query/normalize.ts +2 -0
- package/src/objects/query/planner.ts +12 -1
- package/src/objects/query/primary-id.ts +56 -0
- package/src/objects/query/reranking-executor.ts +91 -0
- package/src/objects/query/reranking-limits.ts +3 -0
- package/src/objects/query/reranking-query.ts +8 -0
- package/src/objects/query/validate.ts +166 -15
- package/src/objects/sdk/file-handle.ts +77 -0
- package/src/objects/sdk/object-handle.ts +8 -4
- package/src/objects/sdk/object-set.ts +5 -2
- package/src/objects/sdk/query-builder.ts +15 -2
- package/src/objects/sdk/query-executor.ts +2 -2
- package/src/objects/sdk/runtime-query-executor.ts +7 -4
- package/src/objects/vectors/README.md +6 -2
- package/src/objects/vectors/indexing-dispatch.ts +83 -0
- package/src/objects/vectors/query.ts +3 -0
- package/src/ontology/builders.ts +19 -2
- package/src/ontology/docs-markdown.ts +394 -0
- package/src/ontology/docs.ts +196 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/inference/index.ts +25 -0
- package/src/ontology/internal.ts +7 -0
- package/src/ontology/query-capabilities.ts +1 -1
- package/src/ontology/tokens.ts +13 -2
- package/src/ontology/types.ts +26 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/query.ts +57 -0
- package/src/ontology/validation/schema.ts +26 -1
- package/src/query.ts +4 -0
- package/src/queues/in-memory.ts +54 -19
- package/src/queues/types.ts +4 -0
- package/src/runtime/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +73 -2
- package/src/runtime/index.ts +4 -0
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/public-origin.ts +33 -0
- package/src/runtime/resolve-definitions.ts +28 -1
- package/src/runtime/sixb.ts +14 -3
- package/src/runtime/types.ts +51 -5
- package/src/scheduler/runtime.ts +11 -2
- package/src/security/builders.ts +49 -5
- package/src/security/index.ts +6 -1
- package/src/security/markings.ts +313 -0
- package/src/security/redactions.ts +6 -0
- package/src/security/registry.ts +21 -1
- package/src/security/types.ts +26 -0
- package/src/security/validation.ts +59 -2
- package/src/storage/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/ai-cost/analytics.ts +2 -0
- package/src/storage/ai-cost/codec.ts +2 -1
- package/src/storage/ai-cost/types.ts +1 -0
- package/src/storage/ai-cost/validation.ts +21 -8
- package/src/storage/ai-limits/in-memory.ts +10 -2
- package/src/storage/ai-limits/provider.ts +29 -2
- package/src/storage/ai-limits/types.ts +3 -0
- package/src/storage/ai-usage/record.ts +9 -0
- package/src/storage/ai-usage/types.ts +8 -4
- package/src/storage/ai-usage/usage.ts +2 -0
- package/src/storage/file-download-grants/in-memory.ts +73 -0
- package/src/storage/file-download-grants/index.ts +8 -0
- package/src/storage/file-download-grants/record.ts +47 -0
- package/src/storage/file-download-grants/types.ts +48 -0
- package/src/storage/in-memory/index.ts +13 -2
- package/src/storage/index.ts +32 -13
- package/src/storage/internal.ts +1 -0
- package/src/storage/migrations/index.ts +1 -0
- package/src/storage/migrations/migrate-storage.ts +36 -12
- package/src/storage/migrations/types.ts +8 -0
- package/src/storage/objects/in-memory/query.ts +2 -0
- package/src/storage/objects/in-memory/selected-reader.ts +1 -0
- package/src/storage/objects/in-memory/storage.ts +1 -0
- package/src/storage/objects/query-preparation.ts +77 -0
- package/src/storage/objects/types.ts +9 -0
- package/src/storage/ontology/commits.ts +1 -6
- package/src/storage/ontology/in-memory/index.ts +28 -9
- package/src/storage/ontology/in-memory/materializations-finalization.ts +35 -68
- package/src/storage/ontology/in-memory/materializations-state.ts +0 -22
- package/src/storage/ontology/in-memory/materializations-work.ts +0 -45
- package/src/storage/ontology/in-memory/materializations.ts +172 -653
- package/src/storage/ontology/in-memory/outbox.ts +37 -29
- package/src/storage/ontology/in-memory/replacement-plans.ts +697 -0
- package/src/storage/ontology/in-memory/shared-state.ts +24 -2
- package/src/storage/ontology/in-memory/source-roots.ts +7 -2
- package/src/storage/ontology/in-memory/sources.ts +7 -33
- package/src/storage/ontology/in-memory/state-reader.ts +245 -0
- package/src/storage/ontology/index.ts +19 -13
- package/src/storage/ontology/materializations.ts +45 -74
- package/src/storage/ontology/outbox.ts +4 -7
- package/src/storage/ontology/provider-header-validation.ts +0 -57
- package/src/storage/ontology/provider-work.ts +381 -90
- package/src/storage/ontology/provider.ts +74 -171
- package/src/storage/ontology/replacement-plans.ts +117 -0
- package/src/storage/ontology/sources.ts +0 -12
- package/src/storage/operation-scope.ts +33 -1
- package/src/storage/projection-runs/in-memory.ts +7 -1
- package/src/storage/projection-runs/types.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/testing/ai-cost-storage-contract.ts +1 -0
- package/src/testing/ai-limit-storage-contract.ts +62 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/file-download-grant-storage-contract.ts +139 -0
- package/src/testing/index.ts +4 -0
- package/src/testing/lake-storage-contract.ts +87 -1
- package/src/testing/materializer-storage-contract.ts +1008 -1
- package/src/testing/object-read-scope-contract.ts +1 -0
- package/src/testing/ontology-contract-fixture.ts +11 -87
- package/src/testing/ontology-storage-contract.ts +70 -39
- package/src/testing/projection-run-storage-contract.ts +14 -0
- package/src/testing/queues-contract.ts +59 -0
- package/src/workers/queue-worker.ts +19 -16
- package/src/workflows/builders.ts +24 -1
- package/src/workflows/request.ts +3 -0
- package/src/workflows/types.ts +6 -3
- package/src/workflows/validation.ts +32 -4
- package/dist/chunk-3q7z9hd4.js.map +0 -46
- package/dist/chunk-667x4drs.js.map +0 -12
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6z1q7j19.js.map +0 -62
- package/dist/chunk-7ytf06d3.js +0 -113
- package/dist/chunk-7ytf06d3.js.map +0 -10
- package/dist/chunk-8x74221e.js.map +0 -20
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-a0073121.js.map +0 -12
- package/dist/chunk-a7ne02hk.js.map +0 -15
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-chdg6eqq.js.map +0 -10
- package/dist/chunk-dmn70ztd.js.map +0 -11
- package/dist/chunk-f72rbvsb.js.map +0 -19
- package/dist/chunk-g4rbm4a6.js.map +0 -15
- package/dist/chunk-h044jb97.js.map +0 -15
- package/dist/chunk-h3v76ams.js.map +0 -11
- package/dist/chunk-h4138ww2.js.map +0 -50
- package/dist/chunk-hgqpcmyr.js.map +0 -12
- package/dist/chunk-jgwb25gc.js.map +0 -12
- package/dist/chunk-k4kkp58d.js.map +0 -11
- package/dist/chunk-kttr5ftm.js.map +0 -12
- package/dist/chunk-kvysp909.js.map +0 -17
- package/dist/chunk-mdnw7nj8.js.map +0 -15
- package/dist/chunk-s3csryxe.js.map +0 -11
- package/dist/chunk-tnvafr7g.js.map +0 -19
- package/dist/chunk-vjqt7q3a.js.map +0 -36
- package/dist/chunk-xnx96gfy.js.map +0 -15
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- package/dist/chunk-zvmr2hqk.js.map +0 -12
- package/dist/materializer/execution/plan-stream.d.ts +0 -8
- package/dist/materializer/execution/plan-stream.d.ts.map +0 -1
- package/src/materializer/execution/plan-stream.ts +0 -121
- /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
- /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
- /package/dist/{chunk-gmdvns8f.js.map → chunk-48e3cn2d.js.map} +0 -0
- /package/dist/{chunk-cq44v1a6.js.map → chunk-7hpdd6r9.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-7g2gjvah.js.map → chunk-ex496vct.js.map} +0 -0
- /package/dist/{chunk-nvymebc1.js.map → chunk-f1zxad2t.js.map} +0 -0
- /package/dist/{chunk-b9y8hcm2.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-h866d223.js.map → chunk-qkvz64nd.js.map} +0 -0
- /package/dist/{chunk-tkdbge6v.js.map → chunk-rt9p8m9t.js.map} +0 -0
- /package/dist/{chunk-sbcm1b92.js.map → chunk-v6xpd60t.js.map} +0 -0
- /package/dist/{chunk-nj0020ay.js.map → chunk-vgk3hknm.js.map} +0 -0
- /package/dist/{chunk-qnd7ehe5.js.map → chunk-vx2yp45y.js.map} +0 -0
- /package/dist/{chunk-nkbev3tr.js.map → chunk-yv9czyfr.js.map} +0 -0
- /package/dist/{chunk-cxj8y8t0.js.map → chunk-za5yd58j.js.map} +0 -0
- /package/dist/{chunk-zb47r1c8.js.map → chunk-zb77kjth.js.map} +0 -0
- /package/dist/{chunk-dp7yk20b.js.map → chunk-zxawp1n2.js.map} +0 -0
package/dist/chunk-7ytf06d3.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import {
|
|
3
|
-
MaterializationValidationError2
|
|
4
|
-
} from "./chunk-96yw3pwd.js";
|
|
5
|
-
import {
|
|
6
|
-
compareStrings
|
|
7
|
-
} from "./chunk-wy0qdqfm.js";
|
|
8
|
-
|
|
9
|
-
// src/materialization/refs.ts
|
|
10
|
-
var textEncoder = new TextEncoder;
|
|
11
|
-
function assertIdentifier(value, label) {
|
|
12
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
13
|
-
throw new MaterializationValidationError2(`${label} must be a nonblank string.`);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function normalizeObjectRef2(ref) {
|
|
17
|
-
assertIdentifier(ref.objectTypeId, "Object type id");
|
|
18
|
-
assertIdentifier(ref.primaryId, "Object primary id");
|
|
19
|
-
return Object.freeze({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId });
|
|
20
|
-
}
|
|
21
|
-
function normalizeLinkRef2(ref) {
|
|
22
|
-
assertIdentifier(ref.linkId, "Link id");
|
|
23
|
-
return Object.freeze({
|
|
24
|
-
source: normalizeObjectRef2(ref.source),
|
|
25
|
-
linkId: ref.linkId,
|
|
26
|
-
target: normalizeObjectRef2(ref.target)
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function objectRefKey2(ref) {
|
|
30
|
-
return JSON.stringify([ref.objectTypeId, ref.primaryId]);
|
|
31
|
-
}
|
|
32
|
-
function linkRefKey2(ref) {
|
|
33
|
-
return JSON.stringify([
|
|
34
|
-
ref.source.objectTypeId,
|
|
35
|
-
ref.source.primaryId,
|
|
36
|
-
ref.linkId,
|
|
37
|
-
ref.target.objectTypeId,
|
|
38
|
-
ref.target.primaryId
|
|
39
|
-
]);
|
|
40
|
-
}
|
|
41
|
-
function projectionEntityKey2(entity) {
|
|
42
|
-
return entity.kind === "object" ? JSON.stringify(["object", entity.ref.objectTypeId, entity.ref.primaryId]) : JSON.stringify([
|
|
43
|
-
"link",
|
|
44
|
-
entity.ref.source.objectTypeId,
|
|
45
|
-
entity.ref.source.primaryId,
|
|
46
|
-
entity.ref.linkId,
|
|
47
|
-
entity.ref.target.objectTypeId,
|
|
48
|
-
entity.ref.target.primaryId
|
|
49
|
-
]);
|
|
50
|
-
}
|
|
51
|
-
function linkOwnershipKey(sourceObjectTypeId, linkId) {
|
|
52
|
-
return JSON.stringify([sourceObjectTypeId, linkId]);
|
|
53
|
-
}
|
|
54
|
-
function telemetryOwnershipKey(objectTypeId, propertyId) {
|
|
55
|
-
return JSON.stringify([objectTypeId, propertyId]);
|
|
56
|
-
}
|
|
57
|
-
function telemetrySeriesKey2(series) {
|
|
58
|
-
return JSON.stringify([series.object.objectTypeId, series.object.primaryId, series.propertyId]);
|
|
59
|
-
}
|
|
60
|
-
function telemetryPointKey2(series, at) {
|
|
61
|
-
return JSON.stringify([
|
|
62
|
-
series.object.objectTypeId,
|
|
63
|
-
series.object.primaryId,
|
|
64
|
-
series.propertyId,
|
|
65
|
-
at
|
|
66
|
-
]);
|
|
67
|
-
}
|
|
68
|
-
function canonicalIdentitySortKey2(parts) {
|
|
69
|
-
let result = "";
|
|
70
|
-
for (const byte of textEncoder.encode(JSON.stringify(parts))) {
|
|
71
|
-
result += byte.toString(16).padStart(2, "0");
|
|
72
|
-
}
|
|
73
|
-
return result;
|
|
74
|
-
}
|
|
75
|
-
function utf8JsonByteLength(value) {
|
|
76
|
-
return textEncoder.encode(JSON.stringify(value)).byteLength;
|
|
77
|
-
}
|
|
78
|
-
function objectRefSortKey2(ref) {
|
|
79
|
-
return canonicalIdentitySortKey2([ref.objectTypeId, ref.primaryId]);
|
|
80
|
-
}
|
|
81
|
-
function linkRefSortKey2(ref) {
|
|
82
|
-
return canonicalIdentitySortKey2([
|
|
83
|
-
ref.source.objectTypeId,
|
|
84
|
-
ref.source.primaryId,
|
|
85
|
-
ref.linkId,
|
|
86
|
-
ref.target.objectTypeId,
|
|
87
|
-
ref.target.primaryId
|
|
88
|
-
]);
|
|
89
|
-
}
|
|
90
|
-
function linkScopeKey(source, linkId) {
|
|
91
|
-
return JSON.stringify([source.objectTypeId, source.primaryId, linkId]);
|
|
92
|
-
}
|
|
93
|
-
function linkScopeSortKey2(source, linkId) {
|
|
94
|
-
return canonicalIdentitySortKey2([source.objectTypeId, source.primaryId, linkId]);
|
|
95
|
-
}
|
|
96
|
-
function telemetryPointSortKey2(series, at) {
|
|
97
|
-
return canonicalIdentitySortKey2([
|
|
98
|
-
series.object.objectTypeId,
|
|
99
|
-
series.object.primaryId,
|
|
100
|
-
series.propertyId,
|
|
101
|
-
at
|
|
102
|
-
]);
|
|
103
|
-
}
|
|
104
|
-
function compareObjectRefs2(left, right) {
|
|
105
|
-
return compareStrings(objectRefSortKey2(left), objectRefSortKey2(right));
|
|
106
|
-
}
|
|
107
|
-
function compareLinkRefs2(left, right) {
|
|
108
|
-
return compareStrings(linkRefSortKey2(left), linkRefSortKey2(right));
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export { normalizeObjectRef2, normalizeLinkRef2, objectRefKey2, linkRefKey2, projectionEntityKey2, linkOwnershipKey, telemetryOwnershipKey, telemetrySeriesKey2, telemetryPointKey2, canonicalIdentitySortKey2, utf8JsonByteLength, objectRefSortKey2, linkRefSortKey2, linkScopeKey, linkScopeSortKey2, telemetryPointSortKey2, compareObjectRefs2, compareLinkRefs2 };
|
|
112
|
-
|
|
113
|
-
//# debugId=1182BD7C8CFFA82F64756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/materialization/refs.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import { compareStrings } from \"../json\"\nimport { MaterializationValidationError } from \"./errors\"\nimport type {\n OntologyLinkRef,\n OntologyObjectRef,\n ProjectionEntityRef,\n TelemetrySeriesRef,\n} from \"./model\"\n\nconst textEncoder = new TextEncoder()\n\nfunction assertIdentifier(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be a nonblank string.`)\n }\n}\n\nexport function normalizeObjectRef(ref: OntologyObjectRef): OntologyObjectRef {\n assertIdentifier(ref.objectTypeId, \"Object type id\")\n assertIdentifier(ref.primaryId, \"Object primary id\")\n return Object.freeze({ objectTypeId: ref.objectTypeId, primaryId: ref.primaryId })\n}\n\nexport function normalizeLinkRef(ref: OntologyLinkRef): OntologyLinkRef {\n assertIdentifier(ref.linkId, \"Link id\")\n return Object.freeze({\n source: normalizeObjectRef(ref.source),\n linkId: ref.linkId,\n target: normalizeObjectRef(ref.target),\n })\n}\n\nexport function objectRefKey(ref: OntologyObjectRef): string {\n return JSON.stringify([ref.objectTypeId, ref.primaryId])\n}\n\nexport function linkRefKey(ref: OntologyLinkRef): string {\n return JSON.stringify([\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId,\n ])\n}\n\nexport function projectionEntityKey(entity: ProjectionEntityRef): string {\n return entity.kind === \"object\"\n ? JSON.stringify([\"object\", entity.ref.objectTypeId, entity.ref.primaryId])\n : JSON.stringify([\n \"link\",\n entity.ref.source.objectTypeId,\n entity.ref.source.primaryId,\n entity.ref.linkId,\n entity.ref.target.objectTypeId,\n entity.ref.target.primaryId,\n ])\n}\n\nexport function linkOwnershipKey(sourceObjectTypeId: string, linkId: string): string {\n return JSON.stringify([sourceObjectTypeId, linkId])\n}\n\nexport function telemetryOwnershipKey(objectTypeId: string, propertyId: string): string {\n return JSON.stringify([objectTypeId, propertyId])\n}\n\nexport function telemetrySeriesKey(series: TelemetrySeriesRef): string {\n return JSON.stringify([series.object.objectTypeId, series.object.primaryId, series.propertyId])\n}\n\nexport function telemetryPointKey(series: TelemetrySeriesRef, at: string): string {\n return JSON.stringify([\n series.object.objectTypeId,\n series.object.primaryId,\n series.propertyId,\n at,\n ])\n}\n\n/**\n * A provider-collation-independent byte key. Providers compare this lowercase hexadecimal value\n * verbatim; all ontology identity structure is supplied by core in the canonical JSON tuple.\n */\nexport function canonicalIdentitySortKey(parts: readonly string[]): string {\n let result = \"\"\n for (const byte of textEncoder.encode(JSON.stringify(parts))) {\n result += byte.toString(16).padStart(2, \"0\")\n }\n return result\n}\n\nexport function utf8JsonByteLength(value: unknown): number {\n return textEncoder.encode(JSON.stringify(value)).byteLength\n}\n\nexport function objectRefSortKey(ref: OntologyObjectRef): string {\n return canonicalIdentitySortKey([ref.objectTypeId, ref.primaryId])\n}\n\nexport function linkRefSortKey(ref: OntologyLinkRef): string {\n return canonicalIdentitySortKey([\n ref.source.objectTypeId,\n ref.source.primaryId,\n ref.linkId,\n ref.target.objectTypeId,\n ref.target.primaryId,\n ])\n}\n\nexport function linkScopeKey(source: OntologyObjectRef, linkId: string): string {\n return JSON.stringify([source.objectTypeId, source.primaryId, linkId])\n}\n\nexport function linkScopeSortKey(source: OntologyObjectRef, linkId: string): string {\n return canonicalIdentitySortKey([source.objectTypeId, source.primaryId, linkId])\n}\n\nexport function telemetryPointSortKey(series: TelemetrySeriesRef, at: string): string {\n return canonicalIdentitySortKey([\n series.object.objectTypeId,\n series.object.primaryId,\n series.propertyId,\n at,\n ])\n}\n\nexport function compareObjectRefs(left: OntologyObjectRef, right: OntologyObjectRef): number {\n return compareStrings(objectRefSortKey(left), objectRefSortKey(right))\n}\n\nexport function compareLinkRefs(left: OntologyLinkRef, right: OntologyLinkRef): number {\n return compareStrings(linkRefSortKey(left), linkRefSortKey(right))\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";;;;;;;;;AASA,IAAM,cAAc,IAAI;AAExB,SAAS,gBAAgB,CAAC,OAAe,OAAqB;AAAA,EAC5D,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,gCAA+B,GAAG,kCAAkC;AAAA,EAChF;AAAA;AAGK,SAAS,mBAAkB,CAAC,KAA2C;AAAA,EAC5E,iBAAiB,IAAI,cAAc,gBAAgB;AAAA,EACnD,iBAAiB,IAAI,WAAW,mBAAmB;AAAA,EACnD,OAAO,OAAO,OAAO,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,UAAU,CAAC;AAAA;AAG5E,SAAS,iBAAgB,CAAC,KAAuC;AAAA,EACtE,iBAAiB,IAAI,QAAQ,SAAS;AAAA,EACtC,OAAO,OAAO,OAAO;AAAA,IACnB,QAAQ,oBAAmB,IAAI,MAAM;AAAA,IACrC,QAAQ,IAAI;AAAA,IACZ,QAAQ,oBAAmB,IAAI,MAAM;AAAA,EACvC,CAAC;AAAA;AAGI,SAAS,aAAY,CAAC,KAAgC;AAAA,EAC3D,OAAO,KAAK,UAAU,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA;AAGlD,SAAS,WAAU,CAAC,KAA8B;AAAA,EACvD,OAAO,KAAK,UAAU;AAAA,IACpB,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,IACX,IAAI;AAAA,IACJ,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,EACb,CAAC;AAAA;AAGI,SAAS,oBAAmB,CAAC,QAAqC;AAAA,EACvE,OAAO,OAAO,SAAS,WACnB,KAAK,UAAU,CAAC,UAAU,OAAO,IAAI,cAAc,OAAO,IAAI,SAAS,CAAC,IACxE,KAAK,UAAU;AAAA,IACb;AAAA,IACA,OAAO,IAAI,OAAO;AAAA,IAClB,OAAO,IAAI,OAAO;AAAA,IAClB,OAAO,IAAI;AAAA,IACX,OAAO,IAAI,OAAO;AAAA,IAClB,OAAO,IAAI,OAAO;AAAA,EACpB,CAAC;AAAA;AAGA,SAAS,gBAAgB,CAAC,oBAA4B,QAAwB;AAAA,EACnF,OAAO,KAAK,UAAU,CAAC,oBAAoB,MAAM,CAAC;AAAA;AAG7C,SAAS,qBAAqB,CAAC,cAAsB,YAA4B;AAAA,EACtF,OAAO,KAAK,UAAU,CAAC,cAAc,UAAU,CAAC;AAAA;AAG3C,SAAS,mBAAkB,CAAC,QAAoC;AAAA,EACrE,OAAO,KAAK,UAAU,CAAC,OAAO,OAAO,cAAc,OAAO,OAAO,WAAW,OAAO,UAAU,CAAC;AAAA;AAGzF,SAAS,kBAAiB,CAAC,QAA4B,IAAoB;AAAA,EAChF,OAAO,KAAK,UAAU;AAAA,IACpB,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AAAA;AAOI,SAAS,yBAAwB,CAAC,OAAkC;AAAA,EACzE,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ,YAAY,OAAO,KAAK,UAAU,KAAK,CAAC,GAAG;AAAA,IAC5D,UAAU,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EAC7C;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,OAAwB;AAAA,EACzD,OAAO,YAAY,OAAO,KAAK,UAAU,KAAK,CAAC,EAAE;AAAA;AAG5C,SAAS,iBAAgB,CAAC,KAAgC;AAAA,EAC/D,OAAO,0BAAyB,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA;AAG5D,SAAS,eAAc,CAAC,KAA8B;AAAA,EAC3D,OAAO,0BAAyB;AAAA,IAC9B,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,IACX,IAAI;AAAA,IACJ,IAAI,OAAO;AAAA,IACX,IAAI,OAAO;AAAA,EACb,CAAC;AAAA;AAGI,SAAS,YAAY,CAAC,QAA2B,QAAwB;AAAA,EAC9E,OAAO,KAAK,UAAU,CAAC,OAAO,cAAc,OAAO,WAAW,MAAM,CAAC;AAAA;AAGhE,SAAS,iBAAgB,CAAC,QAA2B,QAAwB;AAAA,EAClF,OAAO,0BAAyB,CAAC,OAAO,cAAc,OAAO,WAAW,MAAM,CAAC;AAAA;AAG1E,SAAS,sBAAqB,CAAC,QAA4B,IAAoB;AAAA,EACpF,OAAO,0BAAyB;AAAA,IAC9B,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AAAA;AAGI,SAAS,kBAAiB,CAAC,MAAyB,OAAkC;AAAA,EAC3F,OAAO,eAAe,kBAAiB,IAAI,GAAG,kBAAiB,KAAK,CAAC;AAAA;AAGhE,SAAS,gBAAe,CAAC,MAAuB,OAAgC;AAAA,EACrF,OAAO,eAAe,gBAAe,IAAI,GAAG,gBAAe,KAAK,CAAC;AAAA;",
|
|
8
|
-
"debugId": "1182BD7C8CFFA82F64756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/shared/params/user-refs.ts", "../src/assert-never.ts", "../src/objects/authorized-ontology-view.ts", "../src/objects/query/selected-read-admission.ts", "../src/objects/telemetry/workload.ts", "../src/execution/authorized-object-reader.ts", "../src/actions/delegated-admission.ts", "../src/actions/run-authorization.ts", "../src/actions/run-dispatch.ts", "../src/actions/run-id.ts", "../src/actions/request.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { SchemaOrRef, ValueType } from \"../../ontology\"\nimport { isObjectRefSchema } from \"../../ontology/refs\"\nimport { collectUserRefIds, userReferenceProblem } from \"../../ontology/user-ref\"\nimport type { AuthStorage } from \"../../storage/auth/types\"\n\n/**\n * Reject params that reference a user who does not exist or is not active.\n *\n * Callers run it only when a new run is created: replaying an existing run keeps the params it was\n * accepted with, even if a referenced user was suspended since.\n */\nexport async function assertParamUsersActive(input: {\n readonly auth: AuthStorage | undefined\n readonly projectId: string\n readonly schemas: Readonly<Record<string, SchemaOrRef>>\n readonly values: Readonly<Record<string, unknown>>\n readonly valueTypesById: ReadonlyMap<string, ValueType>\n /** Names one param in error messages, for example `Action param 'task.assign.assignee'`. */\n readonly describe: (paramId: string) => string\n readonly invalid: (message: string) => Error\n}): Promise<void> {\n const references: { readonly paramId: string; readonly id: string }[] = []\n for (const [paramId, schema] of Object.entries(input.schemas)) {\n if (isObjectRefSchema(schema)) continue\n const ids = collectUserRefIds(schema, input.values[paramId], input.valueTypesById, new Set())\n for (const id of ids) references.push({ paramId, id })\n }\n if (references.length === 0) return\n\n const users = input.auth?.users\n const statuses = new Map(\n await Promise.all(\n [...new Set(references.map((reference) => reference.id))].map(\n async (id) =>\n [\n id,\n users\n ? ((await users.getById({ projectId: input.projectId, id }))?.status ?? null)\n : \"unverifiable\",\n ] as const\n )\n )\n )\n for (const { paramId, id } of references) {\n const problem = userReferenceProblem(input.describe(paramId), id, statuses.get(id) ?? null)\n if (problem) throw input.invalid(problem)\n }\n}\n",
|
|
6
|
-
"/**\n * Closes a switch over a union: the call stops compiling when a new member has no case, and throws\n * if an untyped value reaches it at runtime.\n */\nexport function assertNever(_value: never, message: string): never {\n throw new Error(message)\n}\n",
|
|
7
|
-
"import {\n formatUnknownObjectTypeMessage,\n OntologyNotFoundError,\n OntologyValidationError,\n} from \"../ontology/errors\"\nimport type { OntologyDefinitionCatalog } from \"../ontology/registry\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport { createLinkTokenMap, createPropertyTokenMap } from \"../ontology/tokens\"\nimport type {\n ObjectLink,\n ObjectType,\n ObjectTypeSearchMetadata,\n Property,\n PropertyQueryMetadata,\n Schema,\n ValueType,\n} from \"../ontology/types\"\nimport { snapshotVectorProfiles } from \"../ontology/vector-profiles\"\nimport type { CompiledSelectedObjectReadScope } from \"../storage/objects/types\"\n\n/** Public ontology operations that may cross an execution-bound authorization boundary. */\nexport type AuthorizedOntologyView = Pick<\n OntologyDefinitionCatalog,\n | \"listObjectTypes\"\n | \"getObjectTypeById\"\n | \"resolveObjectType\"\n | \"getValueTypesById\"\n | \"getPrimaryPropertyId\"\n | \"listSubTypes\"\n | \"isValidLinkTarget\"\n>\n\nexport type AuthorizedOntologySelection =\n | { readonly kind: \"all\" }\n | { readonly kind: \"types\"; readonly objectTypeIds: readonly string[] }\n | { readonly kind: \"selected\"; readonly scope: CompiledSelectedObjectReadScope }\n\ninterface LinkSelection {\n readonly targetObjectTypeIds: Set<string>\n readonly propertyIds: Set<string>\n}\n\ninterface SelectedSchema {\n readonly propertyIdsByObjectType: ReadonlyMap<string, ReadonlySet<string>>\n readonly linksBySourceType: ReadonlyMap<string, ReadonlyMap<string, LinkSelection>>\n}\n\n/**\n * Project inert ontology metadata from one already-captured authority.\n *\n * Query validation intentionally keeps using the complete internal registry. This view is only\n * the discovery surface returned to application code and HTTP serializers.\n */\nexport function createAuthorizedOntologyView(input: {\n readonly ontology: OntologyDefinitionCatalog\n readonly selection: AuthorizedOntologySelection\n readonly assertOutputWithinLimit?: (value: unknown) => void\n}): AuthorizedOntologyView {\n const allObjectTypes = input.ontology.listObjectTypes()\n const registeredObjectTypeIds = new Set(allObjectTypes.map((objectType) => objectType.id))\n const requestedObjectTypeIds = selectedObjectTypeIds(input.selection, allObjectTypes)\n const visibleObjectTypeIds = new Set(\n [...requestedObjectTypeIds].filter((objectTypeId) => registeredObjectTypeIds.has(objectTypeId))\n )\n const selectedSchema =\n input.selection.kind === \"selected\" ? collectSelectedSchema(input.selection.scope) : undefined\n const projectedObjectTypes: ObjectTypeWithPropertyTokens[] = []\n\n for (const objectType of allObjectTypes) {\n if (!visibleObjectTypeIds.has(objectType.id)) continue\n const propertyIds =\n selectedSchema?.propertyIdsByObjectType.get(objectType.id) ??\n new Set(objectType.properties.map((property) => property.id))\n const links = selectedSchema\n ? (selectedSchema.linksBySourceType.get(objectType.id) ?? new Map())\n : input.selection.kind === \"all\"\n ? allDeclaredLinks(objectType)\n : allVisibleLinks(input.ontology, objectType, visibleObjectTypeIds)\n projectedObjectTypes.push(\n projectObjectType({\n objectType,\n propertyIds,\n links,\n visibleObjectTypeIds,\n ontology: input.ontology,\n targetMode:\n input.selection.kind === \"all\"\n ? \"original\"\n : input.selection.kind === \"types\"\n ? \"principal\"\n : \"exact\",\n exposeContracts: input.selection.kind !== \"selected\",\n })\n )\n }\n\n const objectTypes = projectedObjectTypes\n const objectTypesById = new Map(objectTypes.map((objectType) => [objectType.id, objectType]))\n const valueTypesById =\n input.selection.kind === \"selected\"\n ? collectVisibleValueTypes(input.ontology.getValueTypesById(), objectTypes)\n : snapshotAllValueTypes(input.ontology.getValueTypesById())\n const release = <T>(value: T, budgetValue: unknown = value): T => {\n input.assertOutputWithinLimit?.(budgetValue)\n return value\n }\n const cloneObjectType = (objectType: ObjectTypeWithPropertyTokens) => structuredClone(objectType)\n const cloneValueTypes = () =>\n new Map(\n [...valueTypesById].map(([valueTypeId, valueType]) => [\n valueTypeId,\n structuredClone(valueType),\n ])\n )\n\n return Object.freeze({\n listObjectTypes: () => release(objectTypes.map(cloneObjectType)),\n getObjectTypeById: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n return release(objectType ? cloneObjectType(objectType) : null)\n },\n resolveObjectType: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n return objectType ? release(cloneObjectType(objectType)) : unknownObjectType(objectTypeId)\n },\n getValueTypesById: () => {\n const valueTypes = cloneValueTypes()\n return release(valueTypes, [...valueTypes.entries()])\n },\n getPrimaryPropertyId: (objectTypeId: string) => {\n const objectType = objectTypesById.get(objectTypeId)\n if (!objectType) return unknownObjectType(objectTypeId)\n const primary = objectType.properties.find((property) => property.primary)\n if (!primary) {\n throw new OntologyValidationError(\n `[Sixb] Object type '${objectTypeId}' does not expose its primary property in this execution scope.`\n )\n }\n return release(primary.id)\n },\n listSubTypes: (objectTypeId: string) => {\n const subTypes = visibleObjectTypeIds.has(objectTypeId)\n ? input.ontology\n .listSubTypes(objectTypeId)\n .filter((subTypeId) => visibleObjectTypeIds.has(subTypeId))\n : []\n return release(subTypes)\n },\n isValidLinkTarget: (expected: string | string[], actual: string) => {\n if (input.selection.kind === \"all\") {\n return release(input.ontology.isValidLinkTarget(expected, actual))\n }\n if (!visibleObjectTypeIds.has(actual)) return release(false)\n const expectedTypes = Array.isArray(expected) ? expected : [expected]\n if (input.selection.kind === \"selected\") {\n return release(\n expectedTypes.some((expectedType) => expectedType === \"*\" || expectedType === actual)\n )\n }\n return release(\n expectedTypes.some(\n (expectedType) =>\n expectedType === \"*\" ||\n (visibleObjectTypeIds.has(expectedType) &&\n input.ontology.isValidLinkTarget(expectedType, actual))\n )\n )\n },\n })\n}\n\nfunction selectedObjectTypeIds(\n selection: AuthorizedOntologySelection,\n allObjectTypes: readonly ObjectTypeWithPropertyTokens[]\n): ReadonlySet<string> {\n switch (selection.kind) {\n case \"all\":\n return new Set(allObjectTypes.map((objectType) => objectType.id))\n case \"types\":\n return new Set(selection.objectTypeIds)\n case \"selected\":\n return new Set(selection.scope.objects.map((object) => object.objectTypeId))\n }\n}\n\nfunction collectSelectedSchema(scope: CompiledSelectedObjectReadScope): SelectedSchema {\n const propertyIdsByObjectType = new Map<string, Set<string>>()\n for (const object of scope.objects) {\n const properties = propertyIdsByObjectType.get(object.objectTypeId) ?? new Set<string>()\n for (const propertyId of object.propertyIds) properties.add(propertyId)\n propertyIdsByObjectType.set(object.objectTypeId, properties)\n }\n\n const linksBySourceType = new Map<string, Map<string, LinkSelection>>()\n for (const step of scope.steps) {\n const links = linksBySourceType.get(step.sourceObjectTypeId) ?? new Map()\n const selected = links.get(step.linkId) ?? {\n targetObjectTypeIds: new Set<string>(),\n propertyIds: new Set<string>(),\n }\n selected.targetObjectTypeIds.add(step.targetObjectTypeId)\n for (const propertyId of step.propertyIds) selected.propertyIds.add(propertyId)\n links.set(step.linkId, selected)\n linksBySourceType.set(step.sourceObjectTypeId, links)\n }\n\n return { propertyIdsByObjectType, linksBySourceType }\n}\n\nfunction allDeclaredLinks(\n objectType: ObjectTypeWithPropertyTokens\n): ReadonlyMap<string, LinkSelection> {\n return new Map(\n objectType.links.map((link) => [\n link.id,\n {\n targetObjectTypeIds: new Set(\n typeof link.targetObjectTypeId === \"string\"\n ? [link.targetObjectTypeId]\n : link.targetObjectTypeId\n ),\n propertyIds: new Set(link.properties?.map((property) => property.id) ?? []),\n },\n ])\n )\n}\n\nfunction allVisibleLinks(\n ontology: OntologyDefinitionCatalog,\n objectType: ObjectTypeWithPropertyTokens,\n visibleObjectTypeIds: ReadonlySet<string>\n): ReadonlyMap<string, LinkSelection> {\n const links = new Map<string, LinkSelection>()\n for (const link of objectType.links) {\n const targetObjectTypeIds = new Set(\n [...visibleObjectTypeIds].filter((targetObjectTypeId) =>\n ontology.isValidLinkTarget(link.targetObjectTypeId, targetObjectTypeId)\n )\n )\n if (targetObjectTypeIds.size === 0) continue\n links.set(link.id, {\n targetObjectTypeIds,\n propertyIds: new Set(link.properties?.map((property) => property.id) ?? []),\n })\n }\n return links\n}\n\nfunction projectObjectType(input: {\n readonly ontology: OntologyDefinitionCatalog\n readonly objectType: ObjectTypeWithPropertyTokens\n readonly propertyIds: ReadonlySet<string>\n readonly links: ReadonlyMap<string, LinkSelection>\n readonly visibleObjectTypeIds: ReadonlySet<string>\n readonly targetMode: \"original\" | \"principal\" | \"exact\"\n readonly exposeContracts: boolean\n}): ObjectTypeWithPropertyTokens {\n const properties = input.objectType.properties\n .filter((property) => input.propertyIds.has(property.id))\n .map(snapshotProperty)\n const visiblePropertyIds = new Set(properties.map((property) => property.id))\n const links = input.objectType.links.flatMap((link): ObjectLink[] => {\n const selected = input.links.get(link.id)\n if (!selected) return []\n if (input.targetMode === \"original\") {\n return [snapshotLink(link, snapshotLinkTarget(link.targetObjectTypeId), selected.propertyIds)]\n }\n const targetObjectTypeIds = new Set(\n [...selected.targetObjectTypeIds].filter(\n (targetObjectTypeId) =>\n input.visibleObjectTypeIds.has(targetObjectTypeId) &&\n input.ontology.isValidLinkTarget(link.targetObjectTypeId, targetObjectTypeId)\n )\n )\n if (targetObjectTypeIds.size === 0) return []\n const target =\n input.targetMode === \"principal\"\n ? principalLinkTargets(link, targetObjectTypeIds, input.visibleObjectTypeIds)\n : exactLinkTargets(targetObjectTypeIds)\n return [snapshotLink(link, target, selected.propertyIds, { omitEmptyProperties: true })]\n })\n\n // Whitelist top-level metadata so future cross-ontology fields remain closed until reviewed.\n const projected: ObjectType = {\n id: input.objectType.id,\n name: input.objectType.name,\n description: input.objectType.description,\n quantityKind: input.objectType.quantityKind,\n seeAlso: input.objectType.seeAlso ? [...input.objectType.seeAlso] : undefined,\n extends:\n input.objectType.extends && input.visibleObjectTypeIds.has(input.objectType.extends)\n ? input.objectType.extends\n : undefined,\n parents: projectOptionalIds(\n input.objectType.parents,\n input.visibleObjectTypeIds,\n input.targetMode === \"original\"\n ),\n implements:\n input.exposeContracts && input.objectType.implements\n ? [...input.objectType.implements]\n : undefined,\n properties,\n links,\n search: projectSearch(input.objectType.search, visiblePropertyIds, {\n preserveEmpty: input.targetMode !== \"exact\",\n }),\n }\n const withTokens = {\n ...projected,\n p: createPropertyTokenMap(projected),\n l: createLinkTokenMap(projected),\n }\n return deepFreeze(withTokens) as ObjectTypeWithPropertyTokens\n}\n\nfunction principalLinkTargets(\n link: ObjectLink,\n allowedTargetObjectTypeIds: ReadonlySet<string>,\n visibleObjectTypeIds: ReadonlySet<string>\n): string | string[] {\n if (link.targetObjectTypeId === \"*\") return exactLinkTargets(allowedTargetObjectTypeIds)\n const declared = Array.isArray(link.targetObjectTypeId)\n ? link.targetObjectTypeId\n : [link.targetObjectTypeId]\n if (declared.every((objectTypeId) => visibleObjectTypeIds.has(objectTypeId))) {\n return snapshotLinkTarget(link.targetObjectTypeId)\n }\n return exactLinkTargets(allowedTargetObjectTypeIds)\n}\n\nfunction exactLinkTargets(targetObjectTypeIds: ReadonlySet<string>): string | string[] {\n const targets = [...targetObjectTypeIds].sort()\n return targets.length === 1 ? targets[0]! : targets\n}\n\nfunction projectOptionalIds(\n ids: readonly string[] | undefined,\n visibleObjectTypeIds: ReadonlySet<string>,\n preserveOriginal: boolean\n): string[] | undefined {\n if (!ids) return undefined\n if (preserveOriginal) return [...ids]\n const visible = ids.filter((id) => visibleObjectTypeIds.has(id))\n return visible.length > 0 ? visible : undefined\n}\n\nfunction snapshotLink(\n link: ObjectLink,\n targetObjectTypeId: string | string[],\n propertyIds: ReadonlySet<string>,\n options: { readonly omitEmptyProperties?: boolean } = {}\n): ObjectLink {\n const properties = link.properties\n ?.filter((property) => propertyIds.has(property.id))\n .map(snapshotProperty)\n return {\n id: link.id,\n name: link.name,\n description: link.description,\n targetObjectTypeId,\n cardinality: link.cardinality,\n properties: options.omitEmptyProperties && properties?.length === 0 ? undefined : properties,\n }\n}\n\nfunction snapshotLinkTarget(target: string | readonly string[]): string | string[] {\n return typeof target === \"string\" ? target : [...target]\n}\n\nfunction snapshotProperty(property: Property): Property {\n return {\n id: property.id,\n name: property.name,\n schema: snapshotSchema(property.schema),\n description: property.description,\n required: property.required,\n nullable: property.nullable,\n primary: property.primary,\n mode: property.mode,\n semanticType: property.semanticType,\n query: snapshotPropertyQuery(property.query),\n }\n}\n\nfunction snapshotPropertyQuery(\n query: PropertyQueryMetadata | undefined\n): PropertyQueryMetadata | undefined {\n if (!query) return undefined\n return {\n searchable: query.searchable,\n filterable: query.filterable,\n sortable: query.sortable,\n text: query.text,\n exact: query.exact,\n facet: query.facet,\n weight: query.weight,\n }\n}\n\nfunction projectSearch(\n search: ObjectTypeSearchMetadata | undefined,\n visiblePropertyIds: ReadonlySet<string>,\n options: { readonly preserveEmpty: boolean }\n): ObjectTypeSearchMetadata | undefined {\n if (!search) return undefined\n const title = search.title && visiblePropertyIds.has(search.title) ? search.title : undefined\n const selectedDefaultText = search.defaultText?.filter((propertyId) =>\n visiblePropertyIds.has(propertyId)\n )\n const selectedExact = search.exact?.filter((propertyId) => visiblePropertyIds.has(propertyId))\n const defaultText =\n options.preserveEmpty || selectedDefaultText?.length ? selectedDefaultText : undefined\n const exact = options.preserveEmpty || selectedExact?.length ? selectedExact : undefined\n const vectors =\n search.vectors === undefined\n ? undefined\n : snapshotVectorProfiles(\n Object.fromEntries(\n Object.entries(search.vectors).filter(([, profile]) =>\n profile.source.every((id) => visiblePropertyIds.has(id))\n )\n )\n )\n const projected: ObjectTypeSearchMetadata = {\n ...(vectors === undefined || Object.keys(vectors).length === 0 ? {} : { vectors }),\n ...(title === undefined ? {} : { title }),\n ...(defaultText === undefined ? {} : { defaultText }),\n ...(exact === undefined ? {} : { exact }),\n }\n return Object.keys(projected).length > 0 || options.preserveEmpty ? projected : undefined\n}\n\nfunction snapshotAllValueTypes(\n registered: ReadonlyMap<string, ValueType>\n): ReadonlyMap<string, ValueType> {\n return new Map(\n [...registered.values()].map((valueType) => {\n const snapshot = snapshotValueType(valueType)\n return [snapshot.id, snapshot] as const\n })\n )\n}\n\nfunction collectVisibleValueTypes(\n registered: ReadonlyMap<string, ValueType>,\n objectTypes: readonly ObjectTypeWithPropertyTokens[]\n): ReadonlyMap<string, ValueType> {\n const referencedIds = new Set<string>()\n const pendingSchemas: Schema[] = []\n const visitedSchemas = new Set<object>()\n for (const objectType of objectTypes) {\n for (const property of objectType.properties) pendingSchemas.push(property.schema)\n for (const link of objectType.links) {\n for (const property of link.properties ?? []) pendingSchemas.push(property.schema)\n }\n }\n\n while (pendingSchemas.length > 0) {\n const schema = pendingSchemas.pop()!\n if (typeof schema === \"string\" || visitedSchemas.has(schema)) continue\n visitedSchemas.add(schema)\n if (schema.type === \"valueTypeRef\") {\n if (!referencedIds.has(schema.valueTypeId)) {\n referencedIds.add(schema.valueTypeId)\n const valueType = registered.get(schema.valueTypeId)\n if (valueType) pendingSchemas.push(valueType.schema)\n }\n if (schema._resolved) pendingSchemas.push(schema._resolved)\n } else if (schema.type === \"object\") {\n for (const field of Object.values(schema.properties)) pendingSchemas.push(field.schema)\n } else if (schema.type === \"array\") {\n pendingSchemas.push(schema.items)\n } else if (schema.type === \"map\") {\n pendingSchemas.push(schema.valueSchema)\n }\n }\n\n return new Map(\n [...referencedIds]\n .map((valueTypeId) => registered.get(valueTypeId))\n .filter((valueType): valueType is ValueType => valueType !== undefined)\n .map((valueType) => {\n const snapshot = snapshotValueType(valueType)\n return [snapshot.id, snapshot] as const\n })\n )\n}\n\nfunction snapshotValueType(valueType: ValueType): ValueType {\n return deepFreeze({\n id: valueType.id,\n name: valueType.name,\n description: valueType.description,\n schema: snapshotSchema(valueType.schema),\n semanticType: valueType.semanticType,\n })\n}\n\nfunction snapshotSchema(schema: Schema): Schema {\n return deepFreeze(structuredClone(schema))\n}\n\nfunction deepFreeze<T>(value: T, seen: Set<object> = new Set()): T {\n if (typeof value !== \"object\" || value === null || seen.has(value)) return value\n seen.add(value)\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (descriptor && \"value\" in descriptor) deepFreeze(descriptor.value, seen)\n }\n return Object.freeze(value)\n}\n\nfunction unknownObjectType(objectTypeId: string): never {\n throw new OntologyNotFoundError(formatUnknownObjectTypeMessage(objectTypeId))\n}\n",
|
|
8
|
-
"import { AuthorizationError } from \"../../authorization/errors\"\nimport type {\n CompiledObjectReadObjectSelection,\n CompiledObjectReadStep,\n CompiledSelectedObjectReadScope,\n} from \"../../storage/objects/types\"\nimport type {\n ObjectQueryAdmissionState,\n ObjectQueryAdmissionTransition,\n ObjectQueryEdgeUse,\n ObjectQueryPropertyUse,\n ObjectQuerySemanticAdmission,\n} from \"./validate\"\n\nconst selectedStateBrand = Symbol(\"sixb.selected-object-query-admission-state\")\n\ninterface SelectedObjectQueryState extends ObjectQueryAdmissionState {\n readonly [selectedStateBrand]: true\n readonly selections: readonly CompiledObjectReadObjectSelection[]\n}\n\nexport interface SelectedObjectQueryAdmission extends ObjectQuerySemanticAdmission {\n /** Terminal hook for property-bearing operations outside the query IR, such as facets. */\n assertPropertySelected(input: {\n readonly state: ObjectQueryAdmissionState\n readonly propertyId: string\n readonly objectTypeId?: string\n readonly use: ObjectQueryPropertyUse\n readonly path: string\n }): void\n /** Terminal hook for the physical-link selector that sits outside `queryLinks.query`. */\n assertIncidentEdgeSelected(input: {\n readonly state: ObjectQueryAdmissionState\n readonly linkId?: string\n readonly direction: \"outgoing\" | \"incoming\" | \"both\"\n readonly path: string\n }): void\n}\n\n/**\n * Build an immutable semantic admission over one already-compiled selected reader scope.\n *\n * Object identities remain provider-owned: query admission follows exact path occurrences while\n * the selected storage relation decides which live roots and linked instances exist.\n */\nexport function createSelectedObjectQueryAdmission(\n scope: CompiledSelectedObjectReadScope\n): SelectedObjectQueryAdmission {\n const selectionByKey = new Map<string, CompiledObjectReadObjectSelection>()\n const selectionsByType = new Map<string, CompiledObjectReadObjectSelection[]>()\n const propertiesBySelection = new Map<string, ReadonlySet<string>>()\n\n for (const selection of scope.objects) {\n const key = selectionKey(selection.nodeId, selection.objectTypeId)\n selectionByKey.set(key, selection)\n propertiesBySelection.set(key, new Set(selection.propertyIds))\n const byType = selectionsByType.get(selection.objectTypeId) ?? []\n byType.push(selection)\n selectionsByType.set(selection.objectTypeId, byType)\n }\n\n const outgoing = indexSteps(scope.steps, \"outgoing\", selectionByKey)\n const incoming = indexSteps(scope.steps, \"incoming\", selectionByKey)\n const emptyState = selectedState([])\n\n const admission: SelectedObjectQueryAdmission = {\n empty: () => emptyState,\n source: (input) => {\n const selections = input.result.objectTypeIds.flatMap(\n (objectTypeId) => selectionsByType.get(objectTypeId) ?? []\n )\n const state = selectedState(selections)\n\n if (input.kind === \"refs\") {\n const missingType = [...new Set(input.refs?.map((ref) => ref.objectTypeId) ?? [])]\n .sort()\n .find((objectTypeId) => !selectionsByType.has(objectTypeId))\n if (missingType) {\n return denied(\n state,\n new AuthorizationError(\n `view:object:${missingType}`,\n `[Sixb] Delegated query cannot reference object type '${missingType}' at '${input.path}': the selected object scope does not contain that type.`\n )\n )\n }\n }\n\n if (state.selections.length > 0) return { state }\n const objectTypeId = input.objectTypeId ?? input.result.objectTypeIds[0] ?? \"unknown\"\n return denied(\n state,\n new AuthorizationError(\n `view:object:${objectTypeId}`,\n `[Sixb] Delegated query cannot start from object type '${objectTypeId}' at '${input.path}': the selected object scope does not contain that type.`\n )\n )\n },\n property: (input) =>\n propertyDenial(\n asSelectedState(input.state),\n input.propertyId,\n input.objectTypeId,\n input.use,\n input.path,\n propertiesBySelection\n ),\n edge: (input) => {\n const state = asSelectedState(input.state)\n const next = followEdge(\n state,\n input.linkId,\n input.direction,\n input.sourceObjectTypeId,\n outgoing,\n incoming,\n input.result.objectTypeIds\n )\n if (next.selections.length > 0 || state.selections.length === 0) return { state: next }\n return denied(\n next,\n edgeDenial(\n state,\n input.linkId,\n input.direction,\n input.sourceObjectTypeId,\n input.use,\n input.path\n )\n )\n },\n set: ({ op, states }) => {\n if (op === \"subtract\") return asSelectedState(states[0] ?? emptyState)\n return selectedState(states.flatMap((state) => asSelectedState(state).selections))\n },\n assertPropertySelected: (input) => {\n const denial = propertyDenial(\n asSelectedState(input.state),\n input.propertyId,\n input.objectTypeId,\n input.use,\n input.path,\n propertiesBySelection\n )\n if (denial) throw denial\n },\n assertIncidentEdgeSelected: (input) => {\n if (input.linkId === undefined) return\n const state = asSelectedState(input.state)\n const directions: readonly (\"outgoing\" | \"incoming\")[] =\n input.direction === \"both\" ? [\"outgoing\", \"incoming\"] : [input.direction]\n const next = selectedState(\n directions.flatMap(\n (direction) =>\n followEdge(state, input.linkId!, direction, undefined, outgoing, incoming).selections\n )\n )\n if (next.selections.length > 0 || state.selections.length === 0) return\n throw edgeDenial(state, input.linkId, input.direction, undefined, \"queryLinks\", input.path)\n },\n }\n\n return Object.freeze(admission)\n}\n\nfunction indexSteps(\n steps: readonly CompiledObjectReadStep[],\n direction: \"outgoing\" | \"incoming\",\n selectionByKey: ReadonlyMap<string, CompiledObjectReadObjectSelection>\n): ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]> {\n const index = new Map<string, CompiledObjectReadObjectSelection[]>()\n for (const step of steps) {\n const fromKey =\n direction === \"outgoing\"\n ? selectionKey(step.parentNodeId, step.sourceObjectTypeId)\n : selectionKey(step.nodeId, step.targetObjectTypeId)\n const toKey =\n direction === \"outgoing\"\n ? selectionKey(step.nodeId, step.targetObjectTypeId)\n : selectionKey(step.parentNodeId, step.sourceObjectTypeId)\n const target = selectionByKey.get(toKey)\n if (!selectionByKey.has(fromKey) || !target) {\n throw new Error(\"[Sixb] Compiled selected object scope contains an invalid query path step.\")\n }\n const key = edgeKey(\n direction === \"outgoing\" ? step.parentNodeId : step.nodeId,\n direction === \"outgoing\" ? step.sourceObjectTypeId : step.targetObjectTypeId,\n step.linkId\n )\n const targets = index.get(key) ?? []\n targets.push(target)\n index.set(key, targets)\n }\n return index\n}\n\nfunction followEdge(\n state: SelectedObjectQueryState,\n linkId: string,\n direction: \"outgoing\" | \"incoming\",\n sourceObjectTypeId: string | undefined,\n outgoing: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,\n incoming: ReadonlyMap<string, readonly CompiledObjectReadObjectSelection[]>,\n resultObjectTypeIds?: readonly string[]\n): SelectedObjectQueryState {\n const index = direction === \"outgoing\" ? outgoing : incoming\n const resultTypes = resultObjectTypeIds ? new Set(resultObjectTypeIds) : undefined\n const selections = state.selections.flatMap((selection) => {\n const candidates = index.get(edgeKey(selection.nodeId, selection.objectTypeId, linkId)) ?? []\n return candidates.filter(\n (candidate) =>\n (resultTypes === undefined || resultTypes.has(candidate.objectTypeId)) &&\n (direction === \"outgoing\" ||\n sourceObjectTypeId === undefined ||\n candidate.objectTypeId === sourceObjectTypeId)\n )\n })\n return selectedState(selections)\n}\n\nfunction propertyDenial(\n state: SelectedObjectQueryState,\n propertyId: string,\n objectTypeId: string | undefined,\n use: ObjectQueryPropertyUse,\n path: string,\n propertiesBySelection: ReadonlyMap<string, ReadonlySet<string>>\n): AuthorizationError | undefined {\n const candidates = objectTypeId\n ? state.selections.filter((selection) => selection.objectTypeId === objectTypeId)\n : state.selections\n // A selected reader has no rows for result types absent from this provenance. Those empty\n // branches cannot observe a property and must not make includeSubtypes queries fail closed.\n if (candidates.length === 0) return undefined\n\n const missing = candidates.find(\n (selection) =>\n !propertiesBySelection\n .get(selectionKey(selection.nodeId, selection.objectTypeId))\n ?.has(propertyId)\n )\n if (!missing) return undefined\n\n const objectTypeIds = [...new Set(candidates.map((selection) => selection.objectTypeId))].sort()\n return new AuthorizationError(\n `view:object:${objectTypeIds.join(\",\")}:property:${propertyId}`,\n `[Sixb] Delegated query cannot use property '${propertyId}' for ${use} at '${path}': it is not selected on every matching read-scope path (missing on ${formatSelection(missing)}).`\n )\n}\n\nfunction edgeDenial(\n state: SelectedObjectQueryState,\n linkId: string,\n direction: \"outgoing\" | \"incoming\" | \"both\",\n sourceObjectTypeId: string | undefined,\n use: ObjectQueryEdgeUse,\n path: string\n): AuthorizationError {\n const source = sourceObjectTypeId ? `:${sourceObjectTypeId}` : \"\"\n return new AuthorizationError(\n `view:link:${direction}${source}:${linkId}`,\n `[Sixb] Delegated query cannot use ${direction} link '${linkId}' for ${use} from ${formatState(state)} at '${path}': that exact read-scope path is not selected.`\n )\n}\n\nfunction formatState(state: SelectedObjectQueryState): string {\n if (state.selections.length === 0) return \"an empty read-scope provenance\"\n return `read-scope provenance ${state.selections.map(formatSelection).join(\", \")}`\n}\n\nfunction formatSelection(selection: CompiledObjectReadObjectSelection): string {\n return `'${selection.objectTypeId}'@node ${selection.nodeId}`\n}\n\nfunction selectedState(\n selections: readonly CompiledObjectReadObjectSelection[]\n): SelectedObjectQueryState {\n const unique = new Map<string, CompiledObjectReadObjectSelection>()\n for (const selection of selections) {\n unique.set(selectionKey(selection.nodeId, selection.objectTypeId), selection)\n }\n return Object.freeze({\n [selectedStateBrand]: true as const,\n selections: Object.freeze(\n [...unique.values()].sort(\n (left, right) =>\n left.nodeId - right.nodeId || left.objectTypeId.localeCompare(right.objectTypeId)\n )\n ),\n })\n}\n\nfunction asSelectedState(state: ObjectQueryAdmissionState): SelectedObjectQueryState {\n if ((state as Partial<SelectedObjectQueryState>)[selectedStateBrand] !== true) {\n throw new Error(\"[Sixb] Object query admission state belongs to another semantic admission.\")\n }\n return state as SelectedObjectQueryState\n}\n\nfunction denied(state: SelectedObjectQueryState, denial: Error): ObjectQueryAdmissionTransition {\n return { state, denial }\n}\n\nfunction selectionKey(nodeId: number, objectTypeId: string): string {\n return JSON.stringify([nodeId, objectTypeId])\n}\n\nfunction edgeKey(nodeId: number, objectTypeId: string, linkId: string): string {\n return JSON.stringify([nodeId, objectTypeId, linkId])\n}\n",
|
|
9
|
-
"const MAX_DELEGATED_TELEMETRY_HISTORY_SERIES = 100\nconst MAX_DELEGATED_TELEMETRY_HISTORY_POINTS = 10_000\nconst DEFAULT_DELEGATED_TELEMETRY_HISTORY_LIMIT_PER_SERIES = 100\n\nexport interface TelemetryHistoryReadWorkloadInput {\n readonly seriesCount: number\n readonly limitPerSeries?: number\n}\n\nexport interface TelemetryHistoryReadAdmission {\n readonly limitPerSeries?: number\n readonly maxPointOccurrences?: number\n}\n\ntype TelemetryHistoryWorkloadMetric = \"series\" | \"points\"\n\nclass TelemetryHistoryWorkloadExceededError extends Error {\n readonly name = \"TelemetryHistoryWorkloadExceededError\"\n readonly code = \"telemetry_history_workload_exceeded\"\n\n constructor(\n readonly metric: TelemetryHistoryWorkloadMetric,\n readonly limit: number\n ) {\n super(`[Sixb] Delegated telemetry history exceeded its ${metric} limit (${limit}).`)\n }\n}\n\n/** Resolve one history request without exposing the authority that selected its policy. */\nexport function admitTelemetryHistoryReadWorkload(\n input: TelemetryHistoryReadWorkloadInput,\n delegated: boolean\n): TelemetryHistoryReadAdmission {\n const seriesCount = input.seriesCount\n const limitPerSeries = input.limitPerSeries\n if (!Number.isSafeInteger(seriesCount) || seriesCount < 0) {\n throw new Error(\"[Sixb] Telemetry history series must have a non-negative safe integer length.\")\n }\n if (\n limitPerSeries !== undefined &&\n (!Number.isSafeInteger(limitPerSeries) || limitPerSeries < 0)\n ) {\n throw new Error(\"[Sixb] Telemetry history limit must be a non-negative safe integer.\")\n }\n\n if (!delegated) {\n const admission: TelemetryHistoryReadAdmission =\n limitPerSeries === undefined ? {} : { limitPerSeries }\n return Object.freeze(admission)\n }\n if (seriesCount > MAX_DELEGATED_TELEMETRY_HISTORY_SERIES) {\n throw new TelemetryHistoryWorkloadExceededError(\n \"series\",\n MAX_DELEGATED_TELEMETRY_HISTORY_SERIES\n )\n }\n if (seriesCount === 0) {\n return Object.freeze({\n ...(limitPerSeries === undefined ? {} : { limitPerSeries }),\n maxPointOccurrences: MAX_DELEGATED_TELEMETRY_HISTORY_POINTS,\n })\n }\n\n const maxLimitPerSeries = Math.floor(MAX_DELEGATED_TELEMETRY_HISTORY_POINTS / seriesCount)\n const effectiveLimitPerSeries =\n limitPerSeries ??\n Math.min(DEFAULT_DELEGATED_TELEMETRY_HISTORY_LIMIT_PER_SERIES, maxLimitPerSeries)\n if (effectiveLimitPerSeries > maxLimitPerSeries) {\n throw new TelemetryHistoryWorkloadExceededError(\n \"points\",\n MAX_DELEGATED_TELEMETRY_HISTORY_POINTS\n )\n }\n\n return Object.freeze({\n limitPerSeries: effectiveLimitPerSeries,\n maxPointOccurrences: MAX_DELEGATED_TELEMETRY_HISTORY_POINTS,\n })\n}\n",
|
|
10
|
-
"import { assertNever } from \"../assert-never\"\nimport { assertAuthorized, isAllowed } from \"../authorization\"\nimport { AuthorizationError } from \"../authorization/errors\"\nimport type { AuthorizationContext } from \"../authorization/types\"\nimport type { EmbeddingModelCatalog } from \"../models/catalog\"\nimport {\n type AuthorizedOntologySelection,\n type AuthorizedOntologyView,\n createAuthorizedOntologyView,\n} from \"../objects/authorized-ontology-view\"\nimport {\n countObjects,\n type ExecuteObjectCountInput,\n type ExecuteObjectCountResult,\n type ExecuteObjectExistsInput,\n type ExecuteObjectExistsResult,\n type ExecuteObjectFacetsInput,\n type ExecuteObjectFacetsResult,\n type ExecuteObjectQueryInput,\n type ExecuteObjectQueryLinksInput,\n type ExecuteObjectQueryLinksResult,\n type ExecuteObjectQueryResult,\n executeObjectQuery,\n executeObjectQueryLinks,\n existsObjects,\n facetObjects,\n} from \"../objects/query\"\nimport { ObjectQueryValidationError } from \"../objects/query/errors\"\nimport { validateObjectFacetRequests } from \"../objects/query/executor\"\nimport type { ObjectQuery } from \"../objects/query/ir\"\nimport { preflightObjectQueryLinks } from \"../objects/query/links\"\nimport {\n createSelectedObjectQueryAdmission,\n type SelectedObjectQueryAdmission,\n} from \"../objects/query/selected-read-admission\"\nimport {\n type AdmittedObjectQuery,\n validateObjectQuery,\n validateObjectQueryWithAdmission,\n} from \"../objects/query/validate\"\nimport {\n admitTelemetryHistoryReadWorkload,\n type TelemetryHistoryReadAdmission,\n type TelemetryHistoryReadWorkloadInput,\n} from \"../objects/telemetry/workload\"\nimport type { OntologyRegistry } from \"../ontology\"\nimport type {\n CompiledObjectReadStep,\n LinkBatchKey,\n ObjectFacetRequest,\n ObjectLinkRow,\n ObjectReadStorage,\n ObjectStorage,\n} from \"../storage\"\nimport { assertObjectReadOutputWithinLimit, MAX_OBJECT_READ_FACETS } from \"../storage\"\nimport { captureExecutionScope, resolveExecutionScopeAuthorization } from \"./authorization\"\nimport type { ExecutionScope, RuntimeAuthorization } from \"./types\"\n\ntype RuntimeReadAuthorization = {\n readonly projectId: string\n readonly runtimeAuthorization: RuntimeAuthorization\n readonly authorization?: AuthorizationContext\n}\n\ntype ResolvedExecutionAuthority = ReturnType<typeof resolveExecutionScopeAuthorization>\ntype GetObjectInput = Omit<Parameters<ObjectReadStorage[\"getByPrimaryId\"]>[0], \"projectId\">\ntype GetObjectsInput = Omit<Parameters<ObjectReadStorage[\"getByPrimaryIdBatch\"]>[0], \"projectId\">\ntype SelectObjectPropertiesInput = Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\ntype CanReadObjectPropertyInput = SelectObjectPropertiesInput[\"items\"][number]\ntype CanReadObjectPropertiesBatchInput = Omit<SelectObjectPropertiesInput, \"projectId\">\ntype ListObjectsInput = Omit<Parameters<ObjectReadStorage[\"list\"]>[0], \"projectId\">\ntype ListLinksInput = Omit<Parameters<ObjectReadStorage[\"listLinks\"]>[0], \"projectId\">\ntype ListLinksBatchInput = Omit<Parameters<ObjectReadStorage[\"listLinksBatch\"]>[0], \"projectId\">\n\nconst readerConstructionKey = Object.freeze({})\n\n/**\n * Core-owned object read boundary for one exact execution authority.\n *\n * The implementation class is intentionally private to this module. Its private fields make the\n * exported instance type nominal, while the construction key prevents code that discovers the\n * JavaScript constructor through an instance from manufacturing another reader.\n */\nclass AuthorizedObjectReaderImpl {\n readonly #authorization: RuntimeAuthorization\n readonly #authority: ResolvedExecutionAuthority\n readonly #runtime: RuntimeReadAuthorization\n readonly #ontology: OntologyRegistry\n readonly #embeddingModels?: EmbeddingModelCatalog\n #ontologyView?: AuthorizedOntologyView\n readonly #storage: ObjectReadStorage\n readonly #delegatedObjectTypeIds?: ReadonlySet<string>\n readonly #delegatedLinkDefinitions?: ReadonlySet<string>\n readonly #delegatedQueryAdmission?: SelectedObjectQueryAdmission\n\n constructor(\n key: typeof readerConstructionKey,\n input: {\n readonly scope: ExecutionScope\n readonly ontology: OntologyRegistry\n readonly embeddingModels?: EmbeddingModelCatalog\n readonly storage: ObjectReadStorage\n readonly authority: ResolvedExecutionAuthority\n }\n ) {\n if (key !== readerConstructionKey) {\n throw new Error(\"[Sixb] AuthorizedObjectReader can only be created by Core.\")\n }\n\n this.#authorization = input.scope.authorization\n this.#authority = input.authority\n this.#ontology = input.ontology\n this.#embeddingModels = input.embeddingModels\n this.#storage = input.storage\n this.#delegatedObjectTypeIds =\n input.authority.type === \"delegated\"\n ? new Set(input.authority.objectRead.scope.objects.map((object) => object.objectTypeId))\n : undefined\n this.#delegatedLinkDefinitions =\n input.authority.type === \"delegated\"\n ? new Set(input.authority.objectRead.scope.steps.map(delegatedLinkDefinitionKey))\n : undefined\n this.#delegatedQueryAdmission =\n input.authority.type === \"delegated\"\n ? createSelectedObjectQueryAdmission(input.authority.objectRead.scope)\n : undefined\n this.#runtime = Object.freeze({\n projectId: input.scope.execution.projectId,\n runtimeAuthorization: input.scope.authorization,\n ...(input.authority.type === \"principal\" ? { authorization: input.authority.context } : {}),\n })\n }\n\n static assertBound(reader: AuthorizedObjectReaderImpl, scope: ExecutionScope): void {\n const capturedScope = captureExecutionScope(scope)\n resolveExecutionScopeAuthorization(reader.#runtime.projectId, capturedScope)\n if (capturedScope.authorization !== reader.#authorization) {\n throw new Error(\n \"[Sixb] AuthorizedObjectReader is not bound to this exact execution authority.\"\n )\n }\n }\n\n static ontologyView(reader: AuthorizedObjectReaderImpl): AuthorizedOntologyView {\n const authority = reader.#authority\n reader.#ontologyView ??= createAuthorizedOntologyView({\n ontology: reader.#ontology,\n selection: ontologySelectionForAuthority(authority, reader.#ontology),\n ...(authority.type === \"delegated\"\n ? {\n assertOutputWithinLimit: (value: unknown) =>\n assertObjectReadOutputWithinLimit(value, authority.objectRead.limits),\n }\n : {}),\n })\n return reader.#ontologyView\n }\n\n /** Project identity carried by this nominal reader capability. */\n get projectId(): string {\n return this.#runtime.projectId\n }\n\n async getByPrimaryId(input: GetObjectInput): ReturnType<ObjectReadStorage[\"getByPrimaryId\"]> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n primaryId: input.primaryId,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n return detachReadResult(\n await this.#storage.getByPrimaryId({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n }\n\n async getByPrimaryIdBatch(\n input: GetObjectsInput\n ): ReturnType<ObjectReadStorage[\"getByPrimaryIdBatch\"]> {\n const request = snapshotReadValue({\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n return detachReadResult(\n await this.#storage.getByPrimaryIdBatch({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n }\n\n async canReadObjectProperty(input: CanReadObjectPropertyInput): Promise<boolean> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n primaryId: input.primaryId,\n propertyId: input.propertyId,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n if (this.#authority.type !== \"delegated\") return true\n const [readable] = await this.#storage.selectsObjectProperties({\n projectId: this.#runtime.projectId,\n items: [request],\n })\n return readable ?? false\n }\n\n async canReadObjectPropertiesBatch(\n input: CanReadObjectPropertiesBatchInput\n ): Promise<readonly boolean[]> {\n const request = snapshotReadValue({\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n propertyId: item.propertyId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n if (this.#authority.type !== \"delegated\") return request.items.map(() => true)\n return detachReadResult(\n await this.#storage.selectsObjectProperties({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n }\n\n async list(input: ListObjectsInput): ReturnType<ObjectReadStorage[\"list\"]> {\n const request = snapshotReadValue({\n objectTypeId:\n typeof input.objectTypeId === \"string\"\n ? input.objectTypeId\n : input.objectTypeId === undefined\n ? undefined\n : [...input.objectTypeId],\n primaryIdPrefix: input.primaryIdPrefix,\n primaryIdSuffix: input.primaryIdSuffix,\n updatedAfter: input.updatedAfter,\n updatedBefore: input.updatedBefore,\n createdAfter: input.createdAfter,\n createdBefore: input.createdBefore,\n limit: input.limit,\n offset: input.offset,\n orderBy: input.orderBy,\n order: input.order,\n })\n const objectTypeId = this.#resolveListObjectTypes(request.objectTypeId)\n\n // An empty type selection means \"none\", never \"all\". Short-circuiting here prevents a\n // provider with different empty-array semantics from turning a principal read into a broad one.\n if (Array.isArray(objectTypeId) && objectTypeId.length === 0) {\n return { objects: [], hasMore: false, total: 0 }\n }\n\n return detachReadResult(\n await this.#storage.list({\n ...request,\n ...(objectTypeId === undefined ? {} : { objectTypeId }),\n projectId: this.#runtime.projectId,\n })\n )\n }\n\n async listLinks(input: ListLinksInput): ReturnType<ObjectReadStorage[\"listLinks\"]> {\n const request = snapshotReadValue({\n objectTypeId: input.objectTypeId,\n objectId: input.objectId,\n linkId: input.linkId,\n direction: input.direction,\n })\n this.#assertObjectTypesViewable([request.objectTypeId])\n const links = detachReadResult(\n await this.#storage.listLinks({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n return links.filter((link) => this.#isLinkViewable(link))\n }\n\n async listLinksBatch(\n input: ListLinksBatchInput\n ): ReturnType<ObjectReadStorage[\"listLinksBatch\"]> {\n const request = snapshotReadValue({\n direction: input.direction,\n items: input.items.map((item) => ({\n objectTypeId: item.objectTypeId,\n objectId: item.objectId,\n linkId: item.linkId,\n })),\n })\n this.#assertObjectTypesViewable(request.items.map((item) => item.objectTypeId))\n const pages = detachReadResult(\n await this.#storage.listLinksBatch({\n ...request,\n projectId: this.#runtime.projectId,\n })\n )\n const filtered = new Map<LinkBatchKey, ObjectLinkRow[]>()\n for (const [key, links] of pages) {\n filtered.set(\n key,\n links.filter((link) => this.#isLinkViewable(link))\n )\n }\n return filtered\n }\n\n async executeQuery(\n input: Omit<ExecuteObjectQueryInput, \"projectId\">\n ): Promise<ExecuteObjectQueryResult> {\n const query = snapshotAuthoredQuery(input.query)\n const includeTotal = snapshotReadValue(input.includeTotal)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n return detachReadResult(\n await executeObjectQuery(\n {\n query: executionQuery,\n ...(includeTotal === undefined ? {} : { includeTotal }),\n projectId: this.#runtime.projectId,\n signal: input.signal,\n },\n this.#queryExecutorOptions()\n )\n )\n }\n\n async queryLinks(\n input: Omit<ExecuteObjectQueryLinksInput, \"projectId\">\n ): Promise<ExecuteObjectQueryLinksResult> {\n const query = snapshotAuthoredQuery(input.query)\n const request = snapshotReadValue({\n direction: input.direction,\n linkId: input.linkId,\n includeObjects: input.includeObjects,\n pageSize: input.pageSize,\n pageToken: input.pageToken,\n })\n let executionQuery = query\n const admission = this.#delegatedQueryAdmission\n if (admission) {\n const preflight = preflightObjectQueryLinks(\n { query, ...request, projectId: this.#runtime.projectId },\n { ontology: this.#ontology }\n )\n const admitted = validateObjectQueryWithAdmission(\n preflight.validated.query,\n { ontology: this.#ontology, normalize: false },\n admission\n )\n admission.assertIncidentEdgeSelected({\n state: admitted.admissionState,\n ...(preflight.linkId === undefined ? {} : { linkId: preflight.linkId }),\n direction: preflight.direction,\n path: \"$.linkId\",\n })\n executionQuery = admitted.query\n }\n const result = detachReadResult(\n await executeObjectQueryLinks(\n { query: executionQuery, ...request, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n\n // Link pagination is computed by the provider-facing executor. Filtering afterward would make\n // its cursor and hasMore metadata describe hidden rows, so a provider contract violation must\n // fail closed instead of returning a partially filtered page.\n if (\n result.objects.some((row) => !this.#isObjectTypeViewable(row.objectTypeId)) ||\n result.links.some((link) => !this.#isLinkViewable(link))\n ) {\n throw new Error(\"[Sixb] Object storage returned a link page outside its authorized scope.\")\n }\n return result\n }\n\n async count(\n input: Omit<ExecuteObjectCountInput, \"projectId\">\n ): Promise<ExecuteObjectCountResult> {\n const query = snapshotAuthoredQuery(input.query)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n return detachReadResult(\n await countObjects(\n { query: executionQuery, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n }\n\n async exists(\n input: Omit<ExecuteObjectExistsInput, \"projectId\">\n ): Promise<ExecuteObjectExistsResult> {\n const query = snapshotAuthoredQuery(input.query)\n const executionQuery = this.#admitDelegatedQuery(query)?.query ?? query\n return detachReadResult(\n await existsObjects(\n { query: executionQuery, projectId: this.#runtime.projectId },\n this.#queryExecutorOptions()\n )\n )\n }\n\n async facet(\n input: Omit<ExecuteObjectFacetsInput, \"projectId\">\n ): Promise<ExecuteObjectFacetsResult> {\n const query = snapshotAuthoredQuery(input.query)\n const facets = snapshotFacetRequests(input.facets)\n let executionQuery = query\n let executionFacets = facets\n const admission = this.#delegatedQueryAdmission\n if (admission) {\n // Terminal arguments are ordinary validation errors, not an authorization oracle. Validate\n // them against the canonical result shape before raising any delegated-scope denial.\n const validated = validateObjectQuery(query, { ontology: this.#ontology })\n const normalizedFacets = validateObjectFacetRequests(facets, validated.result.objectTypeIds, {\n ontology: this.#ontology,\n })\n const admitted = validateObjectQueryWithAdmission(\n validated.query,\n { ontology: this.#ontology, normalize: false },\n admission\n )\n normalizedFacets.forEach((facet, index) => {\n admission.assertPropertySelected({\n state: admitted.admissionState,\n propertyId: facet.propertyId,\n use: \"facet\",\n path: `$.facets[${index}].propertyId`,\n })\n })\n executionQuery = admitted.query\n executionFacets = normalizedFacets\n }\n return detachReadResult(\n await facetObjects(\n {\n query: executionQuery,\n facets: executionFacets,\n projectId: this.#runtime.projectId,\n },\n this.#queryExecutorOptions()\n )\n )\n }\n\n /** Enforce the delegated response budget without exposing or recombining its limits. */\n assertVisibleOutputWithinLimit(value: unknown): void {\n if (this.#authority.type !== \"delegated\") return\n assertObjectReadOutputWithinLimit(value, this.#authority.objectRead.limits)\n }\n\n /** Admit adjacent telemetry work without exposing which authority policy was selected. */\n admitTelemetryHistoryRead(\n input: TelemetryHistoryReadWorkloadInput\n ): TelemetryHistoryReadAdmission {\n return admitTelemetryHistoryReadWorkload(input, this.#authority.type === \"delegated\")\n }\n\n #queryExecutorOptions() {\n if (this.#authority.type === \"delegated\") {\n // The selected storage instance is the private execution capability. Passing the delegated\n // runtime token into the generic executor would either reject this admitted query or tempt a\n // forgeable bypass flag; neither is needed at this nominal boundary.\n return {\n ontology: this.#ontology,\n storage: this.#storage,\n embeddingModels: this.#embeddingModels,\n }\n }\n return {\n ontology: this.#ontology,\n embeddingModels: this.#embeddingModels,\n storage: this.#storage,\n runtimeAuthorization: this.#runtime.runtimeAuthorization,\n ...(this.#runtime.authorization === undefined\n ? {}\n : { authorization: this.#runtime.authorization }),\n }\n }\n\n #admitDelegatedQuery(query: ObjectQuery): AdmittedObjectQuery | undefined {\n if (!this.#delegatedQueryAdmission) return undefined\n return validateObjectQueryWithAdmission(\n query,\n { ontology: this.#ontology },\n this.#delegatedQueryAdmission\n )\n }\n\n #assertObjectTypesViewable(objectTypeIds: readonly string[]): void {\n if (this.#authority.type === \"delegated\") {\n for (const objectTypeId of new Set(objectTypeIds)) {\n if (this.#delegatedObjectTypeIds?.has(objectTypeId)) continue\n throw new AuthorizationError(\n `delegated:object.view:${objectTypeId}`,\n `[Sixb] Delegated authorization does not select object type '${objectTypeId}'.`\n )\n }\n return\n }\n\n for (const objectTypeId of new Set(objectTypeIds)) {\n assertAuthorized(this.#runtime, { kind: \"object.view\", objectTypeId })\n }\n }\n\n #resolveListObjectTypes(\n requested: ListObjectsInput[\"objectTypeId\"]\n ): ListObjectsInput[\"objectTypeId\"] {\n if (requested !== undefined) {\n const objectTypeIds = typeof requested === \"string\" ? [requested] : [...new Set(requested)]\n for (const objectTypeId of objectTypeIds) {\n this.#ontology.resolveObjectType(objectTypeId)\n }\n this.#assertObjectTypesViewable(objectTypeIds)\n return typeof requested === \"string\" ? requested : objectTypeIds\n }\n\n if (this.#authority.type === \"unrestricted\") return undefined\n return this.#ontology\n .listObjectTypes()\n .map((objectType) => objectType.id)\n .filter((objectTypeId) => this.#isObjectTypeViewable(objectTypeId))\n }\n\n #isObjectTypeViewable(objectTypeId: string): boolean {\n if (this.#authority.type === \"delegated\") {\n return this.#delegatedObjectTypeIds?.has(objectTypeId) ?? false\n }\n return isAllowed(this.#runtime.authorization, { kind: \"object.view\", objectTypeId })\n }\n\n #isLinkViewable(link: ObjectLinkRow): boolean {\n if (\n !this.#isObjectTypeViewable(link.sourceTypeId) ||\n !this.#isObjectTypeViewable(link.targetTypeId)\n ) {\n return false\n }\n return (\n this.#delegatedLinkDefinitions?.has(delegatedLinkDefinitionKey(link)) ??\n this.#authority.type !== \"delegated\"\n )\n }\n}\n\nObject.freeze(AuthorizedObjectReaderImpl.prototype)\nObject.freeze(AuthorizedObjectReaderImpl)\n\nexport type AuthorizedObjectReader = AuthorizedObjectReaderImpl\n\n/** Build the sole application-facing object reader for one registered execution scope. */\nexport function createAuthorizedObjectReader(input: {\n readonly scope: ExecutionScope\n readonly ontology: OntologyRegistry\n readonly embeddingModels?: EmbeddingModelCatalog\n readonly objectStorage: ObjectStorage\n}): AuthorizedObjectReader {\n const scope = captureExecutionScope(input.scope)\n const projectId = scope.execution.projectId\n const authority = resolveExecutionScopeAuthorization(projectId, scope)\n const storage = objectStorageForAuthority(authority, input.objectStorage)\n const reader = new AuthorizedObjectReaderImpl(readerConstructionKey, {\n scope,\n ontology: input.ontology,\n embeddingModels: input.embeddingModels,\n storage,\n authority,\n })\n Object.freeze(reader)\n return reader\n}\n\n/** Reject recombining an authorized reader with any other execution authority. */\nexport function assertAuthorizedObjectReaderBinding(input: {\n readonly reader: AuthorizedObjectReader\n readonly scope: ExecutionScope\n}): void {\n AuthorizedObjectReaderImpl.assertBound(input.reader, input.scope)\n}\n\n/** Return inert metadata projected from the exact authority already owned by the reader. */\nexport function getAuthorizedOntologyView(reader: AuthorizedObjectReader): AuthorizedOntologyView {\n return AuthorizedObjectReaderImpl.ontologyView(reader)\n}\n\nfunction objectStorageForAuthority(\n authority: ResolvedExecutionAuthority,\n objectStorage: ObjectStorage\n): ObjectReadStorage {\n switch (authority.type) {\n case \"principal\":\n case \"unrestricted\":\n return objectStorage\n case \"delegated\":\n return objectStorage.createSelectedReadScope({\n projectId: authority.projectId,\n scope: authority.objectRead.scope,\n limits: authority.objectRead.limits,\n })\n default:\n return assertNever(\n authority,\n `[Sixb] Unsupported object reader authority '${String((authority as { type?: unknown }).type)}'.`\n )\n }\n}\n\nfunction ontologySelectionForAuthority(\n authority: ResolvedExecutionAuthority,\n ontology: OntologyRegistry\n): AuthorizedOntologySelection {\n switch (authority.type) {\n case \"unrestricted\":\n return { kind: \"all\" }\n case \"principal\":\n return {\n kind: \"types\",\n objectTypeIds: ontology\n .listObjectTypes()\n .filter((objectType) =>\n isAllowed(authority.context, {\n kind: \"object.view\",\n objectTypeId: objectType.id,\n })\n )\n .map((objectType) => objectType.id),\n }\n case \"delegated\":\n return { kind: \"selected\", scope: authority.objectRead.scope }\n }\n}\n\nfunction delegatedLinkDefinitionKey(\n input:\n | Pick<CompiledObjectReadStep, \"sourceObjectTypeId\" | \"linkId\" | \"targetObjectTypeId\">\n | Pick<ObjectLinkRow, \"sourceTypeId\" | \"linkId\" | \"targetTypeId\">\n): string {\n return \"sourceObjectTypeId\" in input\n ? JSON.stringify([input.sourceObjectTypeId, input.linkId, input.targetObjectTypeId])\n : JSON.stringify([input.sourceTypeId, input.linkId, input.targetTypeId])\n}\n\n/**\n * Storage providers may optimize trusted reads with live references. Values crossing the\n * application-facing authorization boundary must not retain them.\n */\nfunction detachReadResult<T>(value: T): T {\n return structuredClone(value)\n}\n\n/** Capture caller-owned values before authorization and execution. */\nfunction snapshotReadValue<T>(value: T): T {\n return structuredClone(value)\n}\n\n/** Bound and capture facet arguments before reading any caller-owned element. */\nfunction snapshotFacetRequests(facets: readonly ObjectFacetRequest[]): ObjectFacetRequest[] {\n if (!Array.isArray(facets)) {\n throw new ObjectQueryValidationError([\n {\n path: \"$.facets\",\n code: \"invalid_facets\",\n message: \"facets must be an array\",\n },\n ])\n }\n const length = facets.length\n if (!Number.isSafeInteger(length) || length > MAX_OBJECT_READ_FACETS) {\n throw new ObjectQueryValidationError([\n {\n path: \"$.facets\",\n code: \"too_many_facets\",\n message: `facets must include at most ${MAX_OBJECT_READ_FACETS} facet requests`,\n },\n ])\n }\n\n const snapshot: ObjectFacetRequest[] = []\n for (let index = 0; index < length; index += 1) {\n const facet = facets[index]\n snapshot.push({ propertyId: facet.propertyId, limit: facet.limit })\n }\n return snapshot\n}\n\n/** Capture one serializable query before either authorization or execution sees it. */\nfunction snapshotAuthoredQuery(query: ObjectQuery): ObjectQuery {\n try {\n const snapshot = structuredClone(query)\n const pending = [snapshot]\n const seen = new Set<ObjectQuery>()\n for (const node of pending) {\n if (seen.has(node)) continue\n seen.add(node)\n if (\n node.kind === \"vector\" &&\n (typeof node.vector !== \"string\" ||\n typeof node.profile !== \"string\" ||\n \"propertyId\" in node)\n ) {\n throw new ObjectQueryValidationError([\n {\n path: \"$\",\n code: \"invalid_vector_search_input\",\n message: \"Vector search requires a named profile and search text\",\n },\n ])\n }\n if (\"input\" in node) pending.push(node.input)\n if (node.kind === \"set\") pending.push(...node.inputs)\n }\n return snapshot\n } catch (error) {\n if (error instanceof ObjectQueryValidationError) throw error\n throw new ObjectQueryValidationError([\n {\n path: \"$\",\n code: \"query_not_cloneable\",\n message: \"Object query must contain only structured-cloneable data\",\n },\n ])\n }\n}\n",
|
|
11
|
-
"import { AuthorizationError } from \"../authorization\"\nimport type { ResolvedRuntimeAuthorization } from \"../execution/authorization\"\nimport {\n type AuthorizedObjectReader,\n assertAuthorizedObjectReaderBinding,\n} from \"../execution/authorized-object-reader\"\nimport type { ExecutionContext, RuntimeAuthorization } from \"../execution/types\"\nimport type { ActionDefinition, ActionObjectSubject, ActionSubject } from \"./types\"\n\ntype DelegatedAuthorization = Extract<ResolvedRuntimeAuthorization, { readonly type: \"delegated\" }>\n\n/** Reject ungranted tuples before Action lookup can become a metadata oracle. */\nexport function assertDelegatedActionTarget(input: {\n readonly authorization: DelegatedAuthorization\n readonly actionId: string\n readonly subject: ActionSubject\n}): ActionObjectSubject {\n const { actionId, authorization, subject } = input\n if (\n subject.kind !== \"object\" ||\n !authorization.actionApply.some(\n (target) =>\n target.actionId === actionId &&\n target.subject.objectTypeId === subject.objectTypeId &&\n target.subject.primaryId === subject.primaryId\n )\n ) {\n throw denied(actionId, subject)\n }\n return subject\n}\n\n/** Admit an exact tuple against its definition and current selected-read visibility. */\nexport async function admitDelegatedObjectAction(input: {\n readonly objectReader: AuthorizedObjectReader\n readonly runtimeAuthorization: RuntimeAuthorization\n readonly execution: ExecutionContext\n readonly authorization: DelegatedAuthorization\n readonly action: ActionDefinition\n readonly subject: ActionObjectSubject\n}): Promise<void> {\n const { action, authorization, execution, objectReader, runtimeAuthorization, subject } = input\n assertDelegatedActionTarget({ authorization, actionId: action.id, subject })\n if (action.binding.kind !== \"object\" || action.binding.objectType.id !== subject.objectTypeId) {\n throw denied(action.id, subject)\n }\n\n assertAuthorizedObjectReaderBinding({\n reader: objectReader,\n scope: { execution, authorization: runtimeAuthorization },\n })\n\n try {\n const visible = await objectReader.getByPrimaryId({\n objectTypeId: subject.objectTypeId,\n primaryId: subject.primaryId,\n })\n if (!visible) throw denied(action.id, subject)\n } catch (error) {\n if (error instanceof AuthorizationError) throw denied(action.id, subject)\n throw error\n }\n}\n\nfunction denied(actionId: string, subject: ActionSubject): AuthorizationError {\n const target =\n subject.kind === \"object\" ? `${subject.objectTypeId}:${subject.primaryId}` : \"global\"\n return new AuthorizationError(\n `apply:action:${actionId}:${target}`,\n `[Sixb] Delegated authority cannot apply Action '${actionId}' to '${target}'.`\n )\n}\n",
|
|
12
|
-
"import type { ResolvedRuntimeAuthorization } from \"../execution/authorization\"\nimport type { Storage } from \"../storage\"\nimport type { ActionRunRecord } from \"../storage/action-runs\"\nimport { findPrimitiveParentRequestExecution } from \"../storage/executions/run-link\"\n\n/** Check both current grant scope and immutable request provenance for a delegated Action run. */\nexport async function canDelegationAccessActionRun(input: {\n readonly storage: Storage\n readonly projectId: string\n readonly authority: Extract<ResolvedRuntimeAuthorization, { readonly type: \"delegated\" }>\n readonly run: ActionRunRecord\n}): Promise<boolean> {\n const subject = input.run.subject\n if (\n !input.authority.delegation ||\n subject.kind !== \"object\" ||\n !input.authority.actionApply.some(\n (target) =>\n target.actionId === input.run.actionId &&\n target.subject.objectTypeId === subject.objectTypeId &&\n target.subject.primaryId === subject.primaryId\n )\n ) {\n return false\n }\n return actionRunBelongsToShareGrant({\n storage: input.storage,\n projectId: input.projectId,\n run: input.run,\n grantId: input.authority.delegation.grantId,\n })\n}\n\n/** Session ids remain audit provenance; the issued grant is the durable capability identity. */\nexport async function actionRunBelongsToShareGrant(input: {\n readonly storage: Storage\n readonly projectId: string\n readonly run: ActionRunRecord\n readonly grantId: string\n}): Promise<boolean> {\n const parent = await findPrimitiveParentRequestExecution({\n executions: input.storage.executions,\n projectId: input.projectId,\n executionId: input.run.executionId,\n primitive: { kind: \"action\", id: input.run.actionId, runId: input.run.id },\n })\n const authorization = parent?.authorizationRef\n return (\n authorization?.type === \"delegated\" &&\n authorization.delegation.kind === \"share\" &&\n authorization.delegation.grantId === input.grantId\n )\n}\n",
|
|
13
|
-
"import { randomUUID } from \"node:crypto\"\nimport { reportRunFailure } from \"../error-reporting/capability\"\nimport { createSixbError, toSixbFailure } from \"../errors/internal\"\nimport type { DomainEventLog } from \"../events\"\nimport type { Queues } from \"../queues\"\nimport type {\n ActionRunFailure,\n ActionRunParams,\n ActionRunRecord,\n CreateExecutionInput,\n Storage,\n} from \"../storage\"\nimport { ACTION_RUN_FAILURE_CODES, ActionRunError } from \"../storage\"\nimport { parseActionRunFailure } from \"../storage/action-runs/failure\"\nimport { actionRunParamsEqual, actionSubjectsEqual } from \"../storage/action-runs/idempotency\"\nimport type { RequestActionResult } from \"./request\"\nimport { createActionRunId, createActionRunIdempotencyKey } from \"./run-id\"\nimport type { ActionSubject } from \"./types\"\n\ninterface DispatchActionRunInput {\n readonly errorReporterHost: object\n readonly projectId: string\n readonly storage: Storage\n readonly queue: Queues[\"actions\"]\n readonly events: DomainEventLog\n readonly actionId: string\n readonly subject: ActionSubject\n readonly params: ActionRunParams\n readonly runId?: string\n readonly createExecution: (executionId: string, runId: string) => Promise<CreateExecutionInput>\n /** Runs before payload comparison or retry so an existing run cannot cross authority owners. */\n readonly assertCanReuseExisting?: (storage: Storage, run: ActionRunRecord) => void | Promise<void>\n /** Checks that hold only for a run this call creates; a replayed run keeps its accepted params. */\n readonly assertNewRun?: () => Promise<void>\n}\n\ninterface PreparedActionRun {\n readonly runId: string\n readonly idempotencyKey: string\n}\n\ntype PersistedActionRun =\n | { readonly publish: false; readonly run: ActionRunRecord }\n | {\n readonly publish: true\n readonly run: ActionRunRecord\n readonly execution: CreateExecutionInput\n readonly queuedAt: Date\n readonly created: boolean\n }\n\n/** Persist an Action execution and run before publishing its queue job. */\nexport async function dispatchActionRun(\n input: DispatchActionRunInput\n): Promise<RequestActionResult> {\n const request = prepareActionRun(input)\n const persisted = await persistActionRun(input, request)\n if (!persisted.publish) return existingActionRunResult(persisted.run)\n return publishActionRun(input, persisted)\n}\n\nfunction prepareActionRun(input: DispatchActionRunInput): PreparedActionRun {\n const runId = createActionRunId(input.runId)\n return {\n runId,\n idempotencyKey: createActionRunIdempotencyKey(input.projectId, runId),\n }\n}\n\nasync function persistActionRun(\n input: DispatchActionRunInput,\n request: PreparedActionRun\n): Promise<PersistedActionRun> {\n const actionRuns = requireActionRunStorage(input.storage)\n const existing = await actionRuns.getById({ projectId: input.projectId, id: request.runId })\n if (existing) {\n await input.assertCanReuseExisting?.(input.storage, existing)\n return reuseActionRun(input, existing)\n }\n\n await input.assertNewRun?.()\n const execution = await input.createExecution(`exec_${randomUUID()}`, request.runId)\n const queuedAt = new Date()\n try {\n return await input.storage.transaction(\n async (tx): Promise<PersistedActionRun> => {\n const transactionalRuns = requireActionRunStorage(tx)\n const raced = await transactionalRuns.getById({\n projectId: input.projectId,\n id: request.runId,\n })\n if (raced) {\n await input.assertCanReuseExisting?.(tx, raced)\n assertExistingRunMatchesRequest(raced, input)\n return { publish: false, run: raced }\n }\n\n await tx.executions.create(execution)\n const run = await transactionalRuns.queue({\n projectId: input.projectId,\n id: request.runId,\n executionId: execution.id,\n actionId: input.actionId,\n subject: input.subject,\n params: input.params,\n idempotencyKey: request.idempotencyKey,\n queuedAt,\n })\n return { publish: true, run, execution, queuedAt, created: true }\n },\n { isolation: \"serializable\" }\n )\n } catch (error) {\n if (!(error instanceof ActionRunError)) throw error\n const raced = await actionRuns.getById({ projectId: input.projectId, id: request.runId })\n if (!raced) throw error\n await input.assertCanReuseExisting?.(input.storage, raced)\n assertExistingRunMatchesRequest(raced, input)\n return { publish: false, run: raced }\n }\n}\n\nasync function reuseActionRun(\n input: DispatchActionRunInput,\n existing: ActionRunRecord\n): Promise<PersistedActionRun> {\n assertExistingRunMatchesRequest(existing, input)\n if (!isRetryableEnqueueFailure(existing)) return { publish: false, run: existing }\n\n const execution = await input.storage.executions.getById({\n projectId: input.projectId,\n id: existing.executionId,\n })\n if (!execution) {\n throw new ActionRunError(\n `[Sixb] Execution '${existing.executionId}' for Action run '${existing.id}' was not found.`\n )\n }\n\n const queuedAt = new Date()\n const run = await requireActionRunStorage(input.storage).queue({\n projectId: input.projectId,\n id: existing.id,\n executionId: existing.executionId,\n actionId: existing.actionId,\n subject: existing.subject,\n params: existing.params,\n idempotencyKey: existing.idempotencyKey,\n queuedAt,\n })\n return { publish: true, run, execution, queuedAt, created: false }\n}\n\nasync function publishActionRun(\n input: DispatchActionRunInput,\n persisted: Extract<PersistedActionRun, { readonly publish: true }>\n): Promise<RequestActionResult> {\n let job: Awaited<ReturnType<Queues[\"actions\"][\"enqueue\"]>>[number] | undefined\n try {\n const jobs = await input.queue.enqueue({\n projectId: input.projectId,\n jobs: [\n {\n id: persisted.run.id,\n type: \"action.run.requested\",\n payload: {\n runId: persisted.run.id,\n },\n },\n ],\n })\n job = jobs[0]\n } catch (error) {\n await failActionRunPublication(input, persisted.run, error)\n throw error\n }\n\n await input.events.emit(\n {\n events: [\n {\n type: \"action.requested\",\n payload: {\n actionId: persisted.run.actionId,\n subject: persisted.run.subject,\n params: persisted.run.params,\n runId: persisted.run.id,\n },\n },\n ],\n correlationId: persisted.execution.correlationId,\n },\n { source: \"Sixb\" }\n )\n\n return {\n runId: persisted.run.id,\n queuedAt: persisted.queuedAt.toISOString(),\n ...(job?.id ? { jobId: job.id } : {}),\n created: persisted.created,\n }\n}\n\nasync function failActionRunPublication(\n input: DispatchActionRunInput,\n run: ActionRunRecord,\n error: unknown\n): Promise<void> {\n const failedAt = new Date()\n const failure = toActionRunFailure(error, run, failedAt)\n await requireActionRunStorage(input.storage).finish({\n projectId: input.projectId,\n id: run.id,\n status: \"failed\",\n finishedAt: failedAt,\n error: failure,\n })\n reportRunFailure(input.errorReporterHost, error, {\n projectId: input.projectId,\n runKind: \"action\",\n run: { runId: run.id, actionId: run.actionId },\n failure,\n })\n}\n\nfunction requireActionRunStorage(storage: Storage): NonNullable<Storage[\"actionRuns\"]> {\n if (!storage.actionRuns) {\n throw new ActionRunError(\"[Sixb] Action run storage is not configured.\")\n }\n return storage.actionRuns\n}\n\nfunction assertExistingRunMatchesRequest(\n existing: ActionRunRecord,\n request: Pick<DispatchActionRunInput, \"actionId\" | \"subject\" | \"params\">\n): void {\n if (\n existing.actionId !== request.actionId ||\n !actionSubjectsEqual(existing.subject, request.subject) ||\n !actionRunParamsEqual(existing.params, request.params)\n ) {\n throw new ActionRunError(\n `[Sixb] Action run '${existing.id}' already exists with a different request payload.`\n )\n }\n}\n\nfunction isRetryableEnqueueFailure(record: ActionRunRecord): boolean {\n return (\n record.status === \"failed\" && record.phase === \"enqueue\" && record.error?.retryable === true\n )\n}\n\nfunction existingActionRunResult(existing: ActionRunRecord): RequestActionResult {\n return {\n runId: existing.id,\n queuedAt: existing.queuedAt.toISOString(),\n created: false,\n }\n}\n\nfunction toActionRunFailure(\n error: unknown,\n run: ActionRunRecord,\n at: Date\n): ActionRunFailure<\"enqueue\"> {\n const enqueueError = createSixbError(\n \"queue.enqueue_failed\",\n `[Sixb] Could not enqueue Action run '${run.id}'.`,\n {\n cause: error,\n details: { actionId: run.actionId, runId: run.id, phase: \"enqueue\" },\n }\n )\n return parseActionRunFailure(\n toSixbFailure(enqueueError, {\n allowedCodes: ACTION_RUN_FAILURE_CODES,\n at,\n }),\n \"enqueue\"\n )\n}\n",
|
|
14
|
-
"import { randomUUID } from \"node:crypto\"\nimport { OntologyValidationError } from \"../ontology/errors\"\n\nexport function createActionRunId(runId: string | undefined): string {\n if (runId !== undefined) {\n if (!runId.trim()) {\n throw new OntologyValidationError(\"[Sixb] Action run id must not be empty\")\n }\n return runId\n }\n\n return `act_${randomUUID()}`\n}\n\nexport function createActionRunIdempotencyKey(projectId: string, runId: string): string {\n return `action:${projectId}:${runId}`\n}\n",
|
|
15
|
-
"import { AuthorizationError, assertAuthorized, canViewActionRun } from \"../authorization\"\nimport {\n getAuthorizationRef,\n resolveExecutionScopeAuthorization,\n resolveRuntimeAuthorizationForProject,\n} from \"../execution/authorization\"\nimport {\n createPrimitiveExecutionRecord,\n ensureExecutionRecord,\n executionRecordInputFromRuntime,\n} from \"../execution/durable\"\nimport type { ExecutionContext } from \"../execution/types\"\nimport { ActionRunTimeoutError } from \"../objects/action/errors\"\nimport { OntologyValidationError } from \"../ontology/errors\"\nimport type { ObjectTypeWithPropertyTokens } from \"../ontology/tokens\"\nimport type { SixbRuntimeContext } from \"../runtime/types\"\nimport { assertParamUsersActive } from \"../shared/params/user-refs\"\nimport {\n ActionRunError,\n type ActionRunRecord,\n type ActionRunStorage,\n isTerminalActionRun,\n} from \"../storage\"\nimport { assertObjectReadOutputWithinLimit } from \"../storage/objects/execution-limits\"\nimport { admitDelegatedObjectAction, assertDelegatedActionTarget } from \"./delegated-admission\"\nimport { actionRunBelongsToShareGrant, canDelegationAccessActionRun } from \"./run-authorization\"\nimport { dispatchActionRun } from \"./run-dispatch\"\nimport { createActionRunId } from \"./run-id\"\nimport type { ActionDefinition, ActionSubject } from \"./types\"\nimport {\n isObjectActionDefinition,\n normalizeActionParams,\n resolveObjectActionSubject,\n validateActionSubject,\n} from \"./validation\"\n\nexport interface RequestActionResult {\n readonly runId: string\n readonly queuedAt: string\n readonly jobId?: string\n readonly created: boolean\n}\n\nexport interface RequestActionOptions {\n readonly runId?: string\n readonly signal?: AbortSignal\n}\n\nexport interface RequestActionAndWaitOptions extends RequestActionOptions {\n readonly timeoutMs?: number\n readonly onRequested?: (runId: string) => void | Promise<void>\n}\n\nexport interface RequestActionInput {\n readonly actionId: string\n readonly subject?: ActionSubject\n readonly params?: Record<string, unknown>\n readonly runId?: string\n readonly signal?: AbortSignal\n}\n\nexport interface RequestActionAndWaitInput extends RequestActionInput {\n readonly timeoutMs?: number\n readonly onRequested?: (runId: string) => void | Promise<void>\n}\n\nexport interface WaitForActionRunInput {\n readonly runId: string\n readonly timeoutMs?: number\n readonly signal?: AbortSignal\n}\n\nconst DEFAULT_ACTION_WAIT_TIMEOUT_MS = 60_000\nconst DEFAULT_ACTION_WAIT_POLL_MS = 1_000\n\nfunction clearTimer(timer: ReturnType<typeof setTimeout> | undefined): void {\n if (timer) {\n clearTimeout(timer)\n }\n}\n\nfunction getActionDefinition(runtime: SixbRuntimeContext, actionId: string): ActionDefinition {\n const action = runtime.actionRegistry.getById(actionId)\n if (!action) {\n throw new OntologyValidationError(`Unknown action '${actionId}'`)\n }\n return action\n}\n\nexport async function requestAction(\n runtime: SixbRuntimeContext,\n execution: ExecutionContext,\n input: RequestActionInput\n): Promise<RequestActionResult> {\n // Capture the three process-local capabilities before caller-owned request getters can run.\n const projectId = runtime.projectId\n const runtimeAuthorization = runtime.runtimeAuthorization\n const objectReader = runtime.objectReader\n const request = snapshotActionRequest(input)\n const authorization = resolveExecutionScopeAuthorization(projectId, {\n execution,\n authorization: runtimeAuthorization,\n })\n const subject = request.subject\n const delegatedSubject =\n authorization.type === \"delegated\"\n ? assertDelegatedActionTarget({\n authorization,\n actionId: request.actionId,\n subject,\n })\n : undefined\n const action = getActionDefinition(runtime, request.actionId)\n const actionId = action.id\n const rawParams = request.params\n\n if (authorization.type === \"delegated\") {\n await admitDelegatedObjectAction({\n objectReader,\n runtimeAuthorization,\n execution,\n authorization,\n action,\n subject: delegatedSubject!,\n })\n } else {\n assertAuthorized({ projectId, runtimeAuthorization }, { kind: \"action.apply\", actionId })\n }\n if (authorization.type !== \"delegated\" && action.binding.kind === \"object\") {\n // Object actions also require visibility of the subject's object type.\n assertAuthorized(\n { projectId, runtimeAuthorization },\n { kind: \"object.view\", objectTypeId: action.binding.objectType.id }\n )\n }\n\n validateActionSubject(action, subject)\n\n let pathPrefix = action.id\n let objectType: ObjectTypeWithPropertyTokens | null = null\n\n if (isObjectActionDefinition(action)) {\n objectType = resolveObjectActionSubject({ runtime, action, subject })\n pathPrefix = `${objectType.id}.${action.id}`\n }\n\n const actionParams = normalizeActionParams(runtime, action.params, rawParams, pathPrefix)\n\n // `dispatchActionRun` checks an existing run id before creating its durable execution. Keep\n // process-local delegation outside that oracle unless it carries durable grant provenance.\n void getAuthorizationRef(runtimeAuthorization)\n\n return dispatchActionRun({\n errorReporterHost: runtime,\n projectId,\n storage: runtime.storage,\n queue: runtime.queues.actions,\n events: runtime.events,\n actionId,\n subject,\n params: actionParams,\n runId: request.runId,\n assertNewRun: () =>\n assertParamUsersActive({\n auth: runtime.storage.auth,\n projectId,\n schemas: Object.fromEntries(\n Object.entries(action.params).map(([paramId, param]) => [paramId, param.schema])\n ),\n values: actionParams,\n valueTypesById: runtime.ontology.getValueTypesById(),\n describe: (paramId) => `Action param '${pathPrefix}.${paramId}'`,\n invalid: (message) => new OntologyValidationError(message),\n }),\n ...(authorization.type === \"delegated\"\n ? {\n assertCanReuseExisting: async (\n storage: SixbRuntimeContext[\"storage\"],\n existing: ActionRunRecord\n ) => {\n if (\n !authorization.delegation ||\n !(await actionRunBelongsToShareGrant({\n storage,\n projectId,\n run: existing,\n grantId: authorization.delegation.grantId,\n }))\n ) {\n throw new AuthorizationError(\n `apply:action:${actionId}`,\n \"[Sixb] Delegated authority cannot reuse this Action run.\"\n )\n }\n },\n }\n : {}),\n createExecution: async (executionId, runId) => {\n const caller = await ensureExecutionRecord(\n runtime.storage.executions,\n executionRecordInputFromRuntime({\n execution,\n runtimeAuthorization,\n })\n )\n return createPrimitiveExecutionRecord({\n id: executionId,\n primitive: { kind: \"action\", id: actionId, runId },\n origin: { type: \"execution\", parent: caller },\n })\n },\n })\n}\n\nfunction snapshotActionRequest(input: RequestActionInput): {\n readonly actionId: string\n readonly subject: ActionSubject\n readonly params: Record<string, unknown>\n readonly runId?: string\n} {\n const actionId = input.actionId\n const subject = input.subject\n const params = input.params\n const runId = input.runId\n return structuredClone({\n actionId,\n subject: subject ?? { kind: \"none\" },\n params: params ?? {},\n ...(runId === undefined ? {} : { runId }),\n })\n}\n\nexport async function requestActionAndWait(\n runtime: SixbRuntimeContext,\n execution: ExecutionContext,\n input: RequestActionAndWaitInput\n): Promise<ActionRunRecord> {\n const runId = createActionRunId(input.runId)\n\n await requestAction(runtime, execution, {\n ...input,\n runId,\n })\n await input.onRequested?.(runId)\n\n return waitForActionRun(runtime, {\n runId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n })\n}\n\nexport async function waitForActionRun(\n runtime: SixbRuntimeContext,\n input: WaitForActionRunInput\n): Promise<ActionRunRecord> {\n const projectId = runtime.projectId\n const runtimeAuthorization = runtime.runtimeAuthorization\n const request = {\n runId: input.runId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n }\n const authorization = resolveRuntimeAuthorizationForProject({\n projectId,\n runtimeAuthorization,\n })\n if (authorization.type === \"denied\") {\n throw new AuthorizationError(\n \"runtime:unbound\",\n \"[Sixb] Protected operations require registered runtime authorization for this project.\"\n )\n }\n // Process-local delegation cannot poll durable runs without originating grant provenance.\n if (authorization.type === \"delegated\") void getAuthorizationRef(runtimeAuthorization)\n const actionRuns = requireActionRunStorage(runtime)\n const timeoutMs = request.timeoutMs ?? DEFAULT_ACTION_WAIT_TIMEOUT_MS\n const signal = request.signal\n const startedAt = Date.now()\n\n if (signal?.aborted) {\n throw signal.reason ?? new Error(\"aborted\")\n }\n\n return new Promise<ActionRunRecord>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | undefined\n let pollTimer: ReturnType<typeof setTimeout> | undefined\n let unsubscribe: (() => void) | undefined\n let settled = false\n let checking = false\n\n const releaseSubscription = (release: (() => void) | undefined) => {\n if (!release) return\n try {\n release()\n } catch (error) {\n console.error(\"[Sixb] Failed to release action run wait subscription:\", error)\n }\n }\n\n const cleanup = () => {\n if (settled) return\n settled = true\n clearTimer(timer)\n clearTimer(pollTimer)\n signal?.removeEventListener(\"abort\", onAbort)\n releaseSubscription(unsubscribe)\n }\n\n const rejectWith = (error: unknown) => {\n cleanup()\n reject(error)\n }\n\n const schedulePoll = () => {\n if (!settled && !pollTimer) {\n pollTimer = setTimeout(() => {\n pollTimer = undefined\n void check()\n }, DEFAULT_ACTION_WAIT_POLL_MS)\n }\n }\n\n const check = async () => {\n if (settled || checking) {\n return\n }\n checking = true\n try {\n const record = await actionRuns.getById({\n projectId,\n id: request.runId,\n })\n const visible =\n record &&\n (authorization.type === \"unrestricted\" ||\n (authorization.type === \"principal\" &&\n canViewActionRun(authorization.context, record)) ||\n (authorization.type === \"delegated\" &&\n (await canDelegationAccessActionRun({\n storage: runtime.storage,\n projectId,\n authority: authorization,\n run: record,\n }))))\n if (visible && isTerminalActionRun(record)) {\n if (authorization.type === \"delegated\") {\n assertObjectReadOutputWithinLimit(record, authorization.objectRead.limits)\n }\n cleanup()\n resolve(record)\n return\n }\n schedulePoll()\n } catch (error) {\n rejectWith(error)\n } finally {\n checking = false\n }\n }\n\n const onAbort = () => {\n rejectWith(signal?.reason ?? new Error(\"aborted\"))\n }\n\n timer = setTimeout(\n () => {\n rejectWith(new ActionRunTimeoutError({ runId: request.runId, timeoutMs }))\n },\n Math.max(0, timeoutMs - (Date.now() - startedAt))\n )\n\n if (signal) {\n signal.addEventListener(\"abort\", onAbort, { once: true })\n }\n\n runtime.events\n .subscribe({ types: [\"action.completed\", \"action.failed\"] }, (events) => {\n if (\n events.some(\n (event) =>\n (event.type === \"action.completed\" || event.type === \"action.failed\") &&\n event.payload.runId === request.runId\n )\n ) {\n void check()\n }\n })\n .then((unsubscribeEvents) => {\n // Timeout or abort can settle the wait before the asynchronous subscription resolves.\n // `cleanup()` had no handle to release in that case, so release the late handle here.\n if (settled) {\n releaseSubscription(unsubscribeEvents)\n return\n }\n unsubscribe = unsubscribeEvents\n void check()\n })\n .catch((error: unknown) => {\n if (settled) {\n console.error(\"[Sixb] Action run wait subscription failed after the wait settled:\", error)\n return\n }\n rejectWith(error)\n })\n })\n}\n\nfunction requireActionRunStorage(runtime: SixbRuntimeContext): ActionRunStorage {\n const actionRuns = runtime.storage.actionRuns\n if (!actionRuns) {\n throw new ActionRunError(\"[Sixb] Action run storage is not configured.\")\n }\n return actionRuns\n}\n"
|
|
16
|
-
],
|
|
17
|
-
"mappings": "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",
|
|
18
|
-
"debugId": "06F5C8EE8692319564756E2164756E21",
|
|
19
|
-
"names": []
|
|
20
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/datasets/write.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { BlobStorage, FileRef } from \"../blob-storage\"\nimport { isFileRef } from \"../blob-storage\"\nimport type { DatasetMergeCommitResult } from \"../lake-storage/merge\"\nimport { getDatasetMergeChangeValidationError } from \"../lake-storage/merge-validation\"\nimport type {\n DatasetProducer,\n DatasetRow,\n DatasetWriteMode,\n LakeStorage,\n} from \"../lake-storage/types\"\nimport type { MergeChange } from \"./changes\"\nimport type { DatasetDefinition } from \"./types\"\nimport { getDatasetRowValidationFailure } from \"./validation\"\n\nexport interface DatasetWriteValue {\n readonly value: unknown\n}\n\nexport interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {\n readonly lakeStorage: LakeStorage\n readonly blobStorage: Pick<BlobStorage, \"stat\">\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode | \"merge\"\n readonly signal: AbortSignal\n /** Lazy so a merge's latest-version guard is checked before fetching source data. */\n readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>\n readonly producer?: DatasetProducer\n readonly expectedLatestVersionId?: string\n readonly commitMessage?: string\n /** Diagnostic label for the caller, including its component prefix. */\n readonly sourceLabel?: string\n /** Progress includes validated values even if the operation subsequently fails. */\n onRead?(rowsRead: number): void\n /** Attach caller-owned source provenance to a validation failure. */\n mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown\n}\n\nexport type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }\n\n/**\n * Validate, stage, and commit one dataset write using existing lake sessions.\n *\n * The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the\n * dataset-update notification for a `created` result. This operation returns immediately after\n * the lake commit; it does not wait for downstream pipelines or projections.\n */\nexport async function writeDataset<TValue extends DatasetWriteValue>(\n input: WriteDatasetInput<TValue>\n): Promise<WriteDatasetResult> {\n const { lakeStorage, dataset, signal } = input\n let abortWrite: (() => Promise<void>) | undefined\n let rowsRead = 0\n const onRead = () => {\n rowsRead += 1\n input.onRead?.(rowsRead)\n }\n\n throwIfAborted(signal)\n await lakeStorage.createDataset(dataset)\n try {\n throwIfAborted(signal)\n const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === \"snapshot\"\n if (input.mode === \"merge\" || reconcileSnapshot) {\n const session = await lakeStorage.beginMerge({\n dataset,\n expectedLatestVersionId: input.expectedLatestVersionId,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n throwIfAborted(signal)\n const values = await input.readValues()\n throwIfAborted(signal)\n await session.writeChanges(\n validatedValues(\n input,\n values,\n async (value, itemIndex) =>\n reconcileSnapshot\n ? { kind: \"upsert\" as const, row: await validateRow(value, input, itemIndex) }\n : validateMergeChange(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n const result = await session.commit({\n commitMessage: input.commitMessage,\n createInitialVersion: reconcileSnapshot,\n retryOnConflict: dataset.sequenceBy !== undefined,\n signal,\n })\n return { ...result, rowsRead }\n }\n\n const values = await input.readValues()\n throwIfAborted(signal)\n const session = await lakeStorage.beginWrite({\n dataset,\n mode: input.mode,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n await session.writeRows(\n validatedValues(\n input,\n values,\n (value, itemIndex) => validateRow(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n\n // Preserve sync semantics: an empty append must not invent an initial dataset version.\n if (rowsRead === 0 && input.mode === \"append\") {\n const version = await lakeStorage.getLatestVersion(dataset.id)\n await session.abort()\n return { outcome: \"unchanged\", version, rowsRead }\n }\n\n const { outcome, ...version } = await session.commit({\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: input.commitMessage,\n })\n return { outcome, version, rowsRead }\n } catch (error) {\n // Cleanup must not replace the source, validation, cancellation, or commit failure.\n await abortWrite?.().catch(() => {})\n throw error\n }\n}\n\nasync function* validatedValues<TValue extends DatasetWriteValue, TResult>(\n input: WriteDatasetInput<TValue>,\n values: Iterable<TValue> | AsyncIterable<TValue>,\n validate: (value: unknown, itemIndex: number) => Promise<TResult>,\n onRead: () => void\n): AsyncIterable<TResult> {\n let itemIndex = 0\n for await (const sourceValue of values) {\n throwIfAborted(input.signal)\n itemIndex += 1\n let value: TResult\n try {\n value = await validate(sourceValue.value, itemIndex)\n } catch (error) {\n throw input.mapValidationError\n ? input.mapValidationError(error, sourceValue, itemIndex)\n : error\n }\n onRead()\n yield value\n }\n}\n\nfunction sourceLabel(input: Pick<WriteDatasetInput, \"dataset\" | \"sourceLabel\">): string {\n return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`\n}\n\nasync function validateRow(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<DatasetRow> {\n const validationError = getDatasetRowValidationFailure(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError.message}`,\n { cause: validationError }\n )\n }\n // The validator above establishes the row shape.\n const row = value as DatasetRow\n await verifyRowFileRefs(row, input, itemIndex)\n return row\n}\n\nasync function validateMergeChange(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<MergeChange<DatasetRow, DatasetRow>> {\n const validationError = getDatasetMergeChangeValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`\n )\n }\n const change = value as MergeChange<DatasetRow, DatasetRow>\n if (change.kind === \"upsert\") await verifyRowFileRefs(change.row, input, itemIndex)\n return change\n}\n\nasync function verifyRowFileRefs(\n row: DatasetRow,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<void> {\n for (const column of input.dataset.schema.columns) {\n if (column.type !== \"fileRef\") continue\n const value = row[column.name]\n if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)\n }\n}\n\nasync function verifyFileRef(\n fileRef: FileRef,\n input: WriteDatasetInput,\n columnName: string,\n itemIndex: number\n): Promise<void> {\n const blobInfo = await input.blobStorage.stat(fileRef.blobId)\n const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`\n if (!blobInfo) {\n throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)\n }\n if (blobInfo.digest !== fileRef.digest) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`\n )\n }\n if (blobInfo.sizeBytes !== fileRef.sizeBytes) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`\n )\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (!signal.aborted) return\n if (signal.reason instanceof Error) throw signal.reason\n const error = new Error(\n typeof signal.reason === \"string\" && signal.reason.length > 0\n ? signal.reason\n : \"[Sixb] Dataset write was cancelled.\"\n )\n error.name = \"AbortError\"\n throw error\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "013E5C6E3459B8F964756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/agents/types.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { AgentMessage, AgentMessagePart, AgentMessageRole } from \"../../agents/message\"\nimport type { AgentReasoningLevel } from \"../../agents/types\"\nimport type { Principal } from \"../../auth\"\nimport type { FileRef } from \"../../blob-storage\"\nimport type { SixbErrorCode, SixbFailure } from \"../../errors/types\"\nimport type { JsonValue } from \"../../json\"\nimport type { LanguageModelRef } from \"../../models\"\n\n// ── agent_threads — one conversation with an agent ──────────────────────────────────────────────\n\nexport type AgentThreadStatus = \"active\" | \"archived\"\n\n/** Immutable, non-secret application input. Never store resolved env or credentials here. */\nexport type AgentThreadSandboxParams = Readonly<Record<string, JsonValue>>\n\n/** Worker-owned state, independent from the immutable application binding. */\nexport interface AgentThreadSandboxState {\n /** Exact name passed to the provider. Replacements always receive a fresh name. */\n readonly name: string\n readonly status: \"new\" | \"busy\" | \"ready\" | \"blocked\" | \"unavailable\"\n readonly sourceFingerprint?: string\n readonly initialized: boolean\n /** Durable context boundary: local files from before this reset are no longer available. */\n readonly resetAt?: string\n /** Never expires automatically: a delayed provider operation must not reach a successor. */\n readonly owner?: { readonly runId: string; readonly executionToken: string }\n}\n\nexport type TransitionAgentThreadSandboxInput = {\n readonly projectId: string\n readonly id: string\n} & (\n | {\n readonly action: \"acquire\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly sourceFingerprint: string\n }\n | {\n readonly action: \"replace\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly nextName: string\n }\n | {\n readonly action: \"settle\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly status: \"ready\" | \"blocked\" | \"unavailable\"\n readonly initialized: boolean\n }\n | {\n readonly action: \"recreate\"\n readonly expectedSandboxName: string\n readonly name: string\n }\n)\n\nexport interface AgentThreadRecord {\n readonly id: string\n readonly projectId: string\n /** Who owns/opened the thread. Reuses the canonical auth principal (gains `agent` later for free). */\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly sandboxParams?: AgentThreadSandboxParams\n readonly sandboxState?: AgentThreadSandboxState\n readonly status: AgentThreadStatus\n /** Single-flight anchor: the id of the one run currently allowed to write, or `null` when idle. */\n readonly activeRunId: string | null\n readonly lastMessageAt?: Date\n readonly messageCount: number\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface CreateAgentThreadInput {\n readonly id: string\n readonly projectId: string\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly sandboxParams?: AgentThreadSandboxParams\n readonly status?: AgentThreadStatus\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface ListAgentThreadsInput {\n readonly projectId: string\n readonly statuses?: readonly AgentThreadStatus[]\n readonly ownerPrincipal?: Principal\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentThreadsResult {\n readonly threads: readonly AgentThreadRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_runs — one loop execution (the worker job; attribution + fencing) ───────────────────\n\n/** Lifecycle shared by every durable agent execution, conversational or workflow-owned. */\nexport type AgentExecutionStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\"\n\nexport type AgentRunStatus = AgentExecutionStatus\nexport type AgentRunKind = \"conversation\" | \"subagent\"\n\n/** Error codes an agent execution can persist and expose through its public contract. */\nexport const AGENT_RUN_FAILURE_CODES = [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n \"agent.execution_failed\",\n \"ai.usage_limit_exceeded\",\n \"ai.usage_limit_unavailable\",\n] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport type AgentRunFailureCode = (typeof AGENT_RUN_FAILURE_CODES)[number]\n\n/**\n * Why a run ended — Sixb's provider-independent vocabulary. It includes model-loop reasons plus\n * platform-level endings such as `timeout`, so reads remain typed and exhaustive. `other` and\n * `unknown` preserve terminal state when a provider adds a new reason.\n */\nexport const AGENT_RUN_FINISH_REASONS = [\n \"stop\",\n \"length\",\n \"content-filter\",\n \"tool-calls\",\n \"timeout\",\n \"error\",\n \"other\",\n \"unknown\",\n] as const\n\nexport type AgentRunFinishReason = (typeof AGENT_RUN_FINISH_REASONS)[number]\n\n/**\n * Coerce an external finish-reason string — a DB column or an SDK value — to {@link\n * AgentRunFinishReason}. An unrecognised value becomes `\"unknown\"` rather than being dropped.\n */\nexport function coerceAgentRunFinishReason(\n value: string | null | undefined\n): AgentRunFinishReason | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n return (AGENT_RUN_FINISH_REASONS as readonly string[]).includes(value)\n ? (value as AgentRunFinishReason)\n : \"unknown\"\n}\n\n/** Stable, user-facing diagnostics emitted by the platform while executing a run. */\nexport const AGENT_RUN_DIAGNOSTIC_CODES = [\n \"output_file_limit_exceeded\",\n \"output_file_too_large\",\n \"output_budget_exhausted\",\n \"output_collection_failed\",\n \"output_file_changed\",\n \"output_storage_failed\",\n] as const\n\n/**\n * Closed on purpose, and the wire is closed with it.\n *\n * Sixb writes these codes and the generated client is what reads them, so an open union would only\n * be honest if the HTTP schema were open too — and that costs the OpenAPI enum, the client's\n * autocompletion, and Atlas's exhaustive `switch`. Sixb owns both ends, so a new code is a minor\n * version bump: cheap here, and a broken `switch` is better than a 500 from `z.enum`.\n */\nexport type AgentRunDiagnosticCode = (typeof AGENT_RUN_DIAGNOSTIC_CODES)[number]\nexport type AgentRunDiagnosticSeverity = \"warning\" | \"error\"\n\nexport interface AgentRunDiagnostic {\n readonly code: AgentRunDiagnosticCode\n readonly severity: AgentRunDiagnosticSeverity\n readonly scope: \"output\"\n /** Relative path inside the run's published output directory, when one file is involved. */\n readonly path?: string\n /** Sanitized, stable copy suitable for display to an end user. */\n readonly message: string\n}\n\n/**\n * Authorization state for the current queue delivery.\n *\n * `queueLeaseExpiresAt` is a persisted projection of `ClaimedQueueJob.leaseExpiresAt`, not an\n * independently managed run lease. It may only be extended from a successful queue lease renewal.\n */\nexport interface AgentRunExecution {\n readonly token: string\n readonly queueLeaseExpiresAt: Date\n}\n\ninterface AgentRunRecordBase {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly status: AgentRunStatus\n readonly modelId?: string\n /** Why the run ended (our own SDK-independent enum). */\n readonly finishReason?: AgentRunFinishReason\n /** Platform diagnostics are transcript annotations, never agent-authored message content. */\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n /** Portable failure snapshot when the run did not succeed. */\n readonly error?: SixbFailure<AgentRunFailureCode>\n /** Execution attempts: `0` while queued, `1` on first start, incremented on redelivery. */\n readonly attempt: number\n readonly execution?: AgentRunExecution\n readonly createdAt: Date\n readonly startedAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface ConversationAgentRunRecord extends AgentRunRecordBase {\n readonly kind: \"conversation\"\n readonly threadId: string\n readonly triggerMessageId: string\n /** Immutable model selection captured at admission. Absent only on runs predating this field. */\n readonly spec?: ConversationAgentRunSpec\n}\n\n/** Immutable, serialisable model selection for one conversational turn. */\nexport interface ConversationAgentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n}\n\n/** Immutable, serialisable child configuration captured before dispatch. */\nexport interface SubagentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n /** Focused task supplied by the parent Agent. */\n readonly task: string\n /** Project tools available when the child was admitted. Runtime tools are injected separately. */\n readonly toolNames: readonly string[]\n readonly maxSteps: number\n}\n\n/** Durable child output returned to its parent by `wait_agent`. */\nexport interface SubagentRunResult {\n readonly text?: string\n readonly files?: readonly FileRef[]\n}\n\nexport interface SubagentRunRecord extends AgentRunRecordBase {\n readonly kind: \"subagent\"\n readonly parentRunId: string\n /** Stable parent-selected key that makes repeated tool execution idempotent. */\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n readonly result?: SubagentRunResult\n}\n\nexport type AgentRunRecord = ConversationAgentRunRecord | SubagentRunRecord\n\nexport interface CreateAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly threadId: string\n readonly triggerMessageId: string\n readonly spec: ConversationAgentRunSpec\n readonly createdAt?: Date\n}\n\nexport interface CreateSubagentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly parentRunId: string\n /** Current parent delivery token. New children are admitted only while that delivery owns it. */\n readonly parentExecutionToken: string\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n /** Internal safety bound enforced atomically across worker processes. */\n readonly maxActiveChildren: number\n readonly createdAt?: Date\n}\n\nexport interface StartAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly modelId?: string\n readonly execution: AgentRunExecution\n readonly startedAt?: Date\n}\n\nexport interface FinishQueuedAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\" | \"cancelled\"\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n}\n\nexport interface ReclaimAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly execution: AgentRunExecution\n}\n\nexport interface ConfirmAgentRunExecutionOwnershipInput {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n /** Exact expiration returned by the queue claim or its latest successful renewal. */\n readonly queueLeaseExpiresAt: Date\n}\n\nexport type FinishAgentRunInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"succeeded\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly result?: SubagentRunResult\n readonly completedAt?: Date\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"failed\" | \"cancelled\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n }\n\nexport interface ListAgentRunsInput {\n readonly projectId: string\n readonly kinds?: readonly AgentRunKind[]\n readonly threadId?: string\n readonly parentRunId?: string\n readonly statuses?: readonly AgentRunStatus[]\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedAfter?: Date\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedBefore?: Date\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentRunsResult {\n readonly runs: readonly AgentRunRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_messages — one message (assistant messages inserted only once finalized) ─────────────\n\nexport type { AgentMessageRole }\n\nexport interface AgentMessageRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n /** The run that produced this message; `null` for user-authored messages. */\n readonly runId: string | null\n readonly role: AgentMessageRole\n /** Principal that authored this persisted message: caller for user messages, agent identity later for assistant messages. */\n readonly authorPrincipal?: Principal\n /** Monotonic per thread, assigned by the store. */\n readonly seq: number\n /** Structured message content — text / reasoning / step boundaries / tool calls. */\n readonly parts: readonly AgentMessagePart[]\n /** Message-level metadata (mirrors `UIMessage.metadata`). */\n readonly metadata?: JsonValue\n /** Versions the `parts` shape so it can be migrated; stamped from `AGENT_MESSAGE_CONTENT_VERSION`. */\n readonly contentVersion: number\n readonly createdAt: Date\n readonly completedAt?: Date\n}\n\n/** Append a message: a {@link AgentMessage} (role + parts + metadata) plus its storage identity. */\nexport interface AppendAgentMessageInput extends AgentMessage {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly runId: string | null\n readonly authorPrincipal?: Principal\n readonly createdAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface DeleteAgentMessagesByRunInput {\n readonly projectId: string\n readonly threadId: string\n readonly runId: string\n}\n\nexport interface ListAgentMessagesInput {\n readonly projectId: string\n readonly threadId: string\n /** Return only messages whose per-thread sequence is greater than this retained boundary. */\n readonly afterSeq?: number\n readonly roles?: readonly AgentMessageRole[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentMessagesResult {\n readonly messages: readonly AgentMessageRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_context_checkpoints — append-only model-context boundaries ──────────────────────────\n\nexport type AgentContextCheckpointReason = \"threshold\" | \"overflow\"\n\n/**\n * A durable summary boundary used only when projecting a thread into model context.\n *\n * Checkpoints never replace or mutate transcript messages. Normal thread reads remain authoritative\n * and complete; the worker reads the latest checkpoint and only the retained message tail.\n */\nexport interface AgentContextCheckpointRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n readonly previousCheckpointId?: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt: Date\n}\n\nexport interface CreateAgentContextCheckpointInput {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n /** Compare-and-swap anchor. `null` means the thread must not have a prior checkpoint. */\n readonly expectedPreviousCheckpointId: string | null\n /** Compare-and-swap anchor for the complete transcript observed by the summarizer. */\n readonly expectedHeadSeq: number\n /** Current delivery token for `createdByRunId`; stale redeliveries must not write. */\n readonly executionToken: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt?: Date\n}\n\n// ── Store ───────────────────────────────────────────────────────────────────────────────────────\n\nexport interface AgentThreadStore {\n /** Atomic run-fenced transition, or explicit idle-thread recreation. */\n transitionSandbox(input: TransitionAgentThreadSandboxInput): Promise<AgentThreadSandboxState>\n create(input: CreateAgentThreadInput): Promise<AgentThreadRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null>\n list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult>\n}\n\nexport interface AgentRunStore {\n /** Persist a queued run and atomically claim the thread's single-flight slot. */\n create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord>\n /** Persist or replay one idempotent child run while atomically enforcing parent fan-out. */\n createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord>\n /** Transition a queued run to running and install the first delivery's execution token. */\n start(input: StartAgentRunInput): Promise<AgentRunRecord>\n /** Finish a queued run before execution and release the thread's single-flight slot. */\n finishQueued(input: FinishQueuedAgentRunInput): Promise<AgentRunRecord>\n /** Rotate the execution token for a redelivered running job (`attempt++`). */\n reclaim(input: ReclaimAgentRunInput): Promise<AgentRunRecord>\n /**\n * Project the queue's latest confirmed ownership expiration onto the current execution.\n * Implementations must fence by token and must never move the expiration backwards.\n */\n confirmExecutionOwnership(input: ConfirmAgentRunExecutionOwnershipInput): Promise<AgentRunRecord>\n /** Finalize a run and release the thread's `activeRunId`. */\n finish(input: FinishAgentRunInput): Promise<AgentRunRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentRunRecord | null>\n getByIds(params: {\n projectId: string\n ids: readonly string[]\n }): Promise<readonly AgentRunRecord[]>\n list(input: ListAgentRunsInput): Promise<ListAgentRunsResult>\n}\n\nexport interface AgentMessageStore {\n /** Insert a message (its `parts` are the canonical content) and bump thread stats. */\n append(input: AppendAgentMessageInput): Promise<AgentMessageRecord>\n /** Delete every message produced by one run and repair the thread's message stats. */\n deleteByRunId(input: DeleteAgentMessagesByRunInput): Promise<number>\n getById(params: { projectId: string; id: string }): Promise<AgentMessageRecord | null>\n list(input: ListAgentMessagesInput): Promise<ListAgentMessagesResult>\n}\n\nexport interface AgentContextCheckpointStore {\n /**\n * Append one checkpoint after atomically validating run ownership and both transcript anchors.\n * Repeating the same payload for the same creating run is idempotent.\n */\n create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord>\n /** Return checkpoints created by the requested runs, in first-occurrence input order. */\n getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]>\n getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null>\n}\n\nexport interface AgentStorage {\n readonly threads: AgentThreadStore\n readonly runs: AgentRunStore\n readonly messages: AgentMessageStore\n readonly checkpoints: AgentContextCheckpointStore\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";;AAiHO,IAAM,2BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AASO,IAAM,4BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,2BAA0B,CACxC,OACkC;AAAA,EAClC,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,OAAQ,0BAA+C,SAAS,KAAK,IAChE,QACD;AAAA;AAIC,IAAM,8BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
8
|
-
"debugId": "305DAAAEB1335EE664756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|