@sixb/core 0.1.17 → 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 +56 -52
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +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/actions/validation.d.ts.map +1 -1
- package/dist/agents/adapters.d.ts +7 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +7 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context/entries.d.ts +10 -1
- package/dist/agents/context/entries.d.ts.map +1 -1
- package/dist/agents/context/index.d.ts +1 -1
- package/dist/agents/context/index.d.ts.map +1 -1
- package/dist/agents/context/index.js +4 -2
- package/dist/agents/context/index.js.map +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +63 -59
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +8 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/request.d.ts +19 -5
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts +41 -0
- package/dist/agents/skills.d.ts.map +1 -0
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +12 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/types.d.ts +6 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/index.js +6 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/file-content.d.ts +18 -0
- package/dist/blob-storage/file-content.d.ts.map +1 -0
- package/dist/blob-storage/index.d.ts +1 -1
- package/dist/blob-storage/index.d.ts.map +1 -1
- package/dist/blob-storage/index.js +2 -2
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -1
- package/dist/blob-storage/internal.js +16 -4
- package/dist/blob-storage/internal.js.map +1 -1
- package/dist/blob-storage/media-type.d.ts +8 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -0
- package/dist/blob-storage/types.d.ts +12 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/blob-storage/validation.d.ts +6 -0
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/agent-context.d.ts +33 -0
- package/dist/bootstrap/agent-context.d.ts.map +1 -0
- package/dist/bootstrap/discovery.d.ts +23 -3
- 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 +285 -77
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-t9shqx3w.js → chunk-1f7wpmyp.js} +143 -7
- package/dist/chunk-1f7wpmyp.js.map +14 -0
- package/dist/{chunk-jjrn5v0p.js → chunk-1k89ecfr.js} +1 -1
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
- package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
- package/dist/{chunk-svabwqdq.js → chunk-3gnrh4ve.js} +44 -420
- package/dist/{chunk-svabwqdq.js.map → chunk-3gnrh4ve.js.map} +9 -13
- package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
- package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
- package/dist/{chunk-pja9jfz6.js → chunk-4tcx876c.js} +126 -64
- package/dist/chunk-4tcx876c.js.map +19 -0
- package/dist/{chunk-vre348sb.js → chunk-52bk93x8.js} +2 -2
- package/dist/{chunk-4gmng3vf.js → chunk-5e43w60z.js} +2 -2
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-33saed7g.js → chunk-7kg3k1m9.js} +1 -1
- package/dist/{chunk-7ecp4v7a.js → chunk-7mbzgd9m.js} +10 -4
- package/dist/{chunk-7ecp4v7a.js.map → chunk-7mbzgd9m.js.map} +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-xcy5ddha.js → chunk-80mc0971.js} +356 -301
- package/dist/chunk-80mc0971.js.map +15 -0
- package/dist/{chunk-gf7yht60.js → chunk-85yvv5n0.js} +27 -10
- package/dist/chunk-85yvv5n0.js.map +12 -0
- 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-2am3db31.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-dam456ve.js → chunk-aff7cyea.js} +431 -70
- package/dist/{chunk-dam456ve.js.map → chunk-aff7cyea.js.map} +10 -7
- 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-xyvy73tj.js → chunk-bpgy64fw.js} +8 -3
- package/dist/chunk-bpgy64fw.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-5thzcb8g.js → chunk-c85m1hyj.js} +2 -2
- package/dist/{chunk-e67ynxcr.js → chunk-d2ync1v3.js} +5 -5
- package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
- package/dist/chunk-enpsx8k5.js +127 -0
- package/dist/chunk-enpsx8k5.js.map +10 -0
- package/dist/chunk-ey3pyej1.js +8807 -0
- package/dist/chunk-ey3pyej1.js.map +106 -0
- package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
- package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
- package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
- package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
- package/dist/chunk-hkc3jct7.js.map +10 -0
- package/dist/{chunk-rpxz486p.js → chunk-hvsb78a1.js} +24 -8
- package/dist/{chunk-rpxz486p.js.map → chunk-hvsb78a1.js.map} +3 -3
- package/dist/{chunk-5yd8cchh.js → chunk-j2bp5ryw.js} +55 -246
- package/dist/{chunk-5yd8cchh.js.map → chunk-j2bp5ryw.js.map} +4 -4
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-w9yycd3t.js → chunk-kg5j6fct.js} +4 -8
- package/dist/{chunk-w9yycd3t.js.map → chunk-kg5j6fct.js.map} +3 -3
- package/dist/{chunk-vp3z1ckh.js → chunk-kyzq4wy9.js} +7 -7
- 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-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
- 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-a7er86jd.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-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
- package/dist/chunk-pfp1txq2.js.map +11 -0
- package/dist/chunk-pqajwytd.js.map +2 -2
- package/dist/{chunk-f1xh7a32.js → chunk-q1vkr2ys.js} +4 -4
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-23xs4qp9.js → chunk-rhg02hxq.js} +4 -4
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-aq39q04r.js → chunk-s16apyk9.js} +104 -18
- package/dist/chunk-s16apyk9.js.map +16 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-k4g51s47.js → chunk-t6vq7bff.js} +5 -5
- package/dist/{chunk-sk0hcjsz.js → chunk-tjb1mk5t.js} +3 -3
- package/dist/{chunk-cnb5kv05.js → chunk-tpn40322.js} +23 -8
- package/dist/chunk-tpn40322.js.map +19 -0
- package/dist/{chunk-rx7h5fdx.js → chunk-v9xd5wzd.js} +1 -1
- package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
- package/dist/chunk-wwdfe68s.js +128 -0
- package/dist/chunk-wwdfe68s.js.map +11 -0
- package/dist/{chunk-jnfxmr3f.js → chunk-wz0xs816.js} +6 -6
- package/dist/{chunk-jnfxmr3f.js.map → chunk-wz0xs816.js.map} +1 -1
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/chunk-y0c4e6ex.js +16 -0
- package/dist/chunk-y0c4e6ex.js.map +10 -0
- package/dist/{chunk-5be2ath4.js → chunk-y7rqfrgg.js} +20 -138
- package/dist/{chunk-5be2ath4.js.map → chunk-y7rqfrgg.js.map} +8 -9
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- 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-fggq3d9k.js → chunk-zrmy8zvw.js} +66 -47
- package/dist/{chunk-fggq3d9k.js.map → chunk-zrmy8zvw.js.map} +4 -4
- package/dist/datasets/builders.d.ts +12 -1
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +27 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -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/write.d.ts +5 -0
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +10 -5
- package/dist/datasets/write.js.map +1 -1
- 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/edits/properties.d.ts.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/execution.d.ts +2 -1
- package/dist/events/execution.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/events/types/objects.d.ts +5 -0
- package/dist/events/types/objects.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +10 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +50 -48
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +6 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +60 -88
- package/dist/execution/primitive.js.map +3 -4
- package/dist/execution/request.js +46 -46
- package/dist/execution/request.js.map +1 -1
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -124
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +8 -5
- package/dist/lake-storage/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 +35 -32
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/catalog.d.ts +1 -1
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +6 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.js +26 -23
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +4 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/language-model.d.ts +6 -0
- package/dist/models/language-model.d.ts.map +1 -1
- 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/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +6 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +2 -3
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +49 -30
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +41 -0
- package/dist/objects/property-clearance.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +34 -31
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/validate.d.ts +10 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/file-handle.d.ts +6 -0
- package/dist/objects/sdk/file-handle.d.ts.map +1 -0
- 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/service/index.d.ts +0 -1
- package/dist/objects/service/index.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +12 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +35 -0
- package/dist/ontology/docs-markdown.d.ts.map +1 -0
- package/dist/ontology/docs.d.ts +50 -0
- package/dist/ontology/docs.d.ts.map +1 -0
- package/dist/ontology/index.js +7 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +19 -0
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +3 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +276 -3
- package/dist/ontology/internal.js.map +4 -3
- package/dist/ontology/tokens.d.ts +8 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +5 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +7 -0
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +34 -31
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +27 -24
- 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/create.d.ts +11 -2
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -1
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +13 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +30 -28
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/locale.d.ts +9 -0
- package/dist/runtime/locale.d.ts.map +1 -0
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +46 -39
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/runtime.d.ts +3 -0
- package/dist/scheduler/runtime.d.ts.map +1 -1
- 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/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -1
- package/dist/security/index.d.ts +4 -4
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/markings.d.ts +19 -0
- package/dist/security/markings.d.ts.map +1 -0
- package/dist/security/redactions.d.ts +4 -0
- package/dist/security/redactions.d.ts.map +1 -0
- package/dist/security/registry.d.ts +7 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +25 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -21
- package/dist/shares/internal.js.map +2 -2
- 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/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +5 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +15 -9
- package/dist/storage/agents/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 +12 -9
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +36 -34
- 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 +11 -13
- 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/objects/types.d.ts +7 -0
- package/dist/storage/objects/types.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 +12 -9
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +35 -32
- package/dist/syncs/index.js.map +1 -1
- 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 +3213 -2869
- 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 +29 -26
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +55 -55
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -3
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +2 -1
- package/dist/workflows/validation.d.ts.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/read-facade.ts +2 -1
- 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/actions/validation.ts +4 -1
- package/src/agents/adapters.ts +15 -0
- package/src/agents/authority.ts +15 -0
- package/src/agents/context/entries.ts +48 -4
- package/src/agents/context/index.ts +1 -0
- package/src/agents/context-compaction.ts +6 -0
- package/src/agents/errors.ts +3 -0
- package/src/agents/index.ts +13 -1
- package/src/agents/message.ts +9 -0
- package/src/agents/request.ts +178 -22
- package/src/agents/skills.ts +63 -0
- package/src/agents/types.ts +35 -5
- package/src/auth/runtime.ts +14 -0
- package/src/auth/types.ts +6 -0
- package/src/authorization/event-visibility.ts +0 -12
- package/src/authorization/resolve.ts +6 -1
- package/src/authorization/types.ts +7 -0
- package/src/blob-storage/execution.ts +12 -0
- package/src/blob-storage/file-content.ts +106 -0
- package/src/blob-storage/index.ts +1 -0
- package/src/blob-storage/internal.ts +7 -0
- package/src/blob-storage/media-type.ts +29 -0
- package/src/blob-storage/types.ts +13 -1
- package/src/blob-storage/validation.ts +13 -0
- package/src/bootstrap/agent-context.ts +356 -0
- package/src/bootstrap/discovery.ts +100 -33
- package/src/bootstrap/index.ts +1 -1
- package/src/bootstrap/ontology-type-manifest.ts +3 -38
- package/src/datasets/builders.ts +17 -1
- package/src/datasets/execution.ts +110 -2
- package/src/datasets/index.ts +7 -1
- package/src/datasets/types.ts +2 -0
- package/src/datasets/write.ts +21 -2
- 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/edits/properties.ts +3 -0
- 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/execution.ts +15 -16
- 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/events/types/objects.ts +5 -0
- package/src/execution/agent.ts +27 -0
- package/src/execution/authorization.ts +1 -0
- package/src/execution/authorized-object-reader.ts +96 -34
- package/src/execution/scopes.ts +2 -6
- package/src/http/api-routes.ts +4 -3
- package/src/index.ts +28 -21
- 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/models/catalog.ts +26 -2
- package/src/models/execution/README.md +4 -3
- package/src/models/execution/binding.ts +6 -0
- package/src/models/execution/model-call-recorder.ts +10 -0
- package/src/models/execution/session.ts +2 -2
- package/src/models/execution.ts +6 -2
- package/src/models/language-model.ts +6 -0
- 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/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +6 -3
- package/src/objects/materializer-adapter.ts +3 -0
- package/src/objects/object/upsert-batch.ts +4 -1
- package/src/objects/object/upsert.ts +3 -1
- package/src/objects/property-clearance.ts +209 -0
- package/src/objects/query/executor.ts +43 -36
- package/src/objects/query/validate.ts +133 -14
- package/src/objects/sdk/file-handle.ts +77 -0
- package/src/objects/sdk/object-handle.ts +11 -33
- package/src/objects/sdk/object-set.ts +10 -32
- package/src/objects/service/index.ts +0 -1
- package/src/ontology/builders.ts +18 -2
- package/src/ontology/docs-markdown.ts +394 -0
- package/src/ontology/docs.ts +196 -0
- package/src/ontology/inference/index.ts +25 -0
- package/src/ontology/internal.ts +7 -0
- package/src/ontology/tokens.ts +13 -2
- package/src/ontology/types.ts +5 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/schema.ts +26 -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/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +50 -1
- package/src/runtime/index.ts +3 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/resolve-definitions.ts +28 -2
- package/src/runtime/sixb.ts +1 -1
- package/src/runtime/types.ts +55 -48
- package/src/scheduler/runtime.ts +11 -2
- package/src/schedules/builders.ts +1 -4
- package/src/schedules/runtime.ts +0 -41
- package/src/schedules/validation.ts +2 -16
- package/src/security/builders.ts +49 -5
- package/src/security/every.ts +1 -1
- package/src/security/index.ts +6 -1
- package/src/security/markings.ts +313 -0
- package/src/security/redactions.ts +6 -0
- package/src/security/registry.ts +21 -1
- package/src/security/types.ts +26 -0
- package/src/security/validation.ts +59 -2
- 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/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/index.ts +2 -9
- package/src/storage/internal.ts +1 -7
- package/src/storage/objects/execution-limits.ts +3 -2
- package/src/storage/objects/types.ts +7 -0
- 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/src/workflows/builders.ts +24 -1
- package/src/workflows/request.ts +3 -0
- package/src/workflows/types.ts +6 -3
- package/src/workflows/validation.ts +32 -4
- 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 -321
- package/dist/actions/worker.js.map +0 -11
- package/dist/chunk-10styjgk.js +0 -1572
- package/dist/chunk-10styjgk.js.map +0 -20
- package/dist/chunk-1hqwggsn.js.map +0 -12
- package/dist/chunk-52c5zb0z.js +0 -81
- package/dist/chunk-52c5zb0z.js.map +0 -10
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6wbm6ymz.js +0 -4399
- package/dist/chunk-6wbm6ymz.js.map +0 -48
- package/dist/chunk-85cd7e8c.js +0 -51
- package/dist/chunk-85cd7e8c.js.map +0 -10
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9g6jz9kk.js +0 -592
- package/dist/chunk-9g6jz9kk.js.map +0 -15
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-aq39q04r.js.map +0 -15
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-cnb5kv05.js.map +0 -19
- package/dist/chunk-dfm066qg.js.map +0 -11
- package/dist/chunk-dmn70ztd.js.map +0 -11
- package/dist/chunk-fc5zfxy1.js.map +0 -11
- package/dist/chunk-gf7yht60.js.map +0 -12
- package/dist/chunk-h3v76ams.js.map +0 -11
- package/dist/chunk-pja9jfz6.js.map +0 -19
- package/dist/chunk-r2y23egw.js.map +0 -10
- package/dist/chunk-t9shqx3w.js.map +0 -12
- package/dist/chunk-tjjgy3z4.js +0 -1277
- package/dist/chunk-tjjgy3z4.js.map +0 -35
- package/dist/chunk-xcy5ddha.js.map +0 -15
- package/dist/chunk-xyvy73tj.js.map +0 -12
- package/dist/chunk-y2aq6ag9.js.map +0 -11
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- 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-jjrn5v0p.js.map → chunk-1k89ecfr.js.map} +0 -0
- /package/dist/{chunk-vre348sb.js.map → chunk-52bk93x8.js.map} +0 -0
- /package/dist/{chunk-4gmng3vf.js.map → chunk-5e43w60z.js.map} +0 -0
- /package/dist/{chunk-33saed7g.js.map → chunk-7kg3k1m9.js.map} +0 -0
- /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
- /package/dist/{chunk-2am3db31.js.map → chunk-9gyp8hg1.js.map} +0 -0
- /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-5thzcb8g.js.map → chunk-c85m1hyj.js.map} +0 -0
- /package/dist/{chunk-e67ynxcr.js.map → chunk-d2ync1v3.js.map} +0 -0
- /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
- /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
- /package/dist/{chunk-vp3z1ckh.js.map → chunk-kyzq4wy9.js.map} +0 -0
- /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-a7er86jd.js.map → chunk-nre82s12.js.map} +0 -0
- /package/dist/{chunk-f1xh7a32.js.map → chunk-q1vkr2ys.js.map} +0 -0
- /package/dist/{chunk-23xs4qp9.js.map → chunk-rhg02hxq.js.map} +0 -0
- /package/dist/{chunk-k4g51s47.js.map → chunk-t6vq7bff.js.map} +0 -0
- /package/dist/{chunk-sk0hcjsz.js.map → chunk-tjb1mk5t.js.map} +0 -0
- /package/dist/{chunk-rx7h5fdx.js.map → chunk-v9xd5wzd.js.map} +0 -0
- /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Context hierarchy: SixbRuntimeContext → ResolvedObjectContext → ResolvedLinkContext
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type { BlobStorage } from "../../blob-storage"
|
|
7
8
|
import type { ExecutionContext } from "../../execution"
|
|
8
9
|
import type { ObjectLink } from "../../ontology"
|
|
9
10
|
import type { ObjectTypeWithPropertyTokens } from "../../ontology/tokens"
|
|
@@ -20,6 +21,12 @@ export interface ExecutionObjectContext extends ResolvedObjectContext {
|
|
|
20
21
|
readonly execution: ExecutionContext
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
/** An object set's operations, which also open the files its objects reference. */
|
|
25
|
+
export interface ObjectSetContext extends ExecutionObjectContext {
|
|
26
|
+
/** Opened only once a FileRef is resolved in a row read with the caller's permissions. */
|
|
27
|
+
readonly blobStorage: Pick<BlobStorage, "stat" | "open">
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
/** Resolved context for link operations. */
|
|
24
31
|
export interface ResolvedLinkContext extends ResolvedObjectContext {
|
|
25
32
|
readonly linkDefinition: ObjectLink
|
package/src/objects/execution.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { shareActionRunExecutor } from "../actions/run/executor"
|
|
2
|
+
import type { BlobStorage } from "../blob-storage"
|
|
1
3
|
import { shareSixbErrorReporter } from "../error-reporting/capability"
|
|
2
4
|
import type { ExecutionContext } from "../execution"
|
|
3
5
|
import {
|
|
@@ -85,7 +87,6 @@ export interface ExecutionObjectByIdHandle<TObjectType extends ObjectTypeWithPro
|
|
|
85
87
|
extends ObjectReadByIdHandle<TObjectType> {
|
|
86
88
|
vector: ObjectByIdHandle<TObjectType>["vector"]
|
|
87
89
|
requestAction: ObjectByIdHandle<TObjectType>["requestAction"]
|
|
88
|
-
requestActionAndWait: ObjectByIdHandle<TObjectType>["requestActionAndWait"]
|
|
89
90
|
link: ObjectByIdHandle<TObjectType>["link"]
|
|
90
91
|
unlink: ObjectByIdHandle<TObjectType>["unlink"]
|
|
91
92
|
delete: ObjectByIdHandle<TObjectType>["delete"]
|
|
@@ -96,7 +97,6 @@ export interface ExecutionObjectByIdHandle<TObjectType extends ObjectTypeWithPro
|
|
|
96
97
|
export interface ExecutionObjectSet<TObjectType extends ObjectTypeWithPropertyTokens>
|
|
97
98
|
extends ObjectReadSet<TObjectType> {
|
|
98
99
|
requestAction: ObjectSet<TObjectType>["requestAction"]
|
|
99
|
-
requestActionAndWait: ObjectSet<TObjectType>["requestActionAndWait"]
|
|
100
100
|
upsert: ObjectSet<TObjectType>["upsert"]
|
|
101
101
|
upsertLink: ObjectSet<TObjectType>["upsertLink"]
|
|
102
102
|
removeLink: ObjectSet<TObjectType>["removeLink"]
|
|
@@ -147,7 +147,8 @@ export interface ObjectsRuntime extends ExecutionObjectOperations {
|
|
|
147
147
|
|
|
148
148
|
export function createObjectsRuntime(
|
|
149
149
|
runtime: SixbRuntimeContext,
|
|
150
|
-
execution: ExecutionContext
|
|
150
|
+
execution: ExecutionContext,
|
|
151
|
+
blobStorage: Pick<BlobStorage, "stat" | "open">
|
|
151
152
|
): ObjectsRuntime {
|
|
152
153
|
const runtimeAuthorization = runtime.runtimeAuthorization
|
|
153
154
|
const objectReader = runtime.objectReader
|
|
@@ -171,6 +172,7 @@ export function createObjectsRuntime(
|
|
|
171
172
|
}
|
|
172
173
|
shareOntologyMutationRuntime(runtime, capturedRuntime)
|
|
173
174
|
shareSixbErrorReporter(runtime, capturedRuntime)
|
|
175
|
+
shareActionRunExecutor(runtime, capturedRuntime)
|
|
174
176
|
Object.freeze(capturedRuntime)
|
|
175
177
|
const ontologyView = () => getAuthorizedOntologyView(objectReader)
|
|
176
178
|
const objects = Object.assign(
|
|
@@ -180,6 +182,7 @@ export function createObjectsRuntime(
|
|
|
180
182
|
...capturedRuntime,
|
|
181
183
|
execution,
|
|
182
184
|
objectType,
|
|
185
|
+
blobStorage,
|
|
183
186
|
}) as ExecutionObjectSet<TObjectType>
|
|
184
187
|
},
|
|
185
188
|
{
|
|
@@ -25,6 +25,7 @@ import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
|
|
|
25
25
|
import {
|
|
26
26
|
assertKnownProperties,
|
|
27
27
|
assertLinkTargetType,
|
|
28
|
+
assertValidFileRefs,
|
|
28
29
|
normalizeLinkProperties,
|
|
29
30
|
normalizeObjectProperties,
|
|
30
31
|
validateLinkProperties,
|
|
@@ -146,6 +147,7 @@ export function normalizeRuntimeObject(input: {
|
|
|
146
147
|
const { objectType, primaryPropertyId, properties, valueTypesById } = input
|
|
147
148
|
assertKnownProperties(objectType, properties)
|
|
148
149
|
validateObjectProperties(objectType, properties, valueTypesById)
|
|
150
|
+
assertValidFileRefs(properties, objectType.id)
|
|
149
151
|
|
|
150
152
|
const primaryValue = properties[primaryPropertyId]
|
|
151
153
|
if (primaryValue === undefined || primaryValue === null) {
|
|
@@ -185,6 +187,7 @@ export function normalizeRuntimeLink(input: {
|
|
|
185
187
|
const { objectType, linkDefinition, linkId, targetTypeId, properties, valueTypesById } = input
|
|
186
188
|
assertLinkTargetType(objectType.id, linkId, linkDefinition, targetTypeId, input.isValidLinkTarget)
|
|
187
189
|
validateLinkProperties(objectType, linkDefinition, properties, undefined, valueTypesById)
|
|
190
|
+
assertValidFileRefs(properties, `${objectType.id}.${linkId}`)
|
|
188
191
|
const normalized = normalizeLinkProperties(objectType, linkDefinition, properties, valueTypesById)
|
|
189
192
|
if (normalized === undefined) return undefined
|
|
190
193
|
return normalizeJsonProperties(normalized, `${objectType.id}.${linkId} properties`)
|
|
@@ -52,6 +52,9 @@ export async function upsertObjectBatch(
|
|
|
52
52
|
],
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
|
-
value: ([outcome]) =>
|
|
55
|
+
value: ([outcome]) =>
|
|
56
|
+
ctx.objectReader.redactWrittenRow(
|
|
57
|
+
toObjectRow(ctx.projectId, requireEffectiveObject(outcome))
|
|
58
|
+
),
|
|
56
59
|
})
|
|
57
60
|
}
|
|
@@ -34,5 +34,7 @@ export async function upsertObject(
|
|
|
34
34
|
const commit = await commitRuntimeOperations(ctx, [
|
|
35
35
|
objectUpsertOperation({ id: runtimeOperationId(0), ref, properties: normalized.properties }),
|
|
36
36
|
])
|
|
37
|
-
return
|
|
37
|
+
return ctx.objectReader.redactWrittenRow(
|
|
38
|
+
toObjectRow(ctx.projectId, requireEffectiveObject(commit.outcomes[0]))
|
|
39
|
+
)
|
|
38
40
|
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { AuthorizationError } from "../authorization/errors"
|
|
2
|
+
import type { StoredDomainEvent } from "../events/types"
|
|
3
|
+
import type { OntologyDefinitionCatalog } from "../ontology/registry"
|
|
4
|
+
import { missingClearanceRedactions } from "../security/redactions"
|
|
5
|
+
import type { ExpandedLinkValue, ExpandedObjectRow, ObjectRow } from "../storage"
|
|
6
|
+
import type {
|
|
7
|
+
ObjectQueryAdmissionState,
|
|
8
|
+
ObjectQueryPropertyUse,
|
|
9
|
+
ObjectQuerySemanticAdmission,
|
|
10
|
+
} from "./query/validate"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The marked properties one reader cannot read, resolved once from its clearances.
|
|
14
|
+
*
|
|
15
|
+
* A property is readable when the reader clears every one of its markings. Unreadable properties
|
|
16
|
+
* are omitted from rows and cannot be used to select, order, or aggregate objects.
|
|
17
|
+
*/
|
|
18
|
+
export interface PropertyClearance {
|
|
19
|
+
/** Marked properties of this object type the reader cannot read. */
|
|
20
|
+
hiddenPropertyIds(objectTypeId: string): ReadonlySet<string>
|
|
21
|
+
/** First marking on the property that the reader is not cleared for. */
|
|
22
|
+
missingMarking(objectTypeId: string, propertyId: string): string | undefined
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const NO_PROPERTIES: ReadonlySet<string> = new Set()
|
|
26
|
+
|
|
27
|
+
// Readers are built per execution, but few distinct clearance sets exist per ontology.
|
|
28
|
+
const clearancesByOntology = new WeakMap<
|
|
29
|
+
OntologyDefinitionCatalog,
|
|
30
|
+
Map<string, PropertyClearance | undefined>
|
|
31
|
+
>()
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Resolve what a reader with these clearances cannot read. Returns `undefined` when it can read
|
|
35
|
+
* every property, so callers skip redaction entirely.
|
|
36
|
+
*/
|
|
37
|
+
export function resolvePropertyClearance(
|
|
38
|
+
ontology: OntologyDefinitionCatalog,
|
|
39
|
+
clearances: ReadonlySet<string>
|
|
40
|
+
): PropertyClearance | undefined {
|
|
41
|
+
let resolved = clearancesByOntology.get(ontology)
|
|
42
|
+
if (!resolved) {
|
|
43
|
+
resolved = new Map()
|
|
44
|
+
clearancesByOntology.set(ontology, resolved)
|
|
45
|
+
}
|
|
46
|
+
const key = JSON.stringify([...clearances].sort())
|
|
47
|
+
if (!resolved.has(key)) resolved.set(key, createPropertyClearance(ontology, clearances))
|
|
48
|
+
return resolved.get(key)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function createPropertyClearance(
|
|
52
|
+
ontology: OntologyDefinitionCatalog,
|
|
53
|
+
clearances: ReadonlySet<string>
|
|
54
|
+
): PropertyClearance | undefined {
|
|
55
|
+
const missingByType = new Map<string, ReadonlyMap<string, string>>()
|
|
56
|
+
for (const objectType of ontology.listObjectTypes()) {
|
|
57
|
+
const missing = new Map<string, string>()
|
|
58
|
+
for (const property of objectType.properties) {
|
|
59
|
+
const marking = property.markings?.find((markingId) => !clearances.has(markingId))
|
|
60
|
+
if (marking !== undefined) missing.set(property.id, marking)
|
|
61
|
+
}
|
|
62
|
+
if (missing.size > 0) missingByType.set(objectType.id, missing)
|
|
63
|
+
}
|
|
64
|
+
if (missingByType.size === 0) return undefined
|
|
65
|
+
|
|
66
|
+
const hiddenByType = new Map(
|
|
67
|
+
[...missingByType].map(([objectTypeId, missing]) => [objectTypeId, new Set(missing.keys())])
|
|
68
|
+
)
|
|
69
|
+
return Object.freeze({
|
|
70
|
+
hiddenPropertyIds: (objectTypeId: string) => hiddenByType.get(objectTypeId) ?? NO_PROPERTIES,
|
|
71
|
+
missingMarking: (objectTypeId: string, propertyId: string) =>
|
|
72
|
+
missingByType.get(objectTypeId)?.get(propertyId),
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Omit unreadable properties from a row and the objects expanded under it.
|
|
78
|
+
*
|
|
79
|
+
* Every hidden property of the type is listed in `redactions`, whether or not the row holds a
|
|
80
|
+
* value: listing only present values would reveal which hidden properties are empty.
|
|
81
|
+
*/
|
|
82
|
+
export function redactObjectRow<TRow extends ObjectRow>(
|
|
83
|
+
row: TRow,
|
|
84
|
+
clearance: PropertyClearance
|
|
85
|
+
): TRow {
|
|
86
|
+
const hidden = clearance.hiddenPropertyIds(row.objectTypeId)
|
|
87
|
+
const links = row.links
|
|
88
|
+
if (hidden.size === 0 && links === undefined) return row
|
|
89
|
+
|
|
90
|
+
const redacted: TRow = { ...row }
|
|
91
|
+
if (hidden.size > 0) {
|
|
92
|
+
redacted.properties = withoutKeys(row.properties, hidden)
|
|
93
|
+
redacted.redactions = missingClearanceRedactions(hidden)
|
|
94
|
+
}
|
|
95
|
+
if (links !== undefined) {
|
|
96
|
+
redacted.links = Object.fromEntries(
|
|
97
|
+
Object.entries(links).map(([linkId, value]) => [linkId, redactLinkValue(value, clearance)])
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
return redacted
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function redactLinkValue(
|
|
104
|
+
value: ExpandedLinkValue,
|
|
105
|
+
clearance: PropertyClearance
|
|
106
|
+
): ExpandedLinkValue {
|
|
107
|
+
if (value === null) return null
|
|
108
|
+
if (Array.isArray(value)) return value.map((row) => redactObjectRow(row, clearance))
|
|
109
|
+
// Array.isArray does not narrow a readonly[] away, so assert the single-object case.
|
|
110
|
+
return redactObjectRow(value as ExpandedObjectRow, clearance)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Omit unreadable properties from an object event, under the same contract as rows. Other events
|
|
115
|
+
* carry no markable value: link properties and telemetry properties cannot be marked.
|
|
116
|
+
*/
|
|
117
|
+
export function redactDomainEvent(
|
|
118
|
+
event: StoredDomainEvent,
|
|
119
|
+
clearance: PropertyClearance
|
|
120
|
+
): StoredDomainEvent {
|
|
121
|
+
if (event.topic !== "objects") return event
|
|
122
|
+
const hidden = clearance.hiddenPropertyIds(event.payload.objectTypeId)
|
|
123
|
+
if (hidden.size === 0) return event
|
|
124
|
+
|
|
125
|
+
const payload = {
|
|
126
|
+
...event.payload,
|
|
127
|
+
propertyChanges: withoutKeys(event.payload.propertyChanges, hidden),
|
|
128
|
+
redactions: missingClearanceRedactions(hidden),
|
|
129
|
+
}
|
|
130
|
+
if (event.type === "object.deleted") return { ...event, payload }
|
|
131
|
+
return {
|
|
132
|
+
...event,
|
|
133
|
+
payload: { ...payload, properties: withoutKeys(event.payload.properties, hidden) },
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function withoutKeys<TValue>(
|
|
138
|
+
record: Readonly<Record<string, TValue>>,
|
|
139
|
+
hidden: ReadonlySet<string>
|
|
140
|
+
): Record<string, TValue> {
|
|
141
|
+
const kept: Record<string, TValue> = {}
|
|
142
|
+
for (const [key, value] of Object.entries(record)) {
|
|
143
|
+
if (!hidden.has(key)) kept[key] = value
|
|
144
|
+
}
|
|
145
|
+
return kept
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Reject every query use of a property the reader cannot read, except projection.
|
|
150
|
+
*
|
|
151
|
+
* Filtering, ordering, searching, or faceting by a hidden value would reveal it through which
|
|
152
|
+
* objects match and in what order. Projection only shapes the output, which is redacted anyway.
|
|
153
|
+
*/
|
|
154
|
+
export function createClearanceQueryAdmission(
|
|
155
|
+
clearance: PropertyClearance
|
|
156
|
+
): ObjectQuerySemanticAdmission {
|
|
157
|
+
// Each state stands for the object types a query has reached so far. A property without an
|
|
158
|
+
// explicit type is checked against all of them.
|
|
159
|
+
const reachedTypes = new WeakMap<ObjectQueryAdmissionState, readonly string[]>()
|
|
160
|
+
const state = (objectTypeIds: readonly string[]): ObjectQueryAdmissionState => {
|
|
161
|
+
const created = Object.freeze({})
|
|
162
|
+
reachedTypes.set(created, Object.freeze([...objectTypeIds]))
|
|
163
|
+
return created
|
|
164
|
+
}
|
|
165
|
+
const reached = (input: ObjectQueryAdmissionState): readonly string[] => {
|
|
166
|
+
const objectTypeIds = reachedTypes.get(input)
|
|
167
|
+
if (!objectTypeIds) {
|
|
168
|
+
throw new Error("[Sixb] Clearance query admission received a state it did not create.")
|
|
169
|
+
}
|
|
170
|
+
return objectTypeIds
|
|
171
|
+
}
|
|
172
|
+
const empty = state([])
|
|
173
|
+
|
|
174
|
+
const admission: ObjectQuerySemanticAdmission = {
|
|
175
|
+
empty: () => empty,
|
|
176
|
+
source: (input) => ({ state: state(input.result.objectTypeIds) }),
|
|
177
|
+
edge: (input) => ({ state: state(input.result.objectTypeIds) }),
|
|
178
|
+
// A difference only returns objects of its first input.
|
|
179
|
+
set: (input) =>
|
|
180
|
+
input.op === "subtract"
|
|
181
|
+
? (input.states[0] ?? empty)
|
|
182
|
+
: state([...new Set(input.states.flatMap(reached))]),
|
|
183
|
+
property: (input) => {
|
|
184
|
+
if (input.use === "project") return undefined
|
|
185
|
+
const objectTypeIds =
|
|
186
|
+
input.objectTypeId === undefined ? reached(input.state) : [input.objectTypeId]
|
|
187
|
+
for (const objectTypeId of objectTypeIds) {
|
|
188
|
+
const marking = clearance.missingMarking(objectTypeId, input.propertyId)
|
|
189
|
+
if (marking === undefined) continue
|
|
190
|
+
return new AuthorizationError(
|
|
191
|
+
`clearance:marking:${marking}`,
|
|
192
|
+
`[Sixb] Cannot ${PROPERTY_USE_VERBS[input.use]} '${objectTypeId}.${input.propertyId}' at '${input.path}': it requires clearance for marking '${marking}'.`
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
return undefined
|
|
196
|
+
},
|
|
197
|
+
}
|
|
198
|
+
return Object.freeze(admission)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const PROPERTY_USE_VERBS: Readonly<Record<ObjectQueryPropertyUse, string>> = {
|
|
202
|
+
filter: "filter by",
|
|
203
|
+
text: "search",
|
|
204
|
+
vector: "run a vector search over",
|
|
205
|
+
sort: "sort by",
|
|
206
|
+
project: "project",
|
|
207
|
+
"expand.orderBy": "order expanded objects by",
|
|
208
|
+
facet: "facet by",
|
|
209
|
+
}
|
|
@@ -39,10 +39,13 @@ import { rerankObjectCandidates } from "./reranking-executor"
|
|
|
39
39
|
import { findQueryReranking } from "./reranking-query"
|
|
40
40
|
import { compareQueryScalarValues, queryScalarValuesEqual } from "./scalar-values"
|
|
41
41
|
import {
|
|
42
|
+
type AdmittedObjectQuery,
|
|
43
|
+
type ObjectQuerySemanticAdmission,
|
|
42
44
|
type ObjectQueryValidationIssue,
|
|
43
45
|
resolveObjectQueryResultShape,
|
|
44
46
|
type ValidatedObjectQuery,
|
|
45
47
|
validateObjectQuery,
|
|
48
|
+
validateObjectQueryWithAdmission,
|
|
46
49
|
} from "./validate"
|
|
47
50
|
|
|
48
51
|
export interface QueryExecutorOptions
|
|
@@ -73,6 +76,8 @@ export interface QueryExecutorOptions
|
|
|
73
76
|
authorization?: AuthorizationContext
|
|
74
77
|
/** Registered execution capability for queries reached through a bound Sixb SDK. */
|
|
75
78
|
runtimeAuthorization?: RuntimeAuthorization
|
|
79
|
+
/** Reader-specific admission applied after grants, such as marking clearances. */
|
|
80
|
+
admission?: ObjectQuerySemanticAdmission
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
export interface ExecuteObjectQueryInput {
|
|
@@ -138,15 +143,7 @@ export async function executeObjectQuery(
|
|
|
138
143
|
input: ExecuteObjectQueryInput,
|
|
139
144
|
options: QueryExecutorOptions
|
|
140
145
|
): Promise<ExecuteObjectQueryResult> {
|
|
141
|
-
const
|
|
142
|
-
const validated = validateObjectQuery(normalized, {
|
|
143
|
-
ontology: options.ontology,
|
|
144
|
-
maxLimit: options.maxLimit,
|
|
145
|
-
maxPageSize: options.maxPageSize,
|
|
146
|
-
maxRefs: options.maxRefs,
|
|
147
|
-
normalize: false,
|
|
148
|
-
})
|
|
149
|
-
assertQueryViewable(input.projectId, validated, options)
|
|
146
|
+
const validated = validateExecutableQuery(input, options)
|
|
150
147
|
const capabilities = options.storage.queryCapabilities()
|
|
151
148
|
const hasQueryObjects = typeof options.storage.queryObjects === "function"
|
|
152
149
|
const hasCountObjects = typeof options.storage.countObjects === "function"
|
|
@@ -242,15 +239,7 @@ export async function countObjects(
|
|
|
242
239
|
input: ExecuteObjectCountInput,
|
|
243
240
|
options: QueryExecutorOptions
|
|
244
241
|
): Promise<ExecuteObjectCountResult> {
|
|
245
|
-
const
|
|
246
|
-
const validated = validateObjectQuery(normalized, {
|
|
247
|
-
ontology: options.ontology,
|
|
248
|
-
maxLimit: options.maxLimit,
|
|
249
|
-
maxPageSize: options.maxPageSize,
|
|
250
|
-
maxRefs: options.maxRefs,
|
|
251
|
-
normalize: false,
|
|
252
|
-
})
|
|
253
|
-
assertQueryViewable(input.projectId, validated, options)
|
|
242
|
+
const validated = validateExecutableQuery(input, options)
|
|
254
243
|
const capabilities = options.storage.queryCapabilities()
|
|
255
244
|
const hasQueryObjects = typeof options.storage.queryObjects === "function"
|
|
256
245
|
const hasCountObjects = typeof options.storage.countObjects === "function"
|
|
@@ -303,15 +292,7 @@ export async function existsObjects(
|
|
|
303
292
|
input: ExecuteObjectExistsInput,
|
|
304
293
|
options: QueryExecutorOptions
|
|
305
294
|
): Promise<ExecuteObjectExistsResult> {
|
|
306
|
-
const
|
|
307
|
-
const validated = validateObjectQuery(normalized, {
|
|
308
|
-
ontology: options.ontology,
|
|
309
|
-
maxLimit: options.maxLimit,
|
|
310
|
-
maxPageSize: options.maxPageSize,
|
|
311
|
-
maxRefs: options.maxRefs,
|
|
312
|
-
normalize: false,
|
|
313
|
-
})
|
|
314
|
-
assertQueryViewable(input.projectId, validated, options)
|
|
295
|
+
const validated = validateExecutableQuery(input, options)
|
|
315
296
|
const capabilities = options.storage.queryCapabilities()
|
|
316
297
|
const hasQueryObjects = typeof options.storage.queryObjects === "function"
|
|
317
298
|
const hasCountObjects = typeof options.storage.countObjects === "function"
|
|
@@ -364,16 +345,17 @@ export async function facetObjects(
|
|
|
364
345
|
input: ExecuteObjectFacetsInput,
|
|
365
346
|
options: QueryExecutorOptions
|
|
366
347
|
): Promise<ExecuteObjectFacetsResult> {
|
|
367
|
-
const
|
|
368
|
-
const validated = validateObjectQuery(normalized, {
|
|
369
|
-
ontology: options.ontology,
|
|
370
|
-
maxLimit: options.maxLimit,
|
|
371
|
-
maxPageSize: options.maxPageSize,
|
|
372
|
-
maxRefs: options.maxRefs,
|
|
373
|
-
normalize: false,
|
|
374
|
-
})
|
|
375
|
-
assertQueryViewable(input.projectId, validated, options)
|
|
348
|
+
const validated = validateExecutableQuery(input, options)
|
|
376
349
|
const facets = validateObjectFacetRequests(input.facets, validated.result.objectTypeIds, options)
|
|
350
|
+
facets.forEach((facet, index) => {
|
|
351
|
+
const denial = options.admission?.property({
|
|
352
|
+
state: validated.admissionState,
|
|
353
|
+
propertyId: facet.propertyId,
|
|
354
|
+
use: "facet",
|
|
355
|
+
path: `$.facets[${index}].propertyId`,
|
|
356
|
+
})
|
|
357
|
+
if (denial) throw denial
|
|
358
|
+
})
|
|
377
359
|
const aggregateQuery = stripOuterRowShape(validated.query)
|
|
378
360
|
const capabilities = options.storage.queryCapabilities()
|
|
379
361
|
const hasQueryObjects = typeof options.storage.queryObjects === "function"
|
|
@@ -430,6 +412,31 @@ export async function facetObjects(
|
|
|
430
412
|
}
|
|
431
413
|
}
|
|
432
414
|
|
|
415
|
+
/**
|
|
416
|
+
* Validate, authorize the touched types, then admit the query for the reader.
|
|
417
|
+
*
|
|
418
|
+
* Grants are checked first so a denial never describes properties of a type the caller cannot
|
|
419
|
+
* view. The admitted query is the one executed: an admission may narrow it, as markings narrow
|
|
420
|
+
* default text fields.
|
|
421
|
+
*/
|
|
422
|
+
function validateExecutableQuery(
|
|
423
|
+
input: { readonly projectId: string; readonly query: ObjectQuery },
|
|
424
|
+
options: QueryExecutorOptions
|
|
425
|
+
): AdmittedObjectQuery {
|
|
426
|
+
const validationOptions = {
|
|
427
|
+
ontology: options.ontology,
|
|
428
|
+
maxLimit: options.maxLimit,
|
|
429
|
+
maxPageSize: options.maxPageSize,
|
|
430
|
+
maxRefs: options.maxRefs,
|
|
431
|
+
normalize: false,
|
|
432
|
+
}
|
|
433
|
+
const normalized = normalizeObjectQuery(input.query)
|
|
434
|
+
const validated = validateObjectQuery(normalized, validationOptions)
|
|
435
|
+
assertQueryViewable(input.projectId, validated, options)
|
|
436
|
+
if (!options.admission) return { ...validated, admissionState: {} }
|
|
437
|
+
return validateObjectQueryWithAdmission(normalized, validationOptions, options.admission)
|
|
438
|
+
}
|
|
439
|
+
|
|
433
440
|
// Authorization happens at planning time: a scoped query must hold a view
|
|
434
441
|
// grant for every object type it touches, before any storage call runs.
|
|
435
442
|
function assertQueryViewable(
|
|
@@ -42,7 +42,10 @@ export interface ObjectQueryValidationIssue {
|
|
|
42
42
|
export interface ValidatedObjectQuery {
|
|
43
43
|
query: ObjectQuery
|
|
44
44
|
result: ObjectQueryResultShape
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Every object type the query touches, including intermediate traversal types and the subtypes
|
|
47
|
+
* an outgoing link can reach.
|
|
48
|
+
*/
|
|
46
49
|
touchedObjectTypeIds: readonly string[]
|
|
47
50
|
}
|
|
48
51
|
|
|
@@ -159,6 +162,67 @@ const NOOP_QUERY_ADMISSION: ObjectQuerySemanticAdmission = Object.freeze({
|
|
|
159
162
|
input.states[0] ?? NOOP_ADMISSION_STATE,
|
|
160
163
|
})
|
|
161
164
|
|
|
165
|
+
/**
|
|
166
|
+
* Admit a query only when both admissions admit it, each reducing its own state.
|
|
167
|
+
*
|
|
168
|
+
* The first denial wins, in order, so composing keeps each admission's messages unchanged.
|
|
169
|
+
*/
|
|
170
|
+
export function composeObjectQueryAdmissions(
|
|
171
|
+
first: ObjectQuerySemanticAdmission,
|
|
172
|
+
second: ObjectQuerySemanticAdmission
|
|
173
|
+
): ObjectQuerySemanticAdmission {
|
|
174
|
+
const parts = new WeakMap<
|
|
175
|
+
ObjectQueryAdmissionState,
|
|
176
|
+
readonly [ObjectQueryAdmissionState, ObjectQueryAdmissionState]
|
|
177
|
+
>()
|
|
178
|
+
const join = (
|
|
179
|
+
left: ObjectQueryAdmissionState,
|
|
180
|
+
right: ObjectQueryAdmissionState
|
|
181
|
+
): ObjectQueryAdmissionState => {
|
|
182
|
+
const state = Object.freeze({})
|
|
183
|
+
parts.set(state, [left, right])
|
|
184
|
+
return state
|
|
185
|
+
}
|
|
186
|
+
const split = (state: ObjectQueryAdmissionState) => {
|
|
187
|
+
const pair = parts.get(state)
|
|
188
|
+
if (!pair) throw new Error("[Sixb] Composed query admission received a foreign state.")
|
|
189
|
+
return pair
|
|
190
|
+
}
|
|
191
|
+
const transition = (
|
|
192
|
+
left: ObjectQueryAdmissionTransition,
|
|
193
|
+
right: ObjectQueryAdmissionTransition
|
|
194
|
+
): ObjectQueryAdmissionTransition => {
|
|
195
|
+
const denial = left.denial ?? right.denial
|
|
196
|
+
return { state: join(left.state, right.state), ...(denial ? { denial } : {}) }
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const admission: ObjectQuerySemanticAdmission = {
|
|
200
|
+
empty: () => join(first.empty(), second.empty()),
|
|
201
|
+
source: (input) => transition(first.source(input), second.source(input)),
|
|
202
|
+
edge: (input) => {
|
|
203
|
+
const [left, right] = split(input.state)
|
|
204
|
+
return transition(
|
|
205
|
+
first.edge({ ...input, state: left }),
|
|
206
|
+
second.edge({ ...input, state: right })
|
|
207
|
+
)
|
|
208
|
+
},
|
|
209
|
+
property: (input) => {
|
|
210
|
+
const [left, right] = split(input.state)
|
|
211
|
+
return (
|
|
212
|
+
first.property({ ...input, state: left }) ?? second.property({ ...input, state: right })
|
|
213
|
+
)
|
|
214
|
+
},
|
|
215
|
+
set: (input) => {
|
|
216
|
+
const pairs = input.states.map(split)
|
|
217
|
+
return join(
|
|
218
|
+
first.set({ ...input, states: pairs.map(([left]) => left) }),
|
|
219
|
+
second.set({ ...input, states: pairs.map(([, right]) => right) })
|
|
220
|
+
)
|
|
221
|
+
},
|
|
222
|
+
}
|
|
223
|
+
return Object.freeze(admission)
|
|
224
|
+
}
|
|
225
|
+
|
|
162
226
|
export function validateObjectQuery(
|
|
163
227
|
query: ObjectQuery,
|
|
164
228
|
options: ObjectQueryValidationOptions
|
|
@@ -530,9 +594,7 @@ function validateStart(
|
|
|
530
594
|
return { result: { objectTypeIds: [] }, query: { kind: "start", objectTypeId } }
|
|
531
595
|
}
|
|
532
596
|
|
|
533
|
-
const objectTypeIds = includeSubtypes
|
|
534
|
-
? uniqueStrings([objectTypeId, ...ctx.ontology.listSubTypes(objectTypeId)])
|
|
535
|
-
: [objectTypeId]
|
|
597
|
+
const objectTypeIds = includeSubtypes ? withSubtypes([objectTypeId], ctx) : [objectTypeId]
|
|
536
598
|
|
|
537
599
|
return { result: { objectTypeIds }, query: { kind: "start", objectTypeId, includeSubtypes } }
|
|
538
600
|
}
|
|
@@ -895,16 +957,15 @@ function validateTextQuery(
|
|
|
895
957
|
continue
|
|
896
958
|
}
|
|
897
959
|
|
|
898
|
-
|
|
960
|
+
const admitted = admitTextFields(fieldIds, fields === undefined, {
|
|
961
|
+
state: admissionState,
|
|
962
|
+
objectTypeId: objectType.id,
|
|
963
|
+
path: `${path}.fields`,
|
|
964
|
+
ctx,
|
|
965
|
+
})
|
|
966
|
+
if (fieldsByObjectType) fieldsByObjectType[objectType.id] = uniqueStrings(admitted)
|
|
899
967
|
|
|
900
968
|
for (const fieldId of fieldIds) {
|
|
901
|
-
admitProperty(ctx, {
|
|
902
|
-
state: admissionState,
|
|
903
|
-
propertyId: fieldId,
|
|
904
|
-
objectTypeId: objectType.id,
|
|
905
|
-
use: "text",
|
|
906
|
-
path: `${path}.fields`,
|
|
907
|
-
})
|
|
908
969
|
const property = getProperty(objectType, fieldId)
|
|
909
970
|
if (!property) {
|
|
910
971
|
addIssue(
|
|
@@ -933,6 +994,43 @@ function validateTextQuery(
|
|
|
933
994
|
return fieldsByObjectType ? { fieldsByObjectType } : {}
|
|
934
995
|
}
|
|
935
996
|
|
|
997
|
+
/**
|
|
998
|
+
* Admit the fields a text query searches. Every explicit field must be admitted. Default fields
|
|
999
|
+
* come from the type's search profile, so a reader that cannot use one searches the others
|
|
1000
|
+
* instead; only a type left with no usable default field is denied.
|
|
1001
|
+
*/
|
|
1002
|
+
function admitTextFields(
|
|
1003
|
+
fieldIds: readonly string[],
|
|
1004
|
+
defaults: boolean,
|
|
1005
|
+
input: {
|
|
1006
|
+
readonly state: ObjectQueryAdmissionState
|
|
1007
|
+
readonly objectTypeId: string
|
|
1008
|
+
readonly path: string
|
|
1009
|
+
readonly ctx: QueryValidationContext
|
|
1010
|
+
}
|
|
1011
|
+
): readonly string[] {
|
|
1012
|
+
const admitted: string[] = []
|
|
1013
|
+
let firstDenial: Error | undefined
|
|
1014
|
+
for (const fieldId of fieldIds) {
|
|
1015
|
+
const denial = input.ctx.admission.property({
|
|
1016
|
+
state: input.state,
|
|
1017
|
+
propertyId: fieldId,
|
|
1018
|
+
objectTypeId: input.objectTypeId,
|
|
1019
|
+
use: "text",
|
|
1020
|
+
path: input.path,
|
|
1021
|
+
})
|
|
1022
|
+
if (!denial) {
|
|
1023
|
+
admitted.push(fieldId)
|
|
1024
|
+
} else if (!defaults) {
|
|
1025
|
+
recordAdmissionDenial(input.ctx, denial)
|
|
1026
|
+
} else {
|
|
1027
|
+
firstDenial ??= denial
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
if (admitted.length === 0 && firstDenial) recordAdmissionDenial(input.ctx, firstDenial)
|
|
1031
|
+
return admitted
|
|
1032
|
+
}
|
|
1033
|
+
|
|
936
1034
|
function validateVectorProfileQuery(
|
|
937
1035
|
query: ObjectQueryVector,
|
|
938
1036
|
shape: ObjectQueryResultShape,
|
|
@@ -1060,7 +1158,9 @@ function validateOutgoingTraverse(
|
|
|
1060
1158
|
}
|
|
1061
1159
|
}
|
|
1062
1160
|
|
|
1063
|
-
|
|
1161
|
+
const objectTypeIds = uniqueStrings(targetTypeIds)
|
|
1162
|
+
touchLinkTargets(objectTypeIds, ctx)
|
|
1163
|
+
return { objectTypeIds }
|
|
1064
1164
|
}
|
|
1065
1165
|
|
|
1066
1166
|
function validateIncomingTraverse(
|
|
@@ -1261,7 +1361,22 @@ function resolveOutgoingExpansionTargets(
|
|
|
1261
1361
|
)
|
|
1262
1362
|
}
|
|
1263
1363
|
|
|
1264
|
-
|
|
1364
|
+
const objectTypeIds = uniqueStrings(targetTypeIds)
|
|
1365
|
+
touchLinkTargets(objectTypeIds, ctx)
|
|
1366
|
+
return { objectTypeIds }
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/**
|
|
1370
|
+
* Following a link outgoing reads every subtype of its declared targets: links accept subtype
|
|
1371
|
+
* targets and storage follows them by link id alone. Authorize those reads like a `start` that
|
|
1372
|
+
* includes subtypes; the result shape keeps the declared targets that later nodes validate against.
|
|
1373
|
+
* Incoming edges already name every source type they can return: storage matches a pinned
|
|
1374
|
+
* `sourceObjectTypeId` exactly, and otherwise subtypes inherit the link.
|
|
1375
|
+
*/
|
|
1376
|
+
function touchLinkTargets(objectTypeIds: readonly string[], ctx: QueryValidationContext): void {
|
|
1377
|
+
for (const objectTypeId of withSubtypes(objectTypeIds, ctx)) {
|
|
1378
|
+
ctx.touchedObjectTypeIds.add(objectTypeId)
|
|
1379
|
+
}
|
|
1265
1380
|
}
|
|
1266
1381
|
|
|
1267
1382
|
function resolveIncomingExpansionTargets(
|
|
@@ -1657,6 +1772,10 @@ function uniqueStrings(values: readonly string[]): string[] {
|
|
|
1657
1772
|
return [...new Set(values)]
|
|
1658
1773
|
}
|
|
1659
1774
|
|
|
1775
|
+
function withSubtypes(objectTypeIds: readonly string[], ctx: QueryValidationContext): string[] {
|
|
1776
|
+
return uniqueStrings(objectTypeIds.flatMap((id) => [id, ...ctx.ontology.listSubTypes(id)]))
|
|
1777
|
+
}
|
|
1778
|
+
|
|
1660
1779
|
function admitTransition(
|
|
1661
1780
|
ctx: QueryValidationContext,
|
|
1662
1781
|
transition: ObjectQueryAdmissionTransition
|