@sixb/core 0.1.18 → 0.1.19
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 +7 -6
- package/dist/actions/commit-edits.d.ts +7 -19
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/errors.d.ts +0 -3
- package/dist/actions/errors.d.ts.map +1 -1
- package/dist/actions/execution.d.ts +10 -3
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.d.ts +6 -9
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +51 -50
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts +14 -25
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run/context.d.ts +40 -0
- package/dist/actions/run/context.d.ts.map +1 -0
- package/dist/actions/run/edits-commit.d.ts +31 -0
- package/dist/actions/run/edits-commit.d.ts.map +1 -0
- package/dist/actions/run/effects.d.ts +23 -0
- package/dist/actions/run/effects.d.ts.map +1 -0
- package/dist/actions/run/execute.d.ts +30 -0
- package/dist/actions/run/execute.d.ts.map +1 -0
- package/dist/actions/run/executor.d.ts +95 -0
- package/dist/actions/run/executor.d.ts.map +1 -0
- package/dist/actions/run/normalize.d.ts +36 -0
- package/dist/actions/run/normalize.d.ts.map +1 -0
- package/dist/actions/run/phase-types.d.ts +18 -0
- package/dist/actions/run/phase-types.d.ts.map +1 -0
- package/dist/actions/run/phases.d.ts +20 -0
- package/dist/actions/run/phases.d.ts.map +1 -0
- package/dist/actions/run/run-action.d.ts +25 -0
- package/dist/actions/run/run-action.d.ts.map +1 -0
- package/dist/actions/run/signals.d.ts +67 -0
- package/dist/actions/run/signals.d.ts.map +1 -0
- package/dist/actions/run/state.d.ts +47 -0
- package/dist/actions/run/state.d.ts.map +1 -0
- package/dist/actions/run/types.d.ts +54 -0
- package/dist/actions/run/types.d.ts.map +1 -0
- package/dist/actions/run/writeback.d.ts +17 -0
- package/dist/actions/run/writeback.d.ts.map +1 -0
- package/dist/actions/run-authorization.d.ts +1 -1
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/actions/run-persistence.d.ts +53 -0
- package/dist/actions/run-persistence.d.ts.map +1 -0
- package/dist/actions/types/context.d.ts +10 -0
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/agents/index.js +52 -55
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/auth/index.js +11 -11
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/index.js +3 -3
- package/dist/bootstrap/index.js +46 -49
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-d0eb5yy6.js → chunk-1f7wpmyp.js} +5 -5
- package/dist/{chunk-d0eb5yy6.js.map → chunk-1f7wpmyp.js.map} +1 -1
- package/dist/{chunk-vgk3hknm.js → chunk-1k89ecfr.js} +1 -1
- package/dist/{chunk-6h5m9xjx.js → chunk-3gnrh4ve.js} +6 -10
- package/dist/{chunk-6h5m9xjx.js.map → chunk-3gnrh4ve.js.map} +4 -4
- package/dist/{chunk-htr6wjmv.js → chunk-4tcx876c.js} +15 -15
- package/dist/{chunk-htr6wjmv.js.map → chunk-4tcx876c.js.map} +1 -1
- package/dist/{chunk-za5yd58j.js → chunk-52bk93x8.js} +2 -2
- package/dist/{chunk-22v5bpz3.js → chunk-5e43w60z.js} +1 -1
- package/dist/{chunk-zxawp1n2.js → chunk-7kg3k1m9.js} +1 -1
- package/dist/{chunk-ny3xyvcn.js → chunk-7mbzgd9m.js} +3 -3
- package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
- package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
- package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
- package/dist/{chunk-s4jhg8a3.js → chunk-80mc0971.js} +13 -13
- package/dist/{chunk-s4jhg8a3.js.map → chunk-80mc0971.js.map} +1 -1
- package/dist/{chunk-1b1f2d5f.js → chunk-85yvv5n0.js} +8 -8
- package/dist/{chunk-1b1f2d5f.js.map → chunk-85yvv5n0.js.map} +1 -1
- package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
- package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
- package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
- package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
- package/dist/{chunk-48e3cn2d.js → chunk-9gyp8hg1.js} +2 -2
- package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
- package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
- package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
- package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
- package/dist/chunk-a40ad1ft.js.map +10 -0
- package/dist/{chunk-vz3gc1tm.js → chunk-aff7cyea.js} +62 -64
- package/dist/{chunk-vz3gc1tm.js.map → chunk-aff7cyea.js.map} +4 -4
- package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
- package/dist/chunk-b38szspf.js.map +11 -0
- package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
- package/dist/chunk-bkpke1sg.js.map +10 -0
- package/dist/{chunk-bs7sqkre.js → chunk-bpgy64fw.js} +1 -1
- package/dist/{chunk-vx2yp45y.js → chunk-c85m1hyj.js} +2 -2
- package/dist/{chunk-v6xpd60t.js → chunk-d2ync1v3.js} +5 -5
- package/dist/{chunk-fe52eczz.js → chunk-ey3pyej1.js} +6345 -2125
- package/dist/chunk-ey3pyej1.js.map +106 -0
- package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
- package/dist/{chunk-y05543x6.js → chunk-hvsb78a1.js} +4 -4
- package/dist/{chunk-y05543x6.js.map → chunk-hvsb78a1.js.map} +1 -1
- package/dist/{chunk-qq90g05n.js → chunk-j2bp5ryw.js} +53 -244
- package/dist/{chunk-qq90g05n.js.map → chunk-j2bp5ryw.js.map} +3 -3
- package/dist/{chunk-qmnnhde6.js → chunk-kg5j6fct.js} +1 -1
- package/dist/{chunk-de4z2bj6.js → chunk-kyzq4wy9.js} +6 -6
- package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
- package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
- package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
- package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
- package/dist/{chunk-ex496vct.js → chunk-nre82s12.js} +1 -1
- package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
- package/dist/chunk-nzapm6p0.js.map +12 -0
- package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
- package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
- package/dist/{chunk-7hpdd6r9.js → chunk-q1vkr2ys.js} +4 -4
- package/dist/{chunk-zb77kjth.js → chunk-rhg02hxq.js} +3 -3
- package/dist/{chunk-y9jmd7e5.js → chunk-s16apyk9.js} +102 -16
- package/dist/chunk-s16apyk9.js.map +16 -0
- package/dist/{chunk-yv9czyfr.js → chunk-t6vq7bff.js} +5 -5
- package/dist/{chunk-qkvz64nd.js → chunk-tjb1mk5t.js} +2 -2
- package/dist/{chunk-p844e0rn.js → chunk-tpn40322.js} +2 -2
- package/dist/{chunk-rt9p8m9t.js → chunk-v9xd5wzd.js} +1 -1
- package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
- package/dist/{chunk-k6hrnf35.js → chunk-wwdfe68s.js} +51 -4
- package/dist/chunk-wwdfe68s.js.map +11 -0
- package/dist/{chunk-f1zxad2t.js → chunk-wz0xs816.js} +6 -6
- package/dist/{chunk-f1zxad2t.js.map → chunk-wz0xs816.js.map} +1 -1
- package/dist/chunk-y0c4e6ex.js +16 -0
- package/dist/chunk-y0c4e6ex.js.map +10 -0
- package/dist/{chunk-qkbx3tf6.js → chunk-y7rqfrgg.js} +6 -13
- package/dist/{chunk-qkbx3tf6.js.map → chunk-y7rqfrgg.js.map} +4 -4
- package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
- package/dist/chunk-yxd3nnqt.js.map +11 -0
- package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
- package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
- package/dist/{chunk-p0dqwj3n.js → chunk-zrmy8zvw.js} +66 -47
- package/dist/{chunk-p0dqwj3n.js.map → chunk-zrmy8zvw.js.map} +4 -4
- package/dist/deploy/index.d.ts +1 -1
- package/dist/deploy/index.d.ts.map +1 -1
- package/dist/deploy/internal.js +10 -8
- package/dist/deploy/internal.js.map +4 -4
- package/dist/deploy/services.d.ts +1 -2
- package/dist/deploy/services.d.ts.map +1 -1
- package/dist/deploy/types.d.ts +6 -5
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/validation.d.ts.map +1 -1
- package/dist/edits/index.js +3 -5
- package/dist/edits/index.js.map +1 -1
- package/dist/error-reporting/internal.js +3 -3
- package/dist/error-reporting/types.d.ts +2 -9
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/definitions.d.ts +0 -5
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/index.d.ts +3 -3
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +6 -8
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.d.ts +0 -1
- package/dist/events/scope.d.ts.map +1 -1
- package/dist/events/scope.js +1 -1
- package/dist/events/selectors/builder.d.ts +1 -8
- package/dist/events/selectors/builder.d.ts.map +1 -1
- package/dist/events/selectors/index.d.ts +2 -2
- package/dist/events/selectors/index.d.ts.map +1 -1
- package/dist/events/selectors/index.js +2 -2
- package/dist/events/selectors/predicate.d.ts.map +1 -1
- package/dist/events/selectors/types.d.ts +2 -33
- package/dist/events/selectors/types.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +1 -12
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/execution/agent.js +41 -44
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/primitive.js +57 -88
- package/dist/execution/primitive.js.map +3 -4
- package/dist/execution/request.js +35 -38
- package/dist/execution/request.js.map +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +111 -120
- package/dist/index.js.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +19 -6
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -31
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/execution/index.js +18 -18
- package/dist/objects/action/errors.d.ts +0 -9
- package/dist/objects/action/errors.d.ts.map +1 -1
- package/dist/objects/action/index.d.ts +3 -3
- package/dist/objects/action/index.d.ts.map +1 -1
- package/dist/objects/action/request.d.ts +2 -8
- package/dist/objects/action/request.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +0 -2
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +44 -29
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +29 -29
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/service/index.d.ts +0 -1
- package/dist/objects/service/index.d.ts.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +2 -2
- package/dist/pipelines/index.js +28 -28
- package/dist/projections/internal.js +22 -22
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +1 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +0 -7
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.js +24 -25
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +16 -36
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +5 -5
- package/dist/schedules/builders.d.ts.map +1 -1
- package/dist/schedules/index.js +3 -3
- package/dist/schedules/runtime.d.ts.map +1 -1
- package/dist/schedules/validation.d.ts +0 -1
- package/dist/schedules/validation.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -1
- package/dist/shares/internal.js +17 -17
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/idempotency.d.ts +3 -4
- package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
- package/dist/storage/action-runs/in-memory.d.ts +2 -9
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/index.d.ts +1 -3
- package/dist/storage/action-runs/index.d.ts.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/record.d.ts +20 -0
- package/dist/storage/action-runs/record.d.ts.map +1 -0
- package/dist/storage/action-runs/types.d.ts +39 -68
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/file-upload-sessions/provider.js +9 -9
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +30 -31
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -1
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +9 -12
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +1 -1
- package/dist/storage/objects/execution-limits.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -9
- package/dist/syncs/index.js +29 -29
- package/dist/testing/action-execution.d.ts +34 -4
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/action-run-storage-contract.d.ts +11 -0
- package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3202 -2860
- package/dist/testing/index.js.map +7 -6
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +23 -23
- package/dist/webhooks/internal.js.map +1 -1
- package/dist/workers/index.js +1 -1
- package/dist/workflows/index.js +48 -51
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -7
- package/src/actions/commit-edits.ts +9 -37
- package/src/actions/errors.ts +0 -4
- package/src/actions/execution.ts +10 -10
- package/src/actions/index.ts +5 -24
- package/src/actions/request.ts +157 -295
- package/src/actions/run/context.ts +193 -0
- package/src/actions/run/edits-commit.ts +102 -0
- package/src/actions/run/effects.ts +105 -0
- package/src/actions/run/execute.ts +113 -0
- package/src/actions/run/executor.ts +314 -0
- package/src/actions/run/normalize.ts +142 -0
- package/src/actions/run/phase-types.ts +20 -0
- package/src/actions/run/phases.ts +150 -0
- package/src/actions/run/run-action.ts +170 -0
- package/src/actions/run/signals.ts +118 -0
- package/src/actions/run/state.ts +95 -0
- package/src/actions/run/types.ts +61 -0
- package/src/actions/run/writeback.ts +79 -0
- package/src/actions/run-authorization.ts +1 -1
- package/src/actions/run-persistence.ts +105 -0
- package/src/actions/types/context.ts +10 -0
- package/src/authorization/event-visibility.ts +0 -12
- package/src/deploy/index.ts +0 -1
- package/src/deploy/services.ts +2 -11
- package/src/deploy/types.ts +6 -6
- package/src/deploy/validation.ts +12 -6
- package/src/error-reporting/types.ts +2 -10
- package/src/errors/catalog.ts +13 -0
- package/src/events/definitions.ts +0 -17
- package/src/events/index.ts +0 -14
- package/src/events/scope.ts +0 -12
- package/src/events/selectors/builder.ts +0 -51
- package/src/events/selectors/index.ts +0 -6
- package/src/events/selectors/predicate.ts +0 -2
- package/src/events/selectors/types.ts +7 -65
- package/src/events/types/index.ts +0 -11
- package/src/index.ts +1 -19
- package/src/materialization/model.ts +26 -9
- package/src/materializer/README.md +6 -1
- package/src/materializer/edits/commit.ts +42 -32
- package/src/materializer/shared/normalize.ts +25 -14
- package/src/objects/action/errors.ts +0 -12
- package/src/objects/action/index.ts +3 -3
- package/src/objects/action/request.ts +2 -29
- package/src/objects/execution.ts +2 -2
- package/src/objects/sdk/object-handle.ts +3 -29
- package/src/objects/sdk/object-set.ts +5 -30
- package/src/objects/service/index.ts +0 -1
- package/src/queues/in-memory.ts +0 -6
- package/src/queues/index.ts +0 -2
- package/src/queues/types.ts +0 -11
- package/src/runtime/host.ts +5 -0
- package/src/runtime/resolve-definitions.ts +0 -1
- package/src/runtime/types.ts +16 -45
- package/src/schedules/builders.ts +1 -4
- package/src/schedules/runtime.ts +0 -41
- package/src/schedules/validation.ts +2 -16
- package/src/security/every.ts +1 -1
- package/src/storage/action-runs/idempotency.ts +13 -41
- package/src/storage/action-runs/in-memory.ts +20 -311
- package/src/storage/action-runs/index.ts +1 -16
- package/src/storage/action-runs/record.ts +130 -0
- package/src/storage/action-runs/types.ts +37 -92
- package/src/storage/index.ts +1 -9
- package/src/storage/internal.ts +1 -7
- package/src/storage/objects/execution-limits.ts +3 -2
- package/src/storage/types.ts +2 -4
- package/src/testing/action-execution.ts +73 -13
- package/src/testing/action-run-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -1
- package/src/testing/materializer-storage-contract.ts +174 -18
- package/src/testing/queues-contract.ts +0 -18
- package/dist/actions/run-dispatch.d.ts +0 -25
- package/dist/actions/run-dispatch.d.ts.map +0 -1
- package/dist/actions/worker.d.ts +0 -3
- package/dist/actions/worker.d.ts.map +0 -1
- package/dist/actions/worker.js +0 -325
- package/dist/actions/worker.js.map +0 -11
- package/dist/chunk-1hqwggsn.js.map +0 -12
- package/dist/chunk-85cd7e8c.js +0 -51
- package/dist/chunk-85cd7e8c.js.map +0 -10
- package/dist/chunk-dfm066qg.js.map +0 -11
- package/dist/chunk-fc5zfxy1.js.map +0 -11
- package/dist/chunk-fe52eczz.js.map +0 -49
- package/dist/chunk-fx93hd2n.js +0 -1614
- package/dist/chunk-fx93hd2n.js.map +0 -20
- package/dist/chunk-k6hrnf35.js.map +0 -10
- package/dist/chunk-qxvp5epv.js +0 -1329
- package/dist/chunk-qxvp5epv.js.map +0 -36
- package/dist/chunk-r2y23egw.js.map +0 -10
- package/dist/chunk-tffvfy6s.js +0 -593
- package/dist/chunk-tffvfy6s.js.map +0 -15
- package/dist/chunk-y2aq6ag9.js.map +0 -11
- package/dist/chunk-y9jmd7e5.js.map +0 -15
- package/dist/chunk-zvx7h87b.js +0 -12
- package/dist/chunk-zvx7h87b.js.map +0 -10
- package/dist/events/types/actions.d.ts +0 -39
- package/dist/events/types/actions.d.ts.map +0 -1
- package/dist/objects/service/action-service.d.ts +0 -13
- package/dist/objects/service/action-service.d.ts.map +0 -1
- package/src/actions/run-dispatch.ts +0 -282
- package/src/actions/worker.ts +0 -2
- package/src/events/types/actions.ts +0 -42
- package/src/objects/service/action-service.ts +0 -43
- /package/dist/{chunk-vgk3hknm.js.map → chunk-1k89ecfr.js.map} +0 -0
- /package/dist/{chunk-za5yd58j.js.map → chunk-52bk93x8.js.map} +0 -0
- /package/dist/{chunk-22v5bpz3.js.map → chunk-5e43w60z.js.map} +0 -0
- /package/dist/{chunk-zxawp1n2.js.map → chunk-7kg3k1m9.js.map} +0 -0
- /package/dist/{chunk-ny3xyvcn.js.map → chunk-7mbzgd9m.js.map} +0 -0
- /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
- /package/dist/{chunk-48e3cn2d.js.map → chunk-9gyp8hg1.js.map} +0 -0
- /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
- /package/dist/{chunk-bs7sqkre.js.map → chunk-bpgy64fw.js.map} +0 -0
- /package/dist/{chunk-vx2yp45y.js.map → chunk-c85m1hyj.js.map} +0 -0
- /package/dist/{chunk-v6xpd60t.js.map → chunk-d2ync1v3.js.map} +0 -0
- /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
- /package/dist/{chunk-qmnnhde6.js.map → chunk-kg5j6fct.js.map} +0 -0
- /package/dist/{chunk-de4z2bj6.js.map → chunk-kyzq4wy9.js.map} +0 -0
- /package/dist/{chunk-ex496vct.js.map → chunk-nre82s12.js.map} +0 -0
- /package/dist/{chunk-7hpdd6r9.js.map → chunk-q1vkr2ys.js.map} +0 -0
- /package/dist/{chunk-zb77kjth.js.map → chunk-rhg02hxq.js.map} +0 -0
- /package/dist/{chunk-yv9czyfr.js.map → chunk-t6vq7bff.js.map} +0 -0
- /package/dist/{chunk-qkvz64nd.js.map → chunk-tjb1mk5t.js.map} +0 -0
- /package/dist/{chunk-p844e0rn.js.map → chunk-tpn40322.js.map} +0 -0
- /package/dist/{chunk-rt9p8m9t.js.map → chunk-v9xd5wzd.js.map} +0 -0
- /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { createSixbError } from "../../errors/internal"
|
|
2
|
+
import type { Logger } from "../../logging"
|
|
3
|
+
import type { ObjectTypeWithPropertyTokens } from "../../ontology/tokens"
|
|
4
|
+
import { ObjectNotFoundError } from "../../storage"
|
|
5
|
+
import type { ActionReadRecorder } from "../read-facade"
|
|
6
|
+
import { createActionReadFacade } from "../read-facade"
|
|
7
|
+
import type {
|
|
8
|
+
ActionDefinition,
|
|
9
|
+
ActionObjectSubject,
|
|
10
|
+
ActionReadFacade,
|
|
11
|
+
ActionRuntimeFacade,
|
|
12
|
+
ActionSubject,
|
|
13
|
+
ActionTargetObject,
|
|
14
|
+
} from "../types"
|
|
15
|
+
import { coerceActionParamsToTyped, isObjectActionDefinition } from "../validation"
|
|
16
|
+
import type { LoadedObjectTarget } from "./phase-types"
|
|
17
|
+
import type { ActionRunState } from "./state"
|
|
18
|
+
import type { ActionRunContext, PendingActionRun } from "./types"
|
|
19
|
+
|
|
20
|
+
export function toActionRuntimeFacade(runtime: ActionRunContext): ActionRuntimeFacade {
|
|
21
|
+
return {
|
|
22
|
+
blobs: {
|
|
23
|
+
put(input) {
|
|
24
|
+
return runtime.sixb.blobs.put(input)
|
|
25
|
+
},
|
|
26
|
+
open(blobId) {
|
|
27
|
+
return runtime.sixb.blobs.open(blobId)
|
|
28
|
+
},
|
|
29
|
+
stat(blobId) {
|
|
30
|
+
return runtime.sixb.blobs.stat(blobId)
|
|
31
|
+
},
|
|
32
|
+
createDownloadUrl(file, options) {
|
|
33
|
+
return runtime.sixb.blobs.createDownloadUrl(file, options)
|
|
34
|
+
},
|
|
35
|
+
revokeDownloadUrl(id) {
|
|
36
|
+
return runtime.sixb.blobs.revokeDownloadUrl(id)
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
connector: runtime.sixb.connector,
|
|
40
|
+
models: runtime.sixb.models,
|
|
41
|
+
objects(objectType) {
|
|
42
|
+
return {
|
|
43
|
+
appendTelemetryBatch(items) {
|
|
44
|
+
return runtime.sixb.objects.appendTelemetry(objectType.id, items)
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function toActionReadFacade(
|
|
52
|
+
runtime: ActionRunContext,
|
|
53
|
+
recorder: ActionReadRecorder
|
|
54
|
+
): ActionReadFacade {
|
|
55
|
+
return createActionReadFacade(runtime.sixb, {
|
|
56
|
+
recorder,
|
|
57
|
+
resolveLinkIds: (objectTypeId) =>
|
|
58
|
+
runtime.sixb.objects.resolveType(objectTypeId).links.map((definition) => definition.id),
|
|
59
|
+
telemetry: {
|
|
60
|
+
resolveObjectType: (objectTypeId) => runtime.sixb.objects.resolveType(objectTypeId),
|
|
61
|
+
getHistoryBatch: (input) => runtime.sixb.objects.getTelemetryHistoryBatch(input),
|
|
62
|
+
},
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function toActionTargetObject(
|
|
67
|
+
row: {
|
|
68
|
+
primaryId: string
|
|
69
|
+
objectTypeId: string
|
|
70
|
+
properties: Record<string, unknown>
|
|
71
|
+
createdAt: Date
|
|
72
|
+
updatedAt: Date
|
|
73
|
+
},
|
|
74
|
+
declaredObjectTypeId: string
|
|
75
|
+
): ActionTargetObject {
|
|
76
|
+
return {
|
|
77
|
+
primaryId: row.primaryId,
|
|
78
|
+
objectTypeId: declaredObjectTypeId,
|
|
79
|
+
properties: row.properties,
|
|
80
|
+
createdAt: row.createdAt,
|
|
81
|
+
updatedAt: row.updatedAt,
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The handler context every phase shares. Each phase adds the `signal` it runs under. */
|
|
86
|
+
export function createBasePhaseContext(input: {
|
|
87
|
+
readonly runtime: ActionRunContext
|
|
88
|
+
readonly action: ActionDefinition
|
|
89
|
+
readonly state: ActionRunState
|
|
90
|
+
readonly logger: Logger
|
|
91
|
+
}) {
|
|
92
|
+
const { run, startedAt } = input.state
|
|
93
|
+
return {
|
|
94
|
+
run: {
|
|
95
|
+
id: run.id,
|
|
96
|
+
startedAt,
|
|
97
|
+
idempotencyKey: run.idempotencyKey,
|
|
98
|
+
},
|
|
99
|
+
logger: input.logger,
|
|
100
|
+
// Params are stored as JSON (date/timestamp -> ISO string); handler types
|
|
101
|
+
// promise `Date`, so re-hydrate them before the handler sees them.
|
|
102
|
+
params: coerceActionParamsToTyped(
|
|
103
|
+
input.action.params,
|
|
104
|
+
run.params,
|
|
105
|
+
input.runtime.sixb.objects.getValueTypesById()
|
|
106
|
+
),
|
|
107
|
+
subject: run.subject,
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export type BasePhaseContext = ReturnType<typeof createBasePhaseContext>
|
|
112
|
+
|
|
113
|
+
export async function loadObjectTarget(input: {
|
|
114
|
+
readonly runtime: ActionRunContext
|
|
115
|
+
readonly action: ActionDefinition
|
|
116
|
+
readonly run: PendingActionRun
|
|
117
|
+
}): Promise<LoadedObjectTarget | null> {
|
|
118
|
+
if (!isObjectActionDefinition(input.action)) {
|
|
119
|
+
if (input.run.subject.kind !== "none") {
|
|
120
|
+
throw createSixbError(
|
|
121
|
+
"internal.unexpected",
|
|
122
|
+
`[Sixb] Action '${input.action.id}' does not accept a subject.`,
|
|
123
|
+
{ details: { actionId: input.action.id, runId: input.run.id } }
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
return null
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const subject = requireObjectSubject(input.run.subject, {
|
|
130
|
+
actionId: input.action.id,
|
|
131
|
+
runId: input.run.id,
|
|
132
|
+
})
|
|
133
|
+
const subjectObjectType = input.runtime.sixb.objects.resolveType(subject.objectTypeId)
|
|
134
|
+
const actionAppliesToSubject = input.runtime.sixb.actions
|
|
135
|
+
.listForType(subjectObjectType)
|
|
136
|
+
.some((candidate) => candidate.id === input.action.id)
|
|
137
|
+
if (!actionAppliesToSubject) {
|
|
138
|
+
throw createSixbError(
|
|
139
|
+
"internal.unexpected",
|
|
140
|
+
`[Sixb] Action '${input.action.id}' is not valid for object type '${subjectObjectType.id}'.`,
|
|
141
|
+
{ details: { actionId: input.action.id, runId: input.run.id } }
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const targetRow = await input.runtime.storage.objects.getByPrimaryId({
|
|
146
|
+
projectId: input.runtime.id,
|
|
147
|
+
objectTypeId: subjectObjectType.id,
|
|
148
|
+
primaryId: subject.primaryId,
|
|
149
|
+
})
|
|
150
|
+
if (!targetRow) {
|
|
151
|
+
throw new ObjectNotFoundError(
|
|
152
|
+
subject.objectTypeId,
|
|
153
|
+
subject.primaryId,
|
|
154
|
+
"Object not found for action run"
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
subjectObjectType,
|
|
160
|
+
snapshot: toActionTargetObject(targetRow, input.action.binding.objectType.id),
|
|
161
|
+
row: targetRow,
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function requireObjectSubject<
|
|
166
|
+
TObjectType extends ObjectTypeWithPropertyTokens = ObjectTypeWithPropertyTokens,
|
|
167
|
+
>(
|
|
168
|
+
subject: ActionSubject,
|
|
169
|
+
input: { readonly actionId: string; readonly runId: string }
|
|
170
|
+
): ActionObjectSubject<TObjectType> {
|
|
171
|
+
if (subject.kind !== "object") {
|
|
172
|
+
throw createSixbError(
|
|
173
|
+
"internal.unexpected",
|
|
174
|
+
`[Sixb] Action '${input.actionId}' requires an object subject.`,
|
|
175
|
+
{ details: input }
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
return subject as ActionObjectSubject<TObjectType>
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function requireObjectTarget(
|
|
182
|
+
target: LoadedObjectTarget | null,
|
|
183
|
+
input: { readonly actionId: string; readonly runId: string }
|
|
184
|
+
): LoadedObjectTarget {
|
|
185
|
+
if (!target) {
|
|
186
|
+
throw createSixbError(
|
|
187
|
+
"internal.unexpected",
|
|
188
|
+
`[Sixb] Action '${input.actionId}' requires an object target.`,
|
|
189
|
+
{ details: input }
|
|
190
|
+
)
|
|
191
|
+
}
|
|
192
|
+
return target
|
|
193
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { recordEdits } from "../../edits/recorder"
|
|
2
|
+
import type { RecordActionRunInput } from "../../storage"
|
|
3
|
+
import type { ActionEditCommitResult } from "../commit-edits"
|
|
4
|
+
import { commitActionEdits } from "../commit-edits"
|
|
5
|
+
import type { ActionReadRecorder } from "../read-facade"
|
|
6
|
+
import { isObjectActionDefinition } from "../validation"
|
|
7
|
+
import { type BasePhaseContext, requireObjectSubject, toActionReadFacade } from "./context"
|
|
8
|
+
import { throwIfAborted, translateActionPhaseError, untilAborted } from "./normalize"
|
|
9
|
+
import type { LoadedObjectTarget, PhaseExecutionBase, RuntimePhaseHandler } from "./phase-types"
|
|
10
|
+
import type { ActionRunState } from "./state"
|
|
11
|
+
|
|
12
|
+
/** The commit of a run's edits, which recorded the run with them. */
|
|
13
|
+
export interface CommittedActionRun {
|
|
14
|
+
readonly record: RecordActionRunInput
|
|
15
|
+
readonly commit: ActionEditCommitResult
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Records the run's edits and commits them through the ontology Materializer, together with the
|
|
20
|
+
* run's terminal record. Resolves with `null` for an Action without edits, which commits nothing.
|
|
21
|
+
*
|
|
22
|
+
* Object and link-scope reads performed by the writeback and edits handlers, including every object
|
|
23
|
+
* a query or listing returned, are captured as expected revisions so a commit fails when that state
|
|
24
|
+
* changes. Query membership and telemetry history stay call-level snapshots. Domain events are
|
|
25
|
+
* durable outbox facts written inside the commit, so this phase never appends events itself.
|
|
26
|
+
*
|
|
27
|
+
* `signal` stops the edits handler and the step before the commit; the commit itself is never
|
|
28
|
+
* interrupted.
|
|
29
|
+
*/
|
|
30
|
+
export async function runEditsAndCommitPhase(
|
|
31
|
+
input: PhaseExecutionBase & {
|
|
32
|
+
readonly state: ActionRunState
|
|
33
|
+
readonly baseContext: BasePhaseContext
|
|
34
|
+
readonly objectTarget: LoadedObjectTarget | null
|
|
35
|
+
/** Shared with the writeback phase so both phases' reads fence the same commit. */
|
|
36
|
+
readonly reads: ActionReadRecorder
|
|
37
|
+
}
|
|
38
|
+
): Promise<CommittedActionRun | null> {
|
|
39
|
+
const handler = input.action.phases.edits as RuntimePhaseHandler | undefined
|
|
40
|
+
if (!handler) return null
|
|
41
|
+
|
|
42
|
+
const { state } = input
|
|
43
|
+
const ids = { actionId: input.action.id, runId: state.run.id }
|
|
44
|
+
state.enter("edits")
|
|
45
|
+
|
|
46
|
+
const reads = input.reads
|
|
47
|
+
if (input.objectTarget) {
|
|
48
|
+
reads.observeObject(
|
|
49
|
+
{
|
|
50
|
+
objectTypeId: input.objectTarget.row.objectTypeId,
|
|
51
|
+
primaryId: input.objectTarget.row.primaryId,
|
|
52
|
+
},
|
|
53
|
+
input.objectTarget.row
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let batch: Awaited<ReturnType<typeof recordEdits>>
|
|
58
|
+
try {
|
|
59
|
+
batch = await recordEdits(
|
|
60
|
+
{
|
|
61
|
+
runId: state.run.id,
|
|
62
|
+
valueTypesById: input.runtime.sixb.objects.getValueTypesById(),
|
|
63
|
+
},
|
|
64
|
+
async ({ objects }) => {
|
|
65
|
+
const baseContext = {
|
|
66
|
+
...input.baseContext,
|
|
67
|
+
signal: input.signal,
|
|
68
|
+
objects,
|
|
69
|
+
read: toActionReadFacade(input.runtime, reads),
|
|
70
|
+
writeback: state.writebackValue,
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const subject = isObjectActionDefinition(input.action)
|
|
74
|
+
? { subject: requireObjectSubject(state.run.subject, ids) }
|
|
75
|
+
: {}
|
|
76
|
+
await untilAborted(async () => handler({ ...baseContext, ...subject }), input.signal)
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
} catch (error) {
|
|
80
|
+
throw translateActionPhaseError(error, "edits", { ...ids, signal: input.signal })
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
throwIfAborted(input.signal)
|
|
84
|
+
state.enter("commit")
|
|
85
|
+
// Built as the commit starts: the run succeeds exactly when this commit does.
|
|
86
|
+
const record = state.succeeded()
|
|
87
|
+
|
|
88
|
+
let commit: ActionEditCommitResult
|
|
89
|
+
try {
|
|
90
|
+
commit = await commitActionEdits({
|
|
91
|
+
mutations: input.runtime.ontologyMutations,
|
|
92
|
+
run: record,
|
|
93
|
+
batch,
|
|
94
|
+
dependencies: reads.dependencies(),
|
|
95
|
+
})
|
|
96
|
+
} catch (error) {
|
|
97
|
+
// The commit ran to its end whatever `signal` did meanwhile, so its error is never a timeout.
|
|
98
|
+
throw translateActionPhaseError(error, "commit", ids)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return { record, commit }
|
|
102
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { reportActionPhaseFailure } from "../../error-reporting/capability"
|
|
2
|
+
import type { Logger } from "../../logging"
|
|
3
|
+
import { resolveLoggingService } from "../../logging/service"
|
|
4
|
+
import type { RecordActionEffectsInput } from "../../storage"
|
|
5
|
+
import type { ActionEditCommitResult } from "../commit-edits"
|
|
6
|
+
import type { ActionDefinition } from "../types"
|
|
7
|
+
import { isObjectActionDefinition } from "../validation"
|
|
8
|
+
import { createBasePhaseContext, requireObjectSubject, toActionRuntimeFacade } from "./context"
|
|
9
|
+
import { toActionRunFailure, translateActionPhaseError, untilAborted } from "./normalize"
|
|
10
|
+
import type { ActionDeadline } from "./signals"
|
|
11
|
+
import type { ActionRunState } from "./state"
|
|
12
|
+
import type { ActionRunContext } from "./types"
|
|
13
|
+
|
|
14
|
+
export interface RunActionEffectsInput {
|
|
15
|
+
readonly runtime: ActionRunContext
|
|
16
|
+
readonly action: ActionDefinition
|
|
17
|
+
/** The run, recorded as succeeded with the commit its effects receive. */
|
|
18
|
+
readonly state: ActionRunState
|
|
19
|
+
readonly commit: ActionEditCommitResult
|
|
20
|
+
/** Starts the effects' deadline. */
|
|
21
|
+
readonly startDeadline: () => ActionDeadline
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Run a recorded run's effects and record their outcome on it.
|
|
26
|
+
*
|
|
27
|
+
* Effects run after the run's record is returned, and nothing waits for them but a stopping
|
|
28
|
+
* process. They are best-effort: their failure does not reject this, it is recorded on the run and
|
|
29
|
+
* reported to `onError`, and the run stays succeeded.
|
|
30
|
+
*/
|
|
31
|
+
export async function runActionEffects(input: RunActionEffectsInput): Promise<void> {
|
|
32
|
+
const { runtime, action, state } = input
|
|
33
|
+
const ids = { actionId: action.id, runId: state.run.id }
|
|
34
|
+
const logSession = resolveLoggingService(runtime.id, runtime.logging).startExecution({
|
|
35
|
+
kind: "action",
|
|
36
|
+
id: state.run.id,
|
|
37
|
+
})
|
|
38
|
+
const deadline = input.startDeadline()
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
const outcome = await callEffects(
|
|
42
|
+
input,
|
|
43
|
+
deadline.signal,
|
|
44
|
+
logSession.withContext({ phase: "effects" })
|
|
45
|
+
)
|
|
46
|
+
try {
|
|
47
|
+
await runtime.actionRunsStorage.recordEffects(outcome)
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error(
|
|
50
|
+
`[Sixb] Action run '${ids.runId}' ran its effects, but their outcome could not be recorded:`,
|
|
51
|
+
error
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
} finally {
|
|
55
|
+
deadline.dispose()
|
|
56
|
+
await logSession.flush()
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Call the effects handler, and describe how it ended. A failure is reported here, once. */
|
|
61
|
+
async function callEffects(
|
|
62
|
+
input: RunActionEffectsInput,
|
|
63
|
+
signal: AbortSignal,
|
|
64
|
+
logger: Logger
|
|
65
|
+
): Promise<RecordActionEffectsInput> {
|
|
66
|
+
const { runtime, action, state } = input
|
|
67
|
+
const ids = { actionId: action.id, runId: state.run.id }
|
|
68
|
+
const effects = { id: state.run.id, projectId: runtime.id }
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
const context = {
|
|
72
|
+
...createBasePhaseContext({ runtime, action, state, logger }),
|
|
73
|
+
signal,
|
|
74
|
+
sixb: toActionRuntimeFacade(runtime),
|
|
75
|
+
writeback: state.writebackValue,
|
|
76
|
+
commit: input.commit,
|
|
77
|
+
}
|
|
78
|
+
await untilAborted(async () => {
|
|
79
|
+
if (isObjectActionDefinition(action)) {
|
|
80
|
+
await action.phases.effects?.({
|
|
81
|
+
...context,
|
|
82
|
+
subject: requireObjectSubject(state.run.subject, ids),
|
|
83
|
+
})
|
|
84
|
+
} else {
|
|
85
|
+
await action.phases.effects?.(context)
|
|
86
|
+
}
|
|
87
|
+
}, signal)
|
|
88
|
+
} catch (error) {
|
|
89
|
+
const completedAt = new Date()
|
|
90
|
+
const failure = toActionRunFailure(
|
|
91
|
+
translateActionPhaseError(error, "effects", { ...ids, signal }),
|
|
92
|
+
"effects",
|
|
93
|
+
{ ...ids, at: completedAt }
|
|
94
|
+
)
|
|
95
|
+
reportActionPhaseFailure(runtime.errorReporterHost, error, {
|
|
96
|
+
projectId: runtime.id,
|
|
97
|
+
...ids,
|
|
98
|
+
phase: "effects",
|
|
99
|
+
failure,
|
|
100
|
+
})
|
|
101
|
+
return { ...effects, status: "failed", completedAt, error: failure }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return { ...effects, status: "succeeded", completedAt: new Date() }
|
|
105
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createSixbError } from "../../errors/internal"
|
|
2
|
+
import {
|
|
3
|
+
type BoundPrimitiveExecution,
|
|
4
|
+
bindDurablePrimitiveExecution,
|
|
5
|
+
type PrimitiveExecutionHost,
|
|
6
|
+
} from "../../execution/primitive"
|
|
7
|
+
import type { LoggingService } from "../../logging/service"
|
|
8
|
+
import type { SixbDefinitions } from "../../runtime/definitions"
|
|
9
|
+
import type { ActionRunStorage, Storage } from "../../storage"
|
|
10
|
+
import type { ExecutionRecord } from "../../storage/executions"
|
|
11
|
+
import { runAction } from "./run-action"
|
|
12
|
+
import { ActionRunSignals } from "./signals"
|
|
13
|
+
import type { ActionRunContext, ActionRunOutcome, PendingActionRun } from "./types"
|
|
14
|
+
|
|
15
|
+
/** What executing a stored Action run needs from its host. */
|
|
16
|
+
export interface ActionRunHost extends PrimitiveExecutionHost {
|
|
17
|
+
readonly storage: Storage
|
|
18
|
+
readonly logging?: LoggingService
|
|
19
|
+
readonly definitions: Pick<SixbDefinitions, "actions">
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface ExecuteActionRunInput {
|
|
23
|
+
readonly run: PendingActionRun
|
|
24
|
+
/** The durable execution the run was requested under. */
|
|
25
|
+
readonly execution: ExecutionRecord
|
|
26
|
+
/** Cancels the run before its irreversible boundary. */
|
|
27
|
+
readonly signal?: AbortSignal
|
|
28
|
+
/** Test-only override of the 30-second deadlines of the run and of its effects. */
|
|
29
|
+
readonly timeoutMs?: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The model-call attempt an Action run accounts under.
|
|
34
|
+
*
|
|
35
|
+
* Model accounting records every call against an execution attempt. A run executes once, in the
|
|
36
|
+
* process that requested it, so it is always the first.
|
|
37
|
+
*/
|
|
38
|
+
const MODEL_EXECUTION_ATTEMPT = 1
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Execute a requested Action run inside the durable execution it was requested under, and record it.
|
|
42
|
+
*
|
|
43
|
+
* Binds the Action's primitive scope to that execution, then runs the phases under the run's
|
|
44
|
+
* deadline and the caller's signal. Its effects, when it has any, are left to start: see
|
|
45
|
+
* {@link ActionRunOutcome.effects}.
|
|
46
|
+
*/
|
|
47
|
+
export async function executeActionRun(
|
|
48
|
+
host: ActionRunHost,
|
|
49
|
+
input: ExecuteActionRunInput
|
|
50
|
+
): Promise<ActionRunOutcome> {
|
|
51
|
+
const { run, execution } = input
|
|
52
|
+
const actionRuns = requireActionRunStorage(host, run.id)
|
|
53
|
+
const signals = new ActionRunSignals({
|
|
54
|
+
actionId: run.actionId,
|
|
55
|
+
runId: run.id,
|
|
56
|
+
caller: input.signal,
|
|
57
|
+
timeoutMs: input.timeoutMs,
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const bound = bindDurablePrimitiveExecution(host, {
|
|
62
|
+
// Model calls stop with their phase through the `signal` a handler forwards to them. Binding
|
|
63
|
+
// the run's deadline here would also stop the embedding calls behind the vector reads that
|
|
64
|
+
// edits make past the boundary, which must always finish.
|
|
65
|
+
modelExecution: { attempt: MODEL_EXECUTION_ATTEMPT, signal: signals.uninterruptible },
|
|
66
|
+
execution,
|
|
67
|
+
primitive: { kind: "action", id: run.actionId, runId: run.id },
|
|
68
|
+
})
|
|
69
|
+
return await runAction({
|
|
70
|
+
runtime: buildActionContext(host, actionRuns, bound),
|
|
71
|
+
run,
|
|
72
|
+
signals,
|
|
73
|
+
})
|
|
74
|
+
} finally {
|
|
75
|
+
signals.dispose()
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function requireActionRunStorage(host: ActionRunHost, runId: string): ActionRunStorage {
|
|
80
|
+
const actionRuns = host.storage.actionRuns
|
|
81
|
+
if (!actionRuns) {
|
|
82
|
+
throw createSixbError(
|
|
83
|
+
"internal.unexpected",
|
|
84
|
+
"[Sixb] Action execution requires storage.actionRuns support.",
|
|
85
|
+
{ details: { runId } }
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
return actionRuns
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function buildActionContext(
|
|
92
|
+
host: ActionRunHost,
|
|
93
|
+
actionRunsStorage: ActionRunStorage,
|
|
94
|
+
execution: BoundPrimitiveExecution
|
|
95
|
+
): ActionRunContext {
|
|
96
|
+
const sixb = {
|
|
97
|
+
models: execution.sixb.models,
|
|
98
|
+
objects: execution.sixb.objects,
|
|
99
|
+
actions: execution.sixb.actions,
|
|
100
|
+
connector: execution.sixb.connector,
|
|
101
|
+
blobs: execution.sixb.blobs,
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
id: host.id,
|
|
105
|
+
errorReporterHost: host,
|
|
106
|
+
logging: host.logging,
|
|
107
|
+
storage: host.storage,
|
|
108
|
+
actionRunsStorage,
|
|
109
|
+
ontologyMutations: execution.ontologyMutations,
|
|
110
|
+
sixb,
|
|
111
|
+
actions: host.definitions.actions,
|
|
112
|
+
}
|
|
113
|
+
}
|