@sixb/core 0.1.7 → 0.1.8
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/delegated-admission.d.ts +24 -0
- package/dist/actions/delegated-admission.d.ts.map +1 -0
- package/dist/actions/descriptor.d.ts +29 -0
- package/dist/actions/descriptor.d.ts.map +1 -0
- package/dist/actions/execution.d.ts +5 -5
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +36 -30
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +20 -0
- package/dist/actions/run-authorization.d.ts.map +1 -0
- package/dist/actions/run-dispatch.d.ts +3 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -3
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +5 -122
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +1 -1
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/context.js +1 -1
- package/dist/agents/errors.d.ts +0 -9
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/identity.d.ts +3 -0
- package/dist/agents/identity.d.ts.map +1 -0
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +43 -43
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +4 -5
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +2 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/tool-definition.d.ts +0 -1
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +0 -4
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/ai-usage/execution.d.ts.map +1 -1
- package/dist/auth/index.js +8 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/decision.d.ts +10 -2
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -1
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +7 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/discovery.d.ts +7 -1
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +46 -39
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/chunk-19jp6g9d.js +131 -0
- package/dist/chunk-19jp6g9d.js.map +11 -0
- package/dist/{chunk-x0qhkqje.js → chunk-2dw777qw.js} +50 -5
- package/dist/{chunk-x0qhkqje.js.map → chunk-2dw777qw.js.map} +4 -3
- package/dist/chunk-359jm1jw.js +147 -0
- package/dist/chunk-359jm1jw.js.map +10 -0
- package/dist/{chunk-2b5qtban.js → chunk-3xep5cjx.js} +56 -21
- package/dist/chunk-3xep5cjx.js.map +15 -0
- package/dist/{chunk-qjycjdj6.js → chunk-3z1qec12.js} +6 -8
- package/dist/{chunk-qjycjdj6.js.map → chunk-3z1qec12.js.map} +2 -2
- package/dist/{chunk-5jcdmjam.js → chunk-4jjp5k14.js} +1 -1
- package/dist/{chunk-n2arzn6e.js → chunk-4qfkag59.js} +44 -221
- package/dist/chunk-4qfkag59.js.map +20 -0
- package/dist/{chunk-rre42skh.js → chunk-4sm0aznx.js} +515 -80
- package/dist/{chunk-rre42skh.js.map → chunk-4sm0aznx.js.map} +11 -7
- package/dist/chunk-4yqmp43v.js +159 -0
- package/dist/chunk-4yqmp43v.js.map +11 -0
- package/dist/{chunk-atmkaf60.js → chunk-5e3pq99w.js} +2 -6
- package/dist/{chunk-atmkaf60.js.map → chunk-5e3pq99w.js.map} +3 -3
- package/dist/{chunk-agsvg9ar.js → chunk-5ntny1qx.js} +1 -1
- package/dist/{chunk-z2sery1b.js → chunk-9nbmsvn5.js} +60 -20
- package/dist/chunk-9nbmsvn5.js.map +11 -0
- package/dist/{chunk-e4rvtvpw.js → chunk-aa2pen2v.js} +250 -78
- package/dist/chunk-aa2pen2v.js.map +34 -0
- package/dist/{chunk-64sr682n.js → chunk-ajnan18g.js} +11 -8
- package/dist/chunk-ajnan18g.js.map +12 -0
- package/dist/{chunk-9aehf39w.js → chunk-f26bck4t.js} +4 -4
- package/dist/{chunk-7ds9620f.js → chunk-fvt9rjsa.js} +23 -7
- package/dist/chunk-fvt9rjsa.js.map +10 -0
- package/dist/{chunk-kt81c11h.js → chunk-gbejpkex.js} +5 -5
- package/dist/{chunk-kt81c11h.js.map → chunk-gbejpkex.js.map} +1 -1
- package/dist/{chunk-vjjv9mrb.js → chunk-gzasd5b6.js} +5 -5
- package/dist/{chunk-vjjv9mrb.js.map → chunk-gzasd5b6.js.map} +3 -3
- package/dist/{chunk-d63tybny.js → chunk-h0k55pc7.js} +4 -4
- package/dist/{chunk-d63tybny.js.map → chunk-h0k55pc7.js.map} +1 -1
- package/dist/chunk-h5vqbfmd.js +1537 -0
- package/dist/chunk-h5vqbfmd.js.map +19 -0
- package/dist/{chunk-3kv70xwp.js → chunk-j1sbhm7p.js} +18 -2
- package/dist/chunk-j1sbhm7p.js.map +10 -0
- package/dist/{chunk-hdz94br2.js → chunk-k522z7v6.js} +10 -5
- package/dist/chunk-k522z7v6.js.map +10 -0
- package/dist/{chunk-wjgm6jjt.js → chunk-mth82m8t.js} +128 -94
- package/dist/chunk-mth82m8t.js.map +14 -0
- package/dist/{chunk-qv38twt8.js → chunk-mwsxn98e.js} +46 -25
- package/dist/{chunk-qv38twt8.js.map → chunk-mwsxn98e.js.map} +6 -6
- package/dist/chunk-n4khvw9n.js +111 -0
- package/dist/chunk-n4khvw9n.js.map +11 -0
- package/dist/{chunk-qjzp9xyb.js → chunk-nn0tekr1.js} +6 -8
- package/dist/chunk-nn0tekr1.js.map +12 -0
- package/dist/chunk-nx7k8tpr.js +436 -0
- package/dist/chunk-nx7k8tpr.js.map +12 -0
- package/dist/{chunk-08twe8m6.js → chunk-p1rzczbt.js} +1 -1
- package/dist/{chunk-37wk412q.js → chunk-p1x242ad.js} +587 -70
- package/dist/chunk-p1x242ad.js.map +25 -0
- package/dist/{chunk-tn7xcs2n.js → chunk-pc7ys28c.js} +68 -5
- package/dist/chunk-pc7ys28c.js.map +14 -0
- package/dist/{chunk-3fqt22c4.js → chunk-q0k9nc5a.js} +280 -88
- package/dist/chunk-q0k9nc5a.js.map +14 -0
- package/dist/chunk-r8jrnexe.js +403 -0
- package/dist/chunk-r8jrnexe.js.map +10 -0
- package/dist/{chunk-gbrpsx4m.js → chunk-rafagrwr.js} +30 -2
- package/dist/chunk-rafagrwr.js.map +11 -0
- package/dist/{chunk-xdpwpkha.js → chunk-rv2hkwwa.js} +1 -1
- package/dist/{chunk-6ed5bwnd.js → chunk-sbzzr4kx.js} +1203 -691
- package/dist/{chunk-6ed5bwnd.js.map → chunk-sbzzr4kx.js.map} +15 -9
- package/dist/{chunk-d2ndstdf.js → chunk-v1xppd0y.js} +13 -11
- package/dist/{chunk-d2ndstdf.js.map → chunk-v1xppd0y.js.map} +2 -2
- package/dist/chunk-v4en4jc2.js +252 -0
- package/dist/chunk-v4en4jc2.js.map +10 -0
- package/dist/{chunk-1kamz6j0.js → chunk-w1tvjszy.js} +1 -1
- package/dist/{chunk-rp1mvzb4.js → chunk-w9tg6yyb.js} +11 -6
- package/dist/{chunk-rp1mvzb4.js.map → chunk-w9tg6yyb.js.map} +3 -3
- package/dist/{chunk-4nxeacx7.js → chunk-wdage1eb.js} +1 -1
- package/dist/{chunk-ha58tjtt.js → chunk-wtf06et8.js} +9 -5
- package/dist/{chunk-ha58tjtt.js.map → chunk-wtf06et8.js.map} +3 -3
- package/dist/{chunk-h0knpbz5.js → chunk-xajtptbw.js} +782 -211
- package/dist/chunk-xajtptbw.js.map +40 -0
- package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
- package/dist/chunk-yp8ee62z.js.map +11 -0
- package/dist/chunk-z4ccwbkz.js +139 -0
- package/dist/chunk-z4ccwbkz.js.map +10 -0
- package/dist/datasets/builders.d.ts +11 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/changes.d.ts +14 -4
- package/dist/datasets/changes.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +15 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -0
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/sequence.d.ts +7 -0
- package/dist/datasets/sequence.d.ts.map +1 -0
- package/dist/datasets/types.d.ts +1 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +37 -0
- package/dist/datasets/write.d.ts.map +1 -0
- package/dist/datasets/write.js +17 -0
- package/dist/datasets/write.js.map +9 -0
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/datasets.d.ts +2 -6
- package/dist/events/types/datasets.d.ts.map +1 -1
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -32
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +58 -20
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +69 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/primitive.js +39 -32
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +11 -0
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +76 -40
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/scopes.d.ts +16 -0
- package/dist/execution/scopes.d.ts.map +1 -1
- package/dist/execution/types.d.ts +9 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts +2 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -78
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/definition-updates.d.ts.map +1 -1
- package/dist/lake-storage/errors.d.ts +5 -1
- package/dist/lake-storage/errors.d.ts.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +1 -0
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +6 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +24 -7
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/merge-validation.d.ts.map +1 -1
- package/dist/lake-storage/merge.d.ts +13 -2
- package/dist/lake-storage/merge.d.ts.map +1 -1
- package/dist/lake-storage/source-ordering.d.ts +19 -0
- package/dist/lake-storage/source-ordering.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +2 -1
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +10 -5
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +4 -0
- package/dist/lake-storage/version-inputs.d.ts.map +1 -0
- package/dist/materializer/index.js +25 -22
- package/dist/materializer/index.js.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts +25 -0
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +1 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -26
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +2 -7
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +4 -2
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +24 -21
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/links.d.ts +22 -1
- package/dist/objects/query/links.d.ts.map +1 -1
- package/dist/objects/query/selected-read-admission.d.ts +27 -0
- package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +60 -2
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/service/list-service.d.ts +2 -3
- package/dist/objects/service/list-service.d.ts.map +1 -1
- package/dist/objects/telemetry/history.d.ts +8 -6
- package/dist/objects/telemetry/history.d.ts.map +1 -1
- package/dist/objects/telemetry/index.d.ts +2 -2
- package/dist/objects/telemetry/index.d.ts.map +1 -1
- package/dist/objects/telemetry/workload.d.ts +11 -0
- package/dist/objects/telemetry/workload.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +13 -12
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +2 -1
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +0 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +5 -10
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts +10 -6
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/link-path-selection.d.ts +35 -0
- package/dist/ontology/link-path-selection.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +2 -0
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +2 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/pipelines/execution.d.ts.map +1 -1
- package/dist/pipelines/index.js +27 -24
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/request.d.ts.map +1 -1
- package/dist/projections/execution.d.ts.map +1 -1
- package/dist/projections/internal.js +25 -22
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +2 -0
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -0
- package/dist/runtime/host.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/resolve-definitions.d.ts +2 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +4 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +3 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schedules/execution.d.ts +2 -1
- package/dist/schedules/execution.d.ts.map +1 -1
- package/dist/security/every.d.ts +4 -1
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +7 -2
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +1 -0
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +7 -1
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +2 -0
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/access-plan.d.ts +22 -0
- package/dist/shares/access-plan.d.ts.map +1 -0
- package/dist/shares/builders.d.ts +14 -0
- package/dist/shares/builders.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts +14 -0
- package/dist/shares/compiler.d.ts.map +1 -0
- package/dist/shares/errors.d.ts +4 -0
- package/dist/shares/errors.d.ts.map +1 -0
- package/dist/shares/execution.d.ts +57 -0
- package/dist/shares/execution.d.ts.map +1 -0
- package/dist/shares/index.d.ts +10 -0
- package/dist/shares/index.d.ts.map +1 -0
- package/dist/shares/internal.d.ts +3 -0
- package/dist/shares/internal.d.ts.map +1 -0
- package/dist/shares/internal.js +239 -0
- package/dist/shares/internal.js.map +10 -0
- package/dist/shares/intersection.d.ts +9 -0
- package/dist/shares/intersection.d.ts.map +1 -0
- package/dist/shares/session-protocol.d.ts +41 -0
- package/dist/shares/session-protocol.d.ts.map +1 -0
- package/dist/shares/types.d.ts +51 -0
- package/dist/shares/types.d.ts.map +1 -0
- package/dist/shares/validation.d.ts +11 -0
- package/dist/shares/validation.d.ts.map +1 -0
- package/dist/storage/action-runs/provider.js +2 -2
- package/dist/storage/agents/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +3 -0
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +4 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +23 -3
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/run-link.d.ts +7 -0
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +6 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +8 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +8 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +65 -36
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +25 -0
- package/dist/storage/objects/execution-limits.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +16 -0
- package/dist/storage/objects/guard.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/index.d.ts +3 -0
- package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/keys.d.ts +10 -0
- package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts +31 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
- package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
- package/dist/storage/objects/index.d.ts +4 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +1 -1
- package/dist/storage/objects/keys.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +25 -0
- package/dist/storage/objects/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +114 -22
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts +3 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +4 -2
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/share-grants/errors.d.ts +8 -0
- package/dist/storage/share-grants/errors.d.ts.map +1 -0
- package/dist/storage/share-grants/in-memory.d.ts +11 -0
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/share-grants/index.d.ts +5 -0
- package/dist/storage/share-grants/index.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.d.ts +4 -0
- package/dist/storage/share-grants/provider.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.js +24 -0
- package/dist/storage/share-grants/provider.js.map +9 -0
- package/dist/storage/share-grants/record.d.ts +11 -0
- package/dist/storage/share-grants/record.d.ts.map +1 -0
- package/dist/storage/share-grants/types.d.ts +97 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -0
- package/dist/storage/share-sessions/errors.d.ts +8 -0
- package/dist/storage/share-sessions/errors.d.ts.map +1 -0
- package/dist/storage/share-sessions/in-memory.d.ts +14 -0
- package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
- package/dist/storage/share-sessions/index.d.ts +5 -0
- package/dist/storage/share-sessions/index.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.d.ts +3 -0
- package/dist/storage/share-sessions/provider.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.js +20 -0
- package/dist/storage/share-sessions/provider.js.map +9 -0
- package/dist/storage/share-sessions/record.d.ts +8 -0
- package/dist/storage/share-sessions/record.d.ts.map +1 -0
- package/dist/storage/share-sessions/types.d.ts +50 -0
- package/dist/storage/share-sessions/types.d.ts.map +1 -0
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/transaction.d.ts +2 -1
- package/dist/storage/transaction.d.ts.map +1 -1
- package/dist/storage/types.d.ts +8 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.js +2 -2
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/execution.d.ts.map +1 -1
- package/dist/syncs/index.js +27 -24
- package/dist/syncs/index.js.map +1 -1
- package/dist/syncs/request.d.ts.map +1 -1
- package/dist/testing/dataset-sequence-contract.d.ts +4 -0
- package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts +4 -0
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2555 -908
- package/dist/testing/index.js.map +11 -7
- package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts +22 -0
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/share-grant-storage-contract.d.ts +10 -0
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/share-session-storage-contract.d.ts +9 -0
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +24 -21
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/index.js +42 -35
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/package.json +25 -1
- package/src/actions/delegated-admission.ts +72 -0
- package/src/actions/descriptor.ts +58 -0
- package/src/actions/execution.ts +99 -24
- package/src/actions/request.ts +136 -19
- package/src/actions/run-authorization.ts +53 -0
- package/src/actions/run-dispatch.ts +8 -1
- package/src/agents/adapters.ts +30 -420
- package/src/agents/authority.ts +3 -4
- package/src/agents/context-resolution.ts +1 -4
- package/src/agents/errors.ts +0 -10
- package/src/agents/execution.ts +13 -5
- package/src/agents/identity.ts +4 -0
- package/src/agents/index.ts +1 -20
- package/src/agents/message.ts +4 -5
- package/src/agents/model-loop.ts +54 -6
- package/src/agents/request.ts +16 -3
- package/src/agents/tool-definition.ts +0 -19
- package/src/agents/validation.ts +6 -65
- package/src/ai-usage/execution.ts +4 -11
- package/src/authorization/decision.ts +29 -14
- package/src/authorization/grant-kinds.ts +10 -0
- package/src/authorization/index.ts +1 -0
- package/src/bootstrap/discovery.ts +3 -0
- package/src/bootstrap/ontology-type-manifest.ts +12 -6
- package/src/datasets/builders.ts +23 -2
- package/src/datasets/changes.ts +16 -4
- package/src/datasets/execution.ts +76 -5
- package/src/datasets/index.ts +1 -0
- package/src/datasets/sequence.ts +77 -0
- package/src/datasets/types.ts +1 -0
- package/src/datasets/validation.ts +26 -0
- package/src/datasets/write.ts +240 -0
- package/src/events/execution.ts +57 -7
- package/src/events/types/datasets.ts +2 -6
- package/src/execution/agent.ts +1 -4
- package/src/execution/authorization.ts +470 -90
- package/src/execution/authorized-object-reader.ts +695 -0
- package/src/execution/durable.ts +10 -2
- package/src/execution/index.ts +1 -0
- package/src/execution/request.ts +63 -13
- package/src/execution/scopes.ts +36 -6
- package/src/execution/types.ts +8 -0
- package/src/http/api-routes.ts +45 -0
- package/src/index.ts +36 -15
- package/src/lake-storage/definition-updates.ts +9 -0
- package/src/lake-storage/errors.ts +6 -1
- package/src/lake-storage/in-memory.ts +53 -17
- package/src/lake-storage/index.ts +10 -1
- package/src/lake-storage/merge-validation.ts +12 -2
- package/src/lake-storage/merge.ts +40 -2
- package/src/lake-storage/source-ordering.ts +95 -0
- package/src/lake-storage/sql-transforms.ts +2 -1
- package/src/lake-storage/types.ts +10 -5
- package/src/lake-storage/version-inputs.ts +14 -0
- package/src/objects/authorized-ontology-view.ts +512 -0
- package/src/objects/execution.ts +98 -143
- package/src/objects/link/authorization.ts +3 -2
- package/src/objects/query/executor.ts +45 -34
- package/src/objects/query/links.ts +84 -25
- package/src/objects/query/selected-read-admission.ts +310 -0
- package/src/objects/query/validate.ts +353 -36
- package/src/objects/sdk/object-handle.ts +2 -8
- package/src/objects/sdk/object-set.ts +10 -11
- package/src/objects/sdk/runtime-query-executor.ts +8 -28
- package/src/objects/sdk/telemetry-channel.ts +11 -7
- package/src/objects/service/list-service.ts +15 -29
- package/src/objects/telemetry/history.ts +297 -17
- package/src/objects/telemetry/index.ts +2 -2
- package/src/objects/telemetry/workload.ts +79 -0
- package/src/ontology/index.ts +7 -1
- package/src/ontology/inference/index.ts +4 -1
- package/src/ontology/internal.ts +0 -1
- package/src/ontology/json-schema.ts +13 -12
- package/src/ontology/link-path-selection.ts +193 -0
- package/src/ontology/refs.ts +19 -0
- package/src/ontology/tokens.ts +15 -8
- package/src/pipelines/execution.ts +30 -7
- package/src/pipelines/request.ts +5 -0
- package/src/projections/execution.ts +72 -11
- package/src/projections/run-dispatch.ts +6 -12
- package/src/rules/execution.ts +20 -8
- package/src/runtime/create.ts +5 -1
- package/src/runtime/definitions.ts +2 -0
- package/src/runtime/host.ts +25 -6
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/resolve-definitions.ts +9 -0
- package/src/runtime/sixb.ts +23 -2
- package/src/runtime/types.ts +3 -0
- package/src/schedules/execution.ts +24 -2
- package/src/security/every.ts +4 -0
- package/src/security/grants.ts +45 -3
- package/src/security/index.ts +1 -0
- package/src/security/registry.ts +3 -0
- package/src/security/types.ts +8 -0
- package/src/security/validation.ts +3 -0
- package/src/shares/access-plan.ts +225 -0
- package/src/shares/builders.ts +381 -0
- package/src/shares/compiler.ts +359 -0
- package/src/shares/errors.ts +3 -0
- package/src/shares/execution.ts +394 -0
- package/src/shares/index.ts +28 -0
- package/src/shares/internal.ts +9 -0
- package/src/shares/intersection.ts +178 -0
- package/src/shares/session-protocol.ts +258 -0
- package/src/shares/types.ts +76 -0
- package/src/shares/validation.ts +40 -0
- package/src/storage/executions/in-memory.ts +9 -1
- package/src/storage/executions/provider.ts +30 -1
- package/src/storage/executions/run-link.ts +29 -0
- package/src/storage/executions/validation.ts +46 -1
- package/src/storage/in-memory/index.ts +21 -2
- package/src/storage/index.ts +51 -0
- package/src/storage/objects/execution-limits.ts +283 -0
- package/src/storage/objects/guard.ts +55 -0
- package/src/storage/objects/in-memory/index.ts +2 -0
- package/src/storage/objects/in-memory/keys.ts +46 -0
- package/src/storage/objects/in-memory/query.ts +754 -0
- package/src/storage/objects/in-memory/read-scope.ts +211 -0
- package/src/storage/objects/in-memory/read-source.ts +10 -0
- package/src/storage/objects/in-memory/selected-reader.ts +252 -0
- package/src/storage/objects/in-memory/storage.ts +589 -0
- package/src/storage/objects/index.ts +21 -0
- package/src/storage/objects/keys.ts +1 -1
- package/src/storage/objects/read-scope.ts +672 -0
- package/src/storage/objects/types.ts +123 -19
- package/src/storage/operation-scope.ts +16 -0
- package/src/storage/share-grants/errors.ts +14 -0
- package/src/storage/share-grants/in-memory.ts +107 -0
- package/src/storage/share-grants/index.ts +14 -0
- package/src/storage/share-grants/provider.ts +11 -0
- package/src/storage/share-grants/record.ts +347 -0
- package/src/storage/share-grants/types.ts +112 -0
- package/src/storage/share-sessions/errors.ts +14 -0
- package/src/storage/share-sessions/in-memory.ts +105 -0
- package/src/storage/share-sessions/index.ts +11 -0
- package/src/storage/share-sessions/provider.ts +9 -0
- package/src/storage/share-sessions/record.ts +176 -0
- package/src/storage/share-sessions/types.ts +57 -0
- package/src/storage/transaction.ts +14 -2
- package/src/storage/types.ts +27 -0
- package/src/syncs/execution.ts +25 -5
- package/src/syncs/request.ts +5 -0
- package/src/testing/dataset-sequence-contract.ts +373 -0
- package/src/testing/effective-storage-contract.ts +34 -0
- package/src/testing/execution-storage-contract.ts +79 -0
- package/src/testing/index.ts +16 -0
- package/src/testing/lake-merge-storage-contract.ts +3 -0
- package/src/testing/lake-storage-contract.ts +58 -0
- package/src/testing/object-read-scope-contract.ts +939 -0
- package/src/testing/share-grant-storage-contract.ts +325 -0
- package/src/testing/share-session-storage-contract.ts +235 -0
- package/src/workflows/execution.ts +53 -14
- package/src/workflows/request.ts +5 -0
- package/dist/chunk-2b5qtban.js.map +0 -14
- package/dist/chunk-37wk412q.js.map +0 -23
- package/dist/chunk-3fqt22c4.js.map +0 -14
- package/dist/chunk-3kv70xwp.js.map +0 -10
- package/dist/chunk-64sr682n.js.map +0 -12
- package/dist/chunk-7ds9620f.js.map +0 -10
- package/dist/chunk-dqn23610.js +0 -72
- package/dist/chunk-dqn23610.js.map +0 -11
- package/dist/chunk-e4rvtvpw.js.map +0 -34
- package/dist/chunk-gbrpsx4m.js.map +0 -11
- package/dist/chunk-h0knpbz5.js.map +0 -38
- package/dist/chunk-hdz94br2.js.map +0 -10
- package/dist/chunk-n2arzn6e.js.map +0 -20
- package/dist/chunk-qjzp9xyb.js.map +0 -12
- package/dist/chunk-tn7xcs2n.js.map +0 -13
- package/dist/chunk-wjgm6jjt.js.map +0 -13
- package/dist/chunk-xc7hq65b.js.map +0 -10
- package/dist/chunk-y35ma3mj.js +0 -551
- package/dist/chunk-y35ma3mj.js.map +0 -15
- package/dist/chunk-z2sery1b.js.map +0 -11
- package/dist/storage/objects/in-memory.d.ts.map +0 -1
- package/src/storage/objects/in-memory.ts +0 -1241
- /package/dist/{chunk-5jcdmjam.js.map → chunk-4jjp5k14.js.map} +0 -0
- /package/dist/{chunk-agsvg9ar.js.map → chunk-5ntny1qx.js.map} +0 -0
- /package/dist/{chunk-9aehf39w.js.map → chunk-f26bck4t.js.map} +0 -0
- /package/dist/{chunk-08twe8m6.js.map → chunk-p1rzczbt.js.map} +0 -0
- /package/dist/{chunk-xdpwpkha.js.map → chunk-rv2hkwwa.js.map} +0 -0
- /package/dist/{chunk-1kamz6j0.js.map → chunk-w1tvjszy.js.map} +0 -0
- /package/dist/{chunk-4nxeacx7.js.map → chunk-wdage1eb.js.map} +0 -0
|
@@ -2,19 +2,26 @@ import { randomUUID } from "node:crypto"
|
|
|
2
2
|
import type { DatasetDefinition, DatasetSchema, MergeChange } from "../datasets"
|
|
3
3
|
import { getDatasetRowValidationError } from "../datasets/validation"
|
|
4
4
|
import { mergeStrictDatasetDefinition } from "./definition-updates"
|
|
5
|
-
import { LakeStorageError } from "./errors"
|
|
5
|
+
import { LakeConcurrencyError, LakeStorageError } from "./errors"
|
|
6
6
|
import type {
|
|
7
7
|
BeginDatasetMergeInput,
|
|
8
8
|
CommitDatasetMergeInput,
|
|
9
9
|
DatasetMergeCommitResult,
|
|
10
10
|
LakeMergeSession,
|
|
11
11
|
} from "./merge"
|
|
12
|
+
import { retryDatasetMergeCommit } from "./merge"
|
|
12
13
|
import {
|
|
13
14
|
cloneDatasetMergeChange,
|
|
14
15
|
encodeDatasetPrimaryKey,
|
|
15
16
|
getDatasetMergeChangeValidationError,
|
|
16
17
|
getDatasetPrimaryKeyColumns,
|
|
17
18
|
} from "./merge-validation"
|
|
19
|
+
import {
|
|
20
|
+
assertUnsequencedDatasetWrite,
|
|
21
|
+
type DatasetSequenceState,
|
|
22
|
+
datasetSequenceChange,
|
|
23
|
+
reconcileDatasetSequences,
|
|
24
|
+
} from "./source-ordering"
|
|
18
25
|
import type {
|
|
19
26
|
BeginDatasetWriteInput,
|
|
20
27
|
CommitDatasetWriteInput,
|
|
@@ -27,6 +34,7 @@ import type {
|
|
|
27
34
|
LakeWriteSession,
|
|
28
35
|
ReadDatasetRowsInput,
|
|
29
36
|
} from "./types"
|
|
37
|
+
import { hasDatasetInputChanges } from "./version-inputs"
|
|
30
38
|
|
|
31
39
|
function cloneDatasetDefinition(definition: DatasetDefinition): DatasetDefinition {
|
|
32
40
|
return structuredClone(definition)
|
|
@@ -177,12 +185,16 @@ class InMemoryLakeMergeSession implements LakeMergeSession {
|
|
|
177
185
|
async commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult> {
|
|
178
186
|
this.assertOpen()
|
|
179
187
|
this.closed = true
|
|
180
|
-
return this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
return retryDatasetMergeCommit(this.input, input, async (rebase) =>
|
|
189
|
+
this.storage.commitMerge({
|
|
190
|
+
merge: this.input,
|
|
191
|
+
baseVersionId: rebase
|
|
192
|
+
? ((await this.storage.getLatestVersion(this.input.dataset.id))?.versionId ?? null)
|
|
193
|
+
: this.baseVersionId,
|
|
194
|
+
changes: this.changes,
|
|
195
|
+
commit: input,
|
|
196
|
+
})
|
|
197
|
+
)
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
async abort(): Promise<void> {
|
|
@@ -201,6 +213,7 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
201
213
|
private readonly datasets = new Map<string, DatasetDefinition>()
|
|
202
214
|
private readonly versionsByDataset = new Map<string, DatasetVersion[]>()
|
|
203
215
|
private readonly rowsByVersionId = new Map<string, readonly DatasetRow[]>()
|
|
216
|
+
private readonly sequencesByVersionId = new Map<string, Map<string, DatasetSequenceState>>()
|
|
204
217
|
private readonly latestVersionIdByDataset = new Map<string, string>()
|
|
205
218
|
private readonly commitLocks = new Map<string, Promise<void>>()
|
|
206
219
|
|
|
@@ -295,6 +308,7 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
295
308
|
throw new LakeStorageError(`[LakeStorage] Unknown dataset '${input.dataset.id}'`)
|
|
296
309
|
}
|
|
297
310
|
|
|
311
|
+
assertUnsequencedDatasetWrite(definition)
|
|
298
312
|
return new InMemoryLakeWriteSession(this, {
|
|
299
313
|
...input,
|
|
300
314
|
dataset: definition,
|
|
@@ -318,7 +332,7 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
318
332
|
input.expectedLatestVersionId !== undefined &&
|
|
319
333
|
latestVersion?.versionId !== input.expectedLatestVersionId
|
|
320
334
|
) {
|
|
321
|
-
throw new
|
|
335
|
+
throw new LakeConcurrencyError(
|
|
322
336
|
`[LakeStorage] Optimistic merge start failed for dataset '${definition.id}': expected latest version '${input.expectedLatestVersionId}', found '${latestVersion?.versionId ?? "none"}'`
|
|
323
337
|
)
|
|
324
338
|
}
|
|
@@ -398,9 +412,10 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
398
412
|
}
|
|
399
413
|
|
|
400
414
|
const latestVersion = await this.getLatestVersion(options.merge.dataset.id)
|
|
415
|
+
options.commit?.signal?.throwIfAborted()
|
|
401
416
|
const actualVersionId = latestVersion?.versionId ?? null
|
|
402
417
|
if (actualVersionId !== options.baseVersionId) {
|
|
403
|
-
throw new
|
|
418
|
+
throw new LakeConcurrencyError(
|
|
404
419
|
`[LakeStorage] Optimistic merge commit failed for dataset '${options.merge.dataset.id}': expected latest version '${options.baseVersionId ?? "none"}', found '${actualVersionId ?? "none"}'`
|
|
405
420
|
)
|
|
406
421
|
}
|
|
@@ -408,9 +423,21 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
408
423
|
const previousRows = this.rowsByVersionId.get(latestVersion?.versionId ?? "") ?? []
|
|
409
424
|
const previousByKey = this.rowsByPrimaryKey(previousRows, definition)
|
|
410
425
|
const finalChanges = new Map<string, MergeChange<DatasetRow, DatasetRow>>()
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
426
|
+
const ordered =
|
|
427
|
+
definition.sequenceBy === undefined
|
|
428
|
+
? undefined
|
|
429
|
+
: reconcileDatasetSequences(
|
|
430
|
+
definition,
|
|
431
|
+
this.sequencesByVersionId.get(actualVersionId ?? "") ?? new Map(),
|
|
432
|
+
options.changes.map((change) => datasetSequenceChange(definition, change))
|
|
433
|
+
)
|
|
434
|
+
if (ordered) {
|
|
435
|
+
for (const [key, index] of ordered.accepted) finalChanges.set(key, options.changes[index]!)
|
|
436
|
+
} else {
|
|
437
|
+
for (const change of options.changes) {
|
|
438
|
+
const value = change.kind === "upsert" ? change.row : change.key
|
|
439
|
+
finalChanges.set(encodeDatasetPrimaryKey(definition, value), change)
|
|
440
|
+
}
|
|
414
441
|
}
|
|
415
442
|
|
|
416
443
|
const nextByKey = new Map(previousByKey)
|
|
@@ -422,7 +449,13 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
422
449
|
}
|
|
423
450
|
}
|
|
424
451
|
|
|
425
|
-
|
|
452
|
+
const createInitialVersion = options.commit?.createInitialVersion && latestVersion === null
|
|
453
|
+
if (
|
|
454
|
+
!createInitialVersion &&
|
|
455
|
+
(ordered
|
|
456
|
+
? ordered.accepted.size === 0
|
|
457
|
+
: this.sameKeyedRowContent(previousByKey, nextByKey, definition.schema))
|
|
458
|
+
) {
|
|
426
459
|
return {
|
|
427
460
|
outcome: "unchanged",
|
|
428
461
|
version: latestVersion ? cloneDatasetVersion(latestVersion) : null,
|
|
@@ -454,6 +487,7 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
454
487
|
visibleRows.map((row) => cloneRow(row))
|
|
455
488
|
)
|
|
456
489
|
this.latestVersionIdByDataset.set(options.merge.dataset.id, versionId)
|
|
490
|
+
if (ordered) this.sequencesByVersionId.set(versionId, ordered.states)
|
|
457
491
|
|
|
458
492
|
return { outcome: "created", version: cloneDatasetVersion(version) }
|
|
459
493
|
})
|
|
@@ -470,13 +504,14 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
470
504
|
}
|
|
471
505
|
|
|
472
506
|
const mode = options.write.mode ?? "snapshot"
|
|
507
|
+
assertUnsequencedDatasetWrite(definition)
|
|
473
508
|
const latestVersion = await this.getLatestVersion(options.write.dataset.id)
|
|
474
509
|
|
|
475
510
|
if (options.commit?.expectedLatestVersionId !== undefined) {
|
|
476
|
-
const actual = latestVersion?.versionId
|
|
511
|
+
const actual = latestVersion?.versionId ?? null
|
|
477
512
|
if (actual !== options.commit.expectedLatestVersionId) {
|
|
478
|
-
throw new
|
|
479
|
-
`[LakeStorage] Optimistic commit failed for dataset '${options.write.dataset.id}': expected latest version '${options.commit.expectedLatestVersionId}', found '${actual ?? "none"}'`
|
|
513
|
+
throw new LakeConcurrencyError(
|
|
514
|
+
`[LakeStorage] Optimistic commit failed for dataset '${options.write.dataset.id}': expected latest version '${options.commit.expectedLatestVersionId ?? "none"}', found '${actual ?? "none"}'`
|
|
480
515
|
)
|
|
481
516
|
}
|
|
482
517
|
}
|
|
@@ -484,9 +519,10 @@ export class InMemoryLakeStorage implements LakeStorage {
|
|
|
484
519
|
this.assertKeyedWriteIsUnique(mode, options.rows, latestVersion, definition)
|
|
485
520
|
|
|
486
521
|
// Content-identical snapshots and empty appends reuse the latest version
|
|
487
|
-
//
|
|
522
|
+
// unless explicitly supplied input lineage has changed.
|
|
488
523
|
if (
|
|
489
524
|
latestVersion &&
|
|
525
|
+
!hasDatasetInputChanges(latestVersion.inputs, options.write.inputs) &&
|
|
490
526
|
this.isUnchangedWrite(mode, latestVersion, options.rows, definition.schema)
|
|
491
527
|
) {
|
|
492
528
|
return { ...latestVersion, outcome: "unchanged" }
|
|
@@ -6,6 +6,7 @@ export type {
|
|
|
6
6
|
DatasetSchema,
|
|
7
7
|
MergeChange,
|
|
8
8
|
} from "../datasets"
|
|
9
|
+
export { assertDatasetDefinition } from "../datasets/validation"
|
|
9
10
|
export type { JsonValue } from "../json"
|
|
10
11
|
export type {
|
|
11
12
|
DatasetDefinitionUpdatePlan,
|
|
@@ -17,7 +18,7 @@ export {
|
|
|
17
18
|
mergeStrictDatasetDefinition,
|
|
18
19
|
planDatasetDefinitionUpdate,
|
|
19
20
|
} from "./definition-updates"
|
|
20
|
-
export { LakeStorageError } from "./errors"
|
|
21
|
+
export { LakeConcurrencyError, LakeStorageError } from "./errors"
|
|
21
22
|
export { InMemoryLakeStorage } from "./in-memory"
|
|
22
23
|
export type {
|
|
23
24
|
BeginDatasetMergeInput,
|
|
@@ -25,12 +26,19 @@ export type {
|
|
|
25
26
|
DatasetMergeCommitResult,
|
|
26
27
|
LakeMergeSession,
|
|
27
28
|
} from "./merge"
|
|
29
|
+
export { retryDatasetMergeCommit } from "./merge"
|
|
28
30
|
export {
|
|
29
31
|
cloneDatasetMergeChange,
|
|
30
32
|
encodeDatasetPrimaryKey,
|
|
31
33
|
getDatasetMergeChangeValidationError,
|
|
32
34
|
getDatasetPrimaryKeyColumns,
|
|
33
35
|
} from "./merge-validation"
|
|
36
|
+
export type { DatasetSequenceChange, DatasetSequenceState } from "./source-ordering"
|
|
37
|
+
export {
|
|
38
|
+
assertUnsequencedDatasetWrite,
|
|
39
|
+
datasetSequenceChange,
|
|
40
|
+
reconcileDatasetSequences,
|
|
41
|
+
} from "./source-ordering"
|
|
34
42
|
export type {
|
|
35
43
|
ExecuteSqlTransformInput,
|
|
36
44
|
LakeSqlExecutor,
|
|
@@ -60,3 +68,4 @@ export type {
|
|
|
60
68
|
LakeWriteSession,
|
|
61
69
|
ReadDatasetRowsInput,
|
|
62
70
|
} from "./types"
|
|
71
|
+
export { hasDatasetInputChanges } from "./version-inputs"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DatasetDefinition, MergeChange } from "../datasets"
|
|
2
2
|
import { getDatasetRowValidationError } from "../datasets"
|
|
3
|
+
import { getDatasetSequenceValidationError } from "../datasets/sequence"
|
|
3
4
|
import { isPlainRecord } from "../json"
|
|
4
5
|
import { LakeStorageError } from "./errors"
|
|
5
6
|
import type { DatasetRow } from "./types"
|
|
@@ -58,7 +59,11 @@ export function getDatasetMergeChangeValidationError(
|
|
|
58
59
|
if (shapeError) {
|
|
59
60
|
return shapeError
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
+
const keyError = getDeleteKeyValidationError(change.key, dataset, primaryKeyColumns)
|
|
63
|
+
if (keyError) return keyError
|
|
64
|
+
return dataset.sequenceBy === undefined
|
|
65
|
+
? null
|
|
66
|
+
: getDatasetSequenceValidationError(dataset, change.sequence)
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
return `Dataset '${dataset.id}' merge change kind must be 'upsert' or 'delete'.`
|
|
@@ -70,7 +75,11 @@ export function cloneDatasetMergeChange(
|
|
|
70
75
|
): MergeChange<DatasetRow, DatasetRow> {
|
|
71
76
|
return change.kind === "upsert"
|
|
72
77
|
? { kind: "upsert", row: structuredClone(change.row) }
|
|
73
|
-
: {
|
|
78
|
+
: {
|
|
79
|
+
kind: "delete",
|
|
80
|
+
key: structuredClone(change.key),
|
|
81
|
+
...(change.sequence !== undefined ? { sequence: structuredClone(change.sequence) } : {}),
|
|
82
|
+
}
|
|
74
83
|
}
|
|
75
84
|
|
|
76
85
|
function getChangeShapeError(
|
|
@@ -79,6 +88,7 @@ function getChangeShapeError(
|
|
|
79
88
|
payloadField: "row" | "key"
|
|
80
89
|
): string | null {
|
|
81
90
|
const allowedFields = new Set(["kind", payloadField])
|
|
91
|
+
if (payloadField === "key" && dataset.sequenceBy !== undefined) allowedFields.add("sequence")
|
|
82
92
|
for (const field of Object.keys(change)) {
|
|
83
93
|
if (!allowedFields.has(field)) {
|
|
84
94
|
return `Dataset '${dataset.id}' ${change.kind as string} change contains unknown field '${field}'.`
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DatasetDefinition, MergeChange } from "../datasets"
|
|
2
|
+
import { LakeConcurrencyError } from "./errors"
|
|
2
3
|
import type { DatasetProducer, DatasetRow, DatasetVersion, DatasetVersionRef } from "./types"
|
|
3
4
|
|
|
4
5
|
export interface BeginDatasetMergeInput {
|
|
@@ -12,6 +13,40 @@ export interface BeginDatasetMergeInput {
|
|
|
12
13
|
|
|
13
14
|
export interface CommitDatasetMergeInput {
|
|
14
15
|
readonly commitMessage?: string
|
|
16
|
+
/** Create an addressable first version even without changes; reuse an existing version on no-op. */
|
|
17
|
+
readonly createInitialVersion?: boolean
|
|
18
|
+
/** Retry sequenced merges up to three times total; ignored when an explicit version guard is set. */
|
|
19
|
+
readonly retryOnConflict?: boolean
|
|
20
|
+
/** Checked before each attempt; a durable commit is never cancelled retroactively. */
|
|
21
|
+
readonly signal?: AbortSignal
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Providers retain their staging session throughout this bounded commit loop. */
|
|
25
|
+
export async function retryDatasetMergeCommit(
|
|
26
|
+
merge: BeginDatasetMergeInput,
|
|
27
|
+
commit: CommitDatasetMergeInput | undefined,
|
|
28
|
+
run: (rebase: boolean) => Promise<DatasetMergeCommitResult>
|
|
29
|
+
): Promise<DatasetMergeCommitResult> {
|
|
30
|
+
const attempts =
|
|
31
|
+
commit?.retryOnConflict &&
|
|
32
|
+
merge.dataset.sequenceBy !== undefined &&
|
|
33
|
+
merge.expectedLatestVersionId === undefined
|
|
34
|
+
? 3
|
|
35
|
+
: 1
|
|
36
|
+
for (let attempt = 0; ; attempt += 1) {
|
|
37
|
+
commit?.signal?.throwIfAborted()
|
|
38
|
+
try {
|
|
39
|
+
return await run(attempt > 0)
|
|
40
|
+
} catch (error) {
|
|
41
|
+
if (!(error instanceof LakeConcurrencyError) || attempts === 1) throw error
|
|
42
|
+
if (attempt + 1 === attempts) {
|
|
43
|
+
throw new LakeConcurrencyError(
|
|
44
|
+
`[SixbLake] Dataset '${merge.dataset.id}' merge exhausted ${attempts} concurrency attempts. No changes from this operation were committed.`,
|
|
45
|
+
{ cause: error }
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
15
50
|
}
|
|
16
51
|
|
|
17
52
|
/**
|
|
@@ -23,13 +58,16 @@ export type DatasetMergeCommitResult =
|
|
|
23
58
|
| { readonly outcome: "unchanged"; readonly version: DatasetVersion | null }
|
|
24
59
|
|
|
25
60
|
export interface LakeMergeSession {
|
|
26
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Stage ordered complete-row upserts and exact primary-key deletes. With sequenceBy, deletes
|
|
63
|
+
* require a sequence, stale changes are ignored, and conflicting ties abort the whole merge.
|
|
64
|
+
*/
|
|
27
65
|
writeChanges(
|
|
28
66
|
changes:
|
|
29
67
|
| Iterable<MergeChange<DatasetRow, DatasetRow>>
|
|
30
68
|
| AsyncIterable<MergeChange<DatasetRow, DatasetRow>>
|
|
31
69
|
): Promise<void>
|
|
32
|
-
/** Commit
|
|
70
|
+
/** Commit against the captured version; opt-in retries rebase sequenced changes on a fresh head. */
|
|
33
71
|
commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult>
|
|
34
72
|
abort(): Promise<void>
|
|
35
73
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createHash } from "node:crypto"
|
|
2
|
+
import type { DatasetDefinition, MergeChange } from "../datasets"
|
|
3
|
+
import { datasetSequenceValue } from "../datasets/sequence"
|
|
4
|
+
import { stableJsonStringify } from "../json"
|
|
5
|
+
import { normalizeDecimalValue } from "../ontology/decimal"
|
|
6
|
+
import { LakeStorageError } from "./errors"
|
|
7
|
+
import { encodeDatasetPrimaryKey } from "./merge-validation"
|
|
8
|
+
import type { DatasetRow } from "./types"
|
|
9
|
+
|
|
10
|
+
/** Current source revision; a null content digest is a deletion tombstone. */
|
|
11
|
+
export interface DatasetSequenceState {
|
|
12
|
+
readonly sequence: string
|
|
13
|
+
readonly content: string | null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface DatasetSequenceChange extends DatasetSequenceState {
|
|
17
|
+
readonly key: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function datasetSequenceChange(
|
|
21
|
+
dataset: DatasetDefinition,
|
|
22
|
+
change: MergeChange<DatasetRow, DatasetRow>
|
|
23
|
+
): DatasetSequenceChange {
|
|
24
|
+
const value = change.kind === "upsert" ? change.row[dataset.sequenceBy ?? ""] : change.sequence
|
|
25
|
+
return {
|
|
26
|
+
key: encodeDatasetPrimaryKey(dataset, change.kind === "upsert" ? change.row : change.key),
|
|
27
|
+
sequence: datasetSequenceValue(dataset, value).toString(),
|
|
28
|
+
content: change.kind === "delete" ? null : rowDigest(dataset, change.row),
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Process in submission order against a private copy; conflicts publish no partial state. */
|
|
33
|
+
export function reconcileDatasetSequences(
|
|
34
|
+
dataset: DatasetDefinition,
|
|
35
|
+
previous: ReadonlyMap<string, DatasetSequenceState>,
|
|
36
|
+
changes: readonly DatasetSequenceChange[]
|
|
37
|
+
): { states: Map<string, DatasetSequenceState>; accepted: Map<string, number> } {
|
|
38
|
+
const states = new Map(previous)
|
|
39
|
+
const accepted = new Map<string, number>()
|
|
40
|
+
for (const [index, change] of changes.entries()) {
|
|
41
|
+
const current = states.get(change.key)
|
|
42
|
+
if (current) {
|
|
43
|
+
const difference = BigInt(change.sequence) - BigInt(current.sequence)
|
|
44
|
+
if (difference < 0n) continue
|
|
45
|
+
if (difference === 0n) {
|
|
46
|
+
if (current.content !== change.content) {
|
|
47
|
+
throw new LakeStorageError(
|
|
48
|
+
`[SixbLake] Dataset '${dataset.id}' has conflicting content at source sequence '${change.sequence}' for key ${change.key}.`
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
continue
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
states.set(change.key, { sequence: change.sequence, content: change.content })
|
|
55
|
+
accepted.set(change.key, index)
|
|
56
|
+
}
|
|
57
|
+
return { states, accepted }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function rowDigest(dataset: DatasetDefinition, row: DatasetRow): string {
|
|
61
|
+
const content: Record<string, unknown> = Object.create(null)
|
|
62
|
+
for (const column of dataset.schema.columns) {
|
|
63
|
+
const value = row[column.name]
|
|
64
|
+
// Nullable additions and omitted/undefined/null values have identical content.
|
|
65
|
+
if (value == null) continue
|
|
66
|
+
switch (column.type) {
|
|
67
|
+
case "int64":
|
|
68
|
+
content[column.name] = BigInt(value as string | number).toString()
|
|
69
|
+
break
|
|
70
|
+
case "timestamp":
|
|
71
|
+
content[column.name] = new Date(value as string | Date).toISOString()
|
|
72
|
+
break
|
|
73
|
+
case "date":
|
|
74
|
+
content[column.name] = new Date(value as string | Date).toISOString().slice(0, 10)
|
|
75
|
+
break
|
|
76
|
+
case "decimal":
|
|
77
|
+
content[column.name] = normalizeDecimalValue(value as string)
|
|
78
|
+
break
|
|
79
|
+
default:
|
|
80
|
+
content[column.name] = value
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return createHash("sha256")
|
|
84
|
+
.update(stableJsonStringify(JSON.parse(JSON.stringify(content))))
|
|
85
|
+
.digest("hex")
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Until row reconciliation is supported, replacement writes must not erase source history. */
|
|
89
|
+
export function assertUnsequencedDatasetWrite(dataset: DatasetDefinition): void {
|
|
90
|
+
if (dataset.sequenceBy !== undefined) {
|
|
91
|
+
throw new LakeStorageError(
|
|
92
|
+
`[SixbLake] Dataset '${dataset.id}' declares sequenceBy; use beginMerge with source-ordered changes.`
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -39,7 +39,8 @@ export interface ExecuteSqlTransformInput<TSqlDialect extends SqlDialect = SqlDi
|
|
|
39
39
|
readonly target: DatasetDefinition
|
|
40
40
|
readonly mode: DatasetWriteMode
|
|
41
41
|
readonly producer?: DatasetProducer
|
|
42
|
-
|
|
42
|
+
/** Atomic target version guard; null requires that no version exists. */
|
|
43
|
+
readonly expectedLatestVersionId?: string | null
|
|
43
44
|
readonly commitMessage?: string
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -19,7 +19,8 @@ export interface DatasetVersionRef {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export interface DatasetProducer {
|
|
22
|
-
readonly kind: "sync" | "pipeline"
|
|
22
|
+
readonly kind: "sync" | "pipeline" | "ingest"
|
|
23
|
+
/** For ingestion, the bound execution id; otherwise the sync/pipeline definition id. */
|
|
23
24
|
readonly id?: string
|
|
24
25
|
readonly runId?: string
|
|
25
26
|
readonly stepId?: string
|
|
@@ -73,7 +74,8 @@ export interface ReadDatasetRowsInput {
|
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
export interface CommitDatasetWriteInput {
|
|
76
|
-
|
|
77
|
+
/** Atomic version guard; null requires that no version exists, undefined leaves it unguarded. */
|
|
78
|
+
readonly expectedLatestVersionId?: string | null
|
|
77
79
|
readonly commitMessage?: string
|
|
78
80
|
}
|
|
79
81
|
|
|
@@ -81,11 +83,14 @@ export interface DatasetWriteCommitResult extends DatasetVersion {
|
|
|
81
83
|
/**
|
|
82
84
|
* Whether this operation created the returned version or reused the
|
|
83
85
|
* unchanged latest version. When a latest version exists, providers must
|
|
84
|
-
* report `unchanged` and reuse it for commits that
|
|
85
|
-
* dataset content
|
|
86
|
+
* report `unchanged` and reuse it for commits that change neither visible
|
|
87
|
+
* dataset content nor explicitly supplied input lineage: a snapshot whose
|
|
88
|
+
* rows equal the latest visible rows
|
|
86
89
|
* (order-insensitive, with equal duplicate counts), or an append of zero
|
|
87
90
|
* rows. Without a latest version, an empty snapshot or append still creates
|
|
88
|
-
* the first addressable dataset version.
|
|
91
|
+
* the first addressable dataset version. New input versions create a version
|
|
92
|
+
* even for identical rows, so a newer pipeline calculation fences concurrent
|
|
93
|
+
* work based on older inputs.
|
|
89
94
|
*/
|
|
90
95
|
readonly outcome: "created" | "unchanged"
|
|
91
96
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DatasetVersionRef } from "./types"
|
|
2
|
+
|
|
3
|
+
/** Input lineage participates in write identity when the caller supplies it. */
|
|
4
|
+
export function hasDatasetInputChanges(
|
|
5
|
+
previous: readonly DatasetVersionRef[] | undefined,
|
|
6
|
+
next: readonly DatasetVersionRef[] | undefined
|
|
7
|
+
): boolean {
|
|
8
|
+
if (next === undefined) return false
|
|
9
|
+
const keys = (refs: readonly DatasetVersionRef[]) =>
|
|
10
|
+
new Set(refs.map((ref) => JSON.stringify([ref.datasetId, ref.versionId])))
|
|
11
|
+
const before = keys(previous ?? [])
|
|
12
|
+
const after = keys(next)
|
|
13
|
+
return before.size !== after.size || [...after].some((key) => !before.has(key))
|
|
14
|
+
}
|