@sixb/core 0.1.6 → 0.1.8
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/delegated-admission.d.ts +24 -0
- package/dist/actions/delegated-admission.d.ts.map +1 -0
- package/dist/actions/descriptor.d.ts +29 -0
- package/dist/actions/descriptor.d.ts.map +1 -0
- package/dist/actions/execution.d.ts +5 -5
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +50 -40
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +20 -0
- package/dist/actions/run-authorization.d.ts.map +1 -0
- package/dist/actions/run-dispatch.d.ts +3 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/worker.js +5 -5
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +6 -166
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +22 -6
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/builders.d.ts +3 -11
- package/dist/agents/builders.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/context.js +2 -2
- package/dist/agents/dispatch.d.ts +9 -1
- package/dist/agents/dispatch.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -10
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +9 -10
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/identity.d.ts +3 -0
- package/dist/agents/identity.d.ts.map +1 -0
- package/dist/agents/ids.d.ts +4 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +15 -11
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +90 -78
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +19 -13
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +58 -0
- package/dist/agents/model-loop.d.ts.map +1 -0
- package/dist/agents/reference.d.ts +4 -0
- package/dist/agents/reference.d.ts.map +1 -0
- package/dist/agents/request.d.ts +10 -8
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/retired-config.d.ts +4 -0
- package/dist/agents/retired-config.d.ts.map +1 -0
- package/dist/agents/streams.d.ts +13 -8
- package/dist/agents/streams.d.ts.map +1 -1
- package/dist/agents/streams.js +7 -5
- package/dist/agents/streams.js.map +1 -1
- package/dist/agents/tool-catalog.d.ts +9 -0
- package/dist/agents/tool-catalog.d.ts.map +1 -0
- package/dist/agents/tool-definition.d.ts +1 -1
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/types.d.ts +31 -68
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +3 -13
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/ai-usage/execution.d.ts +53 -0
- package/dist/ai-usage/execution.d.ts.map +1 -0
- package/dist/ai-usage/index.d.ts +3 -0
- package/dist/ai-usage/index.d.ts.map +1 -0
- package/dist/auth/index.js +12 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/decision.d.ts +14 -3
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +25 -8
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +12 -7
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +3 -3
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -5
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +2 -2
- package/dist/blob-storage/index.js +3 -3
- package/dist/bootstrap/discovery.d.ts +6 -6
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +62 -51
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/broker/index.js +2 -2
- package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
- package/dist/chunk-19jp6g9d.js +131 -0
- package/dist/chunk-19jp6g9d.js.map +11 -0
- package/dist/{chunk-3j7573mj.js → chunk-2dw777qw.js} +50 -5
- package/dist/{chunk-3j7573mj.js.map → chunk-2dw777qw.js.map} +4 -3
- package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
- package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
- package/dist/chunk-359jm1jw.js +147 -0
- package/dist/chunk-359jm1jw.js.map +10 -0
- package/dist/{chunk-dy311asx.js → chunk-3xep5cjx.js} +58 -23
- package/dist/chunk-3xep5cjx.js.map +15 -0
- package/dist/{chunk-n4spznws.js → chunk-3z1qec12.js} +83 -12
- package/dist/chunk-3z1qec12.js.map +12 -0
- package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
- package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
- package/dist/{chunk-cy0n5dms.js → chunk-4jjp5k14.js} +1 -1
- package/dist/chunk-4qfkag59.js +1568 -0
- package/dist/chunk-4qfkag59.js.map +20 -0
- package/dist/{chunk-1e8m6yn3.js → chunk-4sm0aznx.js} +685 -86
- package/dist/chunk-4sm0aznx.js.map +43 -0
- package/dist/chunk-4yqmp43v.js +159 -0
- package/dist/chunk-4yqmp43v.js.map +11 -0
- package/dist/{chunk-rdeagz6b.js → chunk-5e3pq99w.js} +3 -7
- package/dist/{chunk-rdeagz6b.js.map → chunk-5e3pq99w.js.map} +3 -3
- package/dist/{chunk-ezake7g1.js → chunk-5ntny1qx.js} +1 -1
- package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
- package/dist/chunk-7y0f6rf1.js.map +10 -0
- package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
- package/dist/{chunk-qewtks41.js → chunk-9nbmsvn5.js} +123 -20
- package/dist/chunk-9nbmsvn5.js.map +11 -0
- package/dist/{chunk-5sxb1168.js → chunk-aa2pen2v.js} +256 -82
- package/dist/chunk-aa2pen2v.js.map +34 -0
- package/dist/{chunk-819wnjz8.js → chunk-ajnan18g.js} +13 -10
- package/dist/chunk-ajnan18g.js.map +12 -0
- package/dist/chunk-c15dr03f.js +43 -0
- package/dist/chunk-c15dr03f.js.map +10 -0
- package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
- package/dist/chunk-d8qkxt2v.js.map +10 -0
- package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
- package/dist/{chunk-nkbfrt0c.js → chunk-f26bck4t.js} +7 -7
- package/dist/{chunk-x2yw73hy.js → chunk-fvt9rjsa.js} +23 -7
- package/dist/chunk-fvt9rjsa.js.map +10 -0
- package/dist/{chunk-znagycq7.js → chunk-gbejpkex.js} +5 -5
- package/dist/{chunk-znagycq7.js.map → chunk-gbejpkex.js.map} +1 -1
- package/dist/{chunk-e42bc6m3.js → chunk-gzasd5b6.js} +5 -5
- package/dist/{chunk-e42bc6m3.js.map → chunk-gzasd5b6.js.map} +3 -3
- package/dist/{chunk-rnshztfq.js → chunk-h0k55pc7.js} +6 -6
- package/dist/{chunk-rnshztfq.js.map → chunk-h0k55pc7.js.map} +1 -1
- package/dist/chunk-h5vqbfmd.js +1537 -0
- package/dist/chunk-h5vqbfmd.js.map +19 -0
- package/dist/chunk-j1sbhm7p.js +45 -0
- package/dist/chunk-j1sbhm7p.js.map +10 -0
- package/dist/chunk-jecn6t54.js +307 -0
- package/dist/chunk-jecn6t54.js.map +12 -0
- package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
- package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
- package/dist/{chunk-f6erf2vv.js → chunk-k522z7v6.js} +10 -5
- package/dist/chunk-k522z7v6.js.map +10 -0
- package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
- package/dist/{chunk-ckxfnx7f.js → chunk-mth82m8t.js} +129 -95
- package/dist/chunk-mth82m8t.js.map +14 -0
- package/dist/{chunk-5gynx4xn.js → chunk-mwsxn98e.js} +79 -77
- package/dist/{chunk-5gynx4xn.js.map → chunk-mwsxn98e.js.map} +8 -8
- package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
- package/dist/chunk-n4khvw9n.js +111 -0
- package/dist/chunk-n4khvw9n.js.map +11 -0
- package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
- package/dist/chunk-n6jxh8sw.js.map +10 -0
- package/dist/chunk-nn0tekr1.js +284 -0
- package/dist/chunk-nn0tekr1.js.map +12 -0
- package/dist/chunk-nx7k8tpr.js +436 -0
- package/dist/chunk-nx7k8tpr.js.map +12 -0
- package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
- package/dist/chunk-p03r0h5s.js.map +16 -0
- package/dist/{chunk-1g8negke.js → chunk-p1rzczbt.js} +93 -8
- package/dist/chunk-p1rzczbt.js.map +12 -0
- package/dist/{chunk-f83ka50g.js → chunk-p1x242ad.js} +652 -77
- package/dist/chunk-p1x242ad.js.map +25 -0
- package/dist/chunk-p2vqaxkc.js +528 -0
- package/dist/chunk-p2vqaxkc.js.map +15 -0
- package/dist/{chunk-a31h57d5.js → chunk-pc7ys28c.js} +70 -7
- package/dist/chunk-pc7ys28c.js.map +14 -0
- package/dist/{chunk-md8k0r54.js → chunk-q0k9nc5a.js} +281 -89
- package/dist/chunk-q0k9nc5a.js.map +14 -0
- package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
- package/dist/chunk-r8jrnexe.js +403 -0
- package/dist/chunk-r8jrnexe.js.map +10 -0
- package/dist/{chunk-h9kxd41f.js → chunk-rafagrwr.js} +48 -7
- package/dist/chunk-rafagrwr.js.map +11 -0
- package/dist/{chunk-dysw7nsm.js → chunk-rv2hkwwa.js} +2 -2
- package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
- package/dist/{chunk-t624af60.js → chunk-sbzzr4kx.js} +1848 -757
- package/dist/chunk-sbzzr4kx.js.map +63 -0
- package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
- package/dist/chunk-tpnd31c1.js.map +11 -0
- package/dist/chunk-trxxmgnf.js +68 -0
- package/dist/chunk-trxxmgnf.js.map +11 -0
- package/dist/{chunk-0hc5j867.js → chunk-v1xppd0y.js} +17 -13
- package/dist/{chunk-0hc5j867.js.map → chunk-v1xppd0y.js.map} +2 -2
- package/dist/chunk-v4en4jc2.js +252 -0
- package/dist/chunk-v4en4jc2.js.map +10 -0
- package/dist/{chunk-xkthy56g.js → chunk-w1tvjszy.js} +1 -1
- package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
- package/dist/{chunk-8gv5z0zm.js → chunk-w9tg6yyb.js} +13 -8
- package/dist/{chunk-8gv5z0zm.js.map → chunk-w9tg6yyb.js.map} +3 -3
- package/dist/{chunk-62c7t4jc.js → chunk-wdage1eb.js} +1 -1
- package/dist/{chunk-tg5mee00.js → chunk-wtf06et8.js} +11 -7
- package/dist/{chunk-tg5mee00.js.map → chunk-wtf06et8.js.map} +3 -3
- package/dist/{chunk-nva1xkjz.js → chunk-xajtptbw.js} +1237 -1434
- package/dist/chunk-xajtptbw.js.map +40 -0
- package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
- package/dist/chunk-yp8ee62z.js.map +11 -0
- package/dist/chunk-z4ccwbkz.js +139 -0
- package/dist/chunk-z4ccwbkz.js.map +10 -0
- package/dist/datasets/builders.d.ts +11 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/changes.d.ts +14 -4
- package/dist/datasets/changes.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +15 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -0
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/sequence.d.ts +7 -0
- package/dist/datasets/sequence.d.ts.map +1 -0
- package/dist/datasets/types.d.ts +1 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +37 -0
- package/dist/datasets/write.d.ts.map +1 -0
- package/dist/datasets/write.js +17 -0
- package/dist/datasets/write.js.map +9 -0
- package/dist/error-reporting/internal.js +4 -4
- package/dist/error-reporting/types.d.ts +7 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +8 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +2 -2
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.js +4 -4
- package/dist/events/types/datasets.d.ts +2 -6
- package/dist/events/types/datasets.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +18 -9
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +62 -46
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +68 -20
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +69 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/primitive.js +55 -46
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +14 -1
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +92 -54
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/scopes.d.ts +16 -0
- package/dist/execution/scopes.d.ts.map +1 -1
- package/dist/execution/types.d.ts +10 -1
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts +2 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +128 -109
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +2 -0
- package/dist/json.d.ts.map +1 -1
- package/dist/lake-storage/definition-updates.d.ts.map +1 -1
- package/dist/lake-storage/errors.d.ts +5 -1
- package/dist/lake-storage/errors.d.ts.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +1 -0
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +6 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +27 -10
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/merge-validation.d.ts.map +1 -1
- package/dist/lake-storage/merge.d.ts +13 -2
- package/dist/lake-storage/merge.d.ts.map +1 -1
- package/dist/lake-storage/source-ordering.d.ts +19 -0
- package/dist/lake-storage/source-ordering.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +2 -1
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +10 -5
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +4 -0
- package/dist/lake-storage/version-inputs.d.ts.map +1 -0
- package/dist/logging/index.js +3 -3
- package/dist/logging/types.js +2 -2
- package/dist/materialization/index.js +2 -2
- package/dist/materializer/index.js +38 -31
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/catalog.d.ts +40 -0
- package/dist/models/catalog.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +25 -0
- package/dist/models/definitions.d.ts.map +1 -0
- package/dist/models/errors.d.ts +52 -0
- package/dist/models/errors.d.ts.map +1 -0
- package/dist/models/events.d.ts +192 -0
- package/dist/models/events.d.ts.map +1 -0
- package/dist/models/index.d.ts +17 -39
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +50 -0
- package/dist/models/index.js.map +9 -0
- package/dist/models/language-model.d.ts +90 -0
- package/dist/models/language-model.d.ts.map +1 -0
- package/dist/models/messages.d.ts +74 -0
- package/dist/models/messages.d.ts.map +1 -0
- package/dist/models/pricing.d.ts +69 -0
- package/dist/models/pricing.d.ts.map +1 -0
- package/dist/models/rate-card.d.ts +24 -0
- package/dist/models/rate-card.d.ts.map +1 -0
- package/dist/models/tools.d.ts +24 -0
- package/dist/models/tools.d.ts.map +1 -0
- package/dist/objects/authorized-ontology-view.d.ts +25 -0
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +1 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +43 -36
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +2 -7
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +4 -2
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +36 -29
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/links.d.ts +22 -1
- package/dist/objects/query/links.d.ts.map +1 -1
- package/dist/objects/query/selected-read-admission.d.ts +27 -0
- package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +60 -2
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/service/list-service.d.ts +2 -3
- package/dist/objects/service/list-service.d.ts.map +1 -1
- package/dist/objects/telemetry/history.d.ts +8 -6
- package/dist/objects/telemetry/history.d.ts.map +1 -1
- package/dist/objects/telemetry/index.d.ts +2 -2
- package/dist/objects/telemetry/index.d.ts.map +1 -1
- package/dist/objects/telemetry/workload.d.ts +11 -0
- package/dist/objects/telemetry/workload.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +15 -14
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +2 -1
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +0 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +5 -10
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts +10 -6
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/link-path-selection.d.ts +35 -0
- package/dist/ontology/link-path-selection.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +2 -0
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +2 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/pipelines/execution.d.ts.map +1 -1
- package/dist/pipelines/index.js +41 -36
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/request.d.ts.map +1 -1
- package/dist/projections/execution.d.ts.map +1 -1
- package/dist/projections/internal.js +39 -32
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/queues/in-memory.d.ts +3 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +3 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +15 -3
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +7 -4
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +4 -2
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +5 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +8 -2
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +3 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schedules/execution.d.ts +2 -1
- package/dist/schedules/execution.d.ts.map +1 -1
- package/dist/security/every.d.ts +4 -4
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +12 -6
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +2 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +19 -5
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +6 -2
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/access-plan.d.ts +22 -0
- package/dist/shares/access-plan.d.ts.map +1 -0
- package/dist/shares/builders.d.ts +14 -0
- package/dist/shares/builders.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts +14 -0
- package/dist/shares/compiler.d.ts.map +1 -0
- package/dist/shares/errors.d.ts +4 -0
- package/dist/shares/errors.d.ts.map +1 -0
- package/dist/shares/execution.d.ts +57 -0
- package/dist/shares/execution.d.ts.map +1 -0
- package/dist/shares/index.d.ts +10 -0
- package/dist/shares/index.d.ts.map +1 -0
- package/dist/shares/internal.d.ts +3 -0
- package/dist/shares/internal.d.ts.map +1 -0
- package/dist/shares/internal.js +239 -0
- package/dist/shares/internal.js.map +10 -0
- package/dist/shares/intersection.d.ts +9 -0
- package/dist/shares/intersection.d.ts.map +1 -0
- package/dist/shares/session-protocol.d.ts +41 -0
- package/dist/shares/session-protocol.d.ts.map +1 -0
- package/dist/shares/types.d.ts +51 -0
- package/dist/shares/types.d.ts.map +1 -0
- package/dist/shares/validation.d.ts +11 -0
- package/dist/shares/validation.d.ts.map +1 -0
- package/dist/storage/action-runs/failure.js +3 -3
- package/dist/storage/action-runs/provider.js +2 -2
- package/dist/storage/agents/errors.d.ts +1 -1
- package/dist/storage/agents/errors.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +3 -2
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +11 -4
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +18 -15
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +65 -17
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +2 -1
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/codec.d.ts +3 -2
- package/dist/storage/ai-cost/codec.d.ts.map +1 -1
- package/dist/storage/ai-cost/groups.d.ts +51 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -0
- package/dist/storage/ai-cost/in-memory.d.ts +11 -1
- package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +2 -0
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +29 -13
- package/dist/storage/ai-cost/provider.js.map +3 -3
- package/dist/storage/ai-cost/types.d.ts +64 -15
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts +2 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.d.ts +14 -0
- package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
- package/dist/storage/ai-limits/enforcement.js +21 -0
- package/dist/storage/ai-limits/enforcement.js.map +9 -0
- package/dist/storage/ai-limits/errors.d.ts +8 -0
- package/dist/storage/ai-limits/errors.d.ts.map +1 -0
- package/dist/storage/ai-limits/in-memory.d.ts +78 -0
- package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
- package/dist/storage/ai-limits/index.d.ts +7 -0
- package/dist/storage/ai-limits/index.d.ts.map +1 -0
- package/dist/storage/ai-limits/period.d.ts +4 -0
- package/dist/storage/ai-limits/period.d.ts.map +1 -0
- package/dist/storage/ai-limits/provider.d.ts +85 -0
- package/dist/storage/ai-limits/provider.d.ts.map +1 -0
- package/dist/storage/ai-limits/provider.js +62 -0
- package/dist/storage/ai-limits/provider.js.map +9 -0
- package/dist/storage/ai-limits/types.d.ts +175 -0
- package/dist/storage/ai-limits/types.d.ts.map +1 -0
- package/dist/storage/ai-usage/in-memory.d.ts +4 -0
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +6 -2
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/auth/errors.d.ts +1 -1
- package/dist/storage/auth/errors.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
- package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
- package/dist/storage/auth/in-memory/shared.d.ts +3 -1
- package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +2 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +66 -0
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +3 -0
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +4 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +23 -3
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/run-link.d.ts +14 -2
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +6 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +12 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +15 -6
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +78 -36
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +25 -0
- package/dist/storage/objects/execution-limits.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +16 -0
- package/dist/storage/objects/guard.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/index.d.ts +3 -0
- package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/keys.d.ts +10 -0
- package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts +31 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
- package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
- package/dist/storage/objects/index.d.ts +4 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +1 -1
- package/dist/storage/objects/keys.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +25 -0
- package/dist/storage/objects/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +114 -22
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +3 -3
- package/dist/storage/operation-scope.d.ts +3 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +4 -2
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +4 -4
- package/dist/storage/share-grants/errors.d.ts +8 -0
- package/dist/storage/share-grants/errors.d.ts.map +1 -0
- package/dist/storage/share-grants/in-memory.d.ts +11 -0
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/share-grants/index.d.ts +5 -0
- package/dist/storage/share-grants/index.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.d.ts +4 -0
- package/dist/storage/share-grants/provider.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.js +24 -0
- package/dist/storage/share-grants/provider.js.map +9 -0
- package/dist/storage/share-grants/record.d.ts +11 -0
- package/dist/storage/share-grants/record.d.ts.map +1 -0
- package/dist/storage/share-grants/types.d.ts +97 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -0
- package/dist/storage/share-sessions/errors.d.ts +8 -0
- package/dist/storage/share-sessions/errors.d.ts.map +1 -0
- package/dist/storage/share-sessions/in-memory.d.ts +14 -0
- package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
- package/dist/storage/share-sessions/index.d.ts +5 -0
- package/dist/storage/share-sessions/index.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.d.ts +3 -0
- package/dist/storage/share-sessions/provider.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.js +20 -0
- package/dist/storage/share-sessions/provider.js.map +9 -0
- package/dist/storage/share-sessions/record.d.ts +8 -0
- package/dist/storage/share-sessions/record.d.ts.map +1 -0
- package/dist/storage/share-sessions/types.d.ts +50 -0
- package/dist/storage/share-sessions/types.d.ts.map +1 -0
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/transaction.d.ts +2 -1
- package/dist/storage/transaction.d.ts.map +1 -1
- package/dist/storage/types.d.ts +13 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.js +2 -2
- package/dist/storage/workflow-runs/provider.d.ts +1 -1
- package/dist/storage/workflow-runs/provider.js +14 -12
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +5 -4
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/execution.d.ts.map +1 -1
- package/dist/syncs/index.js +41 -36
- package/dist/syncs/index.js.map +1 -1
- package/dist/syncs/request.d.ts.map +1 -1
- package/dist/testing/agent-execution.d.ts +3 -1
- package/dist/testing/agent-execution.d.ts.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
- package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/dataset-sequence-contract.d.ts +4 -0
- package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts +4 -0
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5392 -2070
- package/dist/testing/index.js.map +21 -15
- package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts +22 -0
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/testing/share-grant-storage-contract.d.ts +10 -0
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/share-session-storage-contract.d.ts +9 -0
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +36 -29
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +2 -2
- package/dist/workflows/agent-step-identity.d.ts +3 -0
- package/dist/workflows/agent-step-identity.d.ts.map +1 -0
- package/dist/workflows/builders.d.ts +2 -3
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/execution.d.ts +1 -1
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/failure.d.ts +1 -1
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.d.ts +3 -2
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +63 -48
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +26 -11
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +7 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +43 -4
- package/src/actions/delegated-admission.ts +72 -0
- package/src/actions/descriptor.ts +58 -0
- package/src/actions/execution.ts +99 -24
- package/src/actions/request.ts +136 -19
- package/src/actions/run-authorization.ts +53 -0
- package/src/actions/run-dispatch.ts +8 -1
- package/src/agents/adapters.ts +60 -456
- package/src/agents/authority.ts +215 -34
- package/src/agents/builders.ts +3 -50
- package/src/agents/context-compaction.ts +4 -0
- package/src/agents/context-resolution.ts +1 -4
- package/src/agents/dispatch.ts +59 -2
- package/src/agents/errors.ts +4 -11
- package/src/agents/execution.ts +65 -56
- package/src/agents/identity.ts +4 -0
- package/src/agents/ids.ts +16 -1
- package/src/agents/index.ts +23 -30
- package/src/agents/message.ts +20 -12
- package/src/agents/model-loop.ts +1071 -0
- package/src/agents/reference.ts +7 -0
- package/src/agents/request.ts +157 -77
- package/src/agents/retired-config.ts +20 -0
- package/src/agents/streams.ts +45 -19
- package/src/agents/tool-catalog.ts +21 -0
- package/src/agents/tool-definition.ts +9 -5
- package/src/agents/types.ts +39 -81
- package/src/agents/validation.ts +11 -216
- package/src/ai-usage/execution.ts +189 -0
- package/src/ai-usage/index.ts +15 -0
- package/src/authorization/decision.ts +54 -22
- package/src/authorization/grant-kinds.ts +72 -15
- package/src/authorization/index.ts +2 -0
- package/src/authorization/resolve.ts +12 -5
- package/src/authorization/types.ts +7 -5
- package/src/bootstrap/discovery.ts +3 -3
- package/src/bootstrap/ontology-type-manifest.ts +12 -6
- package/src/datasets/builders.ts +23 -2
- package/src/datasets/changes.ts +16 -4
- package/src/datasets/execution.ts +76 -5
- package/src/datasets/index.ts +1 -0
- package/src/datasets/sequence.ts +77 -0
- package/src/datasets/types.ts +1 -0
- package/src/datasets/validation.ts +26 -0
- package/src/datasets/write.ts +240 -0
- package/src/error-reporting/types.ts +4 -2
- package/src/errors/catalog.ts +8 -0
- package/src/events/execution.ts +57 -7
- package/src/events/types/datasets.ts +2 -6
- package/src/execution/agent.ts +129 -25
- package/src/execution/authorization.ts +493 -83
- package/src/execution/authorized-object-reader.ts +695 -0
- package/src/execution/durable.ts +10 -2
- package/src/execution/index.ts +1 -0
- package/src/execution/request.ts +67 -14
- package/src/execution/scopes.ts +36 -6
- package/src/execution/types.ts +9 -1
- package/src/http/api-routes.ts +108 -0
- package/src/index.ts +72 -22
- package/src/json.ts +9 -0
- package/src/lake-storage/definition-updates.ts +9 -0
- package/src/lake-storage/errors.ts +6 -1
- package/src/lake-storage/in-memory.ts +53 -17
- package/src/lake-storage/index.ts +10 -1
- package/src/lake-storage/merge-validation.ts +12 -2
- package/src/lake-storage/merge.ts +40 -2
- package/src/lake-storage/source-ordering.ts +95 -0
- package/src/lake-storage/sql-transforms.ts +2 -1
- package/src/lake-storage/types.ts +10 -5
- package/src/lake-storage/version-inputs.ts +14 -0
- package/src/models/catalog.ts +137 -0
- package/src/models/definitions.ts +202 -0
- package/src/models/errors.ts +83 -0
- package/src/models/events.ts +198 -0
- package/src/models/index.ts +89 -71
- package/src/models/language-model.ts +143 -0
- package/src/models/messages.ts +78 -0
- package/src/models/pricing.ts +390 -0
- package/src/models/rate-card.ts +101 -0
- package/src/models/tools.ts +29 -0
- package/src/objects/authorized-ontology-view.ts +512 -0
- package/src/objects/execution.ts +98 -143
- package/src/objects/link/authorization.ts +3 -2
- package/src/objects/query/executor.ts +45 -34
- package/src/objects/query/links.ts +84 -25
- package/src/objects/query/selected-read-admission.ts +310 -0
- package/src/objects/query/validate.ts +353 -36
- package/src/objects/sdk/object-handle.ts +2 -8
- package/src/objects/sdk/object-set.ts +10 -11
- package/src/objects/sdk/runtime-query-executor.ts +8 -28
- package/src/objects/sdk/telemetry-channel.ts +11 -7
- package/src/objects/service/list-service.ts +15 -29
- package/src/objects/telemetry/history.ts +297 -17
- package/src/objects/telemetry/index.ts +2 -2
- package/src/objects/telemetry/workload.ts +79 -0
- package/src/ontology/index.ts +7 -1
- package/src/ontology/inference/index.ts +4 -1
- package/src/ontology/internal.ts +0 -1
- package/src/ontology/json-schema.ts +13 -12
- package/src/ontology/link-path-selection.ts +193 -0
- package/src/ontology/refs.ts +19 -0
- package/src/ontology/tokens.ts +15 -8
- package/src/pipelines/execution.ts +30 -7
- package/src/pipelines/request.ts +5 -0
- package/src/projections/execution.ts +72 -11
- package/src/projections/run-dispatch.ts +6 -12
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +11 -0
- package/src/queues/types.ts +20 -3
- package/src/rules/execution.ts +20 -8
- package/src/runtime/create.ts +11 -5
- package/src/runtime/definitions.ts +4 -2
- package/src/runtime/host.ts +28 -8
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/resolve-definitions.ts +22 -36
- package/src/runtime/sixb.ts +29 -10
- package/src/runtime/types.ts +3 -0
- package/src/schedules/execution.ts +24 -2
- package/src/security/every.ts +4 -4
- package/src/security/grants.ts +100 -14
- package/src/security/index.ts +3 -0
- package/src/security/registry.ts +9 -5
- package/src/security/types.ts +23 -4
- package/src/security/validation.ts +33 -9
- package/src/shares/access-plan.ts +225 -0
- package/src/shares/builders.ts +381 -0
- package/src/shares/compiler.ts +359 -0
- package/src/shares/errors.ts +3 -0
- package/src/shares/execution.ts +394 -0
- package/src/shares/index.ts +28 -0
- package/src/shares/internal.ts +9 -0
- package/src/shares/intersection.ts +178 -0
- package/src/shares/session-protocol.ts +258 -0
- package/src/shares/types.ts +76 -0
- package/src/shares/validation.ts +40 -0
- package/src/storage/agents/errors.ts +1 -0
- package/src/storage/agents/in-memory.ts +121 -11
- package/src/storage/agents/index.ts +7 -0
- package/src/storage/agents/provider.ts +150 -6
- package/src/storage/agents/types.ts +73 -16
- package/src/storage/ai-cost/analytics.ts +63 -6
- package/src/storage/ai-cost/codec.ts +37 -12
- package/src/storage/ai-cost/groups.ts +248 -0
- package/src/storage/ai-cost/in-memory.ts +42 -0
- package/src/storage/ai-cost/index.ts +6 -0
- package/src/storage/ai-cost/provider.ts +7 -0
- package/src/storage/ai-cost/types.ts +76 -14
- package/src/storage/ai-cost/validation.ts +147 -17
- package/src/storage/ai-limits/enforcement.ts +68 -0
- package/src/storage/ai-limits/errors.ts +23 -0
- package/src/storage/ai-limits/in-memory.ts +671 -0
- package/src/storage/ai-limits/index.ts +31 -0
- package/src/storage/ai-limits/period.ts +11 -0
- package/src/storage/ai-limits/provider.ts +430 -0
- package/src/storage/ai-limits/types.ts +195 -0
- package/src/storage/ai-usage/in-memory.ts +13 -0
- package/src/storage/ai-usage/record.ts +17 -0
- package/src/storage/ai-usage/types.ts +6 -2
- package/src/storage/auth/errors.ts +6 -0
- package/src/storage/auth/in-memory/auth-storage.ts +69 -0
- package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
- package/src/storage/auth/in-memory/shared.ts +7 -0
- package/src/storage/auth/index.ts +7 -0
- package/src/storage/auth/types.ts +73 -0
- package/src/storage/executions/in-memory.ts +9 -1
- package/src/storage/executions/provider.ts +30 -1
- package/src/storage/executions/run-link.ts +45 -6
- package/src/storage/executions/validation.ts +82 -7
- package/src/storage/in-memory/index.ts +69 -6
- package/src/storage/index.ts +102 -1
- package/src/storage/objects/execution-limits.ts +283 -0
- package/src/storage/objects/guard.ts +55 -0
- package/src/storage/objects/in-memory/index.ts +2 -0
- package/src/storage/objects/in-memory/keys.ts +46 -0
- package/src/storage/objects/in-memory/query.ts +754 -0
- package/src/storage/objects/in-memory/read-scope.ts +211 -0
- package/src/storage/objects/in-memory/read-source.ts +10 -0
- package/src/storage/objects/in-memory/selected-reader.ts +252 -0
- package/src/storage/objects/in-memory/storage.ts +589 -0
- package/src/storage/objects/index.ts +21 -0
- package/src/storage/objects/keys.ts +1 -1
- package/src/storage/objects/read-scope.ts +672 -0
- package/src/storage/objects/types.ts +123 -19
- package/src/storage/operation-scope.ts +16 -0
- package/src/storage/share-grants/errors.ts +14 -0
- package/src/storage/share-grants/in-memory.ts +107 -0
- package/src/storage/share-grants/index.ts +14 -0
- package/src/storage/share-grants/provider.ts +11 -0
- package/src/storage/share-grants/record.ts +347 -0
- package/src/storage/share-grants/types.ts +112 -0
- package/src/storage/share-sessions/errors.ts +14 -0
- package/src/storage/share-sessions/in-memory.ts +105 -0
- package/src/storage/share-sessions/index.ts +11 -0
- package/src/storage/share-sessions/provider.ts +9 -0
- package/src/storage/share-sessions/record.ts +176 -0
- package/src/storage/share-sessions/types.ts +57 -0
- package/src/storage/transaction.ts +14 -2
- package/src/storage/types.ts +64 -0
- package/src/storage/workflow-runs/in-memory.ts +3 -3
- package/src/storage/workflow-runs/provider.ts +2 -2
- package/src/storage/workflow-runs/types.ts +6 -3
- package/src/syncs/execution.ts +25 -5
- package/src/syncs/request.ts +5 -0
- package/src/testing/agent-execution.ts +40 -28
- package/src/testing/agent-storage-contract.ts +249 -28
- package/src/testing/ai-cost-storage-contract.ts +96 -8
- package/src/testing/ai-limit-storage-contract.ts +1134 -0
- package/src/testing/ai-model-call-groups-contract.ts +353 -0
- package/src/testing/ai-usage-storage-contract.ts +31 -0
- package/src/testing/auth-storage-contract.ts +85 -0
- package/src/testing/dataset-sequence-contract.ts +373 -0
- package/src/testing/effective-storage-contract.ts +34 -0
- package/src/testing/execution-storage-contract.ts +81 -2
- package/src/testing/index.ts +26 -0
- package/src/testing/lake-merge-storage-contract.ts +3 -0
- package/src/testing/lake-storage-contract.ts +58 -0
- package/src/testing/object-read-scope-contract.ts +939 -0
- package/src/testing/queues-contract.ts +36 -1
- package/src/testing/share-grant-storage-contract.ts +325 -0
- package/src/testing/share-session-storage-contract.ts +235 -0
- package/src/workflows/agent-step-identity.ts +4 -0
- package/src/workflows/builders.ts +95 -9
- package/src/workflows/execution.ts +55 -16
- package/src/workflows/failure.ts +2 -2
- package/src/workflows/index.ts +3 -0
- package/src/workflows/request.ts +5 -0
- package/src/workflows/types.ts +23 -11
- package/src/workflows/validation.ts +100 -7
- package/dist/chunk-1e8m6yn3.js.map +0 -37
- package/dist/chunk-1g8negke.js.map +0 -11
- package/dist/chunk-4gz41why.js +0 -72
- package/dist/chunk-4gz41why.js.map +0 -11
- package/dist/chunk-5sxb1168.js.map +0 -34
- package/dist/chunk-6gjqgd3d.js.map +0 -11
- package/dist/chunk-819wnjz8.js.map +0 -12
- package/dist/chunk-a31h57d5.js.map +0 -13
- package/dist/chunk-a44d5zgd.js +0 -556
- package/dist/chunk-a44d5zgd.js.map +0 -16
- package/dist/chunk-ckxfnx7f.js.map +0 -13
- package/dist/chunk-dm72y8wt.js.map +0 -10
- package/dist/chunk-drjqm1aa.js.map +0 -15
- package/dist/chunk-dy311asx.js.map +0 -14
- package/dist/chunk-f6erf2vv.js.map +0 -10
- package/dist/chunk-f83ka50g.js.map +0 -23
- package/dist/chunk-fe5ev6mr.js +0 -55
- package/dist/chunk-fe5ev6mr.js.map +0 -11
- package/dist/chunk-h9kxd41f.js.map +0 -11
- package/dist/chunk-hceck7dq.js +0 -137
- package/dist/chunk-hceck7dq.js.map +0 -10
- package/dist/chunk-md8k0r54.js.map +0 -14
- package/dist/chunk-n4spznws.js.map +0 -11
- package/dist/chunk-nva1xkjz.js.map +0 -46
- package/dist/chunk-qewtks41.js.map +0 -11
- package/dist/chunk-t0jjkep3.js.map +0 -10
- package/dist/chunk-t624af60.js.map +0 -56
- package/dist/chunk-t8t39h7v.js.map +0 -10
- package/dist/chunk-t9xghkva.js +0 -28
- package/dist/chunk-t9xghkva.js.map +0 -10
- package/dist/chunk-x2yw73hy.js.map +0 -10
- package/dist/chunk-xc7hq65b.js.map +0 -10
- package/dist/storage/objects/in-memory.d.ts.map +0 -1
- package/src/storage/objects/in-memory.ts +0 -1241
- /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
- /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
- /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
- /package/dist/{chunk-cy0n5dms.js.map → chunk-4jjp5k14.js.map} +0 -0
- /package/dist/{chunk-ezake7g1.js.map → chunk-5ntny1qx.js.map} +0 -0
- /package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +0 -0
- /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
- /package/dist/{chunk-nkbfrt0c.js.map → chunk-f26bck4t.js.map} +0 -0
- /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
- /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
- /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
- /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
- /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
- /package/dist/{chunk-dysw7nsm.js.map → chunk-rv2hkwwa.js.map} +0 -0
- /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
- /package/dist/{chunk-xkthy56g.js.map → chunk-w1tvjszy.js.map} +0 -0
- /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
- /package/dist/{chunk-62c7t4jc.js.map → chunk-wdage1eb.js.map} +0 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/storage/objects/read-scope.ts
|
|
3
|
+
var OBJECT_READ_SCOPE_LIMITS = Object.freeze({
|
|
4
|
+
maxDepth: 32,
|
|
5
|
+
maxNodes: 512,
|
|
6
|
+
maxObjectSelections: 4096,
|
|
7
|
+
maxSteps: 2048,
|
|
8
|
+
maxPropertyOccurrences: 16384,
|
|
9
|
+
maxIdentifierCharacters: 1e6
|
|
10
|
+
});
|
|
11
|
+
function compileSelectedObjectReadScope(rawScope) {
|
|
12
|
+
const scope = captureSelectedObjectReadScope(rawScope);
|
|
13
|
+
if (!isRecord(scope) || scope.kind !== "selected" || !Array.isArray(scope.roots)) {
|
|
14
|
+
throw invalidScope("scope must be a selected scope with a roots array");
|
|
15
|
+
}
|
|
16
|
+
const roots = [];
|
|
17
|
+
const objects = [];
|
|
18
|
+
const steps = [];
|
|
19
|
+
const visiting = new Set;
|
|
20
|
+
let nextNodeId = 0;
|
|
21
|
+
let concreteStepCount = 0;
|
|
22
|
+
let objectSelectionCount = 0;
|
|
23
|
+
let propertyOccurrenceCount = 0;
|
|
24
|
+
let identifierCharacterCount = 0;
|
|
25
|
+
let compiledPropertyOccurrenceCount = 0;
|
|
26
|
+
let compiledIdentifierCharacterCount = 0;
|
|
27
|
+
const addIdentifier = (value, path) => {
|
|
28
|
+
const identifier = nonEmptyString(value, path);
|
|
29
|
+
identifierCharacterCount += identifier.length;
|
|
30
|
+
if (identifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {
|
|
31
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`);
|
|
32
|
+
}
|
|
33
|
+
return identifier;
|
|
34
|
+
};
|
|
35
|
+
const addPropertyOccurrences = (count) => {
|
|
36
|
+
propertyOccurrenceCount += count;
|
|
37
|
+
if (propertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {
|
|
38
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const addCompiledPropertyOccurrences = (count) => {
|
|
42
|
+
compiledPropertyOccurrenceCount += count;
|
|
43
|
+
if (compiledPropertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {
|
|
44
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences after compilation`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const addCompiledIdentifierCharacters = (count) => {
|
|
48
|
+
compiledIdentifierCharacterCount += count;
|
|
49
|
+
if (compiledIdentifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {
|
|
50
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters after compilation`);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const visitNode = (node, path, depth) => {
|
|
54
|
+
if (!isRecord(node) || !Array.isArray(node.objects) || !Array.isArray(node.links)) {
|
|
55
|
+
throw invalidScope(`${path} must contain object and link selections`);
|
|
56
|
+
}
|
|
57
|
+
if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {
|
|
58
|
+
throw invalidScope(`${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`);
|
|
59
|
+
}
|
|
60
|
+
if (nextNodeId >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {
|
|
61
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`);
|
|
62
|
+
}
|
|
63
|
+
if (visiting.has(node))
|
|
64
|
+
throw invalidScope(`${path} contains a cyclic selection node`);
|
|
65
|
+
visiting.add(node);
|
|
66
|
+
const nodeId = nextNodeId++;
|
|
67
|
+
try {
|
|
68
|
+
objectSelectionCount += node.objects.length;
|
|
69
|
+
if (objectSelectionCount > OBJECT_READ_SCOPE_LIMITS.maxObjectSelections) {
|
|
70
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`);
|
|
71
|
+
}
|
|
72
|
+
for (const [objectIndex, object] of node.objects.entries()) {
|
|
73
|
+
const objectPath = `${path}.objects[${objectIndex}]`;
|
|
74
|
+
if (!isRecord(object) || !Array.isArray(object.propertyIds)) {
|
|
75
|
+
throw invalidScope(`${objectPath} must contain an object type and property ids`);
|
|
76
|
+
}
|
|
77
|
+
addIdentifier(object.objectTypeId, `${objectPath}.objectTypeId`);
|
|
78
|
+
addPropertyOccurrences(object.propertyIds.length);
|
|
79
|
+
for (const [propertyIndex, propertyId] of object.propertyIds.entries()) {
|
|
80
|
+
addIdentifier(propertyId, `${objectPath}.propertyIds[${propertyIndex}]`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const normalizedObjects = normalizeObjects(node.objects, `${path}.objects`);
|
|
84
|
+
if (normalizedObjects.length === 0) {
|
|
85
|
+
throw invalidScope(`${path}.objects must contain at least one concrete object type`);
|
|
86
|
+
}
|
|
87
|
+
for (const object of normalizedObjects) {
|
|
88
|
+
addCompiledPropertyOccurrences(object.propertyIds.length);
|
|
89
|
+
addCompiledIdentifierCharacters(object.objectTypeId.length + identifierCharacters(object.propertyIds));
|
|
90
|
+
objects.push(Object.freeze({ nodeId, ...object }));
|
|
91
|
+
}
|
|
92
|
+
for (const [linkIndex, link] of node.links.entries()) {
|
|
93
|
+
const linkPath = `${path}.links[${linkIndex}]`;
|
|
94
|
+
if (!isRecord(link) || !Array.isArray(link.definitions) || !isRecord(link.target)) {
|
|
95
|
+
throw invalidScope(`${linkPath} must contain definitions and a target node`);
|
|
96
|
+
}
|
|
97
|
+
if (link.definitions.length === 0) {
|
|
98
|
+
throw invalidScope(`${linkPath}.definitions must not be empty`);
|
|
99
|
+
}
|
|
100
|
+
const definitions = normalizeConcreteDefinitions(link.definitions, `${linkPath}.definitions`, addIdentifier, addPropertyOccurrences, addCompiledPropertyOccurrences, addCompiledIdentifierCharacters, () => {
|
|
101
|
+
concreteStepCount += 1;
|
|
102
|
+
if (concreteStepCount > OBJECT_READ_SCOPE_LIMITS.maxSteps) {
|
|
103
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
const parentTypes = new Set(normalizedObjects.map((object) => object.objectTypeId));
|
|
107
|
+
for (const definition of definitions) {
|
|
108
|
+
if (!parentTypes.has(definition.sourceObjectTypeId)) {
|
|
109
|
+
throw invalidScope(`${linkPath} selects source type '${definition.sourceObjectTypeId}' outside its parent node`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const childNodeId = visitNode(link.target, `${linkPath}.target`, depth + 1);
|
|
113
|
+
const childTypes = new Set(objects.filter((object) => object.nodeId === childNodeId).map((object) => object.objectTypeId));
|
|
114
|
+
const targetTypes = new Set(definitions.map((definition) => definition.targetObjectTypeId));
|
|
115
|
+
if (!setsEqual(childTypes, targetTypes)) {
|
|
116
|
+
throw invalidScope(`${linkPath}.target object types must exactly match its definition target types`);
|
|
117
|
+
}
|
|
118
|
+
for (const definition of definitions) {
|
|
119
|
+
steps.push(Object.freeze({
|
|
120
|
+
nodeId: childNodeId,
|
|
121
|
+
parentNodeId: nodeId,
|
|
122
|
+
...definition
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
} finally {
|
|
127
|
+
visiting.delete(node);
|
|
128
|
+
}
|
|
129
|
+
return nodeId;
|
|
130
|
+
};
|
|
131
|
+
for (const [rootIndex, root] of scope.roots.entries()) {
|
|
132
|
+
const path = `roots[${rootIndex}]`;
|
|
133
|
+
if (!isRecord(root) || !isRecord(root.anchor) || !isRecord(root.node)) {
|
|
134
|
+
throw invalidScope(`${path} must contain an exact anchor and a selection node`);
|
|
135
|
+
}
|
|
136
|
+
const objectTypeId = addIdentifier(root.anchor.objectTypeId, `${path}.anchor.objectTypeId`);
|
|
137
|
+
const primaryId = addIdentifier(root.anchor.primaryId, `${path}.anchor.primaryId`);
|
|
138
|
+
addCompiledIdentifierCharacters(objectTypeId.length + primaryId.length);
|
|
139
|
+
const nodeId = visitNode(root.node, `${path}.node`, 0);
|
|
140
|
+
if (!objects.some((object) => object.nodeId === nodeId && object.objectTypeId === objectTypeId)) {
|
|
141
|
+
throw invalidScope(`${path}.anchor type '${objectTypeId}' is not selected by its root node`);
|
|
142
|
+
}
|
|
143
|
+
roots.push(Object.freeze({ nodeId, objectTypeId, primaryId }));
|
|
144
|
+
}
|
|
145
|
+
return Object.freeze({
|
|
146
|
+
kind: "selected",
|
|
147
|
+
roots: Object.freeze(roots),
|
|
148
|
+
objects: Object.freeze(objects),
|
|
149
|
+
steps: Object.freeze(steps)
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function captureSelectedObjectReadScope(value) {
|
|
153
|
+
if (!isRecord(value)) {
|
|
154
|
+
throw invalidScope("scope must be a selected scope with a roots array");
|
|
155
|
+
}
|
|
156
|
+
const kind = value.kind;
|
|
157
|
+
if (kind !== "selected") {
|
|
158
|
+
throw invalidScope("scope must be a selected scope with a roots array");
|
|
159
|
+
}
|
|
160
|
+
const rootsValue = value.roots;
|
|
161
|
+
const rootsSource = captureArray(rootsValue, "roots");
|
|
162
|
+
if (rootsSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes) {
|
|
163
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`);
|
|
164
|
+
}
|
|
165
|
+
const state = {
|
|
166
|
+
visiting: new Set,
|
|
167
|
+
nodeCount: 0,
|
|
168
|
+
objectSelectionCount: 0,
|
|
169
|
+
concreteStepCount: 0,
|
|
170
|
+
propertyOccurrenceCount: 0,
|
|
171
|
+
identifierCharacterCount: 0
|
|
172
|
+
};
|
|
173
|
+
const roots = [];
|
|
174
|
+
for (let rootIndex = 0;rootIndex < rootsSource.length; rootIndex += 1) {
|
|
175
|
+
const path = `roots[${rootIndex}]`;
|
|
176
|
+
const rootValue = rootsSource.value[rootIndex];
|
|
177
|
+
if (!isRecord(rootValue)) {
|
|
178
|
+
throw invalidScope(`${path} must contain an exact anchor and a selection node`);
|
|
179
|
+
}
|
|
180
|
+
const anchorValue = rootValue.anchor;
|
|
181
|
+
if (!isRecord(anchorValue)) {
|
|
182
|
+
throw invalidScope(`${path} must contain an exact anchor and a selection node`);
|
|
183
|
+
}
|
|
184
|
+
const objectTypeId = captureIdentifier(state, anchorValue.objectTypeId, `${path}.anchor.objectTypeId`);
|
|
185
|
+
const primaryId = captureIdentifier(state, anchorValue.primaryId, `${path}.anchor.primaryId`);
|
|
186
|
+
const anchor = Object.freeze({ objectTypeId, primaryId });
|
|
187
|
+
const nodeValue = rootValue.node;
|
|
188
|
+
if (!isRecord(nodeValue)) {
|
|
189
|
+
throw invalidScope(`${path} must contain an exact anchor and a selection node`);
|
|
190
|
+
}
|
|
191
|
+
const node = captureNode(state, nodeValue, `${path}.node`, 0);
|
|
192
|
+
roots.push(Object.freeze({ anchor, node }));
|
|
193
|
+
}
|
|
194
|
+
return Object.freeze({ kind, roots: Object.freeze(roots) });
|
|
195
|
+
}
|
|
196
|
+
function captureNode(state, value, path, depth) {
|
|
197
|
+
if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {
|
|
198
|
+
throw invalidScope(`${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`);
|
|
199
|
+
}
|
|
200
|
+
if (state.nodeCount >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {
|
|
201
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`);
|
|
202
|
+
}
|
|
203
|
+
if (state.visiting.has(value)) {
|
|
204
|
+
throw invalidScope(`${path} contains a cyclic selection node`);
|
|
205
|
+
}
|
|
206
|
+
state.visiting.add(value);
|
|
207
|
+
state.nodeCount += 1;
|
|
208
|
+
try {
|
|
209
|
+
const objectsValue = value.objects;
|
|
210
|
+
const objectsSource = captureArray(objectsValue, `${path}.objects`);
|
|
211
|
+
state.objectSelectionCount = reserveCount(state.objectSelectionCount, objectsSource.length, OBJECT_READ_SCOPE_LIMITS.maxObjectSelections, `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`);
|
|
212
|
+
const objects = [];
|
|
213
|
+
for (let objectIndex = 0;objectIndex < objectsSource.length; objectIndex += 1) {
|
|
214
|
+
const objectPath = `${path}.objects[${objectIndex}]`;
|
|
215
|
+
const objectValue = objectsSource.value[objectIndex];
|
|
216
|
+
if (!isRecord(objectValue)) {
|
|
217
|
+
throw invalidScope(`${objectPath} must contain an object type and property ids`);
|
|
218
|
+
}
|
|
219
|
+
const objectTypeId = captureIdentifier(state, objectValue.objectTypeId, `${objectPath}.objectTypeId`);
|
|
220
|
+
const propertyIdsValue = objectValue.propertyIds;
|
|
221
|
+
const propertyIds = capturePropertyIds(state, propertyIdsValue, `${objectPath}.propertyIds`);
|
|
222
|
+
objects.push(Object.freeze({ objectTypeId, propertyIds }));
|
|
223
|
+
}
|
|
224
|
+
const linksValue = value.links;
|
|
225
|
+
const linksSource = captureArray(linksValue, `${path}.links`);
|
|
226
|
+
if (linksSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes - state.nodeCount) {
|
|
227
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`);
|
|
228
|
+
}
|
|
229
|
+
const links = [];
|
|
230
|
+
for (let linkIndex = 0;linkIndex < linksSource.length; linkIndex += 1) {
|
|
231
|
+
const linkPath = `${path}.links[${linkIndex}]`;
|
|
232
|
+
const linkValue = linksSource.value[linkIndex];
|
|
233
|
+
if (!isRecord(linkValue)) {
|
|
234
|
+
throw invalidScope(`${linkPath} must contain definitions and a target node`);
|
|
235
|
+
}
|
|
236
|
+
const definitionsValue = linkValue.definitions;
|
|
237
|
+
const definitionsSource = captureArray(definitionsValue, `${linkPath}.definitions`);
|
|
238
|
+
if (definitionsSource.length === 0) {
|
|
239
|
+
throw invalidScope(`${linkPath}.definitions must not be empty`);
|
|
240
|
+
}
|
|
241
|
+
if (definitionsSource.length > OBJECT_READ_SCOPE_LIMITS.maxSteps - state.concreteStepCount) {
|
|
242
|
+
throw invalidScope(`scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`);
|
|
243
|
+
}
|
|
244
|
+
const definitions = [];
|
|
245
|
+
for (let definitionIndex = 0;definitionIndex < definitionsSource.length; definitionIndex += 1) {
|
|
246
|
+
const definitionPath = `${linkPath}.definitions[${definitionIndex}]`;
|
|
247
|
+
const definitionValue = definitionsSource.value[definitionIndex];
|
|
248
|
+
definitions.push(captureDefinition(state, definitionValue, definitionPath));
|
|
249
|
+
}
|
|
250
|
+
const targetValue = linkValue.target;
|
|
251
|
+
if (!isRecord(targetValue)) {
|
|
252
|
+
throw invalidScope(`${linkPath} must contain definitions and a target node`);
|
|
253
|
+
}
|
|
254
|
+
const target = captureNode(state, targetValue, `${linkPath}.target`, depth + 1);
|
|
255
|
+
links.push(Object.freeze({ definitions: Object.freeze(definitions), target }));
|
|
256
|
+
}
|
|
257
|
+
return Object.freeze({ objects: Object.freeze(objects), links: Object.freeze(links) });
|
|
258
|
+
} finally {
|
|
259
|
+
state.visiting.delete(value);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function captureDefinition(state, value, path) {
|
|
263
|
+
if (!isRecord(value)) {
|
|
264
|
+
throw invalidScope(`${path} must contain a concrete link definition`);
|
|
265
|
+
}
|
|
266
|
+
const sourceObjectTypeId = captureIdentifier(state, value.sourceObjectTypeId, `${path}.sourceObjectTypeId`);
|
|
267
|
+
const linkId = captureIdentifier(state, value.linkId, `${path}.linkId`);
|
|
268
|
+
const targetObjectTypeIdsValue = value.targetObjectTypeIds;
|
|
269
|
+
const targetObjectTypeIdsSource = captureArray(targetObjectTypeIdsValue, `${path}.targetObjectTypeIds`);
|
|
270
|
+
if (targetObjectTypeIdsSource.length === 0) {
|
|
271
|
+
throw invalidScope(`${path}.targetObjectTypeIds must not be empty`);
|
|
272
|
+
}
|
|
273
|
+
state.concreteStepCount = reserveCount(state.concreteStepCount, targetObjectTypeIdsSource.length, OBJECT_READ_SCOPE_LIMITS.maxSteps, `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`);
|
|
274
|
+
const targetObjectTypeIds = captureIdentifiers(state, targetObjectTypeIdsSource, `${path}.targetObjectTypeIds`);
|
|
275
|
+
const propertyIdsValue = value.propertyIds;
|
|
276
|
+
const propertyIds = capturePropertyIds(state, propertyIdsValue, `${path}.propertyIds`);
|
|
277
|
+
return Object.freeze({ sourceObjectTypeId, linkId, targetObjectTypeIds, propertyIds });
|
|
278
|
+
}
|
|
279
|
+
function capturePropertyIds(state, value, path) {
|
|
280
|
+
const source = captureArray(value, path);
|
|
281
|
+
state.propertyOccurrenceCount = reserveCount(state.propertyOccurrenceCount, source.length, OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences, `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`);
|
|
282
|
+
return captureIdentifiers(state, source, path);
|
|
283
|
+
}
|
|
284
|
+
function captureIdentifiers(state, source, path) {
|
|
285
|
+
const identifiers = [];
|
|
286
|
+
for (let index = 0;index < source.length; index += 1) {
|
|
287
|
+
identifiers.push(captureIdentifier(state, source.value[index], `${path}[${index}]`));
|
|
288
|
+
}
|
|
289
|
+
return Object.freeze(identifiers);
|
|
290
|
+
}
|
|
291
|
+
function captureIdentifier(state, value, path) {
|
|
292
|
+
const identifier = nonEmptyString(value, path);
|
|
293
|
+
state.identifierCharacterCount = reserveCount(state.identifierCharacterCount, identifier.length, OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters, `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`);
|
|
294
|
+
return identifier;
|
|
295
|
+
}
|
|
296
|
+
function captureArray(value, path) {
|
|
297
|
+
if (!Array.isArray(value)) {
|
|
298
|
+
throw invalidScope(`${path} must be an array`);
|
|
299
|
+
}
|
|
300
|
+
const array = value;
|
|
301
|
+
const length = array.length;
|
|
302
|
+
if (!Number.isSafeInteger(length) || length < 0) {
|
|
303
|
+
throw invalidScope(`${path}.length must be a non-negative safe integer`);
|
|
304
|
+
}
|
|
305
|
+
return { value: array, length };
|
|
306
|
+
}
|
|
307
|
+
function reserveCount(current, count, limit, message) {
|
|
308
|
+
if (count > limit - current)
|
|
309
|
+
throw invalidScope(message);
|
|
310
|
+
return current + count;
|
|
311
|
+
}
|
|
312
|
+
function assertObjectReaderProject(expectedProjectId, actualProjectId) {
|
|
313
|
+
if (actualProjectId !== expectedProjectId) {
|
|
314
|
+
throw new Error(`[Sixb] Object reader belongs to project '${expectedProjectId}', not '${actualProjectId}'.`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function normalizeConcreteDefinitions(definitions, path, addIdentifier, addPropertyOccurrences, addCompiledPropertyOccurrences, addCompiledIdentifierCharacters, addConcreteStep) {
|
|
318
|
+
const propertiesByDefinition = new Map;
|
|
319
|
+
for (const [index, definition] of definitions.entries()) {
|
|
320
|
+
const definitionPath = `${path}[${index}]`;
|
|
321
|
+
if (!isRecord(definition) || !Array.isArray(definition.targetObjectTypeIds) || !Array.isArray(definition.propertyIds)) {
|
|
322
|
+
throw invalidScope(`${definitionPath} must contain a concrete link definition`);
|
|
323
|
+
}
|
|
324
|
+
const sourceObjectTypeId = addIdentifier(definition.sourceObjectTypeId, `${definitionPath}.sourceObjectTypeId`);
|
|
325
|
+
const linkId = addIdentifier(definition.linkId, `${definitionPath}.linkId`);
|
|
326
|
+
if (definition.targetObjectTypeIds.length === 0) {
|
|
327
|
+
throw invalidScope(`${definitionPath}.targetObjectTypeIds must not be empty`);
|
|
328
|
+
}
|
|
329
|
+
addPropertyOccurrences(definition.propertyIds.length);
|
|
330
|
+
let propertyIdentifierCharacters = 0;
|
|
331
|
+
for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {
|
|
332
|
+
propertyIdentifierCharacters += addIdentifier(propertyId, `${definitionPath}.propertyIds[${propertyIndex}]`).length;
|
|
333
|
+
}
|
|
334
|
+
let targetIdentifierCharacters = 0;
|
|
335
|
+
for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {
|
|
336
|
+
addConcreteStep();
|
|
337
|
+
targetIdentifierCharacters += addIdentifier(value, `${definitionPath}.targetObjectTypeIds[${targetIndex}]`).length;
|
|
338
|
+
}
|
|
339
|
+
addCompiledPropertyOccurrences(definition.propertyIds.length * definition.targetObjectTypeIds.length);
|
|
340
|
+
const repeatedIdentifierCharacters = sourceObjectTypeId.length + linkId.length + propertyIdentifierCharacters;
|
|
341
|
+
addCompiledIdentifierCharacters(repeatedIdentifierCharacters * definition.targetObjectTypeIds.length + targetIdentifierCharacters);
|
|
342
|
+
for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {
|
|
343
|
+
const targetObjectTypeId = nonEmptyString(value, `${definitionPath}.targetObjectTypeIds[${targetIndex}]`);
|
|
344
|
+
const key = JSON.stringify([sourceObjectTypeId, linkId, targetObjectTypeId]);
|
|
345
|
+
const normalized = propertiesByDefinition.get(key) ?? {
|
|
346
|
+
sourceObjectTypeId,
|
|
347
|
+
linkId,
|
|
348
|
+
targetObjectTypeId,
|
|
349
|
+
properties: new Set
|
|
350
|
+
};
|
|
351
|
+
for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {
|
|
352
|
+
normalized.properties.add(nonEmptyString(propertyId, `${definitionPath}.propertyIds[${propertyIndex}]`));
|
|
353
|
+
}
|
|
354
|
+
propertiesByDefinition.set(key, normalized);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return [...propertiesByDefinition.values()].sort((left, right) => left.sourceObjectTypeId.localeCompare(right.sourceObjectTypeId) || left.linkId.localeCompare(right.linkId) || left.targetObjectTypeId.localeCompare(right.targetObjectTypeId)).map(({ properties, ...definition }) => Object.freeze({
|
|
358
|
+
...definition,
|
|
359
|
+
propertyIds: Object.freeze([...properties].sort())
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
function identifierCharacters(values) {
|
|
363
|
+
return values.reduce((total, value) => total + value.length, 0);
|
|
364
|
+
}
|
|
365
|
+
function normalizeObjects(selections, path) {
|
|
366
|
+
const propertiesByType = new Map;
|
|
367
|
+
for (const [index, selection] of selections.entries()) {
|
|
368
|
+
if (!isRecord(selection) || !Array.isArray(selection.propertyIds)) {
|
|
369
|
+
throw invalidScope(`${path}[${index}] must contain an object type and property ids`);
|
|
370
|
+
}
|
|
371
|
+
const objectTypeId = nonEmptyString(selection.objectTypeId, `${path}[${index}].objectTypeId`);
|
|
372
|
+
const properties = propertiesByType.get(objectTypeId) ?? new Set;
|
|
373
|
+
for (const propertyId of normalizeIds(selection.propertyIds, `${path}[${index}].propertyIds`)) {
|
|
374
|
+
properties.add(propertyId);
|
|
375
|
+
}
|
|
376
|
+
propertiesByType.set(objectTypeId, properties);
|
|
377
|
+
}
|
|
378
|
+
return [...propertiesByType].sort(([left], [right]) => left.localeCompare(right)).map(([objectTypeId, properties]) => Object.freeze({ objectTypeId, propertyIds: Object.freeze([...properties].sort()) }));
|
|
379
|
+
}
|
|
380
|
+
function normalizeIds(values, path) {
|
|
381
|
+
return [
|
|
382
|
+
...new Set(values.map((value, index) => nonEmptyString(value, `${path}[${index}]`)))
|
|
383
|
+
].sort();
|
|
384
|
+
}
|
|
385
|
+
function nonEmptyString(value, path) {
|
|
386
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
387
|
+
throw invalidScope(`${path} must be a non-empty string`);
|
|
388
|
+
}
|
|
389
|
+
return value;
|
|
390
|
+
}
|
|
391
|
+
function setsEqual(left, right) {
|
|
392
|
+
return left.size === right.size && [...left].every((value) => right.has(value));
|
|
393
|
+
}
|
|
394
|
+
function isRecord(value) {
|
|
395
|
+
return typeof value === "object" && value !== null;
|
|
396
|
+
}
|
|
397
|
+
function invalidScope(message) {
|
|
398
|
+
return new Error(`[Sixb] Invalid object read scope: ${message}.`);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export { compileSelectedObjectReadScope, captureSelectedObjectReadScope, assertObjectReaderProject };
|
|
402
|
+
|
|
403
|
+
//# debugId=F3C89DAB3F2B853064756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/storage/objects/read-scope.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n CompiledObjectReadObjectSelection,\n CompiledObjectReadRoot,\n CompiledObjectReadStep,\n CompiledSelectedObjectReadScope,\n ObjectReadLinkDefinitionSelection,\n ObjectReadLinkSelection,\n ObjectReadNode,\n ObjectReadObjectSelection,\n ObjectReadRoot,\n SelectedObjectReadScope,\n} from \"./types\"\n\n/** Admission bounds applied before a raw selection is normalized or allocated by a provider. */\nexport const OBJECT_READ_SCOPE_LIMITS = Object.freeze({\n maxDepth: 32,\n maxNodes: 512,\n maxObjectSelections: 4_096,\n maxSteps: 2_048,\n maxPropertyOccurrences: 16_384,\n maxIdentifierCharacters: 1_000_000,\n})\n\n/**\n * Validate, detach, normalize, and flatten a finite selection exactly once.\n *\n * Every path occurrence receives its own node id. Reusing only `(sourceType, linkId)` would lose\n * provenance and let an object reached through one branch borrow nested authority from another.\n */\nexport function compileSelectedObjectReadScope(\n rawScope: SelectedObjectReadScope\n): CompiledSelectedObjectReadScope {\n const scope = captureSelectedObjectReadScope(rawScope)\n if (!isRecord(scope) || scope.kind !== \"selected\" || !Array.isArray(scope.roots)) {\n throw invalidScope(\"scope must be a selected scope with a roots array\")\n }\n\n const roots: CompiledObjectReadRoot[] = []\n const objects: CompiledObjectReadObjectSelection[] = []\n const steps: CompiledObjectReadStep[] = []\n const visiting = new Set<object>()\n let nextNodeId = 0\n let concreteStepCount = 0\n let objectSelectionCount = 0\n let propertyOccurrenceCount = 0\n let identifierCharacterCount = 0\n let compiledPropertyOccurrenceCount = 0\n let compiledIdentifierCharacterCount = 0\n\n const addIdentifier = (value: unknown, path: string): string => {\n const identifier = nonEmptyString(value, path)\n identifierCharacterCount += identifier.length\n if (identifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`\n )\n }\n return identifier\n }\n\n const addPropertyOccurrences = (count: number): void => {\n propertyOccurrenceCount += count\n if (propertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`\n )\n }\n }\n\n const addCompiledPropertyOccurrences = (count: number): void => {\n compiledPropertyOccurrenceCount += count\n if (compiledPropertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences after compilation`\n )\n }\n }\n\n const addCompiledIdentifierCharacters = (count: number): void => {\n compiledIdentifierCharacterCount += count\n if (compiledIdentifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters after compilation`\n )\n }\n }\n\n const visitNode = (node: ObjectReadNode, path: string, depth: number): number => {\n if (!isRecord(node) || !Array.isArray(node.objects) || !Array.isArray(node.links)) {\n throw invalidScope(`${path} must contain object and link selections`)\n }\n if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {\n throw invalidScope(\n `${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`\n )\n }\n if (nextNodeId >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`\n )\n }\n if (visiting.has(node)) throw invalidScope(`${path} contains a cyclic selection node`)\n visiting.add(node)\n\n const nodeId = nextNodeId++\n try {\n objectSelectionCount += node.objects.length\n if (objectSelectionCount > OBJECT_READ_SCOPE_LIMITS.maxObjectSelections) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`\n )\n }\n\n for (const [objectIndex, object] of node.objects.entries()) {\n const objectPath = `${path}.objects[${objectIndex}]`\n if (!isRecord(object) || !Array.isArray(object.propertyIds)) {\n throw invalidScope(`${objectPath} must contain an object type and property ids`)\n }\n addIdentifier(object.objectTypeId, `${objectPath}.objectTypeId`)\n addPropertyOccurrences(object.propertyIds.length)\n for (const [propertyIndex, propertyId] of object.propertyIds.entries()) {\n addIdentifier(propertyId, `${objectPath}.propertyIds[${propertyIndex}]`)\n }\n }\n\n const normalizedObjects = normalizeObjects(node.objects, `${path}.objects`)\n if (normalizedObjects.length === 0) {\n throw invalidScope(`${path}.objects must contain at least one concrete object type`)\n }\n for (const object of normalizedObjects) {\n addCompiledPropertyOccurrences(object.propertyIds.length)\n addCompiledIdentifierCharacters(\n object.objectTypeId.length + identifierCharacters(object.propertyIds)\n )\n objects.push(Object.freeze({ nodeId, ...object }))\n }\n\n for (const [linkIndex, link] of node.links.entries()) {\n const linkPath = `${path}.links[${linkIndex}]`\n if (!isRecord(link) || !Array.isArray(link.definitions) || !isRecord(link.target)) {\n throw invalidScope(`${linkPath} must contain definitions and a target node`)\n }\n if (link.definitions.length === 0) {\n throw invalidScope(`${linkPath}.definitions must not be empty`)\n }\n\n const definitions = normalizeConcreteDefinitions(\n link.definitions,\n `${linkPath}.definitions`,\n addIdentifier,\n addPropertyOccurrences,\n addCompiledPropertyOccurrences,\n addCompiledIdentifierCharacters,\n () => {\n concreteStepCount += 1\n if (concreteStepCount > OBJECT_READ_SCOPE_LIMITS.maxSteps) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`\n )\n }\n }\n )\n const parentTypes = new Set(normalizedObjects.map((object) => object.objectTypeId))\n for (const definition of definitions) {\n if (!parentTypes.has(definition.sourceObjectTypeId)) {\n throw invalidScope(\n `${linkPath} selects source type '${definition.sourceObjectTypeId}' outside its parent node`\n )\n }\n }\n\n const childNodeId = visitNode(\n link.target as unknown as ObjectReadNode,\n `${linkPath}.target`,\n depth + 1\n )\n const childTypes = new Set(\n objects\n .filter((object) => object.nodeId === childNodeId)\n .map((object) => object.objectTypeId)\n )\n const targetTypes = new Set(definitions.map((definition) => definition.targetObjectTypeId))\n if (!setsEqual(childTypes, targetTypes)) {\n throw invalidScope(\n `${linkPath}.target object types must exactly match its definition target types`\n )\n }\n\n for (const definition of definitions) {\n steps.push(\n Object.freeze({\n nodeId: childNodeId,\n parentNodeId: nodeId,\n ...definition,\n })\n )\n }\n }\n } finally {\n visiting.delete(node)\n }\n\n return nodeId\n }\n\n for (const [rootIndex, root] of scope.roots.entries()) {\n const path = `roots[${rootIndex}]`\n if (!isRecord(root) || !isRecord(root.anchor) || !isRecord(root.node)) {\n throw invalidScope(`${path} must contain an exact anchor and a selection node`)\n }\n const objectTypeId = addIdentifier(root.anchor.objectTypeId, `${path}.anchor.objectTypeId`)\n const primaryId = addIdentifier(root.anchor.primaryId, `${path}.anchor.primaryId`)\n addCompiledIdentifierCharacters(objectTypeId.length + primaryId.length)\n const nodeId = visitNode(root.node as unknown as ObjectReadNode, `${path}.node`, 0)\n if (\n !objects.some((object) => object.nodeId === nodeId && object.objectTypeId === objectTypeId)\n ) {\n throw invalidScope(`${path}.anchor type '${objectTypeId}' is not selected by its root node`)\n }\n roots.push(Object.freeze({ nodeId, objectTypeId, primaryId }))\n }\n\n return Object.freeze({\n kind: \"selected\",\n roots: Object.freeze(roots),\n objects: Object.freeze(objects),\n steps: Object.freeze(steps),\n })\n}\n\ninterface ScopeCaptureState {\n readonly visiting: Set<object>\n nodeCount: number\n objectSelectionCount: number\n concreteStepCount: number\n propertyOccurrenceCount: number\n identifierCharacterCount: number\n}\n\ninterface CapturedArray {\n readonly value: readonly unknown[]\n readonly length: number\n}\n\n/**\n * Read every caller-controlled property once and detach it before another getter can mutate it.\n * The compiler only ever observes the resulting plain, deeply frozen snapshot.\n */\nexport function captureSelectedObjectReadScope(value: unknown): SelectedObjectReadScope {\n if (!isRecord(value)) {\n throw invalidScope(\"scope must be a selected scope with a roots array\")\n }\n\n const kind = value.kind\n if (kind !== \"selected\") {\n throw invalidScope(\"scope must be a selected scope with a roots array\")\n }\n\n const rootsValue = value.roots\n const rootsSource = captureArray(rootsValue, \"roots\")\n if (rootsSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`\n )\n }\n\n const state: ScopeCaptureState = {\n visiting: new Set<object>(),\n nodeCount: 0,\n objectSelectionCount: 0,\n concreteStepCount: 0,\n propertyOccurrenceCount: 0,\n identifierCharacterCount: 0,\n }\n const roots: ObjectReadRoot[] = []\n for (let rootIndex = 0; rootIndex < rootsSource.length; rootIndex += 1) {\n const path = `roots[${rootIndex}]`\n const rootValue = rootsSource.value[rootIndex]\n if (!isRecord(rootValue)) {\n throw invalidScope(`${path} must contain an exact anchor and a selection node`)\n }\n\n const anchorValue = rootValue.anchor\n if (!isRecord(anchorValue)) {\n throw invalidScope(`${path} must contain an exact anchor and a selection node`)\n }\n const objectTypeId = captureIdentifier(\n state,\n anchorValue.objectTypeId,\n `${path}.anchor.objectTypeId`\n )\n const primaryId = captureIdentifier(state, anchorValue.primaryId, `${path}.anchor.primaryId`)\n const anchor = Object.freeze({ objectTypeId, primaryId })\n\n const nodeValue = rootValue.node\n if (!isRecord(nodeValue)) {\n throw invalidScope(`${path} must contain an exact anchor and a selection node`)\n }\n const node = captureNode(state, nodeValue, `${path}.node`, 0)\n roots.push(Object.freeze({ anchor, node }))\n }\n\n return Object.freeze({ kind, roots: Object.freeze(roots) })\n}\n\nfunction captureNode(\n state: ScopeCaptureState,\n value: Record<string, unknown>,\n path: string,\n depth: number\n): ObjectReadNode {\n if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {\n throw invalidScope(\n `${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`\n )\n }\n if (state.nodeCount >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`\n )\n }\n if (state.visiting.has(value)) {\n throw invalidScope(`${path} contains a cyclic selection node`)\n }\n state.visiting.add(value)\n state.nodeCount += 1\n\n try {\n const objectsValue = value.objects\n const objectsSource = captureArray(objectsValue, `${path}.objects`)\n state.objectSelectionCount = reserveCount(\n state.objectSelectionCount,\n objectsSource.length,\n OBJECT_READ_SCOPE_LIMITS.maxObjectSelections,\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`\n )\n const objects: ObjectReadObjectSelection[] = []\n for (let objectIndex = 0; objectIndex < objectsSource.length; objectIndex += 1) {\n const objectPath = `${path}.objects[${objectIndex}]`\n const objectValue = objectsSource.value[objectIndex]\n if (!isRecord(objectValue)) {\n throw invalidScope(`${objectPath} must contain an object type and property ids`)\n }\n\n const objectTypeId = captureIdentifier(\n state,\n objectValue.objectTypeId,\n `${objectPath}.objectTypeId`\n )\n const propertyIdsValue = objectValue.propertyIds\n const propertyIds = capturePropertyIds(state, propertyIdsValue, `${objectPath}.propertyIds`)\n objects.push(Object.freeze({ objectTypeId, propertyIds }))\n }\n\n const linksValue = value.links\n const linksSource = captureArray(linksValue, `${path}.links`)\n if (linksSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes - state.nodeCount) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`\n )\n }\n const links: ObjectReadLinkSelection[] = []\n for (let linkIndex = 0; linkIndex < linksSource.length; linkIndex += 1) {\n const linkPath = `${path}.links[${linkIndex}]`\n const linkValue = linksSource.value[linkIndex]\n if (!isRecord(linkValue)) {\n throw invalidScope(`${linkPath} must contain definitions and a target node`)\n }\n\n const definitionsValue = linkValue.definitions\n const definitionsSource = captureArray(definitionsValue, `${linkPath}.definitions`)\n if (definitionsSource.length === 0) {\n throw invalidScope(`${linkPath}.definitions must not be empty`)\n }\n if (definitionsSource.length > OBJECT_READ_SCOPE_LIMITS.maxSteps - state.concreteStepCount) {\n throw invalidScope(\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`\n )\n }\n const definitions: ObjectReadLinkDefinitionSelection[] = []\n for (\n let definitionIndex = 0;\n definitionIndex < definitionsSource.length;\n definitionIndex += 1\n ) {\n const definitionPath = `${linkPath}.definitions[${definitionIndex}]`\n const definitionValue = definitionsSource.value[definitionIndex]\n definitions.push(captureDefinition(state, definitionValue, definitionPath))\n }\n\n const targetValue = linkValue.target\n if (!isRecord(targetValue)) {\n throw invalidScope(`${linkPath} must contain definitions and a target node`)\n }\n const target = captureNode(state, targetValue, `${linkPath}.target`, depth + 1)\n links.push(Object.freeze({ definitions: Object.freeze(definitions), target }))\n }\n\n return Object.freeze({ objects: Object.freeze(objects), links: Object.freeze(links) })\n } finally {\n state.visiting.delete(value)\n }\n}\n\nfunction captureDefinition(\n state: ScopeCaptureState,\n value: unknown,\n path: string\n): ObjectReadLinkDefinitionSelection {\n if (!isRecord(value)) {\n throw invalidScope(`${path} must contain a concrete link definition`)\n }\n\n const sourceObjectTypeId = captureIdentifier(\n state,\n value.sourceObjectTypeId,\n `${path}.sourceObjectTypeId`\n )\n const linkId = captureIdentifier(state, value.linkId, `${path}.linkId`)\n\n const targetObjectTypeIdsValue = value.targetObjectTypeIds\n const targetObjectTypeIdsSource = captureArray(\n targetObjectTypeIdsValue,\n `${path}.targetObjectTypeIds`\n )\n if (targetObjectTypeIdsSource.length === 0) {\n throw invalidScope(`${path}.targetObjectTypeIds must not be empty`)\n }\n state.concreteStepCount = reserveCount(\n state.concreteStepCount,\n targetObjectTypeIdsSource.length,\n OBJECT_READ_SCOPE_LIMITS.maxSteps,\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`\n )\n const targetObjectTypeIds = captureIdentifiers(\n state,\n targetObjectTypeIdsSource,\n `${path}.targetObjectTypeIds`\n )\n\n const propertyIdsValue = value.propertyIds\n const propertyIds = capturePropertyIds(state, propertyIdsValue, `${path}.propertyIds`)\n return Object.freeze({ sourceObjectTypeId, linkId, targetObjectTypeIds, propertyIds })\n}\n\nfunction capturePropertyIds(\n state: ScopeCaptureState,\n value: unknown,\n path: string\n): readonly string[] {\n const source = captureArray(value, path)\n state.propertyOccurrenceCount = reserveCount(\n state.propertyOccurrenceCount,\n source.length,\n OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences,\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`\n )\n return captureIdentifiers(state, source, path)\n}\n\nfunction captureIdentifiers(\n state: ScopeCaptureState,\n source: CapturedArray,\n path: string\n): readonly string[] {\n const identifiers: string[] = []\n for (let index = 0; index < source.length; index += 1) {\n identifiers.push(captureIdentifier(state, source.value[index], `${path}[${index}]`))\n }\n return Object.freeze(identifiers)\n}\n\nfunction captureIdentifier(state: ScopeCaptureState, value: unknown, path: string): string {\n const identifier = nonEmptyString(value, path)\n state.identifierCharacterCount = reserveCount(\n state.identifierCharacterCount,\n identifier.length,\n OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters,\n `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`\n )\n return identifier\n}\n\nfunction captureArray(value: unknown, path: string): CapturedArray {\n if (!Array.isArray(value)) {\n throw invalidScope(`${path} must be an array`)\n }\n const array = value as readonly unknown[]\n const length = array.length\n if (!Number.isSafeInteger(length) || length < 0) {\n throw invalidScope(`${path}.length must be a non-negative safe integer`)\n }\n return { value: array, length }\n}\n\nfunction reserveCount(current: number, count: number, limit: number, message: string): number {\n if (count > limit - current) throw invalidScope(message)\n return current + count\n}\n\n/** Fail closed when a project-bound selected reader is accidentally reused across projects. */\nexport function assertObjectReaderProject(\n expectedProjectId: string,\n actualProjectId: string\n): void {\n if (actualProjectId !== expectedProjectId) {\n throw new Error(\n `[Sixb] Object reader belongs to project '${expectedProjectId}', not '${actualProjectId}'.`\n )\n }\n}\n\ninterface ConcreteDefinition {\n readonly sourceObjectTypeId: string\n readonly linkId: string\n readonly targetObjectTypeId: string\n readonly propertyIds: readonly string[]\n}\n\nfunction normalizeConcreteDefinitions(\n definitions: readonly ObjectReadLinkDefinitionSelection[],\n path: string,\n addIdentifier: (value: unknown, path: string) => string,\n addPropertyOccurrences: (count: number) => void,\n addCompiledPropertyOccurrences: (count: number) => void,\n addCompiledIdentifierCharacters: (count: number) => void,\n addConcreteStep: () => void\n): readonly ConcreteDefinition[] {\n const propertiesByDefinition = new Map<\n string,\n {\n sourceObjectTypeId: string\n linkId: string\n targetObjectTypeId: string\n properties: Set<string>\n }\n >()\n\n for (const [index, definition] of definitions.entries()) {\n const definitionPath = `${path}[${index}]`\n if (\n !isRecord(definition) ||\n !Array.isArray(definition.targetObjectTypeIds) ||\n !Array.isArray(definition.propertyIds)\n ) {\n throw invalidScope(`${definitionPath} must contain a concrete link definition`)\n }\n const sourceObjectTypeId = addIdentifier(\n definition.sourceObjectTypeId,\n `${definitionPath}.sourceObjectTypeId`\n )\n const linkId = addIdentifier(definition.linkId, `${definitionPath}.linkId`)\n if (definition.targetObjectTypeIds.length === 0) {\n throw invalidScope(`${definitionPath}.targetObjectTypeIds must not be empty`)\n }\n addPropertyOccurrences(definition.propertyIds.length)\n let propertyIdentifierCharacters = 0\n for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {\n propertyIdentifierCharacters += addIdentifier(\n propertyId,\n `${definitionPath}.propertyIds[${propertyIndex}]`\n ).length\n }\n let targetIdentifierCharacters = 0\n for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {\n addConcreteStep()\n targetIdentifierCharacters += addIdentifier(\n value,\n `${definitionPath}.targetObjectTypeIds[${targetIndex}]`\n ).length\n }\n\n // Reserve the complete concrete expansion before allocating collision-safe keys or copying\n // properties into per-target sets. One compact raw definition may otherwise amplify its\n // source/link/property identifiers once per target beyond the provider-neutral scope caps.\n addCompiledPropertyOccurrences(\n definition.propertyIds.length * definition.targetObjectTypeIds.length\n )\n const repeatedIdentifierCharacters =\n sourceObjectTypeId.length + linkId.length + propertyIdentifierCharacters\n addCompiledIdentifierCharacters(\n repeatedIdentifierCharacters * definition.targetObjectTypeIds.length +\n targetIdentifierCharacters\n )\n\n for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {\n const targetObjectTypeId = nonEmptyString(\n value,\n `${definitionPath}.targetObjectTypeIds[${targetIndex}]`\n )\n const key = JSON.stringify([sourceObjectTypeId, linkId, targetObjectTypeId])\n const normalized = propertiesByDefinition.get(key) ?? {\n sourceObjectTypeId,\n linkId,\n targetObjectTypeId,\n properties: new Set<string>(),\n }\n for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {\n normalized.properties.add(\n nonEmptyString(propertyId, `${definitionPath}.propertyIds[${propertyIndex}]`)\n )\n }\n propertiesByDefinition.set(key, normalized)\n }\n }\n\n return [...propertiesByDefinition.values()]\n .sort(\n (left, right) =>\n left.sourceObjectTypeId.localeCompare(right.sourceObjectTypeId) ||\n left.linkId.localeCompare(right.linkId) ||\n left.targetObjectTypeId.localeCompare(right.targetObjectTypeId)\n )\n .map(({ properties, ...definition }) =>\n Object.freeze({\n ...definition,\n propertyIds: Object.freeze([...properties].sort()),\n })\n )\n}\n\nfunction identifierCharacters(values: readonly string[]): number {\n return values.reduce((total, value) => total + value.length, 0)\n}\n\nfunction normalizeObjects(\n selections: readonly ObjectReadObjectSelection[],\n path: string\n): readonly ObjectReadObjectSelection[] {\n const propertiesByType = new Map<string, Set<string>>()\n for (const [index, selection] of selections.entries()) {\n if (!isRecord(selection) || !Array.isArray(selection.propertyIds)) {\n throw invalidScope(`${path}[${index}] must contain an object type and property ids`)\n }\n const objectTypeId = nonEmptyString(selection.objectTypeId, `${path}[${index}].objectTypeId`)\n const properties = propertiesByType.get(objectTypeId) ?? new Set<string>()\n for (const propertyId of normalizeIds(selection.propertyIds, `${path}[${index}].propertyIds`)) {\n properties.add(propertyId)\n }\n propertiesByType.set(objectTypeId, properties)\n }\n return [...propertiesByType]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([objectTypeId, properties]) =>\n Object.freeze({ objectTypeId, propertyIds: Object.freeze([...properties].sort()) })\n )\n}\n\nfunction normalizeIds(values: readonly string[], path: string): string[] {\n return [\n ...new Set(values.map((value, index) => nonEmptyString(value, `${path}[${index}]`))),\n ].sort()\n}\n\nfunction nonEmptyString(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw invalidScope(`${path} must be a non-empty string`)\n }\n return value\n}\n\nfunction setsEqual(left: ReadonlySet<string>, right: ReadonlySet<string>): boolean {\n return left.size === right.size && [...left].every((value) => right.has(value))\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nfunction invalidScope(message: string): Error {\n return new Error(`[Sixb] Invalid object read scope: ${message}.`)\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "F3C89DAB3F2B853064756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -10,6 +10,7 @@ class ExecutionStorageError extends Error {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
// src/storage/executions/validation.ts
|
|
13
|
+
import { isDeepStrictEqual } from "util";
|
|
13
14
|
function normalizeExecutionRecord(input, createdAt = new Date) {
|
|
14
15
|
const record = {
|
|
15
16
|
id: input.id,
|
|
@@ -31,6 +32,9 @@ async function validateExecutionRecordReferences(record, lookup) {
|
|
|
31
32
|
await validatePrincipal(record.authorizationRef.principal, record.projectId, "Authority principal", lookup);
|
|
32
33
|
await validateCredential(record, lookup);
|
|
33
34
|
}
|
|
35
|
+
if (record.authorizationRef.type === "delegated") {
|
|
36
|
+
await validateDelegation(record, lookup);
|
|
37
|
+
}
|
|
34
38
|
await validateParent(record, lookup);
|
|
35
39
|
}
|
|
36
40
|
function cloneExecutionRecord(record) {
|
|
@@ -106,6 +110,13 @@ function assertAuthorizationRef(ref) {
|
|
|
106
110
|
assertNonBlank(ref.primitive.id, "Authority primitive id");
|
|
107
111
|
assertNonBlank(ref.primitive.runId, "Authority primitive run id");
|
|
108
112
|
return;
|
|
113
|
+
case "delegated":
|
|
114
|
+
if (ref.delegation.kind !== "share") {
|
|
115
|
+
invalid(`Unknown authority delegation kind '${String(ref.delegation.kind)}'.`);
|
|
116
|
+
}
|
|
117
|
+
assertNonBlank(ref.delegation.grantId, "Authority delegation grant id");
|
|
118
|
+
assertNonBlank(ref.delegation.sessionId, "Authority delegation session id");
|
|
119
|
+
return;
|
|
109
120
|
case "kernel":
|
|
110
121
|
assertKernelOperation(ref.operation, "Authority kernel operation");
|
|
111
122
|
return;
|
|
@@ -134,7 +145,13 @@ function assertExecutorAuthority(record) {
|
|
|
134
145
|
}
|
|
135
146
|
return;
|
|
136
147
|
}
|
|
137
|
-
|
|
148
|
+
if (authorizationRef.type === "delegated") {
|
|
149
|
+
if (requestedBy !== undefined) {
|
|
150
|
+
invalid("Delegated request executions cannot have a requested-by principal.");
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
invalid("Request executions require principal, delegated, or explicitly disabled authority.");
|
|
138
155
|
break;
|
|
139
156
|
}
|
|
140
157
|
case "primitive": {
|
|
@@ -147,13 +164,19 @@ function assertExecutorAuthority(record) {
|
|
|
147
164
|
return;
|
|
148
165
|
}
|
|
149
166
|
case "agent": {
|
|
150
|
-
if (
|
|
151
|
-
invalid("Agent executions require
|
|
167
|
+
if (source.type !== "execution") {
|
|
168
|
+
invalid("Agent executions require a parent execution source.");
|
|
152
169
|
}
|
|
153
|
-
if (authorizationRef.credential
|
|
154
|
-
|
|
170
|
+
if (authorizationRef.type === "principal" && authorizationRef.principal.type === "serviceAccount" && authorizationRef.credential === undefined) {
|
|
171
|
+
return;
|
|
155
172
|
}
|
|
156
|
-
|
|
173
|
+
if (authorizationRef.type === "principal" && authorizationRef.principal.type === "user" && authorizationRef.credential !== undefined) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (authorizationRef.type === "disabled")
|
|
177
|
+
return;
|
|
178
|
+
invalid("Agent executions require managed service-account, credentialed user, or explicitly disabled authority.");
|
|
179
|
+
break;
|
|
157
180
|
}
|
|
158
181
|
case "kernel": {
|
|
159
182
|
if (authorizationRef.type !== "kernel" || !kernelOperationsEqual(authorizationRef.operation, executor.operation)) {
|
|
@@ -202,6 +225,18 @@ async function validateCredential(record, lookup) {
|
|
|
202
225
|
throw new ExecutionStorageError("invalid_credential", `[Sixb] Authority access token '${credential.id}' does not belong to principal '${principal.id}'.`);
|
|
203
226
|
}
|
|
204
227
|
}
|
|
228
|
+
async function validateDelegation(record, lookup) {
|
|
229
|
+
if (record.authorizationRef.type !== "delegated")
|
|
230
|
+
return;
|
|
231
|
+
const { grantId, sessionId } = record.authorizationRef.delegation;
|
|
232
|
+
const session = await lookup.getShareSession({ projectId: record.projectId, id: sessionId });
|
|
233
|
+
if (!session) {
|
|
234
|
+
throw new ExecutionStorageError("missing_credential", `[Sixb] Authority shared session '${sessionId}' does not exist in project '${record.projectId}'.`);
|
|
235
|
+
}
|
|
236
|
+
if (session.grantId !== grantId) {
|
|
237
|
+
throw new ExecutionStorageError("invalid_credential", `[Sixb] Authority shared session '${sessionId}' does not belong to grant '${grantId}'.`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
205
240
|
async function validateParent(record, lookup) {
|
|
206
241
|
if (record.source.type !== "execution")
|
|
207
242
|
return;
|
|
@@ -219,6 +254,12 @@ async function validateParent(record, lookup) {
|
|
|
219
254
|
if (!principalsEqual(parent.requestedBy, record.requestedBy)) {
|
|
220
255
|
throw new ExecutionStorageError("invalid_parent_execution", `[Sixb] Child execution '${record.id}' must preserve its parent requested-by principal.`);
|
|
221
256
|
}
|
|
257
|
+
if (record.executor.type === "agent" && isInheritedAgentAuthority(record.authorizationRef) && !isDeepStrictEqual(parent.authorizationRef, record.authorizationRef)) {
|
|
258
|
+
throw new ExecutionStorageError("invalid_parent_execution", `[Sixb] Child Agent execution '${record.id}' must inherit its parent's authorization reference.`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function isInheritedAgentAuthority(ref) {
|
|
262
|
+
return ref.type === "disabled" || ref.type === "principal" && ref.principal.type === "user" && ref.credential !== undefined;
|
|
222
263
|
}
|
|
223
264
|
function assertPrincipal(principal, label) {
|
|
224
265
|
if (principal.type !== "user" && principal.type !== "serviceAccount") {
|
|
@@ -268,4 +309,4 @@ var TRUSTED_PRIMITIVE_KINDS = new Set([
|
|
|
268
309
|
|
|
269
310
|
export { ExecutionStorageError, normalizeExecutionRecord, validateExecutionRecordReferences, cloneExecutionRecord };
|
|
270
311
|
|
|
271
|
-
//# debugId=
|
|
312
|
+
//# debugId=CD48D807CD286EF564756E2164756E21
|