@sixb/core 0.1.0 → 0.1.2
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/README.md +54 -23
- package/dist/actions/commit-edits.d.ts +0 -2
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/execution.d.ts +21 -0
- package/dist/actions/execution.d.ts.map +1 -0
- package/dist/actions/index.d.ts +1 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +34 -23
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/registry.d.ts +16 -7
- package/dist/actions/registry.d.ts.map +1 -1
- package/dist/actions/request.d.ts +3 -2
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-dispatch.d.ts +21 -0
- package/dist/actions/run-dispatch.d.ts.map +1 -0
- package/dist/actions/types/context.d.ts +2 -2
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +4 -4
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +10 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +31 -0
- package/dist/agents/authority.d.ts.map +1 -0
- package/dist/agents/builders.d.ts +8 -1
- package/dist/agents/builders.d.ts.map +1 -1
- package/dist/agents/context.js +2 -2
- package/dist/agents/dispatch.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +16 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +45 -0
- package/dist/agents/execution.d.ts.map +1 -0
- package/dist/agents/index.d.ts +10 -10
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +81 -14
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/request.d.ts +6 -2
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/streams.d.ts +29 -3
- package/dist/agents/streams.d.ts.map +1 -1
- package/dist/agents/streams.js +22 -3
- package/dist/agents/streams.js.map +1 -1
- package/dist/agents/tool-definition.d.ts +9 -0
- package/dist/agents/tool-definition.d.ts.map +1 -0
- package/dist/agents/types.d.ts +64 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +16 -3
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/attribution.d.ts +17 -0
- package/dist/auth/attribution.d.ts.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +9 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts +4 -4
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/authorization/decision.d.ts +24 -11
- 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 +8 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/blob-storage/browser.js +3 -2
- package/dist/blob-storage/browser.js.map +1 -1
- package/dist/blob-storage/execution.d.ts +16 -0
- package/dist/blob-storage/execution.d.ts.map +1 -0
- package/dist/blob-storage/index.js +4 -3
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/discovery.d.ts +90 -24
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +59 -59
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/broker/in-memory.d.ts.map +1 -1
- package/dist/broker/index.js +2 -2
- package/dist/broker/types.d.ts +5 -0
- package/dist/broker/types.d.ts.map +1 -1
- package/dist/chunk-0172wgm9.js +333 -0
- package/dist/chunk-0172wgm9.js.map +11 -0
- package/dist/chunk-0k4avqr2.js +317 -0
- package/dist/chunk-0k4avqr2.js.map +11 -0
- package/dist/chunk-0mbx247x.js +2922 -0
- package/dist/chunk-0mbx247x.js.map +43 -0
- package/dist/chunk-34bqh420.js +1168 -0
- package/dist/chunk-34bqh420.js.map +23 -0
- package/dist/{chunk-mx84y05q.js → chunk-3j7573mj.js} +2 -2
- package/dist/{chunk-mx84y05q.js.map → chunk-3j7573mj.js.map} +2 -2
- package/dist/{chunk-45tw90k7.js → chunk-4gz41why.js} +1 -1
- package/dist/chunk-4x43bkbp.js +55 -0
- package/dist/chunk-4x43bkbp.js.map +11 -0
- package/dist/{chunk-xqbtf4wn.js → chunk-57r1cpxx.js} +3 -2
- package/dist/{chunk-xqbtf4wn.js.map → chunk-57r1cpxx.js.map} +3 -3
- package/dist/chunk-57zpb99z.js +194 -0
- package/dist/chunk-57zpb99z.js.map +10 -0
- package/dist/{chunk-dhmj53mx.js → chunk-5egfka8j.js} +13 -33
- package/dist/chunk-5egfka8j.js.map +15 -0
- package/dist/chunk-5gd7tpv6.js +28 -0
- package/dist/chunk-5gd7tpv6.js.map +11 -0
- package/dist/{chunk-867jxh7c.js → chunk-5sz8ta9r.js} +6 -295
- package/dist/chunk-5sz8ta9r.js.map +16 -0
- package/dist/chunk-62c7t4jc.js +27 -0
- package/dist/chunk-62c7t4jc.js.map +11 -0
- package/dist/{chunk-8r8cw2xw.js → chunk-63te770v.js} +40 -5
- package/dist/{chunk-8r8cw2xw.js.map → chunk-63te770v.js.map} +3 -3
- package/dist/chunk-663csy96.js +34 -0
- package/dist/chunk-663csy96.js.map +10 -0
- package/dist/{chunk-xz5g49bp.js → chunk-6gjqgd3d.js} +3 -1
- package/dist/chunk-6gjqgd3d.js.map +11 -0
- package/dist/chunk-7pc8b818.js +128 -0
- package/dist/chunk-7pc8b818.js.map +13 -0
- package/dist/{chunk-f2b5e2gf.js → chunk-85j5ybfj.js} +18 -3
- package/dist/{chunk-f2b5e2gf.js.map → chunk-85j5ybfj.js.map} +3 -3
- package/dist/{chunk-vj723r3p.js → chunk-8b55ygje.js} +1 -1
- package/dist/chunk-8m5ejdpn.js +33 -0
- package/dist/chunk-8m5ejdpn.js.map +10 -0
- package/dist/chunk-8ryen3p3.js +118 -0
- package/dist/chunk-8ryen3p3.js.map +10 -0
- package/dist/chunk-979ww6b3.js +298 -0
- package/dist/chunk-979ww6b3.js.map +12 -0
- package/dist/{chunk-ya6brh8a.js → chunk-9t8f5xfx.js} +10 -5
- package/dist/chunk-9t8f5xfx.js.map +11 -0
- package/dist/{chunk-r65yscvk.js → chunk-a31h57d5.js} +131 -13
- package/dist/chunk-a31h57d5.js.map +13 -0
- package/dist/chunk-bct7hmfc.js +402 -0
- package/dist/chunk-bct7hmfc.js.map +14 -0
- package/dist/chunk-bh6k3nc6.js +164 -0
- package/dist/chunk-bh6k3nc6.js.map +12 -0
- package/dist/{chunk-t72dvahb.js → chunk-bhxaq2nn.js} +61 -44
- package/dist/chunk-bhxaq2nn.js.map +12 -0
- package/dist/{chunk-jdwx7vzs.js → chunk-c6qd89g5.js} +240 -143
- package/dist/chunk-c6qd89g5.js.map +15 -0
- package/dist/{chunk-2s6sydsh.js → chunk-ckxfnx7f.js} +294 -4
- package/dist/chunk-ckxfnx7f.js.map +13 -0
- package/dist/chunk-cy0n5dms.js +27 -0
- package/dist/chunk-cy0n5dms.js.map +11 -0
- package/dist/chunk-dsrkgtnh.js +50 -0
- package/dist/chunk-dsrkgtnh.js.map +10 -0
- package/dist/{chunk-50kv63vj.js → chunk-dysw7nsm.js} +118 -26
- package/dist/chunk-dysw7nsm.js.map +14 -0
- package/dist/chunk-ezake7g1.js +32 -0
- package/dist/chunk-ezake7g1.js.map +11 -0
- package/dist/{chunk-yxss87qa.js → chunk-f2rt4vkh.js} +48 -29
- package/dist/chunk-f2rt4vkh.js.map +14 -0
- package/dist/{chunk-q4qzq0ea.js → chunk-fmx1sz2h.js} +117 -56
- package/dist/chunk-fmx1sz2h.js.map +15 -0
- package/dist/chunk-g9t3kdtx.js +90 -0
- package/dist/chunk-g9t3kdtx.js.map +10 -0
- package/dist/{chunk-c3zd880g.js → chunk-ghteq96b.js} +8 -8
- package/dist/{chunk-c3zd880g.js.map → chunk-ghteq96b.js.map} +4 -4
- package/dist/chunk-h9kxd41f.js +271 -0
- package/dist/chunk-h9kxd41f.js.map +11 -0
- package/dist/chunk-htq0qh7z.js +59 -0
- package/dist/chunk-htq0qh7z.js.map +11 -0
- package/dist/{chunk-dcgrzj1t.js → chunk-jaj13078.js} +121 -9
- package/dist/chunk-jaj13078.js.map +38 -0
- package/dist/{chunk-t358gywy.js → chunk-k9pts48t.js} +81 -58
- package/dist/chunk-k9pts48t.js.map +35 -0
- package/dist/chunk-n8herkry.js +3294 -0
- package/dist/chunk-n8herkry.js.map +35 -0
- package/dist/chunk-nf4r78r4.js +44 -0
- package/dist/chunk-nf4r78r4.js.map +10 -0
- package/dist/{chunk-2gpr6jsz.js → chunk-nnyp53zt.js} +14 -34
- package/dist/chunk-nnyp53zt.js.map +13 -0
- package/dist/chunk-nten49ta.js +404 -0
- package/dist/chunk-nten49ta.js.map +12 -0
- package/dist/chunk-qvybnnpe.js +137 -0
- package/dist/chunk-qvybnnpe.js.map +10 -0
- package/dist/{chunk-tsk2bxs3.js → chunk-rnshztfq.js} +13 -13
- package/dist/{chunk-tsk2bxs3.js.map → chunk-rnshztfq.js.map} +3 -3
- package/dist/chunk-sa4340y1.js +607 -0
- package/dist/chunk-sa4340y1.js.map +14 -0
- package/dist/{chunk-yvef9xwc.js → chunk-st4xgxey.js} +583 -251
- package/dist/chunk-st4xgxey.js.map +45 -0
- package/dist/{chunk-1vffvydj.js → chunk-t8t39h7v.js} +6 -6
- package/dist/chunk-t8t39h7v.js.map +10 -0
- package/dist/chunk-t9xghkva.js +28 -0
- package/dist/chunk-t9xghkva.js.map +10 -0
- package/dist/chunk-vp1vc6ee.js +35 -0
- package/dist/chunk-vp1vc6ee.js.map +11 -0
- package/dist/{chunk-p6r5g77m.js → chunk-vybf6pkp.js} +1 -1
- package/dist/{chunk-wj01s5hr.js → chunk-wtmzkcht.js} +4 -3
- package/dist/chunk-wtmzkcht.js.map +11 -0
- package/dist/{chunk-v5c085yp.js → chunk-xhy826cz.js} +3 -2
- package/dist/chunk-xhy826cz.js.map +10 -0
- package/dist/chunk-xkthy56g.js +33 -0
- package/dist/chunk-xkthy56g.js.map +11 -0
- package/dist/{chunk-aebzcsxr.js → chunk-ys1nse2v.js} +2178 -382
- package/dist/chunk-ys1nse2v.js.map +56 -0
- package/dist/{chunk-5yny9z0e.js → chunk-z3zp0bj1.js} +1 -1
- package/dist/chunk-zcnhxkvd.js +7 -0
- package/dist/chunk-zcnhxkvd.js.map +10 -0
- package/dist/chunk-zg9yryhz.js +252 -0
- package/dist/chunk-zg9yryhz.js.map +12 -0
- package/dist/chunk-zqqz8052.js +3 -0
- package/dist/{storage/projection-runs/lifecycle.js.map → chunk-zqqz8052.js.map} +1 -1
- package/dist/{chunk-4pycxcj3.js → chunk-zqysyfjt.js} +6 -9
- package/dist/{chunk-4pycxcj3.js.map → chunk-zqysyfjt.js.map} +3 -3
- package/dist/connectors/builders.d.ts +2 -1
- package/dist/connectors/builders.d.ts.map +1 -1
- package/dist/connectors/connections/authorizations.d.ts +64 -0
- package/dist/connectors/connections/authorizations.d.ts.map +1 -0
- package/dist/connectors/connections/capability.d.ts +7 -0
- package/dist/connectors/connections/capability.d.ts.map +1 -0
- package/dist/connectors/connections/command-context.d.ts +23 -0
- package/dist/connectors/connections/command-context.d.ts.map +1 -0
- package/dist/connectors/connections/contracts.d.ts +127 -0
- package/dist/connectors/connections/contracts.d.ts.map +1 -0
- package/dist/connectors/connections/credential-codec.d.ts +15 -0
- package/dist/connectors/connections/credential-codec.d.ts.map +1 -0
- package/dist/connectors/connections/credential-mutations.d.ts +63 -0
- package/dist/connectors/connections/credential-mutations.d.ts.map +1 -0
- package/dist/connectors/connections/execution.d.ts +20 -0
- package/dist/connectors/connections/execution.d.ts.map +1 -0
- package/dist/connectors/connections/internal.d.ts +5 -0
- package/dist/connectors/connections/internal.d.ts.map +1 -0
- package/dist/connectors/connections/internal.js +16 -0
- package/dist/connectors/connections/internal.js.map +9 -0
- package/dist/connectors/connections/provider-operation.d.ts +7 -0
- package/dist/connectors/connections/provider-operation.d.ts.map +1 -0
- package/dist/connectors/connections/request.d.ts +84 -0
- package/dist/connectors/connections/request.d.ts.map +1 -0
- package/dist/connectors/connections/runs.d.ts +51 -0
- package/dist/connectors/connections/runs.d.ts.map +1 -0
- package/dist/connectors/connections/service.d.ts +52 -0
- package/dist/connectors/connections/service.d.ts.map +1 -0
- package/dist/connectors/connections/storage-boundary.d.ts +3 -0
- package/dist/connectors/connections/storage-boundary.d.ts.map +1 -0
- package/dist/connectors/connections/tokens.d.ts +32 -0
- package/dist/connectors/connections/tokens.d.ts.map +1 -0
- package/dist/connectors/connections/validation.d.ts +27 -0
- package/dist/connectors/connections/validation.d.ts.map +1 -0
- package/dist/connectors/connections/views.d.ts +7 -0
- package/dist/connectors/connections/views.d.ts.map +1 -0
- package/dist/connectors/credentials.d.ts +25 -0
- package/dist/connectors/credentials.d.ts.map +1 -0
- package/dist/connectors/errors.d.ts +35 -3
- package/dist/connectors/errors.d.ts.map +1 -1
- package/dist/connectors/execution.d.ts +19 -0
- package/dist/connectors/execution.d.ts.map +1 -0
- package/dist/connectors/index.d.ts +5 -3
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/service.d.ts +23 -0
- package/dist/connectors/service.d.ts.map +1 -0
- package/dist/connectors/types.d.ts +94 -2
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/datasets/builders.d.ts +18 -5
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/changes.d.ts +18 -0
- package/dist/datasets/changes.d.ts.map +1 -0
- package/dist/datasets/execution.d.ts +8 -0
- package/dist/datasets/execution.d.ts.map +1 -0
- package/dist/datasets/index.d.ts +3 -1
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/types.d.ts +2 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/error-reporting/capability.d.ts +4 -49
- package/dist/error-reporting/capability.d.ts.map +1 -1
- package/dist/error-reporting/internal.d.ts +2 -2
- package/dist/error-reporting/internal.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +10 -4
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/error-reporting/reporter.d.ts +4 -1
- package/dist/error-reporting/reporter.d.ts.map +1 -1
- package/dist/error-reporting/reports.d.ts +64 -0
- package/dist/error-reporting/reports.d.ts.map +1 -0
- package/dist/error-reporting/types.d.ts +88 -34
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +141 -0
- package/dist/errors/catalog.d.ts.map +1 -0
- package/dist/errors/internal.d.ts +68 -0
- package/dist/errors/internal.d.ts.map +1 -0
- package/dist/errors/internal.js +29 -0
- package/dist/errors/internal.js.map +9 -0
- package/dist/errors/types.d.ts +20 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/events/definitions.d.ts +0 -1
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/execution.d.ts +13 -0
- package/dist/events/execution.d.ts.map +1 -0
- package/dist/events/index.d.ts +3 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -8
- package/dist/events/index.js.map +1 -1
- package/dist/events/outbox-dispatcher.d.ts +4 -2
- package/dist/events/outbox-dispatcher.d.ts.map +1 -1
- package/dist/events/{runtime.d.ts → service.d.ts} +13 -14
- package/dist/events/service.d.ts.map +1 -0
- package/dist/events/types/pipelines.d.ts +4 -1
- package/dist/events/types/pipelines.d.ts.map +1 -1
- package/dist/events/types/syncs.d.ts +3 -0
- package/dist/events/types/syncs.d.ts.map +1 -1
- package/dist/events/types/workflows.d.ts +4 -2
- package/dist/events/types/workflows.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +42 -0
- package/dist/execution/agent.d.ts.map +1 -0
- package/dist/execution/agent.js +70 -0
- package/dist/execution/agent.js.map +9 -0
- package/dist/execution/authorization.d.ts +60 -0
- package/dist/execution/authorization.d.ts.map +1 -0
- package/dist/execution/dispatch.d.ts +8 -0
- package/dist/execution/dispatch.d.ts.map +1 -0
- package/dist/execution/durable.d.ts +37 -0
- package/dist/execution/durable.d.ts.map +1 -0
- package/dist/execution/index.d.ts +2 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/primitive.d.ts +21 -0
- package/dist/execution/primitive.d.ts.map +1 -0
- package/dist/execution/primitive.js +88 -0
- package/dist/execution/primitive.js.map +10 -0
- package/dist/execution/request.d.ts +38 -0
- package/dist/execution/request.d.ts.map +1 -0
- package/dist/execution/request.js +97 -0
- package/dist/execution/request.js.map +10 -0
- package/dist/execution/scopes.d.ts +30 -0
- package/dist/execution/scopes.d.ts.map +1 -0
- package/dist/execution/types.d.ts +111 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +35 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +142 -111
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +8 -2
- package/dist/json.d.ts.map +1 -1
- package/dist/lake-storage/definition-updates.d.ts.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +15 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +3 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +15 -7
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/merge-validation.d.ts +10 -0
- package/dist/lake-storage/merge-validation.d.ts.map +1 -0
- package/dist/lake-storage/merge.d.ts +32 -0
- package/dist/lake-storage/merge.d.ts.map +1 -0
- package/dist/lake-storage/types.d.ts +3 -1
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/logging/execution.d.ts +9 -0
- package/dist/logging/execution.d.ts.map +1 -0
- package/dist/logging/index.d.ts +1 -1
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +8 -8
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/{runtime.d.ts → service.d.ts} +7 -7
- package/dist/logging/{runtime.d.ts.map → service.d.ts.map} +1 -1
- package/dist/logging/types.js +2 -2
- package/dist/materialization/events.d.ts +1 -0
- package/dist/materialization/events.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +2 -2
- package/dist/materialization/model.d.ts +26 -17
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts +2 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/load-state.d.ts +1 -1
- package/dist/materializer/edits/load-state.d.ts.map +1 -1
- package/dist/materializer/edits/operations.d.ts +1 -13
- package/dist/materializer/edits/operations.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts +2 -1
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/working-state.d.ts +36 -8
- package/dist/materializer/edits/working-state.d.ts.map +1 -1
- package/dist/materializer/effective/build-events.d.ts +1 -0
- package/dist/materializer/effective/build-events.d.ts.map +1 -1
- package/dist/materializer/effective/diff.d.ts +7 -0
- package/dist/materializer/effective/diff.d.ts.map +1 -1
- package/dist/materializer/effective/load-state.d.ts +0 -2
- package/dist/materializer/effective/load-state.d.ts.map +1 -1
- package/dist/materializer/effective/resolve.d.ts +17 -2
- package/dist/materializer/effective/resolve.d.ts.map +1 -1
- package/dist/materializer/execution/commit-lifecycle.d.ts +2 -2
- package/dist/materializer/execution/commit-lifecycle.d.ts.map +1 -1
- package/dist/materializer/execution/plan-stream.d.ts.map +1 -1
- package/dist/materializer/execution/scope.d.ts +26 -0
- package/dist/materializer/execution/scope.d.ts.map +1 -0
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +6 -5
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.d.ts +2 -2
- package/dist/materializer/index.d.ts.map +1 -1
- package/dist/materializer/index.js +30 -18
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/materializer.d.ts +37 -5
- package/dist/materializer/materializer.d.ts.map +1 -1
- package/dist/materializer/projections/finish-run.d.ts +2 -1
- package/dist/materializer/projections/finish-run.d.ts.map +1 -1
- package/dist/materializer/projections/replace.d.ts +2 -1
- package/dist/materializer/projections/replace.d.ts.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts +1 -0
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/batching.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/materializer/telemetry/append.d.ts +2 -1
- package/dist/materializer/telemetry/append.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts +7 -1
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/objects/action/request.d.ts +3 -3
- package/dist/objects/action/request.d.ts.map +1 -1
- package/dist/objects/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +5 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +100 -0
- package/dist/objects/execution.d.ts.map +1 -0
- package/dist/objects/index.js +37 -24
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +3 -8
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -2
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +9 -13
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/planner.d.ts +0 -3
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +2 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -0
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts +2 -0
- 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/action-service.d.ts +3 -2
- package/dist/objects/service/action-service.d.ts.map +1 -1
- package/dist/objects/service/list-service.d.ts +1 -1
- package/dist/objects/telemetry/history.d.ts +2 -0
- package/dist/objects/telemetry/history.d.ts.map +1 -1
- package/dist/objects/telemetry/write-batch.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 +5 -5
- package/dist/ontology/internal.js +7 -6
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/registry.d.ts +15 -2
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/validation/normalize.d.ts.map +1 -1
- package/dist/pipelines/execution.d.ts +19 -0
- package/dist/pipelines/execution.d.ts.map +1 -0
- package/dist/pipelines/index.d.ts +1 -0
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +66 -0
- package/dist/pipelines/index.js.map +9 -0
- package/dist/pipelines/request.d.ts +6 -9
- package/dist/pipelines/request.d.ts.map +1 -1
- package/dist/pipelines/run-dispatch.d.ts +47 -0
- package/dist/pipelines/run-dispatch.d.ts.map +1 -0
- package/dist/projections/builders.d.ts +0 -2
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/capability.d.ts +7 -0
- package/dist/projections/capability.d.ts.map +1 -0
- package/dist/projections/execution.d.ts +19 -0
- package/dist/projections/execution.d.ts.map +1 -0
- package/dist/projections/index.d.ts +3 -1
- package/dist/projections/index.d.ts.map +1 -1
- package/dist/projections/internal.d.ts +4 -10
- package/dist/projections/internal.d.ts.map +1 -1
- package/dist/projections/internal.js +42 -6
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/ownership.d.ts +2 -2
- package/dist/projections/ownership.d.ts.map +1 -1
- package/dist/projections/registry.d.ts +21 -11
- package/dist/projections/registry.d.ts.map +1 -1
- package/dist/projections/revision.d.ts +2 -2
- package/dist/projections/revision.d.ts.map +1 -1
- package/dist/projections/run-dispatch.d.ts +37 -0
- package/dist/projections/run-dispatch.d.ts.map +1 -0
- package/dist/projections/run-id.d.ts +3 -0
- package/dist/projections/run-id.d.ts.map +1 -0
- package/dist/projections/types.d.ts +3 -0
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/projections/validation.d.ts +2 -2
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/queues/in-memory.d.ts +11 -10
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +52 -42
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/rules/execution.d.ts +14 -0
- package/dist/rules/execution.d.ts.map +1 -0
- package/dist/rules/index.d.ts +1 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/validation.d.ts +1 -2
- package/dist/rules/validation.d.ts.map +1 -1
- package/dist/runtime/ai-usage.d.ts +8 -0
- package/dist/runtime/ai-usage.d.ts.map +1 -0
- package/dist/runtime/create.d.ts +7 -5
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +35 -0
- package/dist/runtime/definitions.d.ts.map +1 -0
- package/dist/runtime/host.d.ts +123 -0
- package/dist/runtime/host.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +6 -5
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +4 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +6 -2
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/ontology-mutations.d.ts +4 -2
- package/dist/runtime/ontology-mutations.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +42 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -0
- package/dist/runtime/sixb.d.ts +43 -219
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +16 -216
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +3 -6
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runtime.d.ts +7 -2
- package/dist/scheduler/runtime.d.ts.map +1 -1
- package/dist/schedules/execution.d.ts +6 -0
- package/dist/schedules/execution.d.ts.map +1 -0
- package/dist/schedules/index.js +9 -7
- package/dist/schedules/index.js.map +1 -1
- package/dist/schedules/types.d.ts +1 -3
- package/dist/schedules/types.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 +4 -1
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +3 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +42 -0
- package/dist/security/registry.d.ts.map +1 -0
- package/dist/security/types.d.ts +7 -12
- 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/storage/action-runs/failure.d.ts +7 -0
- package/dist/storage/action-runs/failure.d.ts.map +1 -0
- package/dist/storage/action-runs/failure.js +14 -0
- package/dist/storage/action-runs/failure.js.map +9 -0
- package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
- package/dist/storage/action-runs/in-memory.d.ts +3 -1
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/index.d.ts +2 -1
- package/dist/storage/action-runs/index.d.ts.map +1 -1
- package/dist/storage/action-runs/provider.d.ts +10 -0
- package/dist/storage/action-runs/provider.d.ts.map +1 -0
- package/dist/storage/action-runs/provider.js +13 -0
- package/dist/storage/action-runs/provider.js.map +9 -0
- package/dist/storage/action-runs/types.d.ts +37 -18
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/errors.d.ts +1 -1
- package/dist/storage/agents/errors.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +4 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +2 -2
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +10 -0
- package/dist/storage/agents/provider.d.ts.map +1 -0
- package/dist/storage/agents/provider.js +17 -0
- package/dist/storage/agents/provider.js.map +9 -0
- package/dist/storage/agents/types.d.ts +13 -22
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/errors.d.ts +8 -0
- package/dist/storage/ai-usage/errors.d.ts.map +1 -0
- package/dist/storage/ai-usage/in-memory.d.ts +28 -0
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -0
- package/dist/storage/ai-usage/index.d.ts +8 -0
- package/dist/storage/ai-usage/index.d.ts.map +1 -0
- package/dist/storage/ai-usage/record.d.ts +6 -0
- package/dist/storage/ai-usage/record.d.ts.map +1 -0
- package/dist/storage/ai-usage/types.d.ts +89 -0
- package/dist/storage/ai-usage/types.d.ts.map +1 -0
- package/dist/storage/ai-usage/usage.d.ts +11 -0
- package/dist/storage/ai-usage/usage.d.ts.map +1 -0
- package/dist/storage/auth/types.d.ts +1 -0
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/errors.d.ts +12 -0
- package/dist/storage/connector-connections/errors.d.ts.map +1 -0
- package/dist/storage/connector-connections/in-memory.d.ts +81 -0
- package/dist/storage/connector-connections/in-memory.d.ts.map +1 -0
- package/dist/storage/connector-connections/index.d.ts +7 -0
- package/dist/storage/connector-connections/index.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider/authorizations.d.ts +20 -0
- package/dist/storage/connector-connections/provider/authorizations.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider/connections.d.ts +17 -0
- package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider/runs.d.ts +14 -0
- package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider/shared.d.ts +74 -0
- package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider.d.ts +49 -0
- package/dist/storage/connector-connections/provider.d.ts.map +1 -0
- package/dist/storage/connector-connections/provider.js +1025 -0
- package/dist/storage/connector-connections/provider.js.map +14 -0
- package/dist/storage/connector-connections/types.d.ts +402 -0
- package/dist/storage/connector-connections/types.d.ts.map +1 -0
- package/dist/storage/executions/errors.d.ts +8 -0
- package/dist/storage/executions/errors.d.ts.map +1 -0
- package/dist/storage/executions/in-memory.d.ts +21 -0
- package/dist/storage/executions/in-memory.d.ts.map +1 -0
- package/dist/storage/executions/index.d.ts +5 -0
- package/dist/storage/executions/index.d.ts.map +1 -0
- package/dist/storage/executions/provider.d.ts +29 -0
- package/dist/storage/executions/provider.d.ts.map +1 -0
- package/dist/storage/executions/provider.js +208 -0
- package/dist/storage/executions/provider.js.map +10 -0
- package/dist/storage/executions/run-link.d.ts +24 -0
- package/dist/storage/executions/run-link.d.ts.map +1 -0
- package/dist/storage/executions/types.d.ts +62 -0
- package/dist/storage/executions/types.d.ts.map +1 -0
- package/dist/storage/executions/validation.d.ts +13 -0
- package/dist/storage/executions/validation.d.ts.map +1 -0
- package/dist/storage/in-memory/index.d.ts +20 -5
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +28 -17
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +90 -27
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -0
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +1 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-state.d.ts +3 -2
- package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations-work.d.ts +2 -2
- package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +3 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -2
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +3 -2
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +50 -5
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +8 -2
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +5 -22
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +6 -7
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/pipeline-runs/idempotency.d.ts +3 -0
- package/dist/storage/pipeline-runs/idempotency.d.ts.map +1 -0
- package/dist/storage/pipeline-runs/in-memory.d.ts +5 -1
- package/dist/storage/pipeline-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/pipeline-runs/index.d.ts +3 -1
- package/dist/storage/pipeline-runs/index.d.ts.map +1 -1
- package/dist/storage/pipeline-runs/provider.d.ts +10 -0
- package/dist/storage/pipeline-runs/provider.d.ts.map +1 -0
- package/dist/storage/pipeline-runs/provider.js +11 -0
- package/dist/storage/pipeline-runs/provider.js.map +9 -0
- package/dist/storage/pipeline-runs/types.d.ts +30 -14
- package/dist/storage/pipeline-runs/types.d.ts.map +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts +8 -3
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/index.d.ts +2 -2
- package/dist/storage/projection-runs/index.d.ts.map +1 -1
- package/dist/storage/projection-runs/lifecycle.d.ts +14 -8
- package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.d.ts +13 -0
- package/dist/storage/projection-runs/provider.d.ts.map +1 -0
- package/dist/storage/projection-runs/{lifecycle.js → provider.js} +15 -4
- package/dist/storage/projection-runs/provider.js.map +9 -0
- package/dist/storage/projection-runs/types.d.ts +28 -11
- package/dist/storage/projection-runs/types.d.ts.map +1 -1
- package/dist/storage/run-listing.d.ts +8 -9
- package/dist/storage/run-listing.d.ts.map +1 -1
- package/dist/storage/sync-runs/idempotency.d.ts +3 -0
- package/dist/storage/sync-runs/idempotency.d.ts.map +1 -0
- package/dist/storage/sync-runs/in-memory.d.ts +5 -1
- package/dist/storage/sync-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/sync-runs/index.d.ts +3 -1
- package/dist/storage/sync-runs/index.d.ts.map +1 -1
- package/dist/storage/sync-runs/provider.d.ts +10 -0
- package/dist/storage/sync-runs/provider.d.ts.map +1 -0
- package/dist/storage/sync-runs/provider.js +11 -0
- package/dist/storage/sync-runs/provider.js.map +9 -0
- package/dist/storage/sync-runs/types.d.ts +35 -14
- package/dist/storage/sync-runs/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +20 -15
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/errors.d.ts +3 -0
- package/dist/storage/webhook-runs/errors.d.ts.map +1 -1
- package/dist/storage/webhook-runs/in-memory.d.ts +13 -1
- package/dist/storage/webhook-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/webhook-runs/index.d.ts +3 -2
- package/dist/storage/webhook-runs/index.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.d.ts +10 -0
- package/dist/storage/webhook-runs/provider.d.ts.map +1 -0
- package/dist/storage/webhook-runs/provider.js +11 -0
- package/dist/storage/webhook-runs/provider.js.map +9 -0
- package/dist/storage/webhook-runs/types.d.ts +37 -11
- package/dist/storage/webhook-runs/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/in-memory.d.ts +6 -2
- package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/workflow-runs/index.d.ts +2 -1
- package/dist/storage/workflow-runs/index.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.d.ts +19 -0
- package/dist/storage/workflow-runs/provider.d.ts.map +1 -0
- package/dist/storage/workflow-runs/provider.js +19 -0
- package/dist/storage/workflow-runs/provider.js.map +9 -0
- package/dist/storage/workflow-runs/types.d.ts +30 -30
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/builders.d.ts +11 -3
- package/dist/syncs/builders.d.ts.map +1 -1
- package/dist/syncs/execution.d.ts +18 -0
- package/dist/syncs/execution.d.ts.map +1 -0
- package/dist/syncs/index.d.ts +3 -1
- package/dist/syncs/index.d.ts.map +1 -1
- package/dist/syncs/index.js +65 -0
- package/dist/syncs/index.js.map +9 -0
- package/dist/syncs/request.d.ts +6 -16
- package/dist/syncs/request.d.ts.map +1 -1
- package/dist/syncs/run-dispatch.d.ts +47 -0
- package/dist/syncs/run-dispatch.d.ts.map +1 -0
- package/dist/syncs/sources.d.ts +8 -0
- package/dist/syncs/sources.d.ts.map +1 -0
- package/dist/syncs/types.d.ts +34 -22
- package/dist/syncs/types.d.ts.map +1 -1
- package/dist/syncs/validation.d.ts +14 -0
- package/dist/syncs/validation.d.ts.map +1 -0
- package/dist/testing/action-execution.d.ts +12 -0
- package/dist/testing/action-execution.d.ts.map +1 -0
- package/dist/testing/agent-execution.d.ts +14 -0
- package/dist/testing/agent-execution.d.ts.map +1 -0
- package/dist/testing/agent-storage-contract.d.ts +10 -3
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts +13 -0
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -0
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/broker-contract.d.ts.map +1 -1
- package/dist/testing/connector-connection-storage-contract.d.ts +16 -0
- package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -0
- package/dist/testing/execution-storage-contract.d.ts +15 -0
- package/dist/testing/execution-storage-contract.d.ts.map +1 -0
- package/dist/testing/execution.d.ts +23 -0
- package/dist/testing/execution.d.ts.map +1 -0
- package/dist/testing/index.d.ts +13 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4270 -1484
- package/dist/testing/index.js.map +27 -14
- package/dist/testing/lake-merge-storage-contract.d.ts +7 -0
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -0
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-fixture.d.ts +2 -2
- package/dist/testing/materializer-fixture.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/ontology-contract-fixture.d.ts +1 -0
- package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/pipeline-execution.d.ts +16 -0
- package/dist/testing/pipeline-execution.d.ts.map +1 -0
- package/dist/testing/projection-execution.d.ts +20 -0
- package/dist/testing/projection-execution.d.ts.map +1 -0
- package/dist/testing/projection-run-storage-contract.d.ts +9 -4
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/testing/sync-execution.d.ts +16 -0
- package/dist/testing/sync-execution.d.ts.map +1 -0
- package/dist/testing/webhook-execution.d.ts +12 -0
- package/dist/testing/webhook-execution.d.ts.map +1 -0
- package/dist/testing/webhook-run-storage-contract.d.ts +11 -0
- package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -0
- package/dist/testing/workflow-execution.d.ts +23 -0
- package/dist/testing/workflow-execution.d.ts.map +1 -0
- package/dist/webhooks/index.d.ts +2 -1
- package/dist/webhooks/index.d.ts.map +1 -1
- package/dist/webhooks/internal.d.ts +2 -0
- package/dist/webhooks/internal.d.ts.map +1 -0
- package/dist/webhooks/internal.js +150 -0
- package/dist/webhooks/internal.js.map +10 -0
- package/dist/webhooks/registry.d.ts +18 -4
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/run-admission.d.ts +25 -0
- package/dist/webhooks/run-admission.d.ts.map +1 -0
- package/dist/webhooks/types.d.ts +8 -5
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/workers/index.js +18 -19
- package/dist/workers/index.js.map +4 -4
- package/dist/workers/queue-delivery.d.ts +7 -7
- package/dist/workers/queue-delivery.d.ts.map +1 -1
- package/dist/workers/queue-worker.d.ts +30 -11
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/execution.d.ts +49 -0
- package/dist/workflows/execution.d.ts.map +1 -0
- package/dist/workflows/failure.d.ts +28 -0
- package/dist/workflows/failure.d.ts.map +1 -0
- package/dist/workflows/index.d.ts +4 -2
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +63 -35
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts +2 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/run-dispatch.d.ts +59 -0
- package/dist/workflows/run-dispatch.d.ts.map +1 -0
- package/dist/workflows/types.d.ts +38 -8
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +107 -5
- package/src/actions/commit-edits.ts +0 -3
- package/src/actions/execution.ts +83 -0
- package/src/actions/index.ts +1 -1
- package/src/actions/registry.ts +22 -10
- package/src/actions/request.ts +55 -177
- package/src/actions/run-dispatch.ts +276 -0
- package/src/actions/types/context.ts +2 -4
- package/src/actions/validation.ts +2 -2
- package/src/agents/adapters.ts +8 -12
- package/src/agents/authority.ts +189 -0
- package/src/agents/builders.ts +53 -3
- package/src/agents/dispatch.ts +1 -6
- package/src/agents/errors.ts +24 -0
- package/src/agents/execution.ts +254 -0
- package/src/agents/index.ts +37 -5
- package/src/agents/prompt.ts +17 -5
- package/src/agents/request.ts +153 -13
- package/src/agents/streams.ts +150 -3
- package/src/agents/tool-definition.ts +93 -0
- package/src/agents/types.ts +99 -0
- package/src/agents/validation.ts +289 -5
- package/src/auth/attribution.ts +48 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/runtime.ts +5 -5
- package/src/authorization/decision.ts +75 -14
- package/src/authorization/grant-kinds.ts +9 -0
- package/src/authorization/index.ts +2 -0
- package/src/blob-storage/execution.ts +78 -0
- package/src/blob-storage/validation.ts +2 -10
- package/src/bootstrap/discovery.ts +88 -268
- package/src/bootstrap/index.ts +2 -13
- package/src/broker/in-memory.ts +8 -1
- package/src/broker/types.ts +5 -0
- package/src/connectors/builders.ts +37 -2
- package/src/connectors/connections/authorizations.ts +646 -0
- package/src/connectors/connections/capability.ts +59 -0
- package/src/connectors/connections/command-context.ts +98 -0
- package/src/connectors/connections/contracts.ts +208 -0
- package/src/connectors/connections/credential-codec.ts +48 -0
- package/src/connectors/connections/credential-mutations.ts +574 -0
- package/src/connectors/connections/execution.ts +138 -0
- package/src/connectors/connections/internal.ts +17 -0
- package/src/connectors/connections/provider-operation.ts +41 -0
- package/src/connectors/connections/request.ts +447 -0
- package/src/connectors/connections/runs.ts +702 -0
- package/src/connectors/connections/service.ts +644 -0
- package/src/connectors/connections/storage-boundary.ts +13 -0
- package/src/connectors/connections/tokens.ts +292 -0
- package/src/connectors/connections/validation.ts +316 -0
- package/src/connectors/connections/views.ts +37 -0
- package/src/connectors/credentials.ts +149 -0
- package/src/connectors/errors.ts +111 -3
- package/src/connectors/execution.ts +157 -0
- package/src/connectors/index.ts +26 -2
- package/src/connectors/service.ts +142 -0
- package/src/connectors/types.ts +156 -7
- package/src/datasets/builders.ts +49 -5
- package/src/datasets/changes.ts +13 -0
- package/src/datasets/execution.ts +24 -0
- package/src/datasets/index.ts +3 -0
- package/src/datasets/types.ts +5 -0
- package/src/datasets/validation.ts +53 -11
- package/src/error-reporting/capability.ts +33 -106
- package/src/error-reporting/internal.ts +3 -1
- package/src/error-reporting/reporter.ts +19 -3
- package/src/error-reporting/reports.ts +172 -0
- package/src/error-reporting/types.ts +97 -43
- package/src/errors/catalog.ts +149 -0
- package/src/errors/internal.ts +322 -0
- package/src/errors/types.ts +21 -0
- package/src/events/definitions.ts +0 -4
- package/src/events/execution.ts +45 -0
- package/src/events/index.ts +15 -14
- package/src/events/outbox-dispatcher.ts +53 -18
- package/src/events/{runtime.ts → service.ts} +19 -23
- package/src/events/types/pipelines.ts +4 -1
- package/src/events/types/syncs.ts +3 -0
- package/src/events/types/workflows.ts +4 -2
- package/src/execution/agent.ts +130 -0
- package/src/execution/authorization.ts +409 -0
- package/src/execution/dispatch.ts +7 -0
- package/src/execution/durable.ts +193 -0
- package/src/execution/index.ts +12 -0
- package/src/execution/primitive.ts +50 -0
- package/src/execution/request.ts +109 -0
- package/src/execution/scopes.ts +198 -0
- package/src/execution/types.ts +113 -0
- package/src/http/api-routes.ts +42 -7
- package/src/index.ts +127 -10
- package/src/json.ts +11 -8
- package/src/lake-storage/definition-updates.ts +21 -0
- package/src/lake-storage/in-memory.ts +284 -2
- package/src/lake-storage/index.ts +14 -0
- package/src/lake-storage/merge-validation.ts +117 -0
- package/src/lake-storage/merge.ts +35 -0
- package/src/lake-storage/types.ts +3 -1
- package/src/logging/execution.ts +28 -0
- package/src/logging/index.ts +4 -4
- package/src/logging/{runtime.ts → service.ts} +7 -7
- package/src/materialization/events.ts +1 -0
- package/src/materialization/index.ts +2 -0
- package/src/materialization/model.ts +30 -18
- package/src/materializer/README.md +9 -13
- package/src/materializer/edits/commit.ts +85 -28
- package/src/materializer/edits/load-state.ts +79 -16
- package/src/materializer/edits/operations.ts +72 -36
- package/src/materializer/edits/plan.ts +95 -22
- package/src/materializer/edits/working-state.ts +86 -55
- package/src/materializer/effective/build-events.ts +2 -0
- package/src/materializer/effective/diff.ts +22 -0
- package/src/materializer/effective/load-state.ts +0 -31
- package/src/materializer/effective/resolve.ts +62 -0
- package/src/materializer/execution/commit-lifecycle.ts +9 -1
- package/src/materializer/execution/plan-stream.ts +33 -9
- package/src/materializer/execution/scope.ts +95 -0
- package/src/materializer/execution/work-executor.ts +6 -2
- package/src/materializer/execution/work-records.ts +39 -6
- package/src/materializer/index.ts +9 -1
- package/src/materializer/materializer.ts +67 -5
- package/src/materializer/projections/finish-run.ts +29 -11
- package/src/materializer/projections/replace.ts +55 -22
- package/src/materializer/projections/replacement-plan.ts +37 -7
- package/src/materializer/shared/batching.ts +4 -1
- package/src/materializer/shared/normalize.ts +0 -19
- package/src/materializer/telemetry/append.ts +57 -26
- package/src/materializer/telemetry/plan.ts +15 -6
- package/src/objects/action/request.ts +5 -5
- package/src/objects/context/index.ts +1 -0
- package/src/objects/context/types.ts +6 -0
- package/src/objects/execution.ts +346 -0
- package/src/objects/materializer-adapter.ts +1 -23
- package/src/objects/query/executor.ts +15 -29
- package/src/objects/query/index.ts +1 -2
- package/src/objects/query/planner.ts +0 -6
- package/src/objects/sdk/object-handle.ts +2 -2
- package/src/objects/sdk/object-set.ts +17 -7
- package/src/objects/sdk/runtime-query-executor.ts +9 -2
- package/src/objects/sdk/telemetry-channel.ts +5 -1
- package/src/objects/service/action-service.ts +5 -2
- package/src/objects/service/list-service.ts +1 -1
- package/src/objects/telemetry/history.ts +8 -3
- package/src/objects/telemetry/write-batch.ts +0 -2
- package/src/ontology/index.ts +6 -1
- package/src/ontology/json-schema.ts +2 -1
- package/src/ontology/registry.ts +16 -2
- package/src/ontology/validation/normalize.ts +9 -15
- package/src/pipelines/execution.ts +105 -0
- package/src/pipelines/index.ts +7 -0
- package/src/pipelines/request.ts +32 -26
- package/src/pipelines/run-dispatch.ts +308 -0
- package/src/projections/builders.ts +0 -9
- package/src/projections/capability.ts +37 -0
- package/src/projections/execution.ts +85 -0
- package/src/projections/index.ts +2 -1
- package/src/projections/internal.ts +17 -60
- package/src/projections/ownership.ts +2 -2
- package/src/projections/registry.ts +26 -11
- package/src/projections/revision.ts +7 -5
- package/src/projections/run-dispatch.ts +497 -0
- package/src/projections/run-id.ts +20 -0
- package/src/projections/types.ts +12 -0
- package/src/projections/validation.ts +3 -3
- package/src/queues/in-memory.ts +37 -11
- package/src/queues/index.ts +9 -2
- package/src/queues/types.ts +70 -45
- package/src/rules/execution.ts +49 -0
- package/src/rules/index.ts +0 -1
- package/src/rules/validation.ts +2 -6
- package/src/runtime/ai-usage.ts +17 -0
- package/src/runtime/create.ts +28 -68
- package/src/runtime/definitions.ts +44 -0
- package/src/runtime/host.ts +377 -0
- package/src/runtime/index.ts +5 -13
- package/src/runtime/internal.ts +12 -0
- package/src/runtime/ontology-mutations.ts +5 -3
- package/src/runtime/resolve-definitions.ts +238 -0
- package/src/runtime/sixb.ts +95 -807
- package/src/runtime/types.ts +17 -290
- package/src/scheduler/index.ts +1 -1
- package/src/scheduler/runtime.ts +37 -6
- package/src/schedules/execution.ts +14 -0
- package/src/schedules/types.ts +0 -8
- package/src/security/every.ts +4 -0
- package/src/security/grants.ts +13 -1
- package/src/security/index.ts +3 -1
- package/src/security/registry.ts +107 -0
- package/src/security/types.ts +8 -12
- package/src/security/validation.ts +7 -0
- package/src/storage/action-runs/failure.ts +64 -0
- package/src/storage/action-runs/idempotency.ts +3 -1
- package/src/storage/action-runs/in-memory.ts +39 -9
- package/src/storage/action-runs/index.ts +3 -0
- package/src/storage/action-runs/provider.ts +25 -0
- package/src/storage/action-runs/types.ts +61 -27
- package/src/storage/agents/errors.ts +1 -0
- package/src/storage/agents/in-memory.ts +49 -11
- package/src/storage/agents/index.ts +2 -1
- package/src/storage/agents/provider.ts +27 -0
- package/src/storage/agents/types.ts +19 -19
- package/src/storage/ai-usage/errors.ts +13 -0
- package/src/storage/ai-usage/in-memory.ts +162 -0
- package/src/storage/ai-usage/index.ts +21 -0
- package/src/storage/ai-usage/record.ts +74 -0
- package/src/storage/ai-usage/types.ts +102 -0
- package/src/storage/ai-usage/usage.ts +104 -0
- package/src/storage/auth/types.ts +1 -0
- package/src/storage/connector-connections/errors.ts +24 -0
- package/src/storage/connector-connections/in-memory.ts +1377 -0
- package/src/storage/connector-connections/index.ts +66 -0
- package/src/storage/connector-connections/provider/authorizations.ts +446 -0
- package/src/storage/connector-connections/provider/connections.ts +291 -0
- package/src/storage/connector-connections/provider/runs.ts +369 -0
- package/src/storage/connector-connections/provider/shared.ts +342 -0
- package/src/storage/connector-connections/provider.ts +219 -0
- package/src/storage/connector-connections/types.ts +546 -0
- package/src/storage/executions/errors.ts +21 -0
- package/src/storage/executions/in-memory.ts +75 -0
- package/src/storage/executions/index.ts +16 -0
- package/src/storage/executions/provider.ts +292 -0
- package/src/storage/executions/run-link.ts +70 -0
- package/src/storage/executions/types.ts +49 -0
- package/src/storage/executions/validation.ts +370 -0
- package/src/storage/in-memory/index.ts +50 -16
- package/src/storage/index.ts +155 -15
- package/src/storage/ontology/commits.ts +1 -0
- package/src/storage/ontology/in-memory/index.ts +2 -0
- package/src/storage/ontology/in-memory/materializations-finalization.ts +2 -1
- package/src/storage/ontology/in-memory/materializations-state.ts +10 -0
- package/src/storage/ontology/in-memory/materializations-work.ts +2 -1
- package/src/storage/ontology/in-memory/materializations.ts +131 -9
- package/src/storage/ontology/in-memory/outbox.ts +1 -1
- package/src/storage/ontology/in-memory/shared-state.ts +12 -1
- package/src/storage/ontology/index.ts +6 -0
- package/src/storage/ontology/materializations.ts +50 -4
- package/src/storage/ontology/outbox.ts +13 -2
- package/src/storage/ontology/provider-header-validation.ts +1 -0
- package/src/storage/ontology/provider-work.ts +33 -14
- package/src/storage/ontology/provider.ts +72 -52
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/pipeline-runs/idempotency.ts +14 -0
- package/src/storage/pipeline-runs/in-memory.ts +88 -8
- package/src/storage/pipeline-runs/index.ts +5 -1
- package/src/storage/pipeline-runs/provider.ts +25 -0
- package/src/storage/pipeline-runs/types.ts +37 -14
- package/src/storage/projection-runs/in-memory.ts +93 -24
- package/src/storage/projection-runs/index.ts +4 -0
- package/src/storage/projection-runs/lifecycle.ts +165 -36
- package/src/storage/projection-runs/provider.ts +34 -0
- package/src/storage/projection-runs/types.ts +34 -11
- package/src/storage/run-listing.ts +22 -13
- package/src/storage/sync-runs/idempotency.ts +18 -0
- package/src/storage/sync-runs/in-memory.ts +92 -9
- package/src/storage/sync-runs/index.ts +5 -1
- package/src/storage/sync-runs/provider.ts +25 -0
- package/src/storage/sync-runs/types.ts +44 -15
- package/src/storage/types.ts +45 -17
- package/src/storage/webhook-runs/errors.ts +14 -0
- package/src/storage/webhook-runs/in-memory.ts +84 -9
- package/src/storage/webhook-runs/index.ts +5 -1
- package/src/storage/webhook-runs/provider.ts +30 -0
- package/src/storage/webhook-runs/types.ts +52 -11
- package/src/storage/workflow-runs/in-memory.ts +91 -55
- package/src/storage/workflow-runs/index.ts +2 -0
- package/src/storage/workflow-runs/provider.ts +70 -0
- package/src/storage/workflow-runs/types.ts +38 -25
- package/src/syncs/builders.ts +33 -15
- package/src/syncs/execution.ts +78 -0
- package/src/syncs/index.ts +14 -0
- package/src/syncs/request.ts +32 -43
- package/src/syncs/run-dispatch.ts +312 -0
- package/src/syncs/sources.ts +20 -0
- package/src/syncs/types.ts +75 -25
- package/src/syncs/validation.ts +77 -0
- package/src/testing/action-execution.ts +61 -0
- package/src/testing/agent-execution.ts +81 -0
- package/src/testing/agent-storage-contract.ts +158 -63
- package/src/testing/ai-usage-storage-contract.ts +528 -0
- package/src/testing/auth-storage-contract.ts +17 -1
- package/src/testing/broker-contract.ts +16 -1
- package/src/testing/connector-connection-storage-contract.ts +1052 -0
- package/src/testing/execution-storage-contract.ts +435 -0
- package/src/testing/execution.ts +48 -0
- package/src/testing/index.ts +56 -0
- package/src/testing/lake-merge-storage-contract.ts +302 -0
- package/src/testing/lake-storage-contract.ts +23 -0
- package/src/testing/materializer-fixture.ts +11 -3
- package/src/testing/materializer-storage-contract.ts +213 -11
- package/src/testing/ontology-contract-fixture.ts +35 -2
- package/src/testing/ontology-storage-contract.ts +75 -14
- package/src/testing/pipeline-execution.ts +64 -0
- package/src/testing/projection-execution.ts +98 -0
- package/src/testing/projection-run-storage-contract.ts +215 -29
- package/src/testing/queues-contract.ts +40 -51
- package/src/testing/sync-execution.ts +61 -0
- package/src/testing/webhook-execution.ts +47 -0
- package/src/testing/webhook-run-storage-contract.ts +240 -0
- package/src/testing/workflow-execution.ts +77 -0
- package/src/webhooks/index.ts +2 -1
- package/src/webhooks/internal.ts +5 -0
- package/src/webhooks/registry.ts +60 -36
- package/src/webhooks/run-admission.ts +172 -0
- package/src/webhooks/types.ts +8 -5
- package/src/workers/queue-delivery.ts +25 -22
- package/src/workers/queue-worker.ts +62 -32
- package/src/workflows/execution.ts +292 -0
- package/src/workflows/failure.ts +63 -0
- package/src/workflows/index.ts +10 -1
- package/src/workflows/request.ts +39 -118
- package/src/workflows/run-dispatch.ts +359 -0
- package/src/workflows/snapshot.ts +1 -10
- package/src/workflows/types.ts +39 -8
- package/dist/actions/runtime.d.ts +0 -11
- package/dist/actions/runtime.d.ts.map +0 -1
- package/dist/agents/runtime.d.ts +0 -41
- package/dist/agents/runtime.d.ts.map +0 -1
- package/dist/chunk-0fygrz37.js +0 -354
- package/dist/chunk-0fygrz37.js.map +0 -17
- package/dist/chunk-0psb6kdw.js +0 -989
- package/dist/chunk-0psb6kdw.js.map +0 -15
- package/dist/chunk-1vffvydj.js.map +0 -10
- package/dist/chunk-2gpr6jsz.js.map +0 -13
- package/dist/chunk-2s6sydsh.js.map +0 -12
- package/dist/chunk-50kv63vj.js.map +0 -12
- package/dist/chunk-590dejbp.js +0 -49
- package/dist/chunk-590dejbp.js.map +0 -10
- package/dist/chunk-867jxh7c.js.map +0 -19
- package/dist/chunk-aebzcsxr.js.map +0 -48
- package/dist/chunk-btpe64e4.js +0 -554
- package/dist/chunk-btpe64e4.js.map +0 -13
- package/dist/chunk-dcgrzj1t.js.map +0 -36
- package/dist/chunk-dhmj53mx.js.map +0 -16
- package/dist/chunk-hsv43v58.js +0 -1390
- package/dist/chunk-hsv43v58.js.map +0 -21
- package/dist/chunk-jdwx7vzs.js.map +0 -14
- package/dist/chunk-k25jm1x5.js +0 -102
- package/dist/chunk-k25jm1x5.js.map +0 -10
- package/dist/chunk-k41ajtz7.js +0 -352
- package/dist/chunk-k41ajtz7.js.map +0 -13
- package/dist/chunk-k6j72mtt.js +0 -9
- package/dist/chunk-k6j72mtt.js.map +0 -10
- package/dist/chunk-nvamz5dv.js +0 -819
- package/dist/chunk-nvamz5dv.js.map +0 -21
- package/dist/chunk-pv1yad91.js +0 -1165
- package/dist/chunk-pv1yad91.js.map +0 -27
- package/dist/chunk-q4qzq0ea.js.map +0 -14
- package/dist/chunk-r65yscvk.js.map +0 -11
- package/dist/chunk-t358gywy.js.map +0 -34
- package/dist/chunk-t72dvahb.js.map +0 -12
- package/dist/chunk-v5c085yp.js.map +0 -10
- package/dist/chunk-wj01s5hr.js.map +0 -11
- package/dist/chunk-wxhdnwh4.js +0 -37
- package/dist/chunk-wxhdnwh4.js.map +0 -10
- package/dist/chunk-xz5g49bp.js.map +0 -11
- package/dist/chunk-ya6brh8a.js.map +0 -11
- package/dist/chunk-yvef9xwc.js.map +0 -44
- package/dist/chunk-yxss87qa.js.map +0 -14
- package/dist/connectors/runtime.d.ts +0 -13
- package/dist/connectors/runtime.d.ts.map +0 -1
- package/dist/events/runtime.d.ts.map +0 -1
- package/dist/objects/contexts.d.ts +0 -45
- package/dist/objects/contexts.d.ts.map +0 -1
- package/dist/objects/helpers.d.ts +0 -7
- package/dist/objects/helpers.d.ts.map +0 -1
- package/dist/runtime/scoped.d.ts +0 -158
- package/dist/runtime/scoped.d.ts.map +0 -1
- package/dist/security/runtime.d.ts +0 -16
- package/dist/security/runtime.d.ts.map +0 -1
- package/dist/storage/webhook-deliveries/in-memory.d.ts +0 -18
- package/dist/storage/webhook-deliveries/in-memory.d.ts.map +0 -1
- package/dist/storage/webhook-deliveries/index.d.ts +0 -3
- package/dist/storage/webhook-deliveries/index.d.ts.map +0 -1
- package/dist/storage/webhook-deliveries/types.d.ts +0 -43
- package/dist/storage/webhook-deliveries/types.d.ts.map +0 -1
- package/dist/workflows/runtime.d.ts +0 -33
- package/dist/workflows/runtime.d.ts.map +0 -1
- package/src/actions/runtime.ts +0 -31
- package/src/agents/runtime.ts +0 -124
- package/src/connectors/runtime.ts +0 -100
- package/src/objects/contexts.ts +0 -64
- package/src/objects/helpers.ts +0 -18
- package/src/runtime/scoped.ts +0 -436
- package/src/security/runtime.ts +0 -101
- package/src/storage/webhook-deliveries/in-memory.ts +0 -108
- package/src/storage/webhook-deliveries/index.ts +0 -9
- package/src/storage/webhook-deliveries/types.ts +0 -41
- package/src/workflows/runtime.ts +0 -68
- /package/dist/{chunk-45tw90k7.js.map → chunk-4gz41why.js.map} +0 -0
- /package/dist/{chunk-vj723r3p.js.map → chunk-8b55ygje.js.map} +0 -0
- /package/dist/{chunk-p6r5g77m.js.map → chunk-vybf6pkp.js.map} +0 -0
- /package/dist/{chunk-5yny9z0e.js.map → chunk-z3zp0bj1.js.map} +0 -0
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
ensureExecutionRecord,
|
|
4
|
+
executionRecordInputFromRuntime
|
|
5
|
+
} from "./chunk-8ryen3p3.js";
|
|
5
6
|
import {
|
|
6
|
-
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
isStorageSerializationFailure
|
|
8
|
+
} from "./chunk-ys1nse2v.js";
|
|
8
9
|
import {
|
|
9
10
|
createCommitId,
|
|
10
11
|
createEventId,
|
|
11
12
|
createRequestHash,
|
|
13
|
+
materializationApplyPhase,
|
|
12
14
|
materializationEventKindOrdinal,
|
|
13
15
|
sha256Canonical
|
|
14
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-fmx1sz2h.js";
|
|
15
17
|
import {
|
|
16
18
|
assertPinnedDatasetWatermark
|
|
17
19
|
} from "./chunk-9dzba0f2.js";
|
|
@@ -32,7 +34,7 @@ import {
|
|
|
32
34
|
telemetryPointKey,
|
|
33
35
|
telemetryPointSortKey,
|
|
34
36
|
utf8JsonByteLength
|
|
35
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-vybf6pkp.js";
|
|
36
38
|
import {
|
|
37
39
|
MaterializationCancellationError,
|
|
38
40
|
MaterializationConflictError,
|
|
@@ -48,18 +50,19 @@ import {
|
|
|
48
50
|
validateObjectProperties,
|
|
49
51
|
validatePropertyValue,
|
|
50
52
|
validateTelemetryUnit
|
|
51
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-rnshztfq.js";
|
|
52
54
|
import {
|
|
53
55
|
ProjectionValidationError,
|
|
54
56
|
isProjectionDefinition,
|
|
57
|
+
resolveExecutionScopeAuthorization,
|
|
55
58
|
validateProjectionsAtStartup
|
|
56
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-34bqh420.js";
|
|
57
60
|
import {
|
|
58
61
|
assertJsonValue,
|
|
59
62
|
cloneJsonValue,
|
|
60
63
|
compareStrings,
|
|
61
64
|
stableJsonStringify
|
|
62
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-t8t39h7v.js";
|
|
63
66
|
// src/projections/revision.ts
|
|
64
67
|
function computeOntologyRevision(ontology) {
|
|
65
68
|
const referencedValueTypeIds = collectOntologyValueTypeDependencies(ontology);
|
|
@@ -324,16 +327,19 @@ class ProjectionRegistry {
|
|
|
324
327
|
this.dispatchById.set(descriptor.projectionId, descriptor);
|
|
325
328
|
}
|
|
326
329
|
}
|
|
327
|
-
|
|
330
|
+
list() {
|
|
331
|
+
return [...this.objectProjections, ...this.linkProjections, ...this.telemetryProjections];
|
|
332
|
+
}
|
|
333
|
+
listObjects() {
|
|
328
334
|
return this.objectProjections;
|
|
329
335
|
}
|
|
330
|
-
|
|
336
|
+
listLinks() {
|
|
331
337
|
return this.linkProjections;
|
|
332
338
|
}
|
|
333
|
-
|
|
339
|
+
listTelemetry() {
|
|
334
340
|
return this.telemetryProjections;
|
|
335
341
|
}
|
|
336
|
-
|
|
342
|
+
getById(projectionId) {
|
|
337
343
|
return this.projectionsById.get(projectionId) ?? null;
|
|
338
344
|
}
|
|
339
345
|
getDispatchDescriptors() {
|
|
@@ -456,7 +462,7 @@ function deepFreeze(value) {
|
|
|
456
462
|
}
|
|
457
463
|
// src/materializer/shared/batching.ts
|
|
458
464
|
var DEFAULT_MATERIALIZATION_BATCHING = Object.freeze({
|
|
459
|
-
sourceStageRows:
|
|
465
|
+
sourceStageRows: 2000,
|
|
460
466
|
sourceStageBytes: 4 * 1024 * 1024,
|
|
461
467
|
statePageRows: 1000,
|
|
462
468
|
planChunkRows: 1000,
|
|
@@ -571,7 +577,7 @@ function createMaterializerContext(input) {
|
|
|
571
577
|
}
|
|
572
578
|
|
|
573
579
|
// src/materializer/execution/commit-lifecycle.ts
|
|
574
|
-
async function replayCommitRecord(context, identity, storage = context.storage) {
|
|
580
|
+
async function replayCommitRecord(context, identity, executionId, storage = context.storage) {
|
|
575
581
|
const existing = await storage.ontology.commits.getByIdempotencyKey({
|
|
576
582
|
projectId: context.projectId,
|
|
577
583
|
idempotencyKey: identity.idempotencyKey
|
|
@@ -581,10 +587,13 @@ async function replayCommitRecord(context, identity, storage = context.storage)
|
|
|
581
587
|
if (existing.requestHash !== identity.requestHash) {
|
|
582
588
|
throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' was reused with different intent.`);
|
|
583
589
|
}
|
|
590
|
+
if (existing.executionId !== executionId) {
|
|
591
|
+
throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' belongs to execution '${existing.executionId}', not '${executionId}'.`);
|
|
592
|
+
}
|
|
584
593
|
return existing;
|
|
585
594
|
}
|
|
586
|
-
async function replayCommit(context, identity, storage = context.storage) {
|
|
587
|
-
const existing = await replayCommitRecord(context, identity, storage);
|
|
595
|
+
async function replayCommit(context, identity, executionId, storage = context.storage) {
|
|
596
|
+
const existing = await replayCommitRecord(context, identity, executionId, storage);
|
|
588
597
|
if (!existing)
|
|
589
598
|
return null;
|
|
590
599
|
return { ...structuredClone(existing.result), created: false };
|
|
@@ -602,6 +611,43 @@ async function withSerializationRetry(context, run) {
|
|
|
602
611
|
}
|
|
603
612
|
}
|
|
604
613
|
|
|
614
|
+
// src/materializer/execution/scope.ts
|
|
615
|
+
function prepareMaterializerExecution(projectId, scope) {
|
|
616
|
+
const authorization = resolveExecutionScopeAuthorization(projectId, scope);
|
|
617
|
+
const base = {
|
|
618
|
+
scope,
|
|
619
|
+
record: executionRecordInputFromRuntime({
|
|
620
|
+
execution: scope.execution,
|
|
621
|
+
runtimeAuthorization: scope.authorization
|
|
622
|
+
}),
|
|
623
|
+
executionId: scope.execution.id,
|
|
624
|
+
correlationId: scope.execution.correlationId
|
|
625
|
+
};
|
|
626
|
+
if (authorization.type !== "principal")
|
|
627
|
+
return base;
|
|
628
|
+
return { ...base, actor: authorization.context.principal };
|
|
629
|
+
}
|
|
630
|
+
function ensureMaterializerExecution(executions, execution) {
|
|
631
|
+
return ensureExecutionRecord(executions, execution.record);
|
|
632
|
+
}
|
|
633
|
+
function assertRuntimeMutationExecution(execution) {
|
|
634
|
+
if (execution.scope.execution.executor.type !== "kernel")
|
|
635
|
+
return;
|
|
636
|
+
throw new MaterializationValidationError(`Kernel execution '${execution.executionId}' cannot enter the runtime mutation boundary.`);
|
|
637
|
+
}
|
|
638
|
+
function assertTrustedPrimitiveMutationExecution(execution, primitive) {
|
|
639
|
+
const executor = execution.scope.execution.executor;
|
|
640
|
+
if (executor.type === "primitive" && executor.kind === primitive.kind && executor.id === primitive.id && executor.runId === primitive.runId) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
throw new MaterializationConflictError("run-correlation", `Execution '${execution.executionId}' does not own ${primitive.kind} run '${primitive.runId}'.`);
|
|
644
|
+
}
|
|
645
|
+
function assertMaterializerRunExecution(execution, runExecutionId, label) {
|
|
646
|
+
if (runExecutionId === execution.executionId)
|
|
647
|
+
return;
|
|
648
|
+
throw new MaterializationConflictError("run-correlation", `${label} belongs to execution '${runExecutionId}', not '${execution.executionId}'.`);
|
|
649
|
+
}
|
|
650
|
+
|
|
605
651
|
// src/materializer/effective/build-events.ts
|
|
606
652
|
function buildObjectMaterializationEventDraft(input) {
|
|
607
653
|
const draft = buildObjectEventDraft(input, input.change);
|
|
@@ -713,6 +759,7 @@ function eventDraftBase(context) {
|
|
|
713
759
|
schemaVersion: 1,
|
|
714
760
|
projectId: context.projectId,
|
|
715
761
|
occurredAt: context.committedAt,
|
|
762
|
+
correlationId: context.correlationId,
|
|
716
763
|
origin: context.origin,
|
|
717
764
|
commitId: context.commitId
|
|
718
765
|
};
|
|
@@ -780,7 +827,13 @@ async function* planStream(items, batching) {
|
|
|
780
827
|
}
|
|
781
828
|
function mutableChunk() {
|
|
782
829
|
return {
|
|
783
|
-
overrides: {
|
|
830
|
+
overrides: {
|
|
831
|
+
objects: { upserts: [], deletes: [] },
|
|
832
|
+
links: {
|
|
833
|
+
edges: { upserts: [], deletes: [] },
|
|
834
|
+
slots: { upserts: [], deletes: [] }
|
|
835
|
+
}
|
|
836
|
+
},
|
|
784
837
|
effective: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },
|
|
785
838
|
timeseries: { pointUpserts: [] },
|
|
786
839
|
outbox: []
|
|
@@ -789,16 +842,22 @@ function mutableChunk() {
|
|
|
789
842
|
function appendItem(chunk, item) {
|
|
790
843
|
switch (item.kind) {
|
|
791
844
|
case "object-override-upsert":
|
|
792
|
-
chunk.overrides.
|
|
845
|
+
chunk.overrides.objects.upserts.push(item.value);
|
|
793
846
|
break;
|
|
794
847
|
case "object-override-delete":
|
|
795
|
-
chunk.overrides.
|
|
848
|
+
chunk.overrides.objects.deletes.push(item.value);
|
|
796
849
|
break;
|
|
797
850
|
case "link-override-upsert":
|
|
798
|
-
chunk.overrides.
|
|
851
|
+
chunk.overrides.links.edges.upserts.push(item.value);
|
|
799
852
|
break;
|
|
800
853
|
case "link-override-delete":
|
|
801
|
-
chunk.overrides.
|
|
854
|
+
chunk.overrides.links.edges.deletes.push(item.value);
|
|
855
|
+
break;
|
|
856
|
+
case "link-slot-override-upsert":
|
|
857
|
+
chunk.overrides.links.slots.upserts.push(item.value);
|
|
858
|
+
break;
|
|
859
|
+
case "link-slot-override-delete":
|
|
860
|
+
chunk.overrides.links.slots.deletes.push(item.value);
|
|
802
861
|
break;
|
|
803
862
|
case "object-upsert":
|
|
804
863
|
chunk.effective.objectUpserts.push(item.value);
|
|
@@ -822,7 +881,7 @@ function appendItem(chunk, item) {
|
|
|
822
881
|
}
|
|
823
882
|
|
|
824
883
|
// src/materializer/execution/work-records.ts
|
|
825
|
-
function
|
|
884
|
+
function appendObjectOverrideWork(items, working, identity) {
|
|
826
885
|
if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
|
|
827
886
|
return;
|
|
828
887
|
}
|
|
@@ -844,7 +903,7 @@ function appendObjectOverridePlan(items, working, identity) {
|
|
|
844
903
|
});
|
|
845
904
|
}
|
|
846
905
|
}
|
|
847
|
-
function
|
|
906
|
+
function appendLinkEdgeOverrideWork(items, working, identity) {
|
|
848
907
|
if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
|
|
849
908
|
return;
|
|
850
909
|
}
|
|
@@ -866,7 +925,32 @@ function appendLinkOverridePlan(items, working, identity) {
|
|
|
866
925
|
});
|
|
867
926
|
}
|
|
868
927
|
}
|
|
869
|
-
function
|
|
928
|
+
function appendLinkSlotOverrideWork(items, working, identity) {
|
|
929
|
+
if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
if (working.override) {
|
|
933
|
+
items.push({
|
|
934
|
+
kind: "link-slot-override-upsert",
|
|
935
|
+
value: {
|
|
936
|
+
ref: working.ref,
|
|
937
|
+
value: working.override,
|
|
938
|
+
expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,
|
|
939
|
+
lastCommitId: identity.commitId,
|
|
940
|
+
updatedAt: identity.committedAt
|
|
941
|
+
}
|
|
942
|
+
});
|
|
943
|
+
} else if (working.originalOverride) {
|
|
944
|
+
items.push({
|
|
945
|
+
kind: "link-slot-override-delete",
|
|
946
|
+
value: {
|
|
947
|
+
ref: working.ref,
|
|
948
|
+
expectedLastCommitId: working.originalOverride.lastCommitId
|
|
949
|
+
}
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
function appendEffectiveObjectWork(items, change) {
|
|
870
954
|
if (change.kind === "deleted") {
|
|
871
955
|
items.push({
|
|
872
956
|
kind: "object-delete",
|
|
@@ -885,7 +969,7 @@ function appendObjectEffectivePlan(items, change) {
|
|
|
885
969
|
});
|
|
886
970
|
}
|
|
887
971
|
}
|
|
888
|
-
function
|
|
972
|
+
function appendEffectiveLinkWork(items, change) {
|
|
889
973
|
if (change.kind === "deleted") {
|
|
890
974
|
items.push({
|
|
891
975
|
kind: "link-delete",
|
|
@@ -996,6 +1080,7 @@ async function drainStagedWork(context, storage, session, signal) {
|
|
|
996
1080
|
await flush();
|
|
997
1081
|
}
|
|
998
1082
|
async function validateStagedCardinality(context, storage, session, signal) {
|
|
1083
|
+
let currentView = null;
|
|
999
1084
|
let currentScope = null;
|
|
1000
1085
|
let occupant = null;
|
|
1001
1086
|
for await (const page of storage.streamWork({
|
|
@@ -1008,14 +1093,15 @@ async function validateStagedCardinality(context, storage, session, signal) {
|
|
|
1008
1093
|
if (record.kind !== "cardinality") {
|
|
1009
1094
|
throw new MaterializationValidationError("Provider returned non-cardinality cardinality work.");
|
|
1010
1095
|
}
|
|
1011
|
-
if (record.scopeSortKey !== currentScope) {
|
|
1096
|
+
if (record.view !== currentView || record.scopeSortKey !== currentScope) {
|
|
1097
|
+
currentView = record.view;
|
|
1012
1098
|
currentScope = record.scopeSortKey;
|
|
1013
1099
|
occupant = null;
|
|
1014
1100
|
}
|
|
1015
1101
|
if (!record.occupied)
|
|
1016
1102
|
continue;
|
|
1017
1103
|
if (occupant && occupant !== record.linkSortKey) {
|
|
1018
|
-
throw new MaterializationValidationError(`Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`);
|
|
1104
|
+
throw new MaterializationValidationError(record.view === "candidate" ? `Projection source scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.` : `Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`);
|
|
1019
1105
|
}
|
|
1020
1106
|
occupant = record.linkSortKey;
|
|
1021
1107
|
}
|
|
@@ -1067,18 +1153,6 @@ function normalizeNonblank(value, label) {
|
|
|
1067
1153
|
}
|
|
1068
1154
|
return value;
|
|
1069
1155
|
}
|
|
1070
|
-
function normalizeEventActor(actor) {
|
|
1071
|
-
if (typeof actor !== "object" || actor === null || Array.isArray(actor)) {
|
|
1072
|
-
throw new MaterializationValidationError("Event actor must be an object.");
|
|
1073
|
-
}
|
|
1074
|
-
if (actor.type !== "user" && actor.type !== "serviceAccount" && actor.type !== "system") {
|
|
1075
|
-
throw new MaterializationValidationError("Event actor type must be 'user', 'serviceAccount', or 'system'.");
|
|
1076
|
-
}
|
|
1077
|
-
return Object.freeze({
|
|
1078
|
-
type: actor.type,
|
|
1079
|
-
id: normalizeNonblank(actor.id, "Event actor id")
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
1156
|
function normalizeTimestamp(value, label) {
|
|
1083
1157
|
const milliseconds = Date.parse(value);
|
|
1084
1158
|
if (!Number.isFinite(milliseconds)) {
|
|
@@ -1243,7 +1317,6 @@ function normalizeOntologyEditCommit(input) {
|
|
|
1243
1317
|
kind: "runtime",
|
|
1244
1318
|
requestId: normalizeNonblank(input.source.requestId, "Runtime request id")
|
|
1245
1319
|
}),
|
|
1246
|
-
...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
|
|
1247
1320
|
operations: Object.freeze(operations),
|
|
1248
1321
|
...input.operationGroups !== undefined ? { operationGroups: normalizeOperationGroups(input.operationGroups, operationIds) } : {}
|
|
1249
1322
|
});
|
|
@@ -1262,7 +1335,6 @@ function normalizeOntologyEditCommit(input) {
|
|
|
1262
1335
|
return Object.freeze({
|
|
1263
1336
|
mode: "atomic",
|
|
1264
1337
|
source,
|
|
1265
|
-
...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
|
|
1266
1338
|
operations: Object.freeze(operations),
|
|
1267
1339
|
expectedObjects: deduplicateExpectations(expectedObjects, (value) => objectRefKey(value.ref), "Expected objects"),
|
|
1268
1340
|
expectedLinks: deduplicateExpectations(expectedLinks, (value) => linkRefKey(value.ref), "Expected links"),
|
|
@@ -1401,7 +1473,6 @@ function normalizeTelemetryAppend(input) {
|
|
|
1401
1473
|
}
|
|
1402
1474
|
return Object.freeze({
|
|
1403
1475
|
source,
|
|
1404
|
-
...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
|
|
1405
1476
|
points: Object.freeze(points)
|
|
1406
1477
|
});
|
|
1407
1478
|
}
|
|
@@ -1444,56 +1515,16 @@ async function loadState(context, storage, session, request) {
|
|
|
1444
1515
|
return result;
|
|
1445
1516
|
}
|
|
1446
1517
|
|
|
1447
|
-
// src/materializer/edits/read-set.ts
|
|
1448
|
-
function buildEditReadSet(ontology, operations) {
|
|
1449
|
-
const objects = new Map;
|
|
1450
|
-
const links = new Map;
|
|
1451
|
-
const scopes = new Map;
|
|
1452
|
-
const incidentObjects = new Map;
|
|
1453
|
-
for (const operation of operations) {
|
|
1454
|
-
if (isObjectOperation(operation)) {
|
|
1455
|
-
if (!ontology.getObjectTypeById(operation.ref.objectTypeId))
|
|
1456
|
-
continue;
|
|
1457
|
-
objects.set(objectRefKey(operation.ref), operation.ref);
|
|
1458
|
-
if (operation.kind !== "object.patch") {
|
|
1459
|
-
incidentObjects.set(objectRefKey(operation.ref), operation.ref);
|
|
1460
|
-
}
|
|
1461
|
-
continue;
|
|
1462
|
-
}
|
|
1463
|
-
if (!isKnownLinkRef(ontology, operation.ref))
|
|
1464
|
-
continue;
|
|
1465
|
-
links.set(linkRefKey(operation.ref), operation.ref);
|
|
1466
|
-
objects.set(objectRefKey(operation.ref.source), operation.ref.source);
|
|
1467
|
-
objects.set(objectRefKey(operation.ref.target), operation.ref.target);
|
|
1468
|
-
if (linkCardinality(ontology, operation.ref) === "one") {
|
|
1469
|
-
const scope = { source: operation.ref.source, linkId: operation.ref.linkId };
|
|
1470
|
-
scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
return {
|
|
1474
|
-
objects: [...objects.values()].sort(compareObjectRefs),
|
|
1475
|
-
links: [...links.values()].sort(compareLinkRefs),
|
|
1476
|
-
linkScopes: [...scopes.values()].sort((left, right) => linkScopeKey(left.source, left.linkId).localeCompare(linkScopeKey(right.source, right.linkId))),
|
|
1477
|
-
incidentObjects: [...incidentObjects.values()].sort(compareObjectRefs),
|
|
1478
|
-
points: []
|
|
1479
|
-
};
|
|
1480
|
-
}
|
|
1481
|
-
function isKnownLinkRef(ontology, ref) {
|
|
1482
|
-
const sourceType = ontology.getObjectTypeById(ref.source.objectTypeId);
|
|
1483
|
-
if (!sourceType || !ontology.getObjectTypeById(ref.target.objectTypeId))
|
|
1484
|
-
return false;
|
|
1485
|
-
const link = sourceType.links.find((candidate) => candidate.id === ref.linkId);
|
|
1486
|
-
return Boolean(link && ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId));
|
|
1487
|
-
}
|
|
1488
|
-
function linkCardinality(ontology, ref) {
|
|
1489
|
-
const definition = ontology.getObjectTypeById(ref.source.objectTypeId)?.links.find((candidate) => candidate.id === ref.linkId);
|
|
1490
|
-
return definition?.cardinality ?? "many";
|
|
1491
|
-
}
|
|
1492
|
-
function isObjectOperation(operation) {
|
|
1493
|
-
return operation.kind.startsWith("object.");
|
|
1494
|
-
}
|
|
1495
|
-
|
|
1496
1518
|
// src/materializer/effective/resolve.ts
|
|
1519
|
+
function usableLinkSlotOverride(stored) {
|
|
1520
|
+
if (!stored)
|
|
1521
|
+
return null;
|
|
1522
|
+
if (stored.value.kind !== "legacy-conflict")
|
|
1523
|
+
return stored.value;
|
|
1524
|
+
const { source, linkId } = stored.ref;
|
|
1525
|
+
const scopeLabel = JSON.stringify([source.objectTypeId, source.primaryId, linkId]);
|
|
1526
|
+
throw new MaterializationConflictError("effective-state", `Cardinality-one link slot ${scopeLabel} could not be migrated automatically because it ` + "contains multiple legacy upsert overrides. Consolidate the stored overrides and clear " + "the migration conflict marker before materializing this scope.");
|
|
1527
|
+
}
|
|
1497
1528
|
function resolveEffectiveObject(input) {
|
|
1498
1529
|
const properties = resolveObjectAuthority(input.source, input.override);
|
|
1499
1530
|
if (!properties)
|
|
@@ -1540,30 +1571,117 @@ function resolveEffectiveLink(input) {
|
|
|
1540
1571
|
return null;
|
|
1541
1572
|
return resolvedLink(input.ref, input.source.assertion.properties);
|
|
1542
1573
|
}
|
|
1574
|
+
function resolveEffectiveLinkSlot(input) {
|
|
1575
|
+
if (!input.endpointExists(input.scope.source))
|
|
1576
|
+
return null;
|
|
1577
|
+
if (input.override?.kind === "clear")
|
|
1578
|
+
return null;
|
|
1579
|
+
if (input.override?.kind === "set") {
|
|
1580
|
+
if (!input.endpointExists(input.override.target))
|
|
1581
|
+
return null;
|
|
1582
|
+
return resolvedLink({
|
|
1583
|
+
source: input.scope.source,
|
|
1584
|
+
linkId: input.scope.linkId,
|
|
1585
|
+
target: input.override.target
|
|
1586
|
+
}, input.override.properties);
|
|
1587
|
+
}
|
|
1588
|
+
if (!input.source || !input.endpointExists(input.source.assertion.ref.target))
|
|
1589
|
+
return null;
|
|
1590
|
+
return resolvedLink(input.source.assertion.ref, input.source.assertion.properties);
|
|
1591
|
+
}
|
|
1592
|
+
function resolveEffectiveLinkSlotMember(input) {
|
|
1593
|
+
const resolved = resolveEffectiveLinkSlot({
|
|
1594
|
+
scope: { source: input.ref.source, linkId: input.ref.linkId },
|
|
1595
|
+
source: input.source,
|
|
1596
|
+
override: input.override,
|
|
1597
|
+
endpointExists: input.endpointExists
|
|
1598
|
+
});
|
|
1599
|
+
return resolved && linkRefKey(resolved.ref) === linkRefKey(input.ref) ? resolved : null;
|
|
1600
|
+
}
|
|
1543
1601
|
function resolvedLink(ref, properties) {
|
|
1544
1602
|
if (properties === undefined)
|
|
1545
1603
|
return { ref };
|
|
1546
1604
|
return { ref, properties };
|
|
1547
1605
|
}
|
|
1548
1606
|
|
|
1607
|
+
// src/materializer/edits/read-set.ts
|
|
1608
|
+
function buildEditReadSet(ontology, operations) {
|
|
1609
|
+
const objects = new Map;
|
|
1610
|
+
const links = new Map;
|
|
1611
|
+
const scopes = new Map;
|
|
1612
|
+
const incidentObjects = new Map;
|
|
1613
|
+
for (const operation of operations) {
|
|
1614
|
+
if (isObjectOperation(operation)) {
|
|
1615
|
+
if (!ontology.getObjectTypeById(operation.ref.objectTypeId))
|
|
1616
|
+
continue;
|
|
1617
|
+
objects.set(objectRefKey(operation.ref), operation.ref);
|
|
1618
|
+
if (operation.kind !== "object.patch") {
|
|
1619
|
+
incidentObjects.set(objectRefKey(operation.ref), operation.ref);
|
|
1620
|
+
}
|
|
1621
|
+
continue;
|
|
1622
|
+
}
|
|
1623
|
+
if (!isKnownLinkRef(ontology, operation.ref))
|
|
1624
|
+
continue;
|
|
1625
|
+
links.set(linkRefKey(operation.ref), operation.ref);
|
|
1626
|
+
objects.set(objectRefKey(operation.ref.source), operation.ref.source);
|
|
1627
|
+
objects.set(objectRefKey(operation.ref.target), operation.ref.target);
|
|
1628
|
+
if (linkCardinality(ontology, operation.ref) === "one") {
|
|
1629
|
+
const scope = { source: operation.ref.source, linkId: operation.ref.linkId };
|
|
1630
|
+
scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
return {
|
|
1634
|
+
objects: [...objects.values()].sort(compareObjectRefs),
|
|
1635
|
+
links: [...links.values()].sort(compareLinkRefs),
|
|
1636
|
+
linkScopes: [...scopes.values()].sort((left, right) => linkScopeKey(left.source, left.linkId).localeCompare(linkScopeKey(right.source, right.linkId))),
|
|
1637
|
+
incidentObjects: [...incidentObjects.values()].sort(compareObjectRefs),
|
|
1638
|
+
points: []
|
|
1639
|
+
};
|
|
1640
|
+
}
|
|
1641
|
+
function isKnownLinkRef(ontology, ref) {
|
|
1642
|
+
const sourceType = ontology.getObjectTypeById(ref.source.objectTypeId);
|
|
1643
|
+
if (!sourceType || !ontology.getObjectTypeById(ref.target.objectTypeId))
|
|
1644
|
+
return false;
|
|
1645
|
+
const link = sourceType.links.find((candidate) => candidate.id === ref.linkId);
|
|
1646
|
+
return Boolean(link && ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId));
|
|
1647
|
+
}
|
|
1648
|
+
function linkCardinality(ontology, ref) {
|
|
1649
|
+
const definition = ontology.getObjectTypeById(ref.source.objectTypeId)?.links.find((candidate) => candidate.id === ref.linkId);
|
|
1650
|
+
return definition?.cardinality ?? "many";
|
|
1651
|
+
}
|
|
1652
|
+
function isObjectOperation(operation) {
|
|
1653
|
+
return operation.kind.startsWith("object.");
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1549
1656
|
// src/materializer/edits/working-state.ts
|
|
1550
|
-
function mergeWorkingState(
|
|
1657
|
+
function mergeWorkingState(ontology, working, state) {
|
|
1551
1658
|
for (const object of state.objects) {
|
|
1552
|
-
if (!objects.has(objectRefKey(object.ref))) {
|
|
1553
|
-
objects.set(objectRefKey(object.ref), workingObjectFromState(object));
|
|
1659
|
+
if (!working.objects.has(objectRefKey(object.ref))) {
|
|
1660
|
+
working.objects.set(objectRefKey(object.ref), workingObjectFromState(object));
|
|
1554
1661
|
}
|
|
1555
1662
|
}
|
|
1556
1663
|
for (const link of state.links) {
|
|
1557
|
-
if (!links.has(linkRefKey(link.ref))) {
|
|
1558
|
-
links.set(linkRefKey(link.ref),
|
|
1664
|
+
if (linkCardinality(ontology, link.ref) !== "one" && !working.links.edges.has(linkRefKey(link.ref))) {
|
|
1665
|
+
working.links.edges.set(linkRefKey(link.ref), workingLinkEdgeFromState(link));
|
|
1559
1666
|
}
|
|
1560
1667
|
}
|
|
1561
1668
|
for (const scope of state.linkScopes) {
|
|
1562
|
-
|
|
1563
|
-
|
|
1669
|
+
const key = linkScopeKey(scope.source, scope.linkId);
|
|
1670
|
+
if (!working.links.slots.has(key)) {
|
|
1671
|
+
working.links.slots.set(key, workingLinkSlotFromState(scope));
|
|
1564
1672
|
}
|
|
1565
1673
|
}
|
|
1566
1674
|
}
|
|
1675
|
+
function workingLinkSlotFromState(scope) {
|
|
1676
|
+
return {
|
|
1677
|
+
ref: { source: scope.source, linkId: scope.linkId },
|
|
1678
|
+
source: scope.sourceAssertion,
|
|
1679
|
+
originalOverride: scope.override,
|
|
1680
|
+
override: usableLinkSlotOverride(scope.override),
|
|
1681
|
+
before: scope.effective,
|
|
1682
|
+
effectiveCount: scope.effectiveCount
|
|
1683
|
+
};
|
|
1684
|
+
}
|
|
1567
1685
|
function workingObjectFromState(object) {
|
|
1568
1686
|
return {
|
|
1569
1687
|
ref: object.ref,
|
|
@@ -1574,7 +1692,7 @@ function workingObjectFromState(object) {
|
|
|
1574
1692
|
latestTelemetry: [...object.latestTelemetry]
|
|
1575
1693
|
};
|
|
1576
1694
|
}
|
|
1577
|
-
function
|
|
1695
|
+
function workingLinkEdgeFromState(link) {
|
|
1578
1696
|
return {
|
|
1579
1697
|
ref: link.ref,
|
|
1580
1698
|
source: link.source,
|
|
@@ -1592,7 +1710,7 @@ function resolveObject(ontology, working) {
|
|
|
1592
1710
|
latestTelemetry: working.latestTelemetry
|
|
1593
1711
|
});
|
|
1594
1712
|
}
|
|
1595
|
-
function
|
|
1713
|
+
function resolveLinkEdge(ontology, working, objects) {
|
|
1596
1714
|
const source = objects.get(objectRefKey(working.ref.source));
|
|
1597
1715
|
const target = objects.get(objectRefKey(working.ref.target));
|
|
1598
1716
|
return resolveEffectiveLink({
|
|
@@ -1603,44 +1721,32 @@ function resolveLink(ontology, working, objects) {
|
|
|
1603
1721
|
targetEndpointExists: Boolean(target && resolveObject(ontology, target))
|
|
1604
1722
|
});
|
|
1605
1723
|
}
|
|
1724
|
+
function resolveLinkSlot(ontology, working, objects) {
|
|
1725
|
+
return resolveEffectiveLinkSlot({
|
|
1726
|
+
scope: working.ref,
|
|
1727
|
+
source: working.source,
|
|
1728
|
+
override: working.override,
|
|
1729
|
+
endpointExists: (ref) => {
|
|
1730
|
+
const object = objects.get(objectRefKey(ref));
|
|
1731
|
+
return Boolean(object && resolveObject(ontology, object));
|
|
1732
|
+
}
|
|
1733
|
+
});
|
|
1734
|
+
}
|
|
1606
1735
|
function distinctCardinalityOneScopes(ontology, links, existing) {
|
|
1607
1736
|
const scopes = new Map;
|
|
1608
1737
|
for (const state of links) {
|
|
1609
|
-
const definition = ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
|
|
1610
1738
|
const key = linkScopeKey(state.ref.source, state.ref.linkId);
|
|
1611
|
-
if (
|
|
1739
|
+
if (linkCardinality(ontology, state.ref) === "one" && !existing.has(key)) {
|
|
1612
1740
|
scopes.set(key, { source: state.ref.source, linkId: state.ref.linkId });
|
|
1613
1741
|
}
|
|
1614
1742
|
}
|
|
1615
1743
|
return [...scopes.values()];
|
|
1616
1744
|
}
|
|
1617
|
-
function validateWorkingCardinality(
|
|
1618
|
-
const
|
|
1619
|
-
|
|
1620
|
-
effectiveByScope.set(scope, {
|
|
1621
|
-
count: snapshot.effectiveCount,
|
|
1622
|
-
source: snapshot.source,
|
|
1623
|
-
linkId: snapshot.linkId
|
|
1624
|
-
});
|
|
1625
|
-
}
|
|
1626
|
-
for (const working of links.values()) {
|
|
1627
|
-
if (!isKnownLinkRef(ontology, working.ref))
|
|
1628
|
-
continue;
|
|
1629
|
-
const scope = linkScopeKey(working.ref.source, working.ref.linkId);
|
|
1630
|
-
const state = effectiveByScope.get(scope);
|
|
1631
|
-
if (!state)
|
|
1632
|
-
continue;
|
|
1633
|
-
const before = working.before ? 1 : 0;
|
|
1634
|
-
const after = resolveLink(ontology, working, objects) ? 1 : 0;
|
|
1635
|
-
state.count += after - before;
|
|
1636
|
-
}
|
|
1637
|
-
for (const { count, source, linkId } of effectiveByScope.values()) {
|
|
1638
|
-
if (count <= 1)
|
|
1745
|
+
function validateWorkingCardinality(slots) {
|
|
1746
|
+
for (const { effectiveCount, ref } of slots.values()) {
|
|
1747
|
+
if (effectiveCount <= 1)
|
|
1639
1748
|
continue;
|
|
1640
|
-
|
|
1641
|
-
if (link?.cardinality === "one") {
|
|
1642
|
-
throw new MaterializationValidationError(`Link scope '${source.objectTypeId}.${linkId}' has cardinality one.`);
|
|
1643
|
-
}
|
|
1749
|
+
throw new MaterializationValidationError(`Link scope '${ref.source.objectTypeId}.${ref.linkId}' has cardinality one.`);
|
|
1644
1750
|
}
|
|
1645
1751
|
}
|
|
1646
1752
|
|
|
@@ -1648,29 +1754,38 @@ function validateWorkingCardinality(ontology, objects, links, scopes) {
|
|
|
1648
1754
|
async function loadEditWorkingState(context, storage, session, operations) {
|
|
1649
1755
|
const state = {
|
|
1650
1756
|
objects: new Map,
|
|
1651
|
-
links:
|
|
1652
|
-
|
|
1757
|
+
links: {
|
|
1758
|
+
edges: new Map,
|
|
1759
|
+
slots: new Map
|
|
1760
|
+
}
|
|
1653
1761
|
};
|
|
1654
1762
|
const readSet = buildEditReadSet(context.ontology, operations);
|
|
1655
1763
|
const explicitLinkKeys = new Set(readSet.links.map(linkRefKey));
|
|
1656
1764
|
const incidentLinks = new Map;
|
|
1657
|
-
const
|
|
1765
|
+
const loadedState = {
|
|
1766
|
+
objects: state.objects,
|
|
1767
|
+
links: {
|
|
1768
|
+
edges: new Map,
|
|
1769
|
+
slots: state.links.slots
|
|
1770
|
+
}
|
|
1771
|
+
};
|
|
1658
1772
|
const revivingObjects = new Set(operations.filter(isRevivingObjectOperation).map((operation) => objectRefKey(operation.ref)));
|
|
1659
1773
|
for await (const page of storage.streamState({
|
|
1660
1774
|
session,
|
|
1661
1775
|
requests: oneStateRequest(readSet),
|
|
1662
1776
|
pageRows: context.batching.statePageRows
|
|
1663
1777
|
})) {
|
|
1664
|
-
mergeWorkingState(
|
|
1778
|
+
mergeWorkingState(context.ontology, loadedState, page);
|
|
1665
1779
|
for (const link of page.links) {
|
|
1666
1780
|
const key = linkRefKey(link.ref);
|
|
1667
|
-
if (explicitLinkKeys.has(key) && !state.links.has(key)) {
|
|
1668
|
-
state.links.set(key,
|
|
1781
|
+
if (linkCardinality(context.ontology, link.ref) !== "one" && explicitLinkKeys.has(key) && !state.links.edges.has(key)) {
|
|
1782
|
+
state.links.edges.set(key, workingLinkEdgeFromState(link));
|
|
1669
1783
|
}
|
|
1670
1784
|
if (readSet.incidentObjects.length > 0)
|
|
1671
1785
|
incidentLinks.set(key, link);
|
|
1672
1786
|
}
|
|
1673
1787
|
}
|
|
1788
|
+
await mergeMissingLinkSlotEndpoints(context, storage, session, state);
|
|
1674
1789
|
await mergeIncidentState(context, storage, session, state, [...incidentLinks.values()], revivingObjects);
|
|
1675
1790
|
return state;
|
|
1676
1791
|
}
|
|
@@ -1701,9 +1816,20 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
|
|
|
1701
1816
|
if (revivingObjects.has(objectRefKey(link.ref.source)) || revivingObjects.has(objectRefKey(link.ref.target))) {
|
|
1702
1817
|
return true;
|
|
1703
1818
|
}
|
|
1704
|
-
|
|
1819
|
+
if (linkCardinality(context.ontology, link.ref) === "one") {
|
|
1820
|
+
return Boolean(resolveEffectiveLinkSlotMember({
|
|
1821
|
+
ref: link.ref,
|
|
1822
|
+
source: link.source,
|
|
1823
|
+
override: usableLinkSlotOverride(link.slotOverride),
|
|
1824
|
+
endpointExists: (ref) => {
|
|
1825
|
+
const object = state.objects.get(objectRefKey(ref));
|
|
1826
|
+
return Boolean(object && resolveObject(context.ontology, object));
|
|
1827
|
+
}
|
|
1828
|
+
}));
|
|
1829
|
+
}
|
|
1830
|
+
return Boolean(resolveLinkEdge(context.ontology, workingLinkEdgeFromState(link), state.objects));
|
|
1705
1831
|
});
|
|
1706
|
-
const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.
|
|
1832
|
+
const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.links.slots);
|
|
1707
1833
|
if (missingScopes.length > 0) {
|
|
1708
1834
|
await mergeLoadedState(context, storage, session, state, {
|
|
1709
1835
|
objects: [],
|
|
@@ -1713,17 +1839,44 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
|
|
|
1713
1839
|
points: []
|
|
1714
1840
|
});
|
|
1715
1841
|
}
|
|
1842
|
+
await mergeMissingLinkSlotEndpoints(context, storage, session, state);
|
|
1716
1843
|
for (const link of relevantStates) {
|
|
1844
|
+
if (linkCardinality(context.ontology, link.ref) === "one")
|
|
1845
|
+
continue;
|
|
1717
1846
|
const key = linkRefKey(link.ref);
|
|
1718
|
-
if (state.links.has(key))
|
|
1847
|
+
if (state.links.edges.has(key))
|
|
1719
1848
|
continue;
|
|
1720
|
-
state.links.set(key,
|
|
1849
|
+
state.links.edges.set(key, workingLinkEdgeFromState(link));
|
|
1850
|
+
}
|
|
1851
|
+
context.observeCoreBuffer?.("edits.incident-links", state.links.edges.size + state.links.slots.size);
|
|
1852
|
+
}
|
|
1853
|
+
async function mergeMissingLinkSlotEndpoints(context, storage, session, state) {
|
|
1854
|
+
const missing = new Map;
|
|
1855
|
+
for (const working of state.links.slots.values()) {
|
|
1856
|
+
const refs = [
|
|
1857
|
+
working.ref.source,
|
|
1858
|
+
working.source?.assertion.ref.target,
|
|
1859
|
+
working.override?.target,
|
|
1860
|
+
working.before?.ref.target
|
|
1861
|
+
];
|
|
1862
|
+
for (const ref of refs) {
|
|
1863
|
+
if (ref && !state.objects.has(objectRefKey(ref)))
|
|
1864
|
+
missing.set(objectRefKey(ref), ref);
|
|
1865
|
+
}
|
|
1721
1866
|
}
|
|
1722
|
-
|
|
1867
|
+
if (missing.size === 0)
|
|
1868
|
+
return;
|
|
1869
|
+
await mergeLoadedState(context, storage, session, state, {
|
|
1870
|
+
objects: [...missing.values()],
|
|
1871
|
+
links: [],
|
|
1872
|
+
linkScopes: [],
|
|
1873
|
+
incidentObjects: [],
|
|
1874
|
+
points: []
|
|
1875
|
+
});
|
|
1723
1876
|
}
|
|
1724
1877
|
async function mergeLoadedState(context, storage, session, state, request) {
|
|
1725
1878
|
const loaded = await loadState(context, storage, session, request);
|
|
1726
|
-
mergeWorkingState(
|
|
1879
|
+
mergeWorkingState(context.ontology, state, loaded);
|
|
1727
1880
|
}
|
|
1728
1881
|
|
|
1729
1882
|
// src/materializer/effective/diff.ts
|
|
@@ -1792,6 +1945,16 @@ function diffEffectiveLink(input) {
|
|
|
1792
1945
|
return null;
|
|
1793
1946
|
return updateLinkChange(input.before, input.resolved, input.commitId, input.committedAt);
|
|
1794
1947
|
}
|
|
1948
|
+
function diffEffectiveLinkSlot(input) {
|
|
1949
|
+
if (input.before && input.resolved && linkRefKey(input.before.ref) !== linkRefKey(input.resolved.ref)) {
|
|
1950
|
+
return [
|
|
1951
|
+
diffEffectiveLink({ ...input, resolved: null }),
|
|
1952
|
+
diffEffectiveLink({ ...input, before: null })
|
|
1953
|
+
];
|
|
1954
|
+
}
|
|
1955
|
+
const change = diffEffectiveLink(input);
|
|
1956
|
+
return change ? [change] : [];
|
|
1957
|
+
}
|
|
1795
1958
|
function createLinkChange(resolved, commitId, committedAt) {
|
|
1796
1959
|
const after = {
|
|
1797
1960
|
...resolved,
|
|
@@ -2178,7 +2341,7 @@ function applyObjectTransition(context, state, working, next, journal) {
|
|
|
2178
2341
|
const resolved = resolveObject(context.ontology, working);
|
|
2179
2342
|
if (resolved)
|
|
2180
2343
|
validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
|
|
2181
|
-
validateWorkingCardinality(
|
|
2344
|
+
validateWorkingCardinality(state.links.slots);
|
|
2182
2345
|
} catch (error) {
|
|
2183
2346
|
working.override = previous;
|
|
2184
2347
|
throw error;
|
|
@@ -2211,10 +2374,13 @@ function objectOperationOutcome(operation, working, changed, context, identity)
|
|
|
2211
2374
|
return { ...outcome, object };
|
|
2212
2375
|
}
|
|
2213
2376
|
function applyLinkOperation(context, state, operation, cardinality, journal) {
|
|
2214
|
-
const working = requireWorkingLink(state, operation);
|
|
2215
2377
|
validateLinkEndpoints(context, state, operation);
|
|
2216
2378
|
const normalizedProperties = validateLinkOperation(context, operation);
|
|
2217
|
-
|
|
2379
|
+
if (cardinality === "one") {
|
|
2380
|
+
return applyLinkSlotOperation(context, state, operation, normalizedProperties, journal);
|
|
2381
|
+
}
|
|
2382
|
+
const working = requireWorkingLinkEdge(state, operation);
|
|
2383
|
+
const currentEffective = resolveLinkEdge(context.ontology, working, state.objects);
|
|
2218
2384
|
const transitionInput = {
|
|
2219
2385
|
operation,
|
|
2220
2386
|
hasSource: working.source !== null,
|
|
@@ -2222,11 +2388,51 @@ function applyLinkOperation(context, state, operation, cardinality, journal) {
|
|
|
2222
2388
|
effectiveExists: currentEffective !== null
|
|
2223
2389
|
};
|
|
2224
2390
|
const transition2 = applyLinkEdit({ ...transitionInput, normalizedProperties });
|
|
2225
|
-
|
|
2391
|
+
applyLinkEdgeTransition(working, transition2.next, journal);
|
|
2226
2392
|
return { id: operation.id, ok: true, authority: authorityOutcome(transition2.changed) };
|
|
2227
2393
|
}
|
|
2228
|
-
function
|
|
2229
|
-
const
|
|
2394
|
+
function applyLinkSlotOperation(context, state, operation, normalizedProperties, journal) {
|
|
2395
|
+
const key = linkScopeKey(operation.ref.source, operation.ref.linkId);
|
|
2396
|
+
const working = state.links.slots.get(key);
|
|
2397
|
+
if (!working) {
|
|
2398
|
+
throw new MaterializationValidationError("Link slot state was not loaded.");
|
|
2399
|
+
}
|
|
2400
|
+
const current = resolveLinkSlot(context.ontology, working, state.objects);
|
|
2401
|
+
const previous = working.override;
|
|
2402
|
+
let next = previous;
|
|
2403
|
+
switch (operation.kind) {
|
|
2404
|
+
case "link.upsert":
|
|
2405
|
+
if (current && linkRefKey(current.ref) !== linkRefKey(operation.ref)) {
|
|
2406
|
+
throw new MaterializationValidationError(`Link scope '${operation.ref.source.objectTypeId}.${operation.ref.linkId}' has cardinality one.`);
|
|
2407
|
+
}
|
|
2408
|
+
next = {
|
|
2409
|
+
kind: "set",
|
|
2410
|
+
target: operation.ref.target,
|
|
2411
|
+
...normalizedProperties !== undefined ? { properties: normalizedProperties } : {}
|
|
2412
|
+
};
|
|
2413
|
+
break;
|
|
2414
|
+
case "link.delete":
|
|
2415
|
+
if (current && linkRefKey(current.ref) === linkRefKey(operation.ref)) {
|
|
2416
|
+
next = { kind: "clear", target: operation.ref.target };
|
|
2417
|
+
}
|
|
2418
|
+
break;
|
|
2419
|
+
case "link.reset":
|
|
2420
|
+
if (previous && objectRefKey(previous.target) === objectRefKey(operation.ref.target)) {
|
|
2421
|
+
next = null;
|
|
2422
|
+
}
|
|
2423
|
+
break;
|
|
2424
|
+
}
|
|
2425
|
+
const changed = stableJsonStringify(previous) !== stableJsonStringify(next);
|
|
2426
|
+
working.override = next;
|
|
2427
|
+
journal?.push({
|
|
2428
|
+
restore: () => {
|
|
2429
|
+
working.override = previous;
|
|
2430
|
+
}
|
|
2431
|
+
});
|
|
2432
|
+
return { id: operation.id, ok: true, authority: authorityOutcome(changed) };
|
|
2433
|
+
}
|
|
2434
|
+
function requireWorkingLinkEdge(state, operation) {
|
|
2435
|
+
const working = state.links.edges.get(linkRefKey(operation.ref));
|
|
2230
2436
|
if (!working)
|
|
2231
2437
|
throw new MaterializationValidationError("Link state was not loaded.");
|
|
2232
2438
|
return working;
|
|
@@ -2247,17 +2453,9 @@ function validateLinkOperation(context, operation) {
|
|
|
2247
2453
|
return;
|
|
2248
2454
|
return validateLinkAuthorityProperties(context.ontology, operation.ref, operation.properties);
|
|
2249
2455
|
}
|
|
2250
|
-
function
|
|
2456
|
+
function applyLinkEdgeTransition(working, next, journal) {
|
|
2251
2457
|
const previous = working.override;
|
|
2252
2458
|
working.override = next;
|
|
2253
|
-
try {
|
|
2254
|
-
if (cardinality === "one") {
|
|
2255
|
-
validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
|
|
2256
|
-
}
|
|
2257
|
-
} catch (error) {
|
|
2258
|
-
working.override = previous;
|
|
2259
|
-
throw error;
|
|
2260
|
-
}
|
|
2261
2459
|
journal?.push({
|
|
2262
2460
|
restore: () => {
|
|
2263
2461
|
working.override = previous;
|
|
@@ -2286,24 +2484,57 @@ function isObjectOperation2(operation) {
|
|
|
2286
2484
|
|
|
2287
2485
|
// src/materializer/edits/plan.ts
|
|
2288
2486
|
async function stageEditPlan(context, storage, session, state, planContext) {
|
|
2289
|
-
validateWorkingCardinality(
|
|
2487
|
+
validateWorkingCardinality(state.links.slots);
|
|
2290
2488
|
const objectChanges = [];
|
|
2291
2489
|
for (const working of sortedObjects(state.objects)) {
|
|
2292
|
-
const change = await
|
|
2490
|
+
const change = await stageObject(context, storage, session, working, planContext);
|
|
2293
2491
|
if (change)
|
|
2294
2492
|
objectChanges.push(change);
|
|
2295
2493
|
}
|
|
2296
2494
|
const linkChanges = [];
|
|
2297
|
-
for (const working of
|
|
2298
|
-
const change = await
|
|
2495
|
+
for (const working of sortedLinkEdges(state.links.edges)) {
|
|
2496
|
+
const change = await stageLinkEdge(context, storage, session, state.objects, working, planContext);
|
|
2299
2497
|
if (change)
|
|
2300
2498
|
linkChanges.push(change);
|
|
2301
2499
|
}
|
|
2500
|
+
for (const working of sortedLinkSlots(state.links.slots)) {
|
|
2501
|
+
linkChanges.push(...await stageLinkSlot(context, storage, session, state.objects, working, planContext));
|
|
2502
|
+
}
|
|
2302
2503
|
return { objects: objectChanges, links: linkChanges };
|
|
2303
2504
|
}
|
|
2304
|
-
async function
|
|
2505
|
+
async function stageLinkSlot(context, storage, session, objects, working, planContext) {
|
|
2506
|
+
const overrideItems = [];
|
|
2507
|
+
appendLinkSlotOverrideWork(overrideItems, working, planContext.identity);
|
|
2508
|
+
const resolved = resolveLinkSlot(context.ontology, working, objects);
|
|
2509
|
+
const changes = diffEffectiveLinkSlot({
|
|
2510
|
+
before: working.before,
|
|
2511
|
+
resolved,
|
|
2512
|
+
commitId: planContext.identity.commitId,
|
|
2513
|
+
committedAt: planContext.identity.committedAt
|
|
2514
|
+
});
|
|
2515
|
+
const representative = resolved?.ref ?? working.before?.ref ?? (working.override ? {
|
|
2516
|
+
source: working.ref.source,
|
|
2517
|
+
linkId: working.ref.linkId,
|
|
2518
|
+
target: working.override.target
|
|
2519
|
+
} : null);
|
|
2520
|
+
const scopeSortKey = linkScopeSortKey(working.ref.source, working.ref.linkId);
|
|
2521
|
+
const work = overrideItems.map((item) => planWork(item, scopeSortKey));
|
|
2522
|
+
if (representative) {
|
|
2523
|
+
work.push(classificationWork("link", linkRefKey(representative), linkRefSortKey(representative)));
|
|
2524
|
+
}
|
|
2525
|
+
for (const change of changes) {
|
|
2526
|
+
const effectiveItems = [];
|
|
2527
|
+
appendEffectiveLinkWork(effectiveItems, change);
|
|
2528
|
+
const sortKey = linkRefSortKey(change.ref);
|
|
2529
|
+
work.push(...effectiveItems.map((item) => planWork(item, sortKey)));
|
|
2530
|
+
work.push(eventWork(buildLinkEvent(context, planContext, change)));
|
|
2531
|
+
}
|
|
2532
|
+
await stageWorkBounded(context, storage, session, work);
|
|
2533
|
+
return changes;
|
|
2534
|
+
}
|
|
2535
|
+
async function stageObject(context, storage, session, working, planContext) {
|
|
2305
2536
|
const items = [];
|
|
2306
|
-
|
|
2537
|
+
appendObjectOverrideWork(items, working, planContext.identity);
|
|
2307
2538
|
const resolved = resolveObject(context.ontology, working);
|
|
2308
2539
|
if (resolved)
|
|
2309
2540
|
validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
|
|
@@ -2314,7 +2545,7 @@ async function stageObjectPlan(context, storage, session, working, planContext)
|
|
|
2314
2545
|
committedAt: planContext.identity.committedAt
|
|
2315
2546
|
});
|
|
2316
2547
|
if (change)
|
|
2317
|
-
|
|
2548
|
+
appendEffectiveObjectWork(items, change);
|
|
2318
2549
|
const sortKey = objectRefSortKey(working.ref);
|
|
2319
2550
|
const work = [
|
|
2320
2551
|
classificationWork("object", objectRefKey(working.ref), sortKey),
|
|
@@ -2326,10 +2557,10 @@ async function stageObjectPlan(context, storage, session, working, planContext)
|
|
|
2326
2557
|
await stageWorkBounded(context, storage, session, work);
|
|
2327
2558
|
return change;
|
|
2328
2559
|
}
|
|
2329
|
-
async function
|
|
2560
|
+
async function stageLinkEdge(context, storage, session, objects, working, planContext) {
|
|
2330
2561
|
const items = [];
|
|
2331
|
-
|
|
2332
|
-
const resolved =
|
|
2562
|
+
appendLinkEdgeOverrideWork(items, working, planContext.identity);
|
|
2563
|
+
const resolved = resolveLinkEdge(context.ontology, working, objects);
|
|
2333
2564
|
const change = diffEffectiveLink({
|
|
2334
2565
|
before: working.before,
|
|
2335
2566
|
resolved,
|
|
@@ -2337,7 +2568,7 @@ async function stageLinkPlan(context, storage, session, objects, working, planCo
|
|
|
2337
2568
|
committedAt: planContext.identity.committedAt
|
|
2338
2569
|
});
|
|
2339
2570
|
if (change)
|
|
2340
|
-
|
|
2571
|
+
appendEffectiveLinkWork(items, change);
|
|
2341
2572
|
const sortKey = linkRefSortKey(working.ref);
|
|
2342
2573
|
const work = [
|
|
2343
2574
|
classificationWork("link", linkRefKey(working.ref), sortKey),
|
|
@@ -2362,7 +2593,8 @@ function materializationEventContext(context, planContext) {
|
|
|
2362
2593
|
projectId: context.projectId,
|
|
2363
2594
|
commitId: planContext.identity.commitId,
|
|
2364
2595
|
committedAt: planContext.identity.committedAt,
|
|
2365
|
-
origin: planContext.origin
|
|
2596
|
+
origin: planContext.origin,
|
|
2597
|
+
correlationId: planContext.correlationId
|
|
2366
2598
|
};
|
|
2367
2599
|
if (planContext.actor === undefined)
|
|
2368
2600
|
return base;
|
|
@@ -2371,20 +2603,20 @@ function materializationEventContext(context, planContext) {
|
|
|
2371
2603
|
function sortedObjects(objects) {
|
|
2372
2604
|
return [...objects.values()].sort((left, right) => compareObjectRefs(left.ref, right.ref));
|
|
2373
2605
|
}
|
|
2374
|
-
function
|
|
2375
|
-
return [...
|
|
2606
|
+
function sortedLinkEdges(edges) {
|
|
2607
|
+
return [...edges.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref));
|
|
2608
|
+
}
|
|
2609
|
+
function sortedLinkSlots(slots) {
|
|
2610
|
+
return [...slots.values()].sort((left, right) => linkScopeKey(left.ref.source, left.ref.linkId).localeCompare(linkScopeKey(right.ref.source, right.ref.linkId)));
|
|
2376
2611
|
}
|
|
2377
2612
|
|
|
2378
2613
|
// src/materializer/edits/commit.ts
|
|
2379
2614
|
async function commitEdits(context, raw) {
|
|
2380
2615
|
const command = prepareEditCommit(context, raw);
|
|
2381
|
-
const replay = await replayEditCommit(context, command);
|
|
2382
|
-
if (replay)
|
|
2383
|
-
return replay;
|
|
2384
2616
|
return executeEditCommit(context, command);
|
|
2385
2617
|
}
|
|
2386
2618
|
function prepareEditCommit(context, raw) {
|
|
2387
|
-
const input = normalizeOntologyEditCommit(raw);
|
|
2619
|
+
const input = normalizeOntologyEditCommit(raw.input);
|
|
2388
2620
|
const idempotencyKey = editIdempotencyKey(input);
|
|
2389
2621
|
const identity = createTimedCommitIdentity({
|
|
2390
2622
|
projectId: context.projectId,
|
|
@@ -2392,7 +2624,12 @@ function prepareEditCommit(context, raw) {
|
|
|
2392
2624
|
normalizedCallerIntent: input,
|
|
2393
2625
|
now: context.clock()
|
|
2394
2626
|
});
|
|
2395
|
-
return {
|
|
2627
|
+
return {
|
|
2628
|
+
input,
|
|
2629
|
+
identity,
|
|
2630
|
+
origin: input.source,
|
|
2631
|
+
execution: prepareMaterializerExecution(context.projectId, raw.scope)
|
|
2632
|
+
};
|
|
2396
2633
|
}
|
|
2397
2634
|
function editIdempotencyKey(input) {
|
|
2398
2635
|
if (input.source.kind === "action") {
|
|
@@ -2400,20 +2637,40 @@ function editIdempotencyKey(input) {
|
|
|
2400
2637
|
}
|
|
2401
2638
|
return createRuntimeIdempotencyKey(input.source.requestId);
|
|
2402
2639
|
}
|
|
2403
|
-
async function lockActionRunForMaterialization(storage, projectId, input) {
|
|
2640
|
+
async function lockActionRunForMaterialization(storage, projectId, input, execution) {
|
|
2404
2641
|
if (input.source.kind !== "action")
|
|
2405
2642
|
return;
|
|
2406
2643
|
if (!storage.actionRuns) {
|
|
2407
2644
|
throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
|
|
2408
2645
|
}
|
|
2409
|
-
await storage.actionRuns.lockForMaterialization({
|
|
2646
|
+
const run = await storage.actionRuns.lockForMaterialization({
|
|
2410
2647
|
projectId,
|
|
2411
2648
|
actionId: input.source.actionId,
|
|
2412
2649
|
runId: input.source.runId
|
|
2413
2650
|
});
|
|
2651
|
+
assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
|
|
2414
2652
|
}
|
|
2415
|
-
function
|
|
2416
|
-
|
|
2653
|
+
async function validateMutationExecution(storage, projectId, input, execution) {
|
|
2654
|
+
if (input.source.kind !== "action") {
|
|
2655
|
+
assertRuntimeMutationExecution(execution);
|
|
2656
|
+
return;
|
|
2657
|
+
}
|
|
2658
|
+
assertTrustedPrimitiveMutationExecution(execution, {
|
|
2659
|
+
kind: "action",
|
|
2660
|
+
id: input.source.actionId,
|
|
2661
|
+
runId: input.source.runId
|
|
2662
|
+
});
|
|
2663
|
+
if (!storage.actionRuns) {
|
|
2664
|
+
throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
|
|
2665
|
+
}
|
|
2666
|
+
const run = await storage.actionRuns.getById({ projectId, id: input.source.runId });
|
|
2667
|
+
if (!run) {
|
|
2668
|
+
throw new MaterializationValidationError(`Action run '${input.source.runId}' was not found.`);
|
|
2669
|
+
}
|
|
2670
|
+
if (run.actionId !== input.source.actionId) {
|
|
2671
|
+
throw new MaterializationConflictError("run-correlation", `Action run '${run.id}' does not belong to action '${input.source.actionId}'.`);
|
|
2672
|
+
}
|
|
2673
|
+
assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
|
|
2417
2674
|
}
|
|
2418
2675
|
async function executeEditCommit(context, command) {
|
|
2419
2676
|
return withSerializationRetry(context, () => context.storage.transaction((storage) => executeEditTransaction(context, storage, command), {
|
|
@@ -2421,10 +2678,12 @@ async function executeEditCommit(context, command) {
|
|
|
2421
2678
|
}));
|
|
2422
2679
|
}
|
|
2423
2680
|
async function executeEditTransaction(context, storage, command) {
|
|
2424
|
-
await
|
|
2425
|
-
|
|
2681
|
+
await ensureMaterializerExecution(storage.executions, command.execution);
|
|
2682
|
+
await validateMutationExecution(storage, context.projectId, command.input, command.execution);
|
|
2683
|
+
const replay = await replayCommit(context, command.identity, command.execution.executionId, storage);
|
|
2426
2684
|
if (replay)
|
|
2427
2685
|
return replay;
|
|
2686
|
+
await lockActionRunForMaterialization(storage, context.projectId, command.input, command.execution);
|
|
2428
2687
|
const session = await beginEditMaterialization(context, storage, command);
|
|
2429
2688
|
const workingState = await loadEditWorkingState(context, storage.ontology.materializations, session, command.input.operations);
|
|
2430
2689
|
const outcomes = applyEditOperations(context, workingState, command);
|
|
@@ -2459,6 +2718,7 @@ function buildEditCommit(context, command) {
|
|
|
2459
2718
|
id: command.identity.commitId,
|
|
2460
2719
|
idempotencyKey: command.identity.idempotencyKey,
|
|
2461
2720
|
requestHash: command.identity.requestHash,
|
|
2721
|
+
executionId: command.execution.executionId,
|
|
2462
2722
|
origin: command.origin,
|
|
2463
2723
|
ontologyRevision: context.projectionRegistry.ontologyRevision,
|
|
2464
2724
|
intent: {
|
|
@@ -2468,9 +2728,9 @@ function buildEditCommit(context, command) {
|
|
|
2468
2728
|
},
|
|
2469
2729
|
committedAt: command.identity.committedAt
|
|
2470
2730
|
};
|
|
2471
|
-
if (command.
|
|
2731
|
+
if (command.execution.actor === undefined)
|
|
2472
2732
|
return commit;
|
|
2473
|
-
return { ...commit, actor: command.
|
|
2733
|
+
return { ...commit, actor: command.execution.actor };
|
|
2474
2734
|
}
|
|
2475
2735
|
function editExpectations(input) {
|
|
2476
2736
|
if (input.mode === "atomic") {
|
|
@@ -2539,10 +2799,14 @@ function isRecoverableEditValidation(input, error) {
|
|
|
2539
2799
|
return error instanceof MaterializationValidationError;
|
|
2540
2800
|
}
|
|
2541
2801
|
function editPlanContext(command) {
|
|
2542
|
-
const context = {
|
|
2543
|
-
|
|
2802
|
+
const context = {
|
|
2803
|
+
identity: command.identity,
|
|
2804
|
+
origin: command.origin,
|
|
2805
|
+
correlationId: command.execution.correlationId
|
|
2806
|
+
};
|
|
2807
|
+
if (command.execution.actor === undefined)
|
|
2544
2808
|
return context;
|
|
2545
|
-
return { ...context, actor: command.
|
|
2809
|
+
return { ...context, actor: command.execution.actor };
|
|
2546
2810
|
}
|
|
2547
2811
|
async function finalizeEditMaterialization(storage, session, result) {
|
|
2548
2812
|
const applied = await storage.ontology.materializations.finalize({
|
|
@@ -2611,11 +2875,11 @@ async function finishProjectionRun(context, raw) {
|
|
|
2611
2875
|
}));
|
|
2612
2876
|
}
|
|
2613
2877
|
function prepareProjectionRunFinish(context, raw) {
|
|
2614
|
-
assertValidTerminalDecision(raw);
|
|
2615
|
-
const source = normalizeProjectionSourceRef(raw.source);
|
|
2616
|
-
const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion);
|
|
2617
|
-
const
|
|
2618
|
-
const resolved = raw.protocol === "replacement" ? context.projectionRegistry.resolveSource(source.projectionId) : context.projectionRegistry.resolveTelemetry(source.projectionId);
|
|
2878
|
+
assertValidTerminalDecision(raw.input);
|
|
2879
|
+
const source = normalizeProjectionSourceRef(raw.input.source);
|
|
2880
|
+
const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
|
|
2881
|
+
const projectionExecution = normalizeProjectionExecution(raw.input.execution);
|
|
2882
|
+
const resolved = raw.input.protocol === "replacement" ? context.projectionRegistry.resolveSource(source.projectionId) : context.projectionRegistry.resolveTelemetry(source.projectionId);
|
|
2619
2883
|
if (resolved.datasetId !== datasetVersion.datasetId) {
|
|
2620
2884
|
throw new MaterializationValidationError(`Projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`);
|
|
2621
2885
|
}
|
|
@@ -2626,20 +2890,28 @@ function prepareProjectionRunFinish(context, raw) {
|
|
|
2626
2890
|
});
|
|
2627
2891
|
return {
|
|
2628
2892
|
projectId: context.projectId,
|
|
2629
|
-
input: { ...raw, source, datasetVersion, execution },
|
|
2893
|
+
input: { ...raw.input, source, datasetVersion, execution: projectionExecution },
|
|
2630
2894
|
identity,
|
|
2631
2895
|
resolved,
|
|
2632
|
-
finishedAt: context.clock()
|
|
2896
|
+
finishedAt: new Date(raw.input.finishedAt ?? context.clock()),
|
|
2897
|
+
execution: prepareMaterializerExecution(context.projectId, raw.scope)
|
|
2633
2898
|
};
|
|
2634
2899
|
}
|
|
2635
2900
|
async function finishProjectionRunTransaction(storage, command) {
|
|
2636
|
-
|
|
2901
|
+
await ensureMaterializerExecution(storage.executions, command.execution);
|
|
2902
|
+
assertTrustedPrimitiveMutationExecution(command.execution, {
|
|
2903
|
+
kind: "projection",
|
|
2904
|
+
id: command.input.source.projectionId,
|
|
2905
|
+
runId: command.input.execution.projectionRunId
|
|
2906
|
+
});
|
|
2907
|
+
const { projectionRuns, run } = await lockProjectionRunForMaterialization(storage, {
|
|
2637
2908
|
projectId: command.projectId,
|
|
2638
2909
|
projectionRunId: command.input.execution.projectionRunId,
|
|
2639
2910
|
executionToken: command.input.execution.executionToken,
|
|
2640
2911
|
identity: command.identity,
|
|
2641
2912
|
resolved: command.resolved
|
|
2642
2913
|
});
|
|
2914
|
+
assertMaterializerRunExecution(command.execution, run.executionId, `Projection run '${run.id}'`);
|
|
2643
2915
|
if (command.input.protocol === "replacement") {
|
|
2644
2916
|
await assertReplacementTerminalDecision(storage, command);
|
|
2645
2917
|
}
|
|
@@ -2674,7 +2946,7 @@ function terminalDecision(input) {
|
|
|
2674
2946
|
return {
|
|
2675
2947
|
protocol: input.protocol,
|
|
2676
2948
|
status: input.status,
|
|
2677
|
-
...input.
|
|
2949
|
+
...input.error === undefined ? {} : { error: input.error }
|
|
2678
2950
|
};
|
|
2679
2951
|
}
|
|
2680
2952
|
if (input.protocol === "telemetry") {
|
|
@@ -2703,7 +2975,7 @@ async function assertReplacementTerminalDecision(storage, command) {
|
|
|
2703
2975
|
}
|
|
2704
2976
|
function assertReplacementCommitCorrelation(commit, command) {
|
|
2705
2977
|
const { input, identity } = command;
|
|
2706
|
-
if (commit.origin.kind !== "projection" || commit.intent.kind !== "projection" || commit.result.kind !== "projection" || commit.origin.projectionRunId !== input.execution.projectionRunId || commit.origin.projectionId !== input.source.projectionId || commit.intent.source.projectionId !== input.source.projectionId || !datasetVersionsEqual(commit.intent.datasetVersion, input.datasetVersion) || commit.ontologyRevision !== identity.ontologyRevision || commit.projectionRevision !== identity.projectionRevision || commit.ownershipHash !== identity.ownershipHash) {
|
|
2978
|
+
if (commit.origin.kind !== "projection" || commit.executionId !== command.execution.executionId || commit.intent.kind !== "projection" || commit.result.kind !== "projection" || commit.origin.projectionRunId !== input.execution.projectionRunId || commit.origin.projectionId !== input.source.projectionId || commit.intent.source.projectionId !== input.source.projectionId || !datasetVersionsEqual(commit.intent.datasetVersion, input.datasetVersion) || commit.ontologyRevision !== identity.ontologyRevision || commit.projectionRevision !== identity.projectionRevision || commit.ownershipHash !== identity.ownershipHash) {
|
|
2707
2979
|
throw new MaterializationConflictError("run-correlation", `Projection replacement run '${input.execution.projectionRunId}' commit identity does not match.`);
|
|
2708
2980
|
}
|
|
2709
2981
|
}
|
|
@@ -2853,7 +3125,7 @@ function planReplacementObject(context, input, state, counts) {
|
|
|
2853
3125
|
}
|
|
2854
3126
|
function appendObjectChangeWork(work, sortKey, context, input, change) {
|
|
2855
3127
|
const items = [];
|
|
2856
|
-
|
|
3128
|
+
appendEffectiveObjectWork(items, change);
|
|
2857
3129
|
for (const item of items)
|
|
2858
3130
|
work.push(planWork(item, sortKey));
|
|
2859
3131
|
work.push(eventWork(buildObjectMaterializationEventDraft({
|
|
@@ -2861,6 +3133,7 @@ function appendObjectChangeWork(work, sortKey, context, input, change) {
|
|
|
2861
3133
|
commitId: input.identity.commitId,
|
|
2862
3134
|
committedAt: input.identity.committedAt,
|
|
2863
3135
|
origin: input.origin,
|
|
3136
|
+
correlationId: input.correlationId,
|
|
2864
3137
|
change
|
|
2865
3138
|
})));
|
|
2866
3139
|
}
|
|
@@ -2923,7 +3196,7 @@ function planLinkPage(context, input, page, endpointExistence, counts) {
|
|
|
2923
3196
|
return work;
|
|
2924
3197
|
}
|
|
2925
3198
|
function planReplacementLink(context, input, state, endpointExistence, counts) {
|
|
2926
|
-
const resolved = resolveReplacementLink(state, endpointExistence);
|
|
3199
|
+
const resolved = resolveReplacementLink(context, state, endpointExistence);
|
|
2927
3200
|
const work = cardinalityWork(context, state, resolved !== null);
|
|
2928
3201
|
if (!state.diffRequired)
|
|
2929
3202
|
return work;
|
|
@@ -2943,9 +3216,18 @@ function planReplacementLink(context, input, state, endpointExistence, counts) {
|
|
|
2943
3216
|
appendLinkChangeWork(work, sortKey, context, input, change);
|
|
2944
3217
|
return work;
|
|
2945
3218
|
}
|
|
2946
|
-
function resolveReplacementLink(state, endpointExistence) {
|
|
3219
|
+
function resolveReplacementLink(context, state, endpointExistence) {
|
|
2947
3220
|
if (!state.diffRequired)
|
|
2948
3221
|
return state.effective;
|
|
3222
|
+
const definition = context.ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
|
|
3223
|
+
if (definition?.cardinality === "one") {
|
|
3224
|
+
return resolveEffectiveLinkSlotMember({
|
|
3225
|
+
ref: state.ref,
|
|
3226
|
+
source: state.candidateSource,
|
|
3227
|
+
override: usableLinkSlotOverride(state.slotOverride),
|
|
3228
|
+
endpointExists: (ref) => endpointExistence.get(objectRefKey(ref)) ?? false
|
|
3229
|
+
});
|
|
3230
|
+
}
|
|
2949
3231
|
return resolveEffectiveLink({
|
|
2950
3232
|
ref: state.ref,
|
|
2951
3233
|
source: state.candidateSource,
|
|
@@ -2963,7 +3245,17 @@ function cardinalityWork(context, state, occupied) {
|
|
|
2963
3245
|
return [
|
|
2964
3246
|
{
|
|
2965
3247
|
kind: "cardinality",
|
|
2966
|
-
recordKey: `cardinality:${scopeSortKey}:${linkSortKey}`,
|
|
3248
|
+
recordKey: `cardinality:candidate:${scopeSortKey}:${linkSortKey}`,
|
|
3249
|
+
view: "candidate",
|
|
3250
|
+
scopeSortKey,
|
|
3251
|
+
linkSortKey,
|
|
3252
|
+
ref: state.ref,
|
|
3253
|
+
occupied: state.candidateSource !== null
|
|
3254
|
+
},
|
|
3255
|
+
{
|
|
3256
|
+
kind: "cardinality",
|
|
3257
|
+
recordKey: `cardinality:effective:${scopeSortKey}:${linkSortKey}`,
|
|
3258
|
+
view: "effective",
|
|
2967
3259
|
scopeSortKey,
|
|
2968
3260
|
linkSortKey,
|
|
2969
3261
|
ref: state.ref,
|
|
@@ -2973,7 +3265,7 @@ function cardinalityWork(context, state, occupied) {
|
|
|
2973
3265
|
}
|
|
2974
3266
|
function appendLinkChangeWork(work, sortKey, context, input, change) {
|
|
2975
3267
|
const items = [];
|
|
2976
|
-
|
|
3268
|
+
appendEffectiveLinkWork(items, change);
|
|
2977
3269
|
for (const item of items)
|
|
2978
3270
|
work.push(planWork(item, sortKey));
|
|
2979
3271
|
work.push(eventWork(buildLinkMaterializationEventDraft({
|
|
@@ -2981,6 +3273,7 @@ function appendLinkChangeWork(work, sortKey, context, input, change) {
|
|
|
2981
3273
|
commitId: input.identity.commitId,
|
|
2982
3274
|
committedAt: input.identity.committedAt,
|
|
2983
3275
|
origin: input.origin,
|
|
3276
|
+
correlationId: input.correlationId,
|
|
2984
3277
|
change
|
|
2985
3278
|
})));
|
|
2986
3279
|
}
|
|
@@ -3080,10 +3373,7 @@ async function stageProjectionMaterialization(context, input) {
|
|
|
3080
3373
|
// src/materializer/projections/replace.ts
|
|
3081
3374
|
async function replaceProjection(context, raw) {
|
|
3082
3375
|
const command = prepareProjectionReplacement(context, raw);
|
|
3083
|
-
await
|
|
3084
|
-
capabilityErrorMessage: "Storage does not provide projection run capabilities required by source replacement."
|
|
3085
|
-
});
|
|
3086
|
-
const replay = await replayProjectionCommit(context, command);
|
|
3376
|
+
const replay = await admitProjectionExecution(context, command);
|
|
3087
3377
|
if (replay)
|
|
3088
3378
|
return replay;
|
|
3089
3379
|
const candidate = await prepareProjectionCandidate(context, command);
|
|
@@ -3096,9 +3386,9 @@ async function replaceProjection(context, raw) {
|
|
|
3096
3386
|
}
|
|
3097
3387
|
}
|
|
3098
3388
|
function prepareProjectionReplacement(context, raw) {
|
|
3099
|
-
const source = normalizeProjectionSourceRef(raw.source);
|
|
3100
|
-
const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion);
|
|
3101
|
-
const execution = normalizeProjectionExecution(raw.execution);
|
|
3389
|
+
const source = normalizeProjectionSourceRef(raw.input.source);
|
|
3390
|
+
const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
|
|
3391
|
+
const execution = normalizeProjectionExecution(raw.input.execution);
|
|
3102
3392
|
const resolved = context.projectionRegistry.resolveSource(source.projectionId);
|
|
3103
3393
|
validateProjectionDataset(resolved, datasetVersion);
|
|
3104
3394
|
const projectionKind = sourceProjectionKind(resolved);
|
|
@@ -3116,15 +3406,16 @@ function prepareProjectionReplacement(context, raw) {
|
|
|
3116
3406
|
source,
|
|
3117
3407
|
datasetVersion,
|
|
3118
3408
|
execution,
|
|
3119
|
-
entries: raw.entries,
|
|
3409
|
+
entries: raw.input.entries,
|
|
3120
3410
|
resolved,
|
|
3121
3411
|
projectionKind,
|
|
3122
3412
|
runIdentity,
|
|
3123
|
-
identity
|
|
3413
|
+
identity,
|
|
3414
|
+
scopeExecution: prepareMaterializerExecution(context.projectId, raw.scope)
|
|
3124
3415
|
};
|
|
3125
|
-
if (raw.signal === undefined)
|
|
3416
|
+
if (raw.input.signal === undefined)
|
|
3126
3417
|
return command;
|
|
3127
|
-
return { ...command, signal: raw.signal };
|
|
3418
|
+
return { ...command, signal: raw.input.signal };
|
|
3128
3419
|
}
|
|
3129
3420
|
function validateProjectionDataset(resolved, datasetVersion) {
|
|
3130
3421
|
if (datasetVersion.datasetId === resolved.datasetId)
|
|
@@ -3137,7 +3428,12 @@ function sourceProjectionKind(resolved) {
|
|
|
3137
3428
|
return "link";
|
|
3138
3429
|
}
|
|
3139
3430
|
async function assertProjectionExecution(storage, projectId, command, options = {}) {
|
|
3140
|
-
|
|
3431
|
+
assertTrustedPrimitiveMutationExecution(command.scopeExecution, {
|
|
3432
|
+
kind: "projection",
|
|
3433
|
+
id: command.source.projectionId,
|
|
3434
|
+
runId: command.execution.projectionRunId
|
|
3435
|
+
});
|
|
3436
|
+
const locked = await lockProjectionRunForMaterialization(storage, {
|
|
3141
3437
|
projectId,
|
|
3142
3438
|
projectionRunId: command.execution.projectionRunId,
|
|
3143
3439
|
executionToken: command.execution.executionToken,
|
|
@@ -3145,14 +3441,15 @@ async function assertProjectionExecution(storage, projectId, command, options =
|
|
|
3145
3441
|
resolved: command.resolved,
|
|
3146
3442
|
...options
|
|
3147
3443
|
});
|
|
3444
|
+
assertMaterializerRunExecution(command.scopeExecution, locked.run.executionId, `Projection run '${locked.run.id}'`);
|
|
3148
3445
|
}
|
|
3149
|
-
async function
|
|
3150
|
-
const existing = await replayCommitRecord(context, command.identity);
|
|
3151
|
-
if (!existing)
|
|
3152
|
-
return null;
|
|
3446
|
+
async function admitProjectionExecution(context, command) {
|
|
3153
3447
|
return withSerializationRetry(context, () => context.storage.transaction(async (storage) => {
|
|
3154
|
-
await
|
|
3155
|
-
|
|
3448
|
+
await ensureMaterializerExecution(storage.executions, command.scopeExecution);
|
|
3449
|
+
await assertProjectionExecution(storage, context.projectId, command, {
|
|
3450
|
+
capabilityErrorMessage: "Storage does not provide projection run capabilities required by source replacement."
|
|
3451
|
+
});
|
|
3452
|
+
const commit = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
|
|
3156
3453
|
return commit ? projectionReplayResult(commit, command) : null;
|
|
3157
3454
|
}, { isolation: "serializable" }));
|
|
3158
3455
|
}
|
|
@@ -3214,8 +3511,9 @@ async function commitProjectionCandidate(context, command, ready) {
|
|
|
3214
3511
|
return withSerializationRetry(context, () => context.storage.transaction((storage) => executeProjectionTransaction(context, storage, command, ready), { isolation: "serializable" }));
|
|
3215
3512
|
}
|
|
3216
3513
|
async function executeProjectionTransaction(context, storage, command, ready) {
|
|
3514
|
+
await ensureMaterializerExecution(storage.executions, command.scopeExecution);
|
|
3217
3515
|
await assertProjectionExecution(storage, context.projectId, command);
|
|
3218
|
-
const replay = await replayCommitRecord(context, command.identity, storage);
|
|
3516
|
+
const replay = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
|
|
3219
3517
|
if (replay)
|
|
3220
3518
|
return projectionReplayResult(replay, command);
|
|
3221
3519
|
const origin = projectionOrigin(command);
|
|
@@ -3269,6 +3567,7 @@ function projectionCommit(projectId, command, identity, origin) {
|
|
|
3269
3567
|
id: identity.commitId,
|
|
3270
3568
|
idempotencyKey: identity.idempotencyKey,
|
|
3271
3569
|
requestHash: identity.requestHash,
|
|
3570
|
+
executionId: command.scopeExecution.executionId,
|
|
3272
3571
|
origin,
|
|
3273
3572
|
ontologyRevision: command.runIdentity.ontologyRevision,
|
|
3274
3573
|
projectionRevision: command.runIdentity.projectionRevision,
|
|
@@ -3283,7 +3582,8 @@ async function planReadyProjection(context, storage, session, command, ready, or
|
|
|
3283
3582
|
materializationId: ready.materializationId,
|
|
3284
3583
|
projectionKind: command.projectionKind,
|
|
3285
3584
|
identity: ready.identity,
|
|
3286
|
-
origin
|
|
3585
|
+
origin,
|
|
3586
|
+
correlationId: command.scopeExecution.correlationId
|
|
3287
3587
|
};
|
|
3288
3588
|
if (command.signal === undefined) {
|
|
3289
3589
|
return planProjectionReplacement(context, storage, session, input);
|
|
@@ -3326,7 +3626,7 @@ function shouldAbandonCandidate(error) {
|
|
|
3326
3626
|
return true;
|
|
3327
3627
|
if (error instanceof MaterializationCancellationError)
|
|
3328
3628
|
return true;
|
|
3329
|
-
return error instanceof MaterializationConflictError && error.kind === "run-correlation";
|
|
3629
|
+
return error instanceof MaterializationConflictError && (error.kind === "run-correlation" || error.kind === "idempotency");
|
|
3330
3630
|
}
|
|
3331
3631
|
function validateProjectionWatermark(active, next) {
|
|
3332
3632
|
if (!active)
|
|
@@ -3335,9 +3635,9 @@ function validateProjectionWatermark(active, next) {
|
|
|
3335
3635
|
}
|
|
3336
3636
|
|
|
3337
3637
|
// src/materializer/telemetry/plan.ts
|
|
3338
|
-
async function planTelemetryAppend(context, storage, session, input, identity, origin) {
|
|
3638
|
+
async function planTelemetryAppend(context, storage, session, input, identity, origin, event) {
|
|
3339
3639
|
const counts = emptyTelemetryCounts();
|
|
3340
|
-
const planContext = { input, identity, origin };
|
|
3640
|
+
const planContext = { input, identity, origin, event };
|
|
3341
3641
|
const objects = await loadTelemetryObjects(context, storage, session, input.points);
|
|
3342
3642
|
const existingPoints = await loadExistingPoints(context, storage, session, input.points);
|
|
3343
3643
|
for (const group of telemetryObjectGroups(input.points)) {
|
|
@@ -3505,7 +3805,7 @@ async function stageTelemetryObjectPlan(context, storage, session, planContext,
|
|
|
3505
3805
|
if (change) {
|
|
3506
3806
|
counts.latestObjectsChanged += 1;
|
|
3507
3807
|
const items = [];
|
|
3508
|
-
|
|
3808
|
+
appendEffectiveObjectWork(items, change);
|
|
3509
3809
|
work.push(...items.map((item) => planWork(item, sortKey)));
|
|
3510
3810
|
const eventContext = telemetryEventContext(context, planContext);
|
|
3511
3811
|
work.push(eventWork(buildObjectMaterializationEventDraft({ ...eventContext, change })));
|
|
@@ -3517,11 +3817,12 @@ function telemetryEventContext(context, planContext) {
|
|
|
3517
3817
|
projectId: context.projectId,
|
|
3518
3818
|
commitId: planContext.identity.commitId,
|
|
3519
3819
|
committedAt: planContext.identity.committedAt,
|
|
3520
|
-
origin: planContext.origin
|
|
3820
|
+
origin: planContext.origin,
|
|
3821
|
+
correlationId: planContext.event.correlationId
|
|
3521
3822
|
};
|
|
3522
|
-
if (planContext.
|
|
3823
|
+
if (planContext.event.actor === undefined)
|
|
3523
3824
|
return eventContext;
|
|
3524
|
-
return { ...eventContext, actor: planContext.
|
|
3825
|
+
return { ...eventContext, actor: planContext.event.actor };
|
|
3525
3826
|
}
|
|
3526
3827
|
function emptyTelemetryCounts() {
|
|
3527
3828
|
return {
|
|
@@ -3535,26 +3836,28 @@ function emptyTelemetryCounts() {
|
|
|
3535
3836
|
// src/materializer/telemetry/append.ts
|
|
3536
3837
|
async function appendTelemetry(context, raw) {
|
|
3537
3838
|
const command = prepareTelemetryAppend(context, raw);
|
|
3538
|
-
if (command.kind === "runtime") {
|
|
3539
|
-
const replay = await replayCommit(context, command.identity);
|
|
3540
|
-
if (replay)
|
|
3541
|
-
return replay;
|
|
3542
|
-
}
|
|
3543
3839
|
return executeTelemetryCommit(context, command);
|
|
3544
3840
|
}
|
|
3545
3841
|
function prepareTelemetryAppend(context, raw) {
|
|
3546
|
-
const rawInputPointCount = raw.points.length;
|
|
3842
|
+
const rawInputPointCount = raw.input.points.length;
|
|
3547
3843
|
const input = normalizeTelemetryAppend({
|
|
3548
|
-
...raw,
|
|
3549
|
-
points: raw.points.map((point) => validateTelemetryPoint(context.ontology, point))
|
|
3844
|
+
...raw.input,
|
|
3845
|
+
points: raw.input.points.map((point) => validateTelemetryPoint(context.ontology, point))
|
|
3550
3846
|
});
|
|
3551
3847
|
const inputPointCount = telemetryInputPointCount(input, rawInputPointCount);
|
|
3552
3848
|
validateTelemetryBatch(input, inputPointCount);
|
|
3553
3849
|
const ontologyRevision = context.projectionRegistry.ontologyRevision;
|
|
3850
|
+
const execution = prepareMaterializerExecution(context.projectId, raw.scope);
|
|
3554
3851
|
if (input.source.kind === "runtime") {
|
|
3555
|
-
return
|
|
3852
|
+
return {
|
|
3853
|
+
...prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
|
|
3854
|
+
execution
|
|
3855
|
+
};
|
|
3556
3856
|
}
|
|
3557
|
-
return
|
|
3857
|
+
return {
|
|
3858
|
+
...prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
|
|
3859
|
+
execution
|
|
3860
|
+
};
|
|
3558
3861
|
}
|
|
3559
3862
|
function telemetryInputPointCount(input, rawInputPointCount) {
|
|
3560
3863
|
if (input.source.kind === "projection")
|
|
@@ -3634,13 +3937,18 @@ function projectionTelemetryCallerIntent(input, source, inputPointCount) {
|
|
|
3634
3937
|
inputPointCount,
|
|
3635
3938
|
points: input.points
|
|
3636
3939
|
};
|
|
3637
|
-
|
|
3638
|
-
return intent;
|
|
3639
|
-
return { ...intent, actor: input.actor };
|
|
3940
|
+
return intent;
|
|
3640
3941
|
}
|
|
3641
3942
|
async function assertTelemetryExecution(storage, projectId, command) {
|
|
3642
|
-
if (command.kind === "runtime")
|
|
3943
|
+
if (command.kind === "runtime") {
|
|
3944
|
+
assertRuntimeMutationExecution(command.execution);
|
|
3643
3945
|
return null;
|
|
3946
|
+
}
|
|
3947
|
+
assertTrustedPrimitiveMutationExecution(command.execution, {
|
|
3948
|
+
kind: "projection",
|
|
3949
|
+
id: command.source.projection.projectionId,
|
|
3950
|
+
runId: command.source.execution.projectionRunId
|
|
3951
|
+
});
|
|
3644
3952
|
const execution = await lockProjectionRunForMaterialization(storage, {
|
|
3645
3953
|
projectId,
|
|
3646
3954
|
projectionRunId: command.source.execution.projectionRunId,
|
|
@@ -3649,6 +3957,7 @@ async function assertTelemetryExecution(storage, projectId, command) {
|
|
|
3649
3957
|
resolved: command.resolvedProjection,
|
|
3650
3958
|
capabilityErrorMessage: "Storage does not provide projection run capabilities required by telemetry projection."
|
|
3651
3959
|
});
|
|
3960
|
+
assertMaterializerRunExecution(command.execution, execution.run.executionId, `Projection run '${execution.run.id}'`);
|
|
3652
3961
|
assertTelemetryBatchPosition(execution.run, command.source.batchOrdinal, command.source.sourceRowCount, command.source.inputExhausted);
|
|
3653
3962
|
return execution;
|
|
3654
3963
|
}
|
|
@@ -3686,8 +3995,9 @@ async function executeTelemetryCommit(context, command) {
|
|
|
3686
3995
|
return withSerializationRetry(context, () => context.storage.transaction((storage) => executeTelemetryTransaction(context, storage, command), { isolation: "serializable" }));
|
|
3687
3996
|
}
|
|
3688
3997
|
async function executeTelemetryTransaction(context, storage, command) {
|
|
3998
|
+
await ensureMaterializerExecution(storage.executions, command.execution);
|
|
3689
3999
|
const execution = await assertTelemetryExecution(storage, context.projectId, command);
|
|
3690
|
-
const replay = await replayCommitRecord(context, command.identity, storage);
|
|
4000
|
+
const replay = await replayCommitRecord(context, command.identity, command.execution.executionId, storage);
|
|
3691
4001
|
if (replay) {
|
|
3692
4002
|
if (command.kind === "projection" && execution) {
|
|
3693
4003
|
assertTelemetryReplayCheckpoint(execution.run, command.source.batchOrdinal);
|
|
@@ -3702,7 +4012,10 @@ async function executeTelemetryTransaction(context, storage, command) {
|
|
|
3702
4012
|
}
|
|
3703
4013
|
const origin = telemetryOrigin(command);
|
|
3704
4014
|
const session = await beginTelemetryMaterialization(context, storage, command, origin);
|
|
3705
|
-
const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin
|
|
4015
|
+
const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin, {
|
|
4016
|
+
correlationId: command.execution.correlationId,
|
|
4017
|
+
...command.execution.actor === undefined ? {} : { actor: command.execution.actor }
|
|
4018
|
+
});
|
|
3706
4019
|
await drainStagedWork(context, storage.ontology.materializations, session);
|
|
3707
4020
|
const eventCount = await drainStagedEvents(context, storage.ontology.materializations, session, command.identity);
|
|
3708
4021
|
const result = {
|
|
@@ -3749,6 +4062,7 @@ function telemetryCommit(projectId, command, origin) {
|
|
|
3749
4062
|
id: command.identity.commitId,
|
|
3750
4063
|
idempotencyKey: command.identity.idempotencyKey,
|
|
3751
4064
|
requestHash: command.identity.requestHash,
|
|
4065
|
+
executionId: command.execution.executionId,
|
|
3752
4066
|
origin,
|
|
3753
4067
|
ontologyRevision: command.ontologyRevision,
|
|
3754
4068
|
intent: telemetryCommitIntent(command),
|
|
@@ -3764,9 +4078,9 @@ function telemetryCommit(projectId, command, origin) {
|
|
|
3764
4078
|
};
|
|
3765
4079
|
}
|
|
3766
4080
|
function telemetryCommitActor(commit, command) {
|
|
3767
|
-
if (command.
|
|
4081
|
+
if (command.execution.actor === undefined)
|
|
3768
4082
|
return commit;
|
|
3769
|
-
return { ...commit, actor: command.
|
|
4083
|
+
return { ...commit, actor: command.execution.actor };
|
|
3770
4084
|
}
|
|
3771
4085
|
function telemetryCommitIntent(command) {
|
|
3772
4086
|
if (command.kind === "runtime") {
|
|
@@ -3817,12 +4131,30 @@ async function finalizeTelemetryMaterialization(storage, session, command, resul
|
|
|
3817
4131
|
|
|
3818
4132
|
// src/materializer/materializer.ts
|
|
3819
4133
|
class OntologyMaterializer {
|
|
3820
|
-
edits = {
|
|
4134
|
+
edits = {
|
|
4135
|
+
commit: (command) => commitEdits(this.context, command)
|
|
4136
|
+
};
|
|
3821
4137
|
projections = {
|
|
3822
|
-
replace: (
|
|
3823
|
-
finishRun: (
|
|
4138
|
+
replace: (command) => replaceProjection(this.context, command),
|
|
4139
|
+
finishRun: (command) => finishProjectionRun(this.context, command)
|
|
3824
4140
|
};
|
|
3825
|
-
telemetry = {
|
|
4141
|
+
telemetry = {
|
|
4142
|
+
append: (command) => appendTelemetry(this.context, command)
|
|
4143
|
+
};
|
|
4144
|
+
withScope(scope) {
|
|
4145
|
+
return Object.freeze({
|
|
4146
|
+
edits: Object.freeze({
|
|
4147
|
+
commit: (input) => this.edits.commit({ scope, input })
|
|
4148
|
+
}),
|
|
4149
|
+
projections: Object.freeze({
|
|
4150
|
+
replace: (input) => this.projections.replace({ scope, input }),
|
|
4151
|
+
finishRun: (input) => this.projections.finishRun({ scope, input })
|
|
4152
|
+
}),
|
|
4153
|
+
telemetry: Object.freeze({
|
|
4154
|
+
append: (input) => this.telemetry.append({ scope, input })
|
|
4155
|
+
})
|
|
4156
|
+
});
|
|
4157
|
+
}
|
|
3826
4158
|
context;
|
|
3827
4159
|
constructor(projectId, ontology, projectionRegistry, storage, dependencies = {}) {
|
|
3828
4160
|
this.context = createMaterializerContext({
|
|
@@ -3839,4 +4171,4 @@ function createOntologyMaterializer(input) {
|
|
|
3839
4171
|
}
|
|
3840
4172
|
export { computeOntologyRevision, computeProjectionRevision, computeProjectionOwnershipHash, ProjectionRegistry, createActionIdempotencyKey, createRuntimeIdempotencyKey, createProjectionIdempotencyKey, createRuntimeTelemetryIdempotencyKey, createProjectionTelemetryIdempotencyKey, createCommitIdentity, timestampCommitIdentity, createTimedCommitIdentity, createProjectionMaterializationId, createLinkScopeFingerprint, normalizeJsonProperties, normalizeOntologyEditCommit, normalizeProjectionExecution, normalizeProjectionSourceEntry, normalizeTelemetryAppend, OntologyMaterializer, createOntologyMaterializer };
|
|
3841
4173
|
|
|
3842
|
-
//# debugId=
|
|
4174
|
+
//# debugId=E9E5C3996D8CF74864756E2164756E21
|