@sixb/core 0.1.16 → 0.1.17
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 +25 -25
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/worker.js +1 -1
- package/dist/agents/index.js +41 -40
- package/dist/agents/index.js.map +1 -1
- package/dist/auth/index.js +5 -5
- package/dist/authorization/index.js +2 -2
- 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/index.js +5 -3
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -0
- package/dist/blob-storage/internal.js +11 -0
- package/dist/blob-storage/internal.js.map +9 -0
- package/dist/bootstrap/index.js +45 -44
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-8x74221e.js → chunk-10styjgk.js} +18 -13
- package/dist/{chunk-8x74221e.js.map → chunk-10styjgk.js.map} +3 -3
- package/dist/{chunk-hgqpcmyr.js → chunk-1hqwggsn.js} +47 -19
- package/dist/chunk-1hqwggsn.js.map +12 -0
- package/dist/{chunk-zb47r1c8.js → chunk-23xs4qp9.js} +2 -2
- package/dist/{chunk-gmdvns8f.js → chunk-2am3db31.js} +2 -2
- package/dist/{chunk-fj1dvp37.js → chunk-2vhg6ysa.js} +1 -1
- package/dist/{chunk-dp7yk20b.js → chunk-33saed7g.js} +1 -1
- package/dist/{chunk-mdnw7nj8.js → chunk-3rrezgyc.js} +33 -8
- package/dist/chunk-3rrezgyc.js.map +15 -0
- package/dist/{chunk-jgwb25gc.js → chunk-4as3wt1c.js} +13 -5
- package/dist/chunk-4as3wt1c.js.map +12 -0
- package/dist/chunk-4ra628t7.js +88 -0
- package/dist/chunk-4ra628t7.js.map +10 -0
- package/dist/{chunk-chdg6eqq.js → chunk-52c5zb0z.js} +2 -2
- package/dist/{chunk-69kt9q43.js → chunk-5be2ath4.js} +1 -1
- package/dist/{chunk-qnd7ehe5.js → chunk-5thzcb8g.js} +2 -2
- package/dist/{chunk-6z1q7j19.js → chunk-5yd8cchh.js} +1126 -780
- package/dist/chunk-5yd8cchh.js.map +66 -0
- package/dist/{chunk-3q7z9hd4.js → chunk-6wbm6ymz.js} +234 -40
- package/dist/{chunk-3q7z9hd4.js.map → chunk-6wbm6ymz.js.map} +8 -6
- package/dist/{chunk-kvysp909.js → chunk-7ecp4v7a.js} +26 -19
- package/dist/chunk-7ecp4v7a.js.map +17 -0
- 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-dsv8kdgk.js → chunk-9g6jz9kk.js} +5 -5
- package/dist/{chunk-39tqv9hz.js → chunk-9se093qz.js} +5 -6
- package/dist/{chunk-39tqv9hz.js.map → chunk-9se093qz.js.map} +3 -4
- package/dist/{chunk-7g2gjvah.js → chunk-a7er86jd.js} +1 -1
- package/dist/{chunk-zdkcdshk.js → chunk-aq39q04r.js} +41 -3
- package/dist/{chunk-zdkcdshk.js.map → chunk-aq39q04r.js.map} +4 -3
- package/dist/chunk-b9affek3.js +261 -0
- package/dist/chunk-b9affek3.js.map +12 -0
- package/dist/{chunk-b9y8hcm2.js → chunk-c2rga5cx.js} +1 -1
- package/dist/{chunk-f72rbvsb.js → chunk-cnb5kv05.js} +2 -2
- package/dist/chunk-d62kjtbg.js.map +2 -2
- package/dist/{chunk-vjqt7q3a.js → chunk-dam456ve.js} +233 -34
- package/dist/{chunk-vjqt7q3a.js.map → chunk-dam456ve.js.map} +7 -5
- package/dist/{chunk-sbcm1b92.js → chunk-e67ynxcr.js} +3 -3
- 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-cq44v1a6.js → chunk-f1xh7a32.js} +3 -3
- package/dist/{chunk-h4138ww2.js → chunk-fggq3d9k.js} +450 -799
- package/dist/chunk-fggq3d9k.js.map +49 -0
- package/dist/{chunk-kttr5ftm.js → chunk-gf7yht60.js} +3 -3
- package/dist/chunk-h8teetr0.js +9 -0
- package/dist/chunk-h8teetr0.js.map +10 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-nj0020ay.js → chunk-jjrn5v0p.js} +1 -1
- package/dist/{chunk-nvymebc1.js → chunk-jnfxmr3f.js} +1 -1
- package/dist/{chunk-nkbev3tr.js → chunk-k4g51s47.js} +3 -3
- package/dist/{chunk-a0073121.js → chunk-kpx7jrmn.js} +3 -1
- package/dist/chunk-kpx7jrmn.js.map +12 -0
- package/dist/{chunk-h044jb97.js → chunk-pja9jfz6.js} +172 -10
- package/dist/chunk-pja9jfz6.js.map +19 -0
- package/dist/chunk-pqajwytd.js.map +1 -1
- 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-s3csryxe.js → chunk-rj69qcrd.js} +8 -2
- package/dist/chunk-rj69qcrd.js.map +11 -0
- package/dist/{chunk-swxzncrv.js → chunk-rpxz486p.js} +32 -5
- package/dist/{chunk-swxzncrv.js.map → chunk-rpxz486p.js.map} +4 -4
- package/dist/{chunk-tkdbge6v.js → chunk-rx7h5fdx.js} +1 -1
- package/dist/{chunk-tnvafr7g.js → chunk-s7ftxrdr.js} +105 -7
- package/dist/chunk-s7ftxrdr.js.map +22 -0
- package/dist/{chunk-h866d223.js → chunk-sk0hcjsz.js} +1 -1
- package/dist/{chunk-2xvgy3x5.js → chunk-svabwqdq.js} +2 -2
- package/dist/{chunk-667x4drs.js → chunk-t9shqx3w.js} +2 -2
- package/dist/{chunk-40qb8wpe.js → chunk-tjjgy3z4.js} +26 -23
- package/dist/{chunk-40qb8wpe.js.map → chunk-tjjgy3z4.js.map} +3 -3
- package/dist/{chunk-gkxsenvp.js → chunk-vp3z1ckh.js} +31 -7
- package/dist/{chunk-gkxsenvp.js.map → chunk-vp3z1ckh.js.map} +5 -4
- package/dist/{chunk-cxj8y8t0.js → chunk-vre348sb.js} +2 -2
- package/dist/{chunk-vsvrv7n8.js → chunk-w9yycd3t.js} +1 -1
- package/dist/{chunk-g4rbm4a6.js → chunk-wt4szfec.js} +379 -331
- package/dist/chunk-wt4szfec.js.map +14 -0
- package/dist/{chunk-a7ne02hk.js → chunk-xcy5ddha.js} +6 -6
- package/dist/{chunk-zvmr2hqk.js → chunk-xyvy73tj.js} +4 -3
- package/dist/{chunk-zvmr2hqk.js.map → chunk-xyvy73tj.js.map} +3 -3
- package/dist/datasets/write.js +1 -1
- package/dist/execution/agent.js +38 -37
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +36 -35
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +37 -36
- package/dist/execution/request.js.map +2 -2
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -59
- 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 +2 -2
- 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 +31 -32
- 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 +23 -1
- 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/index.js +22 -22
- 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.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/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/index.js +25 -25
- package/dist/objects/query/executor.d.ts +2 -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 +22 -22
- 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.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.map +1 -1
- package/dist/ontology/index.d.ts +1 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +3 -3
- package/dist/ontology/internal.js +2 -2
- package/dist/ontology/query-capabilities.d.ts +1 -0
- package/dist/ontology/query-capabilities.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +20 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/pipelines/index.js +23 -23
- package/dist/projections/internal.js +22 -22
- 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/host.d.ts +1 -0
- 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 +28 -26
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/public-origin.d.ts +10 -0
- package/dist/runtime/public-origin.d.ts.map +1 -0
- package/dist/runtime/sixb.d.ts +1 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +12 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/shares/internal.js +19 -19
- package/dist/storage/agents/provider.js +2 -2
- 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 +6 -6
- 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 +5 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +30 -30
- 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 +8 -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 +2 -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 +6 -6
- package/dist/syncs/index.js +24 -24
- 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 +2549 -1490
- 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 +20 -20
- 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/index.js +42 -41
- package/dist/workflows/index.js.map +1 -1
- package/package.json +7 -1
- package/src/actions/types/context.ts +5 -2
- package/src/blob-storage/download-urls.ts +138 -0
- package/src/blob-storage/execution.ts +32 -1
- package/src/blob-storage/internal.ts +1 -0
- package/src/execution/authorized-object-reader.ts +8 -1
- package/src/index.ts +25 -0
- 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 +52 -5
- package/src/models/definitions.ts +8 -1
- package/src/models/events.ts +3 -0
- package/src/models/execution/README.md +20 -1
- 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 +1 -0
- package/src/models/execution/model-call-recovery.ts +1 -0
- package/src/models/execution/reranking.ts +137 -0
- package/src/models/execution/usage.ts +1 -0
- package/src/models/execution.ts +5 -1
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +32 -0
- package/src/models/pricing.ts +2 -1
- package/src/models/reranking-model.ts +114 -0
- package/src/objects/query/executor.ts +42 -2
- 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 +33 -1
- 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 +1 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/query-capabilities.ts +1 -1
- package/src/ontology/types.ts +21 -0
- package/src/ontology/validation/query.ts +57 -0
- package/src/query.ts +4 -0
- package/src/queues/in-memory.ts +54 -19
- package/src/queues/types.ts +4 -0
- package/src/runtime/host.ts +28 -1
- package/src/runtime/index.ts +1 -0
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/public-origin.ts +33 -0
- package/src/runtime/sixb.ts +13 -2
- package/src/runtime/types.ts +12 -2
- 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 +31 -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 +2 -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/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-a0073121.js.map +0 -12
- package/dist/chunk-g4rbm4a6.js.map +0 -15
- package/dist/chunk-h044jb97.js.map +0 -15
- 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-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-xnx96gfy.js.map +0 -15
- 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-zb47r1c8.js.map → chunk-23xs4qp9.js.map} +0 -0
- /package/dist/{chunk-gmdvns8f.js.map → chunk-2am3db31.js.map} +0 -0
- /package/dist/{chunk-fj1dvp37.js.map → chunk-2vhg6ysa.js.map} +0 -0
- /package/dist/{chunk-dp7yk20b.js.map → chunk-33saed7g.js.map} +0 -0
- /package/dist/{chunk-chdg6eqq.js.map → chunk-52c5zb0z.js.map} +0 -0
- /package/dist/{chunk-69kt9q43.js.map → chunk-5be2ath4.js.map} +0 -0
- /package/dist/{chunk-qnd7ehe5.js.map → chunk-5thzcb8g.js.map} +0 -0
- /package/dist/{chunk-dsv8kdgk.js.map → chunk-9g6jz9kk.js.map} +0 -0
- /package/dist/{chunk-7g2gjvah.js.map → chunk-a7er86jd.js.map} +0 -0
- /package/dist/{chunk-b9y8hcm2.js.map → chunk-c2rga5cx.js.map} +0 -0
- /package/dist/{chunk-f72rbvsb.js.map → chunk-cnb5kv05.js.map} +0 -0
- /package/dist/{chunk-sbcm1b92.js.map → chunk-e67ynxcr.js.map} +0 -0
- /package/dist/{chunk-cq44v1a6.js.map → chunk-f1xh7a32.js.map} +0 -0
- /package/dist/{chunk-kttr5ftm.js.map → chunk-gf7yht60.js.map} +0 -0
- /package/dist/{chunk-nj0020ay.js.map → chunk-jjrn5v0p.js.map} +0 -0
- /package/dist/{chunk-nvymebc1.js.map → chunk-jnfxmr3f.js.map} +0 -0
- /package/dist/{chunk-nkbev3tr.js.map → chunk-k4g51s47.js.map} +0 -0
- /package/dist/{chunk-tkdbge6v.js.map → chunk-rx7h5fdx.js.map} +0 -0
- /package/dist/{chunk-h866d223.js.map → chunk-sk0hcjsz.js.map} +0 -0
- /package/dist/{chunk-2xvgy3x5.js.map → chunk-svabwqdq.js.map} +0 -0
- /package/dist/{chunk-667x4drs.js.map → chunk-t9shqx3w.js.map} +0 -0
- /package/dist/{chunk-cxj8y8t0.js.map → chunk-vre348sb.js.map} +0 -0
- /package/dist/{chunk-vsvrv7n8.js.map → chunk-w9yycd3t.js.map} +0 -0
- /package/dist/{chunk-a7ne02hk.js.map → chunk-xcy5ddha.js.map} +0 -0
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { ModelKind } from "../../models/definitions"
|
|
1
2
|
import type { AiMoney } from "../ai-cost"
|
|
2
3
|
import { AiLimitStorageError } from "./errors"
|
|
3
4
|
import { aiLimitCalendarMonth } from "./period"
|
|
4
5
|
import type {
|
|
6
|
+
AiLimitMeter,
|
|
5
7
|
AiLimitPeriod,
|
|
6
8
|
AiLimitPolicy,
|
|
7
9
|
AiLimitQuantity,
|
|
@@ -16,6 +18,20 @@ import type {
|
|
|
16
18
|
|
|
17
19
|
const SIGNED_INT64_MAX = 9_223_372_036_854_775_807n
|
|
18
20
|
|
|
21
|
+
// These calls are billed per audio second or per search, and their providers report no tokens.
|
|
22
|
+
// Token limits neither admit nor count them; cost limits still do.
|
|
23
|
+
const TOKENLESS_MODEL_KINDS: ReadonlySet<ModelKind> = new Set(["transcription", "reranking"])
|
|
24
|
+
|
|
25
|
+
/** @internal Whether a limit meter governs calls of this kind. Unclassified calls are metered. */
|
|
26
|
+
export function aiLimitMeterApplies(
|
|
27
|
+
meter: AiLimitMeter,
|
|
28
|
+
modelKind: ModelKind | undefined
|
|
29
|
+
): boolean {
|
|
30
|
+
return (
|
|
31
|
+
meter !== "tokens.total" || modelKind === undefined || !TOKENLESS_MODEL_KINDS.has(modelKind)
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
19
35
|
/** @internal Serialize compound limit operations, including within an existing transaction. */
|
|
20
36
|
export class AiLimitOperationLock {
|
|
21
37
|
private tail: Promise<void> = Promise.resolve()
|
|
@@ -55,6 +71,7 @@ export interface AiLimitAccountingEntry {
|
|
|
55
71
|
readonly attempt: number
|
|
56
72
|
readonly callId: string
|
|
57
73
|
readonly occurredAt: Date
|
|
74
|
+
readonly modelKind?: ModelKind
|
|
58
75
|
readonly totalTokens?: number
|
|
59
76
|
readonly requesterGroupIds: readonly string[]
|
|
60
77
|
readonly requester?:
|
|
@@ -228,6 +245,7 @@ export function normalizeReserveAiModelCall(input: ReserveAiModelCallInput): {
|
|
|
228
245
|
readonly identity: AiModelCallReservationIdentity
|
|
229
246
|
readonly subjects: readonly AiLimitSubject[]
|
|
230
247
|
readonly estimates: readonly AiLimitQuantity[]
|
|
248
|
+
readonly modelKind?: ModelKind
|
|
231
249
|
readonly period: AiLimitPeriod
|
|
232
250
|
readonly reservedAt: Date
|
|
233
251
|
} {
|
|
@@ -237,6 +255,7 @@ export function normalizeReserveAiModelCall(input: ReserveAiModelCallInput): {
|
|
|
237
255
|
identity,
|
|
238
256
|
subjects: normalizeAiLimitSubjects(input.subjects),
|
|
239
257
|
estimates: normalizeAiLimitQuantities(input.estimates, "estimates"),
|
|
258
|
+
...(input.modelKind === undefined ? {} : { modelKind: input.modelKind }),
|
|
240
259
|
period: aiLimitCalendarMonth(reservedAt),
|
|
241
260
|
reservedAt,
|
|
242
261
|
}
|
|
@@ -297,13 +316,16 @@ export function aiLimitReservationRequestKey(
|
|
|
297
316
|
const amount = normalizeAiLimitAmount(quantity)
|
|
298
317
|
return [amount.meter, amount.currency, amount.amount.toString()]
|
|
299
318
|
}),
|
|
319
|
+
// Appended only when present, so keys of reservations made before model kinds stay valid.
|
|
320
|
+
...(request.modelKind === undefined ? [] : [request.modelKind]),
|
|
300
321
|
])
|
|
301
322
|
}
|
|
302
323
|
|
|
303
324
|
export function aiLimitReservationBuckets(
|
|
304
325
|
policies: readonly AiLimitPolicy[],
|
|
305
326
|
subjects: readonly AiLimitSubject[],
|
|
306
|
-
estimates: readonly AiLimitQuantity[]
|
|
327
|
+
estimates: readonly AiLimitQuantity[],
|
|
328
|
+
modelKind?: ModelKind
|
|
307
329
|
): readonly AiLimitReservationBucket[] {
|
|
308
330
|
const subjectKeys = new Set(subjects.map(aiLimitSubjectKey))
|
|
309
331
|
const estimatesByDimension = new Map(
|
|
@@ -313,7 +335,11 @@ export function aiLimitReservationBuckets(
|
|
|
313
335
|
})
|
|
314
336
|
)
|
|
315
337
|
return policies
|
|
316
|
-
.filter(
|
|
338
|
+
.filter(
|
|
339
|
+
(policy) =>
|
|
340
|
+
subjectKeys.has(aiLimitSubjectKey(policy.subject)) &&
|
|
341
|
+
aiLimitMeterApplies(policy.limit.meter, modelKind)
|
|
342
|
+
)
|
|
317
343
|
.flatMap((policy) => {
|
|
318
344
|
const estimate = estimatesByDimension.get(
|
|
319
345
|
aiLimitAmountKey(normalizeAiLimitAmount(policy.limit))
|
|
@@ -357,6 +383,7 @@ export function resolveAiLimitActual(
|
|
|
357
383
|
let accountingStatus: ResolvedAiLimitActual["accountingStatus"] = "complete"
|
|
358
384
|
for (const entry of entries) {
|
|
359
385
|
if (dimension.meter === "tokens.total") {
|
|
386
|
+
if (!aiLimitMeterApplies(dimension.meter, entry.modelKind)) continue
|
|
360
387
|
if (entry.totalTokens === undefined) {
|
|
361
388
|
accountingStatus = "unavailable"
|
|
362
389
|
} else {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ModelKind } from "../../models/definitions"
|
|
1
2
|
import type { AiMoney } from "../ai-cost"
|
|
2
3
|
|
|
3
4
|
/** A project-wide, group, or durable requester identity charged for AI model calls. */
|
|
@@ -129,6 +130,8 @@ export interface ReserveAiModelCallInput extends AiModelCallReservationIdentity
|
|
|
129
130
|
/** The project subject is always added, even when omitted here. */
|
|
130
131
|
readonly subjects: readonly AiLimitSubject[]
|
|
131
132
|
readonly estimates: readonly AiLimitQuantity[]
|
|
133
|
+
/** Transcription and reranking calls are outside token limits; see `aiLimitMeterApplies`. */
|
|
134
|
+
readonly modelKind?: ModelKind
|
|
132
135
|
readonly reservedAt?: Date
|
|
133
136
|
}
|
|
134
137
|
|
|
@@ -19,6 +19,14 @@ export function normalizeAiModelCallRecord(input: RecordAiModelCallInput): AiMod
|
|
|
19
19
|
}
|
|
20
20
|
assertNonBlank(input.responseId, "responseId")
|
|
21
21
|
|
|
22
|
+
if (
|
|
23
|
+
input.modelKind !== undefined &&
|
|
24
|
+
!["language", "image", "video", "embedding", "decision", "transcription", "reranking"].includes(
|
|
25
|
+
input.modelKind
|
|
26
|
+
)
|
|
27
|
+
) {
|
|
28
|
+
throw new TypeError("[Sixb] AI model kind is invalid.")
|
|
29
|
+
}
|
|
22
30
|
const occurredAt = cloneValidDate(input.occurredAt, "occurredAt")
|
|
23
31
|
const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), "recordedAt")
|
|
24
32
|
const requesterGroupIds = normalizeRequesterGroupIds(input.requesterGroupIds)
|
|
@@ -37,6 +45,7 @@ export function normalizeAiModelCallRecord(input: RecordAiModelCallInput): AiMod
|
|
|
37
45
|
? {}
|
|
38
46
|
: { providerIds: normalizeModelProviderIds(input.providerIds) }),
|
|
39
47
|
requestedModelId: input.requestedModelId,
|
|
48
|
+
...(input.modelKind === undefined ? {} : { modelKind: input.modelKind }),
|
|
40
49
|
...(requestedReasoning === undefined ? {} : { requestedReasoning }),
|
|
41
50
|
...(input.responseModelId === undefined ? {} : { responseModelId: input.responseModelId }),
|
|
42
51
|
responseId: input.responseId,
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { ReadonlyJsonObject } from "../../json"
|
|
2
2
|
import type { ModelReasoning } from "../../models/language-model"
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/** Coverage of normalized usage. Complete means both token totals are known; duration alone is partial. */
|
|
5
5
|
export type AiUsageReportingStatus = "complete" | "partial" | "unavailable"
|
|
6
6
|
|
|
7
|
-
/** Provider-neutral
|
|
7
|
+
/** Provider-neutral usage accepted at the model-call boundary. */
|
|
8
8
|
export interface AiModelCallUsageInput {
|
|
9
|
+
/** Audio content duration in milliseconds, rounded to the nearest millisecond. Not billed duration. */
|
|
10
|
+
readonly audioDurationMs?: number
|
|
9
11
|
readonly inputTokens?: number
|
|
10
12
|
readonly outputTokens?: number
|
|
11
13
|
readonly uncachedInputTokens?: number
|
|
@@ -15,7 +17,7 @@ export interface AiModelCallUsageInput {
|
|
|
15
17
|
readonly reasoningOutputTokens?: number
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
/** Normalized
|
|
20
|
+
/** Normalized usage for one completed model call. Token details overlap their input/output totals. */
|
|
19
21
|
export interface AiModelCallUsage extends AiModelCallUsageInput {
|
|
20
22
|
/** Present only when both input and output totals are known. */
|
|
21
23
|
readonly totalTokens?: number
|
|
@@ -32,6 +34,8 @@ export interface AiUsageExecutionSummary {
|
|
|
32
34
|
|
|
33
35
|
/** Input for an idempotent model-call ledger append. */
|
|
34
36
|
export interface RecordAiModelCallInput {
|
|
37
|
+
/** Absent for historical calls whose kind was not captured. */
|
|
38
|
+
readonly modelKind?: import("../../models/definitions").ModelKind
|
|
35
39
|
readonly providerIds?: import("../../models/events").ModelProviderIds
|
|
36
40
|
readonly id: string
|
|
37
41
|
readonly projectId: string
|
|
@@ -89,7 +93,7 @@ export interface GetLatestAiModelCallForExecutionInput {
|
|
|
89
93
|
readonly executionId: string
|
|
90
94
|
}
|
|
91
95
|
|
|
92
|
-
/** Durable, provider-neutral accounting for completed
|
|
96
|
+
/** Durable, provider-neutral accounting for completed model calls. */
|
|
93
97
|
export interface AiUsageStorage {
|
|
94
98
|
/**
|
|
95
99
|
* Append one model-call record idempotently. The identity is project, execution ID, attempt, call
|
|
@@ -8,6 +8,7 @@ const USAGE_FIELDS = [
|
|
|
8
8
|
"cacheWriteInputTokens",
|
|
9
9
|
"textOutputTokens",
|
|
10
10
|
"reasoningOutputTokens",
|
|
11
|
+
"audioDurationMs",
|
|
11
12
|
] as const
|
|
12
13
|
|
|
13
14
|
type AiUsageField = (typeof USAGE_FIELDS)[number]
|
|
@@ -30,6 +31,7 @@ export function normalizeAiModelCallUsage(input: AiModelCallUsageInput): AiModel
|
|
|
30
31
|
: "unavailable"
|
|
31
32
|
|
|
32
33
|
return {
|
|
34
|
+
...(input.audioDurationMs === undefined ? {} : { audioDurationMs: input.audioDurationMs }),
|
|
33
35
|
...(input.inputTokens === undefined ? {} : { inputTokens: input.inputTokens }),
|
|
34
36
|
...(input.outputTokens === undefined ? {} : { outputTokens: input.outputTokens }),
|
|
35
37
|
...(totalTokens === undefined ? {} : { totalTokens }),
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { cloneFileDownloadGrantRecord } from "./record"
|
|
2
|
+
import type {
|
|
3
|
+
DeleteExpiredFileDownloadGrantsInput,
|
|
4
|
+
FileDownloadGrantRecord,
|
|
5
|
+
FileDownloadGrantStorage,
|
|
6
|
+
FindFileDownloadGrantInput,
|
|
7
|
+
RevokeFileDownloadGrantInput,
|
|
8
|
+
} from "./types"
|
|
9
|
+
|
|
10
|
+
export class InMemoryFileDownloadGrantStorage implements FileDownloadGrantStorage {
|
|
11
|
+
private rows = new Map<string, FileDownloadGrantRecord>()
|
|
12
|
+
|
|
13
|
+
async create(record: FileDownloadGrantRecord): Promise<void> {
|
|
14
|
+
const duplicate = [...this.rows.values()].some(
|
|
15
|
+
(current) =>
|
|
16
|
+
current.projectId === record.projectId &&
|
|
17
|
+
(current.id === record.id || current.tokenHash === record.tokenHash)
|
|
18
|
+
)
|
|
19
|
+
if (duplicate) {
|
|
20
|
+
throw new Error(`[Sixb] File download grant '${record.id}' conflicts with an existing one.`)
|
|
21
|
+
}
|
|
22
|
+
this.rows.set(rowKey(record.projectId, record.id), cloneFileDownloadGrantRecord(record))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async findByTokenHash(
|
|
26
|
+
input: FindFileDownloadGrantInput
|
|
27
|
+
): Promise<FileDownloadGrantRecord | null> {
|
|
28
|
+
for (const record of this.rows.values()) {
|
|
29
|
+
if (record.projectId === input.projectId && record.tokenHash === input.tokenHash) {
|
|
30
|
+
return cloneFileDownloadGrantRecord(record)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async revoke(input: RevokeFileDownloadGrantInput): Promise<FileDownloadGrantRecord | null> {
|
|
37
|
+
const key = rowKey(input.projectId, input.id)
|
|
38
|
+
const current = this.rows.get(key)
|
|
39
|
+
if (!current) return null
|
|
40
|
+
if (!current.revokedAt) {
|
|
41
|
+
this.rows.set(key, { ...current, revokedAt: new Date(input.revokedAt) })
|
|
42
|
+
}
|
|
43
|
+
return cloneFileDownloadGrantRecord(this.rows.get(key) as FileDownloadGrantRecord)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async deleteExpired(input: DeleteExpiredFileDownloadGrantsInput): Promise<number> {
|
|
47
|
+
const expired = [...this.rows.entries()]
|
|
48
|
+
.filter(
|
|
49
|
+
([, record]) =>
|
|
50
|
+
record.projectId === input.projectId &&
|
|
51
|
+
record.expiresAt.getTime() < input.expiredBefore.getTime()
|
|
52
|
+
)
|
|
53
|
+
.slice(0, input.limit)
|
|
54
|
+
for (const [key] of expired) this.rows.delete(key)
|
|
55
|
+
return expired.length
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
snapshot(): ReadonlyMap<string, FileDownloadGrantRecord> {
|
|
59
|
+
return new Map(
|
|
60
|
+
[...this.rows].map(([key, record]) => [key, cloneFileDownloadGrantRecord(record)])
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
restore(snapshot: ReadonlyMap<string, FileDownloadGrantRecord>): void {
|
|
65
|
+
this.rows = new Map(
|
|
66
|
+
[...snapshot].map(([key, record]) => [key, cloneFileDownloadGrantRecord(record)])
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function rowKey(projectId: string, id: string): string {
|
|
72
|
+
return `${projectId}\0${id}`
|
|
73
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { isFileRef } from "../../blob-storage"
|
|
2
|
+
import type { FileDownloadGrantRecord } from "./types"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Rebuilds a grant from a provider row with camelCase keys. `file` may arrive parsed (jsonb) or
|
|
6
|
+
* as text (SQLite), and timestamps as `Date` or ISO text. Fails closed on corruption: a grant that
|
|
7
|
+
* cannot be read must not serve a file.
|
|
8
|
+
*/
|
|
9
|
+
export function parseFileDownloadGrantRow(row: {
|
|
10
|
+
readonly [column: string]: unknown
|
|
11
|
+
}): FileDownloadGrantRecord {
|
|
12
|
+
const id = text(row.id, "id", String(row.id))
|
|
13
|
+
const file = typeof row.file === "string" ? JSON.parse(row.file) : row.file
|
|
14
|
+
if (!isFileRef(file)) throw corrupt(id, "file is not a file reference")
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
id,
|
|
18
|
+
projectId: text(row.projectId, "projectId", id),
|
|
19
|
+
tokenHash: text(row.tokenHash, "tokenHash", id),
|
|
20
|
+
file,
|
|
21
|
+
executionId: text(row.executionId, "executionId", id),
|
|
22
|
+
createdAt: date(row.createdAt, "createdAt", id),
|
|
23
|
+
expiresAt: date(row.expiresAt, "expiresAt", id),
|
|
24
|
+
...(row.revokedAt == null ? {} : { revokedAt: date(row.revokedAt, "revokedAt", id) }),
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function cloneFileDownloadGrantRecord(
|
|
29
|
+
record: FileDownloadGrantRecord
|
|
30
|
+
): FileDownloadGrantRecord {
|
|
31
|
+
return structuredClone(record)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function text(value: unknown, column: string, id: string): string {
|
|
35
|
+
if (typeof value !== "string" || value.length === 0) throw corrupt(id, `${column} is not text`)
|
|
36
|
+
return value
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function date(value: unknown, column: string, id: string): Date {
|
|
40
|
+
const parsed = value instanceof Date || typeof value === "string" ? new Date(value) : null
|
|
41
|
+
if (!parsed || !Number.isFinite(parsed.getTime())) throw corrupt(id, `${column} is not a date`)
|
|
42
|
+
return parsed
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function corrupt(id: string, reason: string): Error {
|
|
46
|
+
return new Error(`[Sixb] Stored file download grant '${id}' is invalid: ${reason}.`)
|
|
47
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FileRef } from "../../blob-storage"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* One download URL issued by `blobs.createDownloadUrl()`. Each call issues its own grant, so URLs
|
|
5
|
+
* for the same file expire and are revoked independently.
|
|
6
|
+
*/
|
|
7
|
+
export interface FileDownloadGrantRecord {
|
|
8
|
+
readonly id: string
|
|
9
|
+
readonly projectId: string
|
|
10
|
+
/** SHA-256 hex of the URL token. The token itself is never stored. */
|
|
11
|
+
readonly tokenHash: string
|
|
12
|
+
/** The file the URL serves, without `logicalPath`: serving the bytes does not need it. */
|
|
13
|
+
readonly file: FileRef
|
|
14
|
+
/** The execution that issued the URL, so an exposure can be traced back to its cause. */
|
|
15
|
+
readonly executionId: string
|
|
16
|
+
readonly createdAt: Date
|
|
17
|
+
readonly expiresAt: Date
|
|
18
|
+
readonly revokedAt?: Date
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface FindFileDownloadGrantInput {
|
|
22
|
+
readonly projectId: string
|
|
23
|
+
readonly tokenHash: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface RevokeFileDownloadGrantInput {
|
|
27
|
+
readonly projectId: string
|
|
28
|
+
readonly id: string
|
|
29
|
+
readonly revokedAt: Date
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface DeleteExpiredFileDownloadGrantsInput {
|
|
33
|
+
readonly projectId: string
|
|
34
|
+
readonly expiredBefore: Date
|
|
35
|
+
readonly limit: number
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Persistence only: token generation, expiry, and revocation checks live in Core. */
|
|
39
|
+
export interface FileDownloadGrantStorage {
|
|
40
|
+
/** `(projectId, id)` and `(projectId, tokenHash)` are each unique. */
|
|
41
|
+
create(record: FileDownloadGrantRecord): Promise<void>
|
|
42
|
+
/** Returns expired and revoked grants too; the caller decides whether one still serves. */
|
|
43
|
+
findByTokenHash(input: FindFileDownloadGrantInput): Promise<FileDownloadGrantRecord | null>
|
|
44
|
+
/** Keeps the first revocation. Returns the grant, or `null` when it does not exist. */
|
|
45
|
+
revoke(input: RevokeFileDownloadGrantInput): Promise<FileDownloadGrantRecord | null>
|
|
46
|
+
/** Deletes up to `limit` grants that expired before `expiredBefore`, and returns the count. */
|
|
47
|
+
deleteExpired(input: DeleteExpiredFileDownloadGrantsInput): Promise<number>
|
|
48
|
+
}
|
|
@@ -13,6 +13,10 @@ import {
|
|
|
13
13
|
import { StorageTransactionError } from "../errors"
|
|
14
14
|
import { InMemoryExecutionStorage } from "../executions/in-memory"
|
|
15
15
|
import type { ExecutionStorage } from "../executions/types"
|
|
16
|
+
import {
|
|
17
|
+
type FileDownloadGrantStorage,
|
|
18
|
+
InMemoryFileDownloadGrantStorage,
|
|
19
|
+
} from "../file-download-grants"
|
|
16
20
|
import { type FileUploadSessionStore, InMemoryFileUploadSessions } from "../file-upload-sessions"
|
|
17
21
|
import type { ObjectStorage } from "../objects"
|
|
18
22
|
import { InMemoryObjectStorage } from "../objects/in-memory"
|
|
@@ -116,6 +120,7 @@ export class InMemoryStorage implements Storage {
|
|
|
116
120
|
private readonly webhookRunStorage = new InMemoryWebhookRunStorage(this.executionStorage)
|
|
117
121
|
private readonly rulesStorage = new InMemoryRulesStorage()
|
|
118
122
|
private readonly fileUploadSessionStorage = new InMemoryFileUploadSessions()
|
|
123
|
+
private readonly fileDownloadGrantStorage = new InMemoryFileDownloadGrantStorage()
|
|
119
124
|
private readonly connectorConnectionStorage: InMemoryConnectorConnectionStorage
|
|
120
125
|
readonly auth: AuthStorage
|
|
121
126
|
readonly executions: ExecutionStorage
|
|
@@ -134,6 +139,7 @@ export class InMemoryStorage implements Storage {
|
|
|
134
139
|
readonly shareGrants: ShareGrantStorage
|
|
135
140
|
readonly shareSessions: ShareSessionStorage
|
|
136
141
|
readonly fileUploadSessions: FileUploadSessionStore
|
|
142
|
+
readonly fileDownloadGrants: FileDownloadGrantStorage
|
|
137
143
|
readonly connectorConnections: ConnectorConnectionStorage
|
|
138
144
|
|
|
139
145
|
constructor(options: InMemoryStorageOptions = {}) {
|
|
@@ -166,6 +172,7 @@ export class InMemoryStorage implements Storage {
|
|
|
166
172
|
this.shareGrants = createOperationScopedFacade(this.shareGrantStorage, scope)
|
|
167
173
|
this.shareSessions = createOperationScopedFacade(this.shareSessionStorage, scope)
|
|
168
174
|
this.fileUploadSessions = createOperationScopedFacade(this.fileUploadSessionStorage, scope)
|
|
175
|
+
this.fileDownloadGrants = createOperationScopedFacade(this.fileDownloadGrantStorage, scope)
|
|
169
176
|
this.connectorConnections = createOperationScopedFacade(this.connectorConnectionStorage, scope)
|
|
170
177
|
this.ontologyStorage = new InMemoryOntologyStorage(this.objectStorage, this.timeseriesStorage, {
|
|
171
178
|
runRootOperation: async (run) => run(),
|
|
@@ -173,8 +180,8 @@ export class InMemoryStorage implements Storage {
|
|
|
173
180
|
getMaterializationLifecycle: () => this.getActiveMaterializationLifecycle(),
|
|
174
181
|
assertSourceMaterializationExecution: (input) =>
|
|
175
182
|
this.projectionRunStorage.assertSourceMaterializationExecutionUnlocked(input),
|
|
176
|
-
|
|
177
|
-
|
|
183
|
+
readExecution: (projectId, executionId) =>
|
|
184
|
+
this.executionStorage.getById({ projectId, id: executionId }),
|
|
178
185
|
})
|
|
179
186
|
this.ontology = createOntologyOperationScope(this.ontologyStorage, scope)
|
|
180
187
|
this.ontologyStorage.registerTestingAlias(this.ontology)
|
|
@@ -375,6 +382,7 @@ export class InMemoryStorage implements Storage {
|
|
|
375
382
|
shareGrants: this.shareGrantStorage,
|
|
376
383
|
shareSessions: this.shareSessionStorage,
|
|
377
384
|
fileUploadSessions: this.fileUploadSessionStorage,
|
|
385
|
+
fileDownloadGrants: this.fileDownloadGrantStorage,
|
|
378
386
|
connectorConnections: this.connectorConnectionStorage,
|
|
379
387
|
ping: async () => undefined,
|
|
380
388
|
transaction: async <T>(): Promise<T> => {
|
|
@@ -405,6 +413,7 @@ export class InMemoryStorage implements Storage {
|
|
|
405
413
|
shareGrants: this.shareGrantStorage.snapshot(),
|
|
406
414
|
shareSessions: this.shareSessionStorage.snapshot(),
|
|
407
415
|
fileUploadSessions: this.fileUploadSessionStorage.snapshot(),
|
|
416
|
+
fileDownloadGrants: this.fileDownloadGrantStorage.snapshot(),
|
|
408
417
|
connectorConnections: this.connectorConnectionStorage.snapshot(),
|
|
409
418
|
}
|
|
410
419
|
}
|
|
@@ -430,6 +439,7 @@ export class InMemoryStorage implements Storage {
|
|
|
430
439
|
this.shareGrantStorage.restore(snapshot.shareGrants)
|
|
431
440
|
this.shareSessionStorage.restore(snapshot.shareSessions)
|
|
432
441
|
this.fileUploadSessionStorage.restore(snapshot.fileUploadSessions)
|
|
442
|
+
this.fileDownloadGrantStorage.restore(snapshot.fileDownloadGrants)
|
|
433
443
|
this.connectorConnectionStorage.restore(snapshot.connectorConnections)
|
|
434
444
|
}
|
|
435
445
|
}
|
|
@@ -455,5 +465,6 @@ export interface InMemoryStorageSnapshot {
|
|
|
455
465
|
readonly shareGrants: ReturnType<InMemoryShareGrantStorage["snapshot"]>
|
|
456
466
|
readonly shareSessions: ReturnType<InMemoryShareSessionStorage["snapshot"]>
|
|
457
467
|
readonly fileUploadSessions: ReturnType<InMemoryFileUploadSessions["snapshot"]>
|
|
468
|
+
readonly fileDownloadGrants: ReturnType<InMemoryFileDownloadGrantStorage["snapshot"]>
|
|
458
469
|
readonly connectorConnections: ReturnType<InMemoryConnectorConnectionStorage["snapshot"]>
|
|
459
470
|
}
|
package/src/storage/index.ts
CHANGED
|
@@ -12,9 +12,12 @@ export type { StoredRuleResolvedEvent, StoredRuleTriggeredEvent } from "../event
|
|
|
12
12
|
export type { ReadonlyJsonObject } from "../json"
|
|
13
13
|
export { stableJsonStringify } from "../json"
|
|
14
14
|
export type {
|
|
15
|
+
EffectiveChangeCounts,
|
|
15
16
|
PinnedDatasetVersion,
|
|
17
|
+
ProjectionEntityRef,
|
|
16
18
|
ProjectionExecution,
|
|
17
19
|
ProjectionMaterializationIdentity,
|
|
20
|
+
ProjectionSourceRef,
|
|
18
21
|
} from "../materialization/model"
|
|
19
22
|
export type { ModelProviderIds } from "../models/events"
|
|
20
23
|
export type { ObjectRef } from "../ontology"
|
|
@@ -351,6 +354,13 @@ export type {
|
|
|
351
354
|
TrustedPrimitiveRef,
|
|
352
355
|
} from "./executions"
|
|
353
356
|
export { ExecutionStorageError } from "./executions"
|
|
357
|
+
export type {
|
|
358
|
+
DeleteExpiredFileDownloadGrantsInput,
|
|
359
|
+
FileDownloadGrantRecord,
|
|
360
|
+
FileDownloadGrantStorage,
|
|
361
|
+
FindFileDownloadGrantInput,
|
|
362
|
+
RevokeFileDownloadGrantInput,
|
|
363
|
+
} from "./file-download-grants"
|
|
354
364
|
export type {
|
|
355
365
|
CreateFileUploadSessionInput,
|
|
356
366
|
FileUploadSession,
|
|
@@ -380,6 +390,7 @@ export type {
|
|
|
380
390
|
MigrationStep,
|
|
381
391
|
MigrationStepInfo,
|
|
382
392
|
MigrationStepOptions,
|
|
393
|
+
StorageMigrationOptions,
|
|
383
394
|
StorageMigrationResult,
|
|
384
395
|
StorageMigrator,
|
|
385
396
|
StorageSchemaCheck,
|
|
@@ -448,13 +459,19 @@ export {
|
|
|
448
459
|
objectLinkCursor,
|
|
449
460
|
snapshotObjectReadExecutionLimits,
|
|
450
461
|
} from "./objects"
|
|
462
|
+
export type {
|
|
463
|
+
ObjectQueryPreparationPlan,
|
|
464
|
+
ObjectQueryPreparationResult,
|
|
465
|
+
QueryPreparationCapableStorage,
|
|
466
|
+
} from "./objects/query-preparation"
|
|
451
467
|
export type {
|
|
452
468
|
AbandonRunSourceMaterializationInput,
|
|
453
469
|
AbandonSourceMaterializationCandidateInput,
|
|
454
470
|
AbandonSourceMaterializationInput,
|
|
455
471
|
AdoptedSourceMaterialization,
|
|
456
472
|
AdoptSourceMaterializationInput,
|
|
457
|
-
|
|
473
|
+
AppliedMaterialization,
|
|
474
|
+
ApplyMaterializationInput,
|
|
458
475
|
ApplyMaterializationResult,
|
|
459
476
|
AssertSourceMaterializationExecution,
|
|
460
477
|
AssertSourceMaterializationExecutionInput,
|
|
@@ -469,16 +486,13 @@ export type {
|
|
|
469
486
|
ExactEffectiveLinkWrite,
|
|
470
487
|
ExactEffectiveObjectDelete,
|
|
471
488
|
ExactEffectiveObjectWrite,
|
|
472
|
-
ExactEffectiveWrites,
|
|
473
489
|
ExactLinkOverrideDelete,
|
|
474
490
|
ExactLinkOverrideWrite,
|
|
475
491
|
ExactLinkSlotOverrideDelete,
|
|
476
492
|
ExactLinkSlotOverrideWrite,
|
|
477
493
|
ExactObjectOverrideDelete,
|
|
478
494
|
ExactObjectOverrideWrite,
|
|
479
|
-
ExactOverrideWrites,
|
|
480
495
|
ExactTimeseriesPointWrite,
|
|
481
|
-
ExactTimeseriesWrites,
|
|
482
496
|
ExpectedSourceRevision,
|
|
483
497
|
ExpectedTimeseriesPointRevision,
|
|
484
498
|
FinalizeMaterializationInput,
|
|
@@ -501,7 +515,6 @@ export type {
|
|
|
501
515
|
MaterializationObjectExistence,
|
|
502
516
|
MaterializationObjectExistenceWorkRecord,
|
|
503
517
|
MaterializationObjectState,
|
|
504
|
-
MaterializationPlanChunk,
|
|
505
518
|
MaterializationPlanFinalization,
|
|
506
519
|
MaterializationPlanHeader,
|
|
507
520
|
MaterializationPlanWorkItem,
|
|
@@ -509,8 +522,9 @@ export type {
|
|
|
509
522
|
MaterializationSession,
|
|
510
523
|
MaterializationStatePage,
|
|
511
524
|
MaterializationStateRequestChunk,
|
|
525
|
+
MaterializationVectorChange,
|
|
526
|
+
MaterializationVectorChangePage,
|
|
512
527
|
MaterializationWorkEntityKind,
|
|
513
|
-
MaterializationWorkPage,
|
|
514
528
|
MaterializationWorkRecord,
|
|
515
529
|
ObjectVectorState,
|
|
516
530
|
OntologyCommitOriginSelector,
|
|
@@ -526,22 +540,28 @@ export type {
|
|
|
526
540
|
OntologyOutboxRecord,
|
|
527
541
|
OntologyOutboxStorage,
|
|
528
542
|
OntologyOutboxSummary,
|
|
529
|
-
|
|
543
|
+
OntologyReplacementPlanStorage,
|
|
530
544
|
OntologySourceMaterializationStatus,
|
|
531
545
|
OntologySourceRecord,
|
|
532
546
|
OntologySourceStorage,
|
|
533
547
|
OntologyStorage,
|
|
534
548
|
OntologyVectorStorage,
|
|
549
|
+
OpenedReplacementPlan,
|
|
550
|
+
OpenReplacementPlanInput,
|
|
551
|
+
PlannedReplacementIdentity,
|
|
535
552
|
ProjectionOntologyCommitIntent,
|
|
536
553
|
PurgeAbandonedSourceMaterializationsInput,
|
|
537
554
|
PurgePublishedOntologyOutboxInput,
|
|
538
|
-
|
|
555
|
+
PurgeReplacementPlansInput,
|
|
556
|
+
ReplacementPlanRef,
|
|
557
|
+
ReplacementPlanStatePage,
|
|
558
|
+
ReplacementPlanStatus,
|
|
539
559
|
RescheduleOntologyOutboxLeaseInput,
|
|
540
560
|
SourceActivationWrite,
|
|
541
561
|
SourceReplacementLinkState,
|
|
542
562
|
SourceReplacementObjectState,
|
|
543
|
-
SourceReplacementStatePage,
|
|
544
563
|
StageMaterializationWorkInput,
|
|
564
|
+
StageReplacementPlanInput,
|
|
545
565
|
StageSourceAssertion,
|
|
546
566
|
StageSourceRoot,
|
|
547
567
|
StageSourceRowsInput,
|
|
@@ -555,12 +575,10 @@ export type {
|
|
|
555
575
|
StoredSourceObjectAssertion,
|
|
556
576
|
StoredTelemetryPoint,
|
|
557
577
|
StreamMaterializationStateInput,
|
|
558
|
-
|
|
559
|
-
|
|
578
|
+
StreamMaterializationVectorChangesInput,
|
|
579
|
+
StreamReplacementPlanStateInput,
|
|
560
580
|
SummarizeOntologyOutboxInput,
|
|
561
|
-
SummarizeTerminalSourceMaterializationsInput,
|
|
562
581
|
TelemetryOntologyCommitIntent,
|
|
563
|
-
TerminalSourceMaterializationSummary,
|
|
564
582
|
} from "./ontology"
|
|
565
583
|
export { ONTOLOGY_OUTBOX_FAILURE_CODES } from "./ontology"
|
|
566
584
|
export type {
|
package/src/storage/internal.ts
CHANGED
|
@@ -9,6 +9,7 @@ export {
|
|
|
9
9
|
} from "./action-runs/idempotency"
|
|
10
10
|
export { assertAiUsageExecutionId, normalizeAiModelCallRecord } from "./ai-usage/record"
|
|
11
11
|
export { normalizeAiModelCallUsage } from "./ai-usage/usage"
|
|
12
|
+
export { parseFileDownloadGrantRow } from "./file-download-grants/record"
|
|
12
13
|
export { createFileUploadId, createUploadExpiresAt } from "./file-upload-sessions/utils"
|
|
13
14
|
export { canRequeuePipelineRunAfterEnqueueFailure } from "./pipeline-runs/idempotency"
|
|
14
15
|
export { projectionRunObjectTypesVisible, zeroProjectionRunProgress } from "./projection-runs/types"
|
|
@@ -1,24 +1,48 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isQueryPreparationCapableStorage,
|
|
3
|
+
type ObjectQueryPreparationResult,
|
|
4
|
+
prepareObjectQueries,
|
|
5
|
+
} from "../objects/query-preparation"
|
|
1
6
|
import type { Storage } from "../types"
|
|
2
|
-
import type {
|
|
7
|
+
import type {
|
|
8
|
+
MigrationCapableStorage,
|
|
9
|
+
MigrationReport,
|
|
10
|
+
StorageMigrationOptions,
|
|
11
|
+
StorageMigrationResult,
|
|
12
|
+
} from "./types"
|
|
3
13
|
|
|
4
14
|
export function isMigrationCapableStorage(storage: Storage): storage is MigrationCapableStorage {
|
|
5
15
|
return Array.isArray((storage as { migrators?: unknown }).migrators)
|
|
6
16
|
}
|
|
7
17
|
|
|
8
|
-
/**
|
|
9
|
-
export async function migrateStorage(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
/** Run schema migrations, then prepare query indexes when the provider supports it. */
|
|
19
|
+
export async function migrateStorage(
|
|
20
|
+
storage: Storage,
|
|
21
|
+
options?: StorageMigrationOptions
|
|
22
|
+
): Promise<StorageMigrationResult> {
|
|
14
23
|
const reports: MigrationReport[] = []
|
|
24
|
+
if (isMigrationCapableStorage(storage)) {
|
|
25
|
+
for (const migrator of storage.migrators) {
|
|
26
|
+
reports.push(await migrator.migrate())
|
|
27
|
+
}
|
|
28
|
+
}
|
|
15
29
|
|
|
16
|
-
|
|
17
|
-
|
|
30
|
+
let queries: ObjectQueryPreparationResult | undefined
|
|
31
|
+
if (options && isQueryPreparationCapableStorage(storage)) {
|
|
32
|
+
queries = await prepareObjectQueries({ ...options, storage })
|
|
33
|
+
for (const warning of queries.warnings) {
|
|
34
|
+
console.warn(`[Sixb] ${warning}`)
|
|
35
|
+
}
|
|
18
36
|
}
|
|
19
37
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
38
|
+
let status: StorageMigrationResult["status"] = "skipped"
|
|
39
|
+
if (reports.length > 0 || queries) {
|
|
40
|
+
status = "current"
|
|
23
41
|
}
|
|
42
|
+
if (reports.some((report) => report.status === "migrated") || queries?.status === "prepared") {
|
|
43
|
+
status = "migrated"
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (queries) return { status, reports, queries }
|
|
47
|
+
return { status, reports }
|
|
24
48
|
}
|