@sixb/core 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js +22 -19
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +6 -2
- package/dist/actions/worker.js.map +3 -3
- 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 +44 -37
- 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 +1 -1
- package/dist/agents/streams/internal.js +1 -1
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +9 -6
- 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/index.js +5 -3
- 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 +284 -73
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-gf7yht60.js → chunk-1b1f2d5f.js} +23 -6
- package/dist/chunk-1b1f2d5f.js.map +12 -0
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
- 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-4ra628t7.js → chunk-3zxk45er.js} +70 -6
- package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
- package/dist/{chunk-2am3db31.js → chunk-48e3cn2d.js} +2 -2
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-svabwqdq.js → chunk-6h5m9xjx.js} +43 -415
- package/dist/{chunk-svabwqdq.js.map → chunk-6h5m9xjx.js.map} +7 -11
- package/dist/{chunk-f1xh7a32.js → chunk-7hpdd6r9.js} +2 -2
- package/dist/{chunk-xyvy73tj.js → chunk-bs7sqkre.js} +8 -3
- package/dist/chunk-bs7sqkre.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-t9shqx3w.js → chunk-d0eb5yy6.js} +143 -7
- package/dist/chunk-d0eb5yy6.js.map +14 -0
- package/dist/{chunk-vp3z1ckh.js → chunk-de4z2bj6.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-a7er86jd.js → chunk-ex496vct.js} +1 -1
- package/dist/{chunk-jnfxmr3f.js → chunk-f1zxad2t.js} +1 -1
- package/dist/{chunk-6wbm6ymz.js → chunk-fe52eczz.js} +271 -83
- package/dist/chunk-fe52eczz.js.map +49 -0
- package/dist/{chunk-10styjgk.js → chunk-fx93hd2n.js} +71 -29
- package/dist/chunk-fx93hd2n.js.map +20 -0
- 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-pja9jfz6.js → chunk-htr6wjmv.js} +115 -53
- package/dist/chunk-htr6wjmv.js.map +19 -0
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-52c5zb0z.js → chunk-k6hrnf35.js} +5 -5
- package/dist/chunk-k6hrnf35.js.map +10 -0
- package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
- package/dist/{chunk-7ecp4v7a.js → chunk-ny3xyvcn.js} +8 -2
- package/dist/{chunk-7ecp4v7a.js.map → chunk-ny3xyvcn.js.map} +3 -3
- package/dist/{chunk-fggq3d9k.js → chunk-p0dqwj3n.js} +5 -5
- package/dist/{chunk-cnb5kv05.js → chunk-p844e0rn.js} +23 -8
- package/dist/chunk-p844e0rn.js.map +19 -0
- 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-5be2ath4.js → chunk-qkbx3tf6.js} +17 -128
- package/dist/{chunk-5be2ath4.js.map → chunk-qkbx3tf6.js.map} +6 -7
- package/dist/{chunk-sk0hcjsz.js → chunk-qkvz64nd.js} +2 -2
- package/dist/{chunk-w9yycd3t.js → chunk-qmnnhde6.js} +4 -8
- package/dist/{chunk-w9yycd3t.js.map → chunk-qmnnhde6.js.map} +3 -3
- package/dist/{chunk-5yd8cchh.js → chunk-qq90g05n.js} +8 -8
- package/dist/{chunk-5yd8cchh.js.map → chunk-qq90g05n.js.map} +1 -1
- package/dist/{chunk-tjjgy3z4.js → chunk-qxvp5epv.js} +66 -14
- package/dist/{chunk-tjjgy3z4.js.map → chunk-qxvp5epv.js.map} +9 -8
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-rx7h5fdx.js → chunk-rt9p8m9t.js} +1 -1
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-xcy5ddha.js → chunk-s4jhg8a3.js} +351 -296
- package/dist/chunk-s4jhg8a3.js.map +15 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-9g6jz9kk.js → chunk-tffvfy6s.js} +6 -5
- package/dist/{chunk-9g6jz9kk.js.map → chunk-tffvfy6s.js.map} +3 -3
- package/dist/{chunk-e67ynxcr.js → chunk-v6xpd60t.js} +3 -3
- package/dist/{chunk-jjrn5v0p.js → chunk-vgk3hknm.js} +1 -1
- package/dist/{chunk-5thzcb8g.js → chunk-vx2yp45y.js} +2 -2
- package/dist/{chunk-dam456ve.js → chunk-vz3gc1tm.js} +394 -31
- package/dist/{chunk-dam456ve.js.map → chunk-vz3gc1tm.js.map} +10 -7
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/{chunk-rpxz486p.js → chunk-y05543x6.js} +21 -5
- package/dist/{chunk-rpxz486p.js.map → chunk-y05543x6.js.map} +3 -3
- package/dist/{chunk-aq39q04r.js → chunk-y9jmd7e5.js} +4 -4
- package/dist/{chunk-aq39q04r.js.map → chunk-y9jmd7e5.js.map} +1 -1
- package/dist/{chunk-k4g51s47.js → chunk-yv9czyfr.js} +3 -3
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- package/dist/{chunk-vre348sb.js → chunk-za5yd58j.js} +2 -2
- package/dist/{chunk-23xs4qp9.js → chunk-zb77kjth.js} +3 -3
- package/dist/{chunk-33saed7g.js → chunk-zxawp1n2.js} +1 -1
- 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/edits/properties.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/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 +39 -34
- 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 +37 -34
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +38 -35
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -52
- 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/materializer/index.js +19 -16
- package/dist/materializer/index.js.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 +19 -16
- 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/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 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +23 -19
- 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 +18 -15
- 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/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 +21 -18
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +19 -16
- package/dist/projections/internal.js.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 +21 -18
- 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 +30 -3
- 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/security/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +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 +18 -15
- package/dist/shares/internal.js.map +2 -2
- 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/file-upload-sessions/provider.js +10 -7
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +18 -15
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +4 -3
- package/dist/storage/internal.js.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/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +22 -19
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/index.js +55 -53
- package/dist/testing/index.js.map +2 -2
- package/dist/webhooks/internal.js +19 -16
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +41 -38
- 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 -1
- package/src/actions/read-facade.ts +2 -1
- 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/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/edits/properties.ts +3 -0
- package/src/events/execution.ts +15 -16
- 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 +27 -2
- 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/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +4 -1
- 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 +8 -4
- package/src/objects/sdk/object-set.ts +5 -2
- 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/runtime/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +45 -1
- package/src/runtime/index.ts +3 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/resolve-definitions.ts +28 -1
- package/src/runtime/sixb.ts +1 -1
- package/src/runtime/types.ts +39 -3
- package/src/scheduler/runtime.ts +11 -2
- package/src/security/builders.ts +49 -5
- 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/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/index.ts +1 -0
- package/src/storage/objects/types.ts +7 -0
- 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/chunk-10styjgk.js.map +0 -20
- package/dist/chunk-52c5zb0z.js.map +0 -10
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6wbm6ymz.js.map +0 -48
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-cnb5kv05.js.map +0 -19
- package/dist/chunk-dmn70ztd.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-t9shqx3w.js.map +0 -12
- package/dist/chunk-xcy5ddha.js.map +0 -15
- package/dist/chunk-xyvy73tj.js.map +0 -12
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
- /package/dist/{chunk-2am3db31.js.map → chunk-48e3cn2d.js.map} +0 -0
- /package/dist/{chunk-f1xh7a32.js.map → chunk-7hpdd6r9.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-vp3z1ckh.js.map → chunk-de4z2bj6.js.map} +0 -0
- /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
- /package/dist/{chunk-a7er86jd.js.map → chunk-ex496vct.js.map} +0 -0
- /package/dist/{chunk-jnfxmr3f.js.map → chunk-f1zxad2t.js.map} +0 -0
- /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-fggq3d9k.js.map → chunk-p0dqwj3n.js.map} +0 -0
- /package/dist/{chunk-sk0hcjsz.js.map → chunk-qkvz64nd.js.map} +0 -0
- /package/dist/{chunk-rx7h5fdx.js.map → chunk-rt9p8m9t.js.map} +0 -0
- /package/dist/{chunk-e67ynxcr.js.map → chunk-v6xpd60t.js.map} +0 -0
- /package/dist/{chunk-jjrn5v0p.js.map → chunk-vgk3hknm.js.map} +0 -0
- /package/dist/{chunk-5thzcb8g.js.map → chunk-vx2yp45y.js.map} +0 -0
- /package/dist/{chunk-k4g51s47.js.map → chunk-yv9czyfr.js.map} +0 -0
- /package/dist/{chunk-vre348sb.js.map → chunk-za5yd58j.js.map} +0 -0
- /package/dist/{chunk-23xs4qp9.js.map → chunk-zb77kjth.js.map} +0 -0
- /package/dist/{chunk-33saed7g.js.map → chunk-zxawp1n2.js.map} +0 -0
package/src/execution/scopes.ts
CHANGED
|
@@ -146,12 +146,8 @@ export function createTestingScope(input: {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
function withoutSession(context: AuthorizationContext): AuthorizationContext {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
groupIds: context.groupIds,
|
|
152
|
-
roleIds: context.roleIds,
|
|
153
|
-
grants: context.grants,
|
|
154
|
-
}
|
|
149
|
+
const { sessionId: _sessionId, ...withoutSessionId } = context
|
|
150
|
+
return withoutSessionId
|
|
155
151
|
}
|
|
156
152
|
|
|
157
153
|
function createRequestExecution(input: {
|
package/src/http/api-routes.ts
CHANGED
|
@@ -34,7 +34,8 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
|
|
|
34
34
|
// Token and service-account management is bearer-capable so the CLI can authenticate with a
|
|
35
35
|
// personal access token. It is NOT exposed to agents. The runtime still confines every operation
|
|
36
36
|
// to the caller's own groups, and service-account tokens are rejected (only user principals may
|
|
37
|
-
// manage credentials).
|
|
37
|
+
// manage credentials). Creating a token is the exception: it takes a signed-in session, so no
|
|
38
|
+
// access token can mint one broader or longer-lived than itself.
|
|
38
39
|
{
|
|
39
40
|
operationId: "getAuthAccessManagementOptions",
|
|
40
41
|
method: "GET",
|
|
@@ -53,7 +54,7 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
|
|
|
53
54
|
operationId: "createAuthPersonalAccessToken",
|
|
54
55
|
method: "POST",
|
|
55
56
|
path: "/api/auth/access-tokens",
|
|
56
|
-
accessToken:
|
|
57
|
+
accessToken: false,
|
|
57
58
|
agentApi: false,
|
|
58
59
|
},
|
|
59
60
|
{
|
|
@@ -95,7 +96,7 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
|
|
|
95
96
|
operationId: "createAuthServiceAccountAccessToken",
|
|
96
97
|
method: "POST",
|
|
97
98
|
path: "/api/auth/service-accounts/:serviceAccountId/access-tokens",
|
|
98
|
-
accessToken:
|
|
99
|
+
accessToken: false,
|
|
99
100
|
agentApi: false,
|
|
100
101
|
},
|
|
101
102
|
{
|
package/src/index.ts
CHANGED
|
@@ -64,6 +64,7 @@ export {
|
|
|
64
64
|
userRef,
|
|
65
65
|
valueTypeRef,
|
|
66
66
|
} from "./ontology"
|
|
67
|
+
export type { OntologyDoc, OntologyDocsCatalog, OntologyDocsInput } from "./ontology/docs"
|
|
67
68
|
|
|
68
69
|
// ── Actions ─────────────────────────────────────────────────
|
|
69
70
|
|
|
@@ -220,6 +221,7 @@ export {
|
|
|
220
221
|
|
|
221
222
|
export type {
|
|
222
223
|
InferObjectProperties,
|
|
224
|
+
InferObjectReadProperties,
|
|
223
225
|
InferPropertySemanticType,
|
|
224
226
|
InferPropertyUnit,
|
|
225
227
|
InferPropertyValue,
|
|
@@ -464,6 +466,7 @@ export type {
|
|
|
464
466
|
BreadthSelector,
|
|
465
467
|
BreadthTarget,
|
|
466
468
|
DefineGroupOptions,
|
|
469
|
+
DefineMarkingOptions,
|
|
467
470
|
DefineMembershipPolicyOptions,
|
|
468
471
|
DefineRoleOptions,
|
|
469
472
|
EditGrant,
|
|
@@ -473,10 +476,13 @@ export type {
|
|
|
473
476
|
GroupReference,
|
|
474
477
|
ManageGrant,
|
|
475
478
|
ManageGrantTarget,
|
|
479
|
+
MarkingDefinition,
|
|
476
480
|
MembershipOperation,
|
|
477
481
|
MembershipPolicyDefinition,
|
|
478
482
|
ObserveGrant,
|
|
479
483
|
ObserveGrantTarget,
|
|
484
|
+
RedactionReason,
|
|
485
|
+
Redactions,
|
|
480
486
|
RegisteredSecurityDefinitions,
|
|
481
487
|
RoleDefinition,
|
|
482
488
|
RunGrant,
|
|
@@ -491,6 +497,7 @@ export {
|
|
|
491
497
|
applications,
|
|
492
498
|
can,
|
|
493
499
|
defineGroup,
|
|
500
|
+
defineMarking,
|
|
494
501
|
defineMembershipPolicy,
|
|
495
502
|
defineRole,
|
|
496
503
|
every,
|
|
@@ -563,6 +570,7 @@ export type {
|
|
|
563
570
|
BlobInfo,
|
|
564
571
|
BlobStorage,
|
|
565
572
|
FileRef,
|
|
573
|
+
OpenedFileRef,
|
|
566
574
|
} from "./blob-storage"
|
|
567
575
|
export {
|
|
568
576
|
DEFAULT_SIMPLE_FILE_UPLOAD_BYTES,
|
|
@@ -579,6 +587,7 @@ export {
|
|
|
579
587
|
export type {
|
|
580
588
|
DatasetProducer,
|
|
581
589
|
DatasetRow,
|
|
590
|
+
DatasetVersion,
|
|
582
591
|
LakeStorage,
|
|
583
592
|
LakeStorageWithSql,
|
|
584
593
|
} from "./lake-storage"
|
|
@@ -892,7 +901,13 @@ export type {
|
|
|
892
901
|
export type { CreateFileDownloadUrlOptions, FileDownloadUrl } from "./blob-storage/download-urls"
|
|
893
902
|
export type { BlobsRuntime } from "./blob-storage/execution"
|
|
894
903
|
export type { ConnectorRuntime } from "./connectors/execution"
|
|
895
|
-
export type {
|
|
904
|
+
export type {
|
|
905
|
+
DatasetIngestInput,
|
|
906
|
+
DatasetIngestResult,
|
|
907
|
+
DatasetReadRowsInput,
|
|
908
|
+
DatasetRows,
|
|
909
|
+
DatasetsRuntime,
|
|
910
|
+
} from "./datasets/execution"
|
|
896
911
|
export type {
|
|
897
912
|
SixbActionPhaseFailedContext,
|
|
898
913
|
SixbErrorContext,
|
|
@@ -943,12 +958,15 @@ export type {
|
|
|
943
958
|
BatchItemResult,
|
|
944
959
|
CreateSixbOptions,
|
|
945
960
|
DefinitionCatalog,
|
|
961
|
+
FileListPropertyToken,
|
|
962
|
+
FilePropertyToken,
|
|
946
963
|
ListResult,
|
|
947
964
|
ListResultWithoutTotal,
|
|
948
965
|
ObjectByIdHandle,
|
|
949
966
|
ObjectExpandBuilder,
|
|
950
967
|
ObjectExpandOptions,
|
|
951
968
|
ObjectExpansionSort,
|
|
969
|
+
ObjectFileHandle,
|
|
952
970
|
ObjectQueryBuilder,
|
|
953
971
|
ObjectQueryFacetBucket,
|
|
954
972
|
ObjectQueryFacetInput,
|
|
@@ -1025,6 +1043,9 @@ export type {
|
|
|
1025
1043
|
AgentContextInput,
|
|
1026
1044
|
AgentContextOrigin,
|
|
1027
1045
|
AgentContextPart,
|
|
1046
|
+
AgentContinuationPart,
|
|
1047
|
+
AgentDefinitions,
|
|
1048
|
+
AgentDefinitionsInput,
|
|
1028
1049
|
AgentDescriptor,
|
|
1029
1050
|
AgentFileDataProjection,
|
|
1030
1051
|
AgentFileDataResolverInput,
|
|
@@ -1033,17 +1054,20 @@ export type {
|
|
|
1033
1054
|
AgentMessagePart,
|
|
1034
1055
|
AgentMessagePartType,
|
|
1035
1056
|
AgentMessageRole,
|
|
1057
|
+
AgentProjectFile,
|
|
1036
1058
|
AgentProviderStatePart,
|
|
1037
1059
|
AgentReasoning,
|
|
1038
|
-
AgentReasoningLevel,
|
|
1039
1060
|
AgentReasoningPart,
|
|
1040
1061
|
AgentReference,
|
|
1041
1062
|
AgentRequestErrorCode,
|
|
1063
|
+
AgentSkillCatalog,
|
|
1064
|
+
AgentSkillDefinition,
|
|
1042
1065
|
AgentStepStartPart,
|
|
1043
1066
|
AgentTextPart,
|
|
1044
1067
|
AgentToolArtifact,
|
|
1045
1068
|
AgentToolArtifactPutInput,
|
|
1046
1069
|
AgentToolArtifacts,
|
|
1070
|
+
AgentToolAttachments,
|
|
1047
1071
|
AgentToolCallPart,
|
|
1048
1072
|
AgentToolCallState,
|
|
1049
1073
|
AgentToolCatalog,
|
|
@@ -1060,6 +1084,7 @@ export type {
|
|
|
1060
1084
|
AgentToolRunBuilder,
|
|
1061
1085
|
AgentToolRunContext,
|
|
1062
1086
|
AgentToolRunInfo,
|
|
1087
|
+
AgentToolRuntimeFacade,
|
|
1063
1088
|
AgentToolTextContent,
|
|
1064
1089
|
AgentUsageReference,
|
|
1065
1090
|
InferAgentToolInput,
|
package/src/models/catalog.ts
CHANGED
|
@@ -13,7 +13,11 @@ import {
|
|
|
13
13
|
type ModelDefinition,
|
|
14
14
|
} from "./definitions"
|
|
15
15
|
import { assertEmbeddingModel, type EmbeddingModel } from "./embedding-model"
|
|
16
|
-
import
|
|
16
|
+
import {
|
|
17
|
+
type LanguageModel,
|
|
18
|
+
MODEL_REASONING_LEVELS,
|
|
19
|
+
modelReasoningSupportIssue,
|
|
20
|
+
} from "./language-model"
|
|
17
21
|
import { assertRerankingModel, type RerankingModel } from "./reranking-model"
|
|
18
22
|
|
|
19
23
|
/** Stable identity of a configured provider binding. */
|
|
@@ -143,7 +147,10 @@ function createLanguageCatalog(
|
|
|
143
147
|
throw new RuntimeError("[Sixb] 'models.language' must be an array of Sixb language models.")
|
|
144
148
|
}
|
|
145
149
|
|
|
146
|
-
const index = indexModelBindings(models, "language",
|
|
150
|
+
const index = indexModelBindings(models, "language", (model, position) => {
|
|
151
|
+
assertLanguageModel(model, position)
|
|
152
|
+
assertDefaultReasoning(model, position)
|
|
153
|
+
})
|
|
147
154
|
const [defaultEntry] = index.list()
|
|
148
155
|
if (!defaultEntry) {
|
|
149
156
|
throw new RuntimeError(
|
|
@@ -164,6 +171,23 @@ function createEmbeddingCatalog(
|
|
|
164
171
|
return indexModelBindings(models ?? [], "embedding", assertEmbeddingModel)
|
|
165
172
|
}
|
|
166
173
|
|
|
174
|
+
// Capabilities known without catalog I/O. Unknown support is accepted: providers fall back to their
|
|
175
|
+
// default when a resolved model turns out not to support the level.
|
|
176
|
+
function assertDefaultReasoning(model: LanguageModel, index: number): void {
|
|
177
|
+
const reasoning: unknown = model.defaultReasoning
|
|
178
|
+
if (reasoning === undefined) return
|
|
179
|
+
if (!(MODEL_REASONING_LEVELS as readonly unknown[]).includes(reasoning)) {
|
|
180
|
+
throw invalidLanguageModel(
|
|
181
|
+
index,
|
|
182
|
+
`expected 'defaultReasoning' to be one of: ${MODEL_REASONING_LEVELS.join(", ")}`
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
const issue = modelReasoningSupportIssue(model.definition.capabilities.reasoning, reasoning)
|
|
186
|
+
if (issue !== undefined) {
|
|
187
|
+
throw invalidLanguageModel(index, `default reasoning '${reasoning}' cannot be used: ${issue}`)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
167
191
|
function assertLanguageModel(model: unknown, index: number): asserts model is LanguageModel {
|
|
168
192
|
if ((typeof model !== "object" && typeof model !== "function") || model === null) {
|
|
169
193
|
throw invalidLanguageModel(index, "expected a Sixb LanguageModel instance")
|
|
@@ -43,9 +43,10 @@ unknown input usage and unresolved capacity. Inference is never retried here.
|
|
|
43
43
|
replays accounting only, never inference; see the
|
|
44
44
|
[worker recovery contract](../../../../agent-worker/docs/usage-accounting.md).
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
An Agent run binds its own recorder to its SDK, so calls from its tools share the run's admission,
|
|
47
|
+
failure state and cancellation. Direct provider calls bypass this session. Webhook handlers have no
|
|
48
|
+
bound model execution attempt; they must dispatch an action for accounted calls. A process crash
|
|
49
|
+
before accounting is captured can still leave provider billing outside the ledger.
|
|
49
50
|
|
|
50
51
|
## Reranking flow
|
|
51
52
|
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import type { ModelsRuntime } from "../generation-types"
|
|
2
|
+
import type { AiModelCallRecorder } from "./model-call-recorder"
|
|
2
3
|
|
|
3
4
|
export interface ModelExecutionAttempt {
|
|
4
5
|
readonly attempt: number
|
|
5
6
|
readonly signal: AbortSignal
|
|
6
7
|
/** Internal durable fence around admission; it must invoke admit exactly once to proceed. */
|
|
7
8
|
readonly embeddingAdmission?: (admit: () => Promise<void>) => Promise<void>
|
|
9
|
+
/**
|
|
10
|
+
* Accounting the execution attempt already owns, such as an Agent run's. Calls then share its
|
|
11
|
+
* admission and failure state instead of opening a second recorder for the same attempt.
|
|
12
|
+
*/
|
|
13
|
+
readonly accounting?: AiModelCallRecorder
|
|
8
14
|
}
|
|
9
15
|
|
|
10
16
|
const bindings = new WeakMap<ModelsRuntime, (input: ModelExecutionAttempt) => void>()
|
|
@@ -70,6 +70,16 @@ export class AiModelCallRecorder {
|
|
|
70
70
|
})
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
/** The execution every call this recorder admits is attributed to. */
|
|
74
|
+
get executionId(): string {
|
|
75
|
+
return this.input.executionId
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** The execution attempt every call this recorder admits is attributed to. */
|
|
79
|
+
get attempt(): number {
|
|
80
|
+
return this.input.attempt
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
/** Wrap the resolved model so all calls in an execution share admission. */
|
|
74
84
|
wrapModel(model: LanguageModel): LanguageModel {
|
|
75
85
|
return {
|
|
@@ -34,8 +34,8 @@ export class ModelExecutionSession {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
accounting(): Promise<AiModelCallRecorder> {
|
|
37
|
-
this.requireBinding()
|
|
38
|
-
this.recorder ??= this.createRecorder()
|
|
37
|
+
const { accounting } = this.requireBinding()
|
|
38
|
+
this.recorder ??= accounting ? Promise.resolve(accounting) : this.createRecorder()
|
|
39
39
|
return this.recorder
|
|
40
40
|
}
|
|
41
41
|
|
package/src/models/execution.ts
CHANGED
|
@@ -45,6 +45,7 @@ export function createModelsRuntime(
|
|
|
45
45
|
const messages = generationMessages(input)
|
|
46
46
|
const signal = session.signal(input.signal)
|
|
47
47
|
signal.throwIfAborted()
|
|
48
|
+
// The catalog's binding is the configured one, default reasoning included.
|
|
48
49
|
const selected = input.model
|
|
49
50
|
? catalog
|
|
50
51
|
? catalog.language?.getByRef({
|
|
@@ -70,6 +71,9 @@ export function createModelsRuntime(
|
|
|
70
71
|
input.reasoning
|
|
71
72
|
)
|
|
72
73
|
if (reasoningIssue) throw new UnsupportedModelFeatureError(`[SixbModels] ${reasoningIssue}.`)
|
|
74
|
+
// The default was checked against the capabilities known at startup; like any request, a level
|
|
75
|
+
// the resolved model turns out not to support falls back to the provider default.
|
|
76
|
+
const reasoning = input.reasoning ?? selected.defaultReasoning
|
|
73
77
|
if (output && model.definition.capabilities.nativeStructuredOutput === false) {
|
|
74
78
|
throw new UnsupportedModelFeatureError(
|
|
75
79
|
"[SixbModels] Model does not support native structured output."
|
|
@@ -79,7 +83,7 @@ export function createModelsRuntime(
|
|
|
79
83
|
aiModelCallOutputTokenAllowance(input.maxOutputTokens ?? model.definition.maxOutputTokens),
|
|
80
84
|
model.definition.maxOutputTokens ?? Infinity
|
|
81
85
|
)
|
|
82
|
-
if (typeof
|
|
86
|
+
if (typeof reasoning === "object" && reasoning.budgetTokens >= maxOutputTokens) {
|
|
83
87
|
throw new TypeError("[SixbModels] Output allowance must exceed the reasoning token budget.")
|
|
84
88
|
}
|
|
85
89
|
const accounting = await session.accounting()
|
|
@@ -92,7 +96,7 @@ export function createModelsRuntime(
|
|
|
92
96
|
maxSteps: 1,
|
|
93
97
|
rejectLocalToolCalls: true,
|
|
94
98
|
maxOutputTokens,
|
|
95
|
-
reasoning
|
|
99
|
+
reasoning,
|
|
96
100
|
caching: input.caching,
|
|
97
101
|
signal,
|
|
98
102
|
onModelCallEnd: async (completed: ModelCallEndEvent) => {
|
|
@@ -83,6 +83,12 @@ export interface LanguageModel {
|
|
|
83
83
|
readonly modelId: string
|
|
84
84
|
readonly definition: LanguageModelDefinition
|
|
85
85
|
readonly costEstimator?: ModelCostEstimator
|
|
86
|
+
/**
|
|
87
|
+
* Reasoning Sixb applies whenever this model runs without an explicit choice: chat turns, AI
|
|
88
|
+
* workflow steps, subagents, and direct generation. Providers set it from their model options;
|
|
89
|
+
* Sixb checks it against `definition.capabilities` at startup.
|
|
90
|
+
*/
|
|
91
|
+
readonly defaultReasoning?: ModelReasoningLevel
|
|
86
92
|
/**
|
|
87
93
|
* Return an executable model pinned to operational metadata, preserving model identity.
|
|
88
94
|
* `offline` requires a local snapshot without catalog I/O. Workers retain this model
|
|
@@ -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,4 @@
|
|
|
1
|
+
import type { BlobStorage } from "../blob-storage"
|
|
1
2
|
import { shareSixbErrorReporter } from "../error-reporting/capability"
|
|
2
3
|
import type { ExecutionContext } from "../execution"
|
|
3
4
|
import {
|
|
@@ -147,7 +148,8 @@ export interface ObjectsRuntime extends ExecutionObjectOperations {
|
|
|
147
148
|
|
|
148
149
|
export function createObjectsRuntime(
|
|
149
150
|
runtime: SixbRuntimeContext,
|
|
150
|
-
execution: ExecutionContext
|
|
151
|
+
execution: ExecutionContext,
|
|
152
|
+
blobStorage: Pick<BlobStorage, "stat" | "open">
|
|
151
153
|
): ObjectsRuntime {
|
|
152
154
|
const runtimeAuthorization = runtime.runtimeAuthorization
|
|
153
155
|
const objectReader = runtime.objectReader
|
|
@@ -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
|
+
}
|