@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,130 @@
|
|
|
1
|
+
import { assertJsonValue, cloneJsonValue } from "../../json"
|
|
2
|
+
import { ActionRunError } from "./errors"
|
|
3
|
+
import { parseActionRunFailure } from "./failure"
|
|
4
|
+
import { actionRunPhaseRecordsEqual } from "./idempotency"
|
|
5
|
+
import type {
|
|
6
|
+
ActionRunEffectsRecord,
|
|
7
|
+
ActionRunRecord,
|
|
8
|
+
ActionRunWritebackRecord,
|
|
9
|
+
RecordActionEffectsInput,
|
|
10
|
+
RecordActionRunInput,
|
|
11
|
+
} from "./types"
|
|
12
|
+
import { ACTION_RUN_PHASES } from "./types"
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Validate a terminal run record before a provider inserts it, and detach it from the caller.
|
|
16
|
+
*
|
|
17
|
+
* Every provider records through this, so a stored run always reads back as the record that was
|
|
18
|
+
* written: a failed run carries the failure of the phase it ended in, and a succeeded one none. A
|
|
19
|
+
* run is recorded before its effects run, so no record starts in the `effects` phase.
|
|
20
|
+
*/
|
|
21
|
+
export function normalizeRecordActionRunInput(input: RecordActionRunInput): RecordActionRunInput {
|
|
22
|
+
const label = `[Sixb] Action run '${input.id}'`
|
|
23
|
+
for (const field of ["id", "projectId", "executionId", "actionId", "idempotencyKey"] as const) {
|
|
24
|
+
if (typeof input[field] !== "string" || input[field].trim().length === 0) {
|
|
25
|
+
throw new ActionRunError(`${label} must have a nonblank ${field}.`)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const status: string = input.status
|
|
29
|
+
if (status !== "succeeded" && status !== "failed") {
|
|
30
|
+
throw new ActionRunError(`${label} has unknown status '${status}'.`)
|
|
31
|
+
}
|
|
32
|
+
if (!(ACTION_RUN_PHASES as readonly string[]).includes(input.phase)) {
|
|
33
|
+
throw new ActionRunError(`${label} has unknown phase '${input.phase}'.`)
|
|
34
|
+
}
|
|
35
|
+
if (input.phase === "effects") {
|
|
36
|
+
throw new ActionRunError(`${label} is recorded before its effects run.`)
|
|
37
|
+
}
|
|
38
|
+
const startedAt = requireDate(input.startedAt, `${label} startedAt`)
|
|
39
|
+
const finishedAt = requireDate(input.finishedAt, `${label} finishedAt`)
|
|
40
|
+
if (finishedAt < startedAt) {
|
|
41
|
+
throw new ActionRunError(`${label} cannot finish before it started.`)
|
|
42
|
+
}
|
|
43
|
+
assertJsonValue(input.params, `${label} params`)
|
|
44
|
+
|
|
45
|
+
const fields = {
|
|
46
|
+
id: input.id,
|
|
47
|
+
projectId: input.projectId,
|
|
48
|
+
executionId: input.executionId,
|
|
49
|
+
actionId: input.actionId,
|
|
50
|
+
subject: structuredClone(input.subject),
|
|
51
|
+
phase: input.phase,
|
|
52
|
+
startedAt,
|
|
53
|
+
finishedAt,
|
|
54
|
+
params: structuredClone(input.params),
|
|
55
|
+
idempotencyKey: input.idempotencyKey,
|
|
56
|
+
...(input.writeback === undefined
|
|
57
|
+
? {}
|
|
58
|
+
: { writeback: normalizeWriteback(input.writeback, label) }),
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (input.status === "succeeded") {
|
|
62
|
+
if (input.error !== undefined) {
|
|
63
|
+
throw new ActionRunError(`${label} succeeded, so it cannot record a failure.`)
|
|
64
|
+
}
|
|
65
|
+
return { ...fields, status: "succeeded" }
|
|
66
|
+
}
|
|
67
|
+
const error = parseActionRunFailure(input.error, input.phase)
|
|
68
|
+
if (error.details.runId !== input.id || error.details.actionId !== input.actionId) {
|
|
69
|
+
throw new ActionRunError(`${label} records the failure of another run.`)
|
|
70
|
+
}
|
|
71
|
+
return { ...fields, status: "failed", error }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Resolve what recording effects does to the stored run: write `effects`, or nothing (`null`) when
|
|
76
|
+
* an equal outcome is already recorded.
|
|
77
|
+
*
|
|
78
|
+
* Effects run only after a succeeded run committed its edits, and their outcome is recorded once.
|
|
79
|
+
*/
|
|
80
|
+
export function resolveActionRunEffects(
|
|
81
|
+
existing: ActionRunRecord | null,
|
|
82
|
+
input: RecordActionEffectsInput
|
|
83
|
+
): { readonly run: ActionRunRecord; readonly effects: ActionRunEffectsRecord | null } {
|
|
84
|
+
const label = `[Sixb] Action run '${input.id}'`
|
|
85
|
+
if (!existing) {
|
|
86
|
+
throw new ActionRunError(`${label} not found for project '${input.projectId}'.`)
|
|
87
|
+
}
|
|
88
|
+
const completedAt = requireDate(input.completedAt ?? new Date(), `${label} effects`)
|
|
89
|
+
const effects: ActionRunEffectsRecord =
|
|
90
|
+
input.status === "succeeded"
|
|
91
|
+
? { status: "succeeded", completedAt }
|
|
92
|
+
: { status: "failed", completedAt, error: parseActionRunFailure(input.error, "effects") }
|
|
93
|
+
|
|
94
|
+
if (existing.effects) {
|
|
95
|
+
if (actionRunPhaseRecordsEqual(existing.effects, effects))
|
|
96
|
+
return { run: existing, effects: null }
|
|
97
|
+
throw new ActionRunError(`${label} already has a different effects record.`)
|
|
98
|
+
}
|
|
99
|
+
if (existing.status !== "succeeded" || existing.phase !== "commit") {
|
|
100
|
+
throw new ActionRunError(
|
|
101
|
+
`${label} cannot record effects: it ended '${existing.status}' in phase '${existing.phase}'.`
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
return { run: existing, effects }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function normalizeWriteback(
|
|
108
|
+
writeback: ActionRunWritebackRecord,
|
|
109
|
+
label: string
|
|
110
|
+
): ActionRunWritebackRecord {
|
|
111
|
+
const completedAt = requireDate(writeback.completedAt, `${label} writeback`)
|
|
112
|
+
if (writeback.status === "succeeded") {
|
|
113
|
+
assertJsonValue(writeback.result, `${label} writeback result`)
|
|
114
|
+
return { status: "succeeded", completedAt, result: cloneJsonValue(writeback.result) }
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
status: "failed",
|
|
118
|
+
completedAt,
|
|
119
|
+
error: parseActionRunFailure(writeback.error, "writeback"),
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** A detached copy of `value`, which must be a valid date. */
|
|
124
|
+
function requireDate(value: Date, label: string): Date {
|
|
125
|
+
const date = value instanceof Date ? new Date(value) : new Date(Number.NaN)
|
|
126
|
+
if (!Number.isFinite(date.getTime())) {
|
|
127
|
+
throw new ActionRunError(`${label} must be a valid date.`)
|
|
128
|
+
}
|
|
129
|
+
return date
|
|
130
|
+
}
|
|
@@ -2,32 +2,26 @@ import type { ActionSubject } from "../../actions"
|
|
|
2
2
|
import type { SixbErrorCode, SixbFailure } from "../../errors/types"
|
|
3
3
|
import type { JsonValue } from "../../json"
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"commit",
|
|
14
|
-
"effects",
|
|
15
|
-
"cancelled",
|
|
16
|
-
] as const
|
|
5
|
+
/**
|
|
6
|
+
* How a run ended. A run is recorded once, when it ends: while it executes, the request that runs
|
|
7
|
+
* it is its only state.
|
|
8
|
+
*/
|
|
9
|
+
export type ActionRunStatus = "succeeded" | "failed"
|
|
10
|
+
|
|
11
|
+
/** The phases of a run, in the order it reaches them. */
|
|
12
|
+
export const ACTION_RUN_PHASES = ["validation", "writeback", "edits", "commit", "effects"] as const
|
|
17
13
|
|
|
18
14
|
export type ActionRunPhase = (typeof ACTION_RUN_PHASES)[number]
|
|
19
15
|
|
|
20
16
|
export type ActionRunParams = Readonly<Record<string, JsonValue>>
|
|
21
17
|
|
|
22
|
-
export type ActionRunPhaseStatus = "succeeded" | "failed"
|
|
23
|
-
|
|
24
18
|
/** Error codes an action run or phase record can persist and expose. */
|
|
25
19
|
export const ACTION_RUN_FAILURE_CODES = [
|
|
26
20
|
"internal.unexpected",
|
|
27
21
|
"runtime.cancelled",
|
|
28
|
-
"queue.enqueue_failed",
|
|
29
22
|
"action.phase_failed",
|
|
30
23
|
"action.read_conflict",
|
|
24
|
+
"action.timeout",
|
|
31
25
|
] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]
|
|
32
26
|
|
|
33
27
|
export type ActionRunFailureCode = (typeof ACTION_RUN_FAILURE_CODES)[number]
|
|
@@ -70,67 +64,34 @@ export type ActionRunEffectsRecord =
|
|
|
70
64
|
readonly error: ActionRunFailure<"effects">
|
|
71
65
|
}
|
|
72
66
|
|
|
73
|
-
|
|
67
|
+
interface ActionRunRecordFields {
|
|
74
68
|
readonly id: string
|
|
75
69
|
readonly projectId: string
|
|
76
70
|
readonly executionId: string
|
|
77
71
|
readonly actionId: string
|
|
78
72
|
readonly subject: ActionSubject
|
|
79
|
-
|
|
80
|
-
readonly phase
|
|
81
|
-
readonly
|
|
82
|
-
readonly
|
|
83
|
-
readonly finishedAt?: Date
|
|
73
|
+
/** The last phase the run reached. */
|
|
74
|
+
readonly phase: ActionRunPhase
|
|
75
|
+
readonly startedAt: Date
|
|
76
|
+
readonly finishedAt: Date
|
|
84
77
|
readonly params: ActionRunParams
|
|
85
78
|
readonly idempotencyKey: string
|
|
86
79
|
readonly writeback?: ActionRunWritebackRecord
|
|
87
|
-
readonly effects?: ActionRunEffectsRecord
|
|
88
|
-
readonly error?: ActionRunFailure
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export interface QueueActionRunInput {
|
|
92
|
-
readonly id: string
|
|
93
|
-
readonly projectId: string
|
|
94
|
-
readonly executionId: string
|
|
95
|
-
readonly actionId: string
|
|
96
|
-
readonly subject: ActionSubject
|
|
97
|
-
readonly params: ActionRunParams
|
|
98
|
-
readonly idempotencyKey: string
|
|
99
|
-
readonly queuedAt?: Date
|
|
100
80
|
}
|
|
101
81
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
readonly
|
|
105
|
-
readonly
|
|
106
|
-
readonly phase?: Extract<ActionRunPhase, "validation">
|
|
107
|
-
}
|
|
82
|
+
/** A run's terminal record, as it is written once when the run ends. */
|
|
83
|
+
export type RecordActionRunInput =
|
|
84
|
+
| (ActionRunRecordFields & { readonly status: "succeeded"; readonly error?: never })
|
|
85
|
+
| (ActionRunRecordFields & { readonly status: "failed"; readonly error: ActionRunFailure })
|
|
108
86
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
>
|
|
87
|
+
/**
|
|
88
|
+
* A recorded run. Its effects run after its record is written, so their outcome is the one part
|
|
89
|
+
* recorded later, on a succeeded run that committed edits.
|
|
90
|
+
*/
|
|
91
|
+
export type ActionRunRecord = RecordActionRunInput & {
|
|
92
|
+
readonly effects?: ActionRunEffectsRecord
|
|
116
93
|
}
|
|
117
94
|
|
|
118
|
-
export type RecordActionWritebackInput =
|
|
119
|
-
| {
|
|
120
|
-
readonly id: string
|
|
121
|
-
readonly projectId: string
|
|
122
|
-
readonly status: "succeeded"
|
|
123
|
-
readonly completedAt?: Date
|
|
124
|
-
readonly result: JsonValue
|
|
125
|
-
}
|
|
126
|
-
| {
|
|
127
|
-
readonly id: string
|
|
128
|
-
readonly projectId: string
|
|
129
|
-
readonly status: "failed"
|
|
130
|
-
readonly completedAt?: Date
|
|
131
|
-
readonly error: ActionRunFailure<"writeback">
|
|
132
|
-
}
|
|
133
|
-
|
|
134
95
|
export type RecordActionEffectsInput =
|
|
135
96
|
| {
|
|
136
97
|
readonly id: string
|
|
@@ -146,22 +107,6 @@ export type RecordActionEffectsInput =
|
|
|
146
107
|
readonly error: ActionRunFailure<"effects">
|
|
147
108
|
}
|
|
148
109
|
|
|
149
|
-
export type FinishActionRunInput =
|
|
150
|
-
| {
|
|
151
|
-
readonly id: string
|
|
152
|
-
readonly projectId: string
|
|
153
|
-
readonly status: "succeeded"
|
|
154
|
-
readonly finishedAt?: Date
|
|
155
|
-
readonly phase?: ActionRunPhase
|
|
156
|
-
}
|
|
157
|
-
| {
|
|
158
|
-
readonly id: string
|
|
159
|
-
readonly projectId: string
|
|
160
|
-
readonly status: "failed" | "cancelled"
|
|
161
|
-
readonly finishedAt?: Date
|
|
162
|
-
readonly error: ActionRunFailure
|
|
163
|
-
}
|
|
164
|
-
|
|
165
110
|
export interface ListActionRunsInput {
|
|
166
111
|
readonly projectId: string
|
|
167
112
|
readonly actionId?: string
|
|
@@ -184,21 +129,21 @@ export interface ListActionRunsResult {
|
|
|
184
129
|
readonly total: number
|
|
185
130
|
}
|
|
186
131
|
|
|
187
|
-
export interface LockActionMaterializationRunInput {
|
|
188
|
-
readonly projectId: string
|
|
189
|
-
readonly actionId: string
|
|
190
|
-
readonly runId: string
|
|
191
|
-
}
|
|
192
|
-
|
|
193
132
|
export interface ActionRunStorage {
|
|
194
|
-
/**
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Insert a run's terminal record.
|
|
135
|
+
*
|
|
136
|
+
* A run is recorded once: a run id that already has a record is refused with an
|
|
137
|
+
* `ActionRunError`, and so is an execution that already recorded another run. The execution must
|
|
138
|
+
* be the trusted primitive execution created for this run.
|
|
139
|
+
*/
|
|
140
|
+
record(input: RecordActionRunInput): Promise<ActionRunRecord>
|
|
141
|
+
/**
|
|
142
|
+
* Record the outcome of the effects of a succeeded run that committed edits, once. Recording an
|
|
143
|
+
* equal outcome again returns the run unchanged.
|
|
144
|
+
*/
|
|
200
145
|
recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord>
|
|
201
|
-
finish(input: FinishActionRunInput): Promise<ActionRunRecord>
|
|
202
146
|
getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null>
|
|
147
|
+
/** Runs ordered by `startedAt`, then id. */
|
|
203
148
|
list(input: ListActionRunsInput): Promise<ListActionRunsResult>
|
|
204
149
|
}
|
package/src/storage/index.ts
CHANGED
|
@@ -35,28 +35,20 @@ export type {
|
|
|
35
35
|
ActionRunFailureDetails,
|
|
36
36
|
ActionRunParams,
|
|
37
37
|
ActionRunPhase,
|
|
38
|
-
ActionRunPhaseRecord,
|
|
39
|
-
ActionRunPhaseStatus,
|
|
40
38
|
ActionRunRecord,
|
|
41
39
|
ActionRunStatus,
|
|
42
40
|
ActionRunStorage,
|
|
43
41
|
ActionRunWritebackRecord,
|
|
44
|
-
EnterActionRunPhaseInput,
|
|
45
|
-
FinishActionRunInput,
|
|
46
42
|
ListActionRunsInput,
|
|
47
43
|
ListActionRunsResult,
|
|
48
|
-
LockActionMaterializationRunInput,
|
|
49
|
-
QueueActionRunInput,
|
|
50
44
|
RecordActionEffectsInput,
|
|
51
|
-
|
|
52
|
-
StartActionRunInput,
|
|
45
|
+
RecordActionRunInput,
|
|
53
46
|
} from "./action-runs"
|
|
54
47
|
export {
|
|
55
48
|
ACTION_RUN_FAILURE_CODES,
|
|
56
49
|
ACTION_RUN_PHASES,
|
|
57
50
|
ActionRunError,
|
|
58
51
|
InMemoryActionRunStorage,
|
|
59
|
-
isTerminalActionRun,
|
|
60
52
|
} from "./action-runs"
|
|
61
53
|
export type {
|
|
62
54
|
AgentContextCheckpointReason,
|
package/src/storage/internal.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/** Implementation exports for Sixb packages only. */
|
|
2
2
|
|
|
3
|
-
export {
|
|
4
|
-
actionRunParamsEqual,
|
|
5
|
-
actionRunPhaseRecordsEqual,
|
|
6
|
-
actionSubjectsEqual,
|
|
7
|
-
canRequeueActionRunAfterEnqueueFailure,
|
|
8
|
-
finishActionRunPhase,
|
|
9
|
-
} from "./action-runs/idempotency"
|
|
3
|
+
export { normalizeRecordActionRunInput, resolveActionRunEffects } from "./action-runs/record"
|
|
10
4
|
export { assertAiUsageExecutionId, normalizeAiModelCallRecord } from "./ai-usage/record"
|
|
11
5
|
export { normalizeAiModelCallUsage } from "./ai-usage/usage"
|
|
12
6
|
export { parseFileDownloadGrantRow } from "./file-download-grants/record"
|
|
@@ -20,9 +20,10 @@ export class ObjectReadLimitExceededError extends Error {
|
|
|
20
20
|
|
|
21
21
|
constructor(
|
|
22
22
|
readonly metric: ObjectReadLimitMetric,
|
|
23
|
-
readonly limit: number
|
|
23
|
+
readonly limit: number,
|
|
24
|
+
message = `[Sixb] Object read exceeded its ${metric} limit (${limit}).`
|
|
24
25
|
) {
|
|
25
|
-
super(
|
|
26
|
+
super(message)
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
|
package/src/storage/types.ts
CHANGED
|
@@ -35,12 +35,10 @@ export type {
|
|
|
35
35
|
ActionRunRecord,
|
|
36
36
|
ActionRunStatus,
|
|
37
37
|
ActionRunStorage,
|
|
38
|
-
FinishActionRunInput,
|
|
39
38
|
ListActionRunsInput,
|
|
40
39
|
ListActionRunsResult,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
StartActionRunInput,
|
|
40
|
+
RecordActionEffectsInput,
|
|
41
|
+
RecordActionRunInput,
|
|
44
42
|
} from "./action-runs"
|
|
45
43
|
export { ACTION_RUN_FAILURE_CODES, ACTION_RUN_PHASES, ActionRunError } from "./action-runs"
|
|
46
44
|
export type {
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
import type { ActionSubject } from "../actions"
|
|
1
2
|
import type { AuthorizablePrincipal, TrustedPrimitiveRef } from "../execution"
|
|
2
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
ActionRunFailure,
|
|
5
|
+
ActionRunParams,
|
|
6
|
+
ActionRunPhase,
|
|
7
|
+
ActionRunRecord,
|
|
8
|
+
ActionRunWritebackRecord,
|
|
9
|
+
RecordActionRunInput,
|
|
10
|
+
Storage,
|
|
11
|
+
} from "../storage"
|
|
3
12
|
import type { ExecutionStorage } from "../storage/executions"
|
|
4
13
|
|
|
5
14
|
/** Create the durable execution chain required by an Action-run storage fixture. */
|
|
@@ -57,22 +66,73 @@ export async function createTestActionExecution(
|
|
|
57
66
|
return executionId
|
|
58
67
|
}
|
|
59
68
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
type TestActionRunOutcome =
|
|
70
|
+
| { readonly status?: "succeeded"; readonly error?: never }
|
|
71
|
+
| { readonly status: "failed"; readonly error: ActionRunFailure }
|
|
72
|
+
|
|
73
|
+
/** A test Action run that ended. It succeeds in its commit phase unless told otherwise. */
|
|
74
|
+
export type TestActionRunInput = TestActionRunOutcome & {
|
|
75
|
+
readonly id: string
|
|
76
|
+
readonly projectId: string
|
|
77
|
+
readonly actionId: string
|
|
78
|
+
readonly subject: ActionSubject
|
|
79
|
+
readonly params: ActionRunParams
|
|
80
|
+
readonly idempotencyKey: string
|
|
81
|
+
/** Defaults to `commit` for a succeeded run, and to its failure's phase for a failed one. */
|
|
82
|
+
readonly phase?: ActionRunPhase
|
|
83
|
+
/** Defaults to now. */
|
|
84
|
+
readonly startedAt?: Date
|
|
85
|
+
/** Defaults to `startedAt`. */
|
|
86
|
+
readonly finishedAt?: Date
|
|
87
|
+
readonly writeback?: ActionRunWritebackRecord
|
|
88
|
+
readonly requesterGroupIds?: readonly string[]
|
|
89
|
+
/** Must name an existing auth principal. The parent request then carries its authority. */
|
|
90
|
+
readonly requestedBy?: AuthorizablePrincipal
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Create a test run's durable execution, and return the run's terminal record without writing it:
|
|
95
|
+
* an Action commit carries the record it inserts.
|
|
96
|
+
*/
|
|
97
|
+
export async function createTestActionRunRecord(
|
|
98
|
+
executions: ExecutionStorage,
|
|
99
|
+
input: TestActionRunInput
|
|
100
|
+
): Promise<RecordActionRunInput> {
|
|
101
|
+
const executionId = await createTestActionExecution(executions, {
|
|
70
102
|
projectId: input.projectId,
|
|
71
103
|
actionId: input.actionId,
|
|
72
104
|
runId: input.id,
|
|
73
105
|
requesterGroupIds: input.requesterGroupIds,
|
|
74
106
|
...(input.requestedBy === undefined ? {} : { requestedBy: input.requestedBy }),
|
|
75
107
|
})
|
|
76
|
-
const
|
|
77
|
-
|
|
108
|
+
const startedAt = input.startedAt ?? new Date()
|
|
109
|
+
const fields = {
|
|
110
|
+
id: input.id,
|
|
111
|
+
projectId: input.projectId,
|
|
112
|
+
executionId,
|
|
113
|
+
actionId: input.actionId,
|
|
114
|
+
subject: input.subject,
|
|
115
|
+
params: input.params,
|
|
116
|
+
idempotencyKey: input.idempotencyKey,
|
|
117
|
+
startedAt,
|
|
118
|
+
finishedAt: input.finishedAt ?? startedAt,
|
|
119
|
+
...(input.writeback === undefined ? {} : { writeback: input.writeback }),
|
|
120
|
+
}
|
|
121
|
+
return input.status === "failed"
|
|
122
|
+
? {
|
|
123
|
+
...fields,
|
|
124
|
+
status: "failed",
|
|
125
|
+
phase: input.phase ?? input.error.details.phase,
|
|
126
|
+
error: input.error,
|
|
127
|
+
}
|
|
128
|
+
: { ...fields, status: "succeeded", phase: input.phase ?? "commit" }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Record a test Action run with the valid durable execution every provider requires. */
|
|
132
|
+
export async function recordTestActionRun(
|
|
133
|
+
storage: Pick<Storage, "actionRuns" | "executions">,
|
|
134
|
+
input: TestActionRunInput
|
|
135
|
+
): Promise<ActionRunRecord> {
|
|
136
|
+
if (!storage.actionRuns) throw new Error("Action run storage is not configured for this test.")
|
|
137
|
+
return storage.actionRuns.record(await createTestActionRunRecord(storage.executions, input))
|
|
78
138
|
}
|