@sixb/core 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js +37 -33
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/worker.js +3 -3
- package/dist/agents/adapters.d.ts +33 -76
- 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.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 +2 -2
- 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/ids.d.ts +4 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +13 -9
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +80 -68
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +17 -10
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +56 -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 -0
- 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 +4 -10
- 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 +7 -7
- package/dist/authorization/decision.d.ts +5 -2
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +24 -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 +8 -6
- 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 +1 -7
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +52 -48
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/broker/index.js +2 -2
- package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
- package/dist/{chunk-1g8negke.js → chunk-08twe8m6.js} +93 -8
- package/dist/chunk-08twe8m6.js.map +12 -0
- package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
- package/dist/{chunk-dy311asx.js → chunk-2b5qtban.js} +12 -12
- package/dist/{chunk-dy311asx.js.map → chunk-2b5qtban.js.map} +3 -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-f83ka50g.js → chunk-37wk412q.js} +86 -28
- package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
- package/dist/{chunk-md8k0r54.js → chunk-3fqt22c4.js} +4 -4
- package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
- package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
- package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
- package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
- package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
- package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
- package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
- package/dist/{chunk-t624af60.js → chunk-6ed5bwnd.js} +646 -67
- package/dist/{chunk-t624af60.js.map → chunk-6ed5bwnd.js.map} +10 -9
- package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.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-nkbfrt0c.js → chunk-9aehf39w.js} +7 -7
- package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
- package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
- package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
- package/dist/chunk-c15dr03f.js +43 -0
- package/dist/chunk-c15dr03f.js.map +10 -0
- package/dist/{chunk-0hc5j867.js → chunk-d2ndstdf.js} +8 -6
- package/dist/{chunk-0hc5j867.js.map → chunk-d2ndstdf.js.map} +2 -2
- package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
- 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-4gz41why.js → chunk-dqn23610.js} +1 -1
- package/dist/{chunk-5sxb1168.js → chunk-e4rvtvpw.js} +13 -11
- package/dist/{chunk-5sxb1168.js.map → chunk-e4rvtvpw.js.map} +2 -2
- package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
- package/dist/chunk-gbrpsx4m.js.map +11 -0
- package/dist/{chunk-nva1xkjz.js → chunk-h0knpbz5.js} +468 -1236
- package/dist/chunk-h0knpbz5.js.map +38 -0
- package/dist/{chunk-tg5mee00.js → chunk-ha58tjtt.js} +6 -6
- package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
- 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-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
- package/dist/{chunk-znagycq7.js → chunk-kt81c11h.js} +2 -2
- package/dist/chunk-n2arzn6e.js +1745 -0
- package/dist/chunk-n2arzn6e.js.map +20 -0
- package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
- package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
- package/dist/chunk-n6jxh8sw.js.map +10 -0
- package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
- package/dist/chunk-p03r0h5s.js.map +16 -0
- package/dist/chunk-p2vqaxkc.js +528 -0
- package/dist/chunk-p2vqaxkc.js.map +15 -0
- package/dist/{chunk-n4spznws.js → chunk-qjycjdj6.js} +84 -11
- package/dist/chunk-qjycjdj6.js.map +12 -0
- package/dist/chunk-qjzp9xyb.js +286 -0
- package/dist/chunk-qjzp9xyb.js.map +12 -0
- package/dist/{chunk-5gynx4xn.js → chunk-qv38twt8.js} +50 -69
- package/dist/{chunk-5gynx4xn.js.map → chunk-qv38twt8.js.map} +8 -8
- package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
- package/dist/{chunk-8gv5z0zm.js → chunk-rp1mvzb4.js} +6 -6
- package/dist/{chunk-1e8m6yn3.js → chunk-rre42skh.js} +182 -18
- package/dist/chunk-rre42skh.js.map +39 -0
- package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
- package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
- 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-e42bc6m3.js → chunk-vjjv9mrb.js} +2 -2
- package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
- package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
- package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
- package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
- package/dist/{chunk-a44d5zgd.js → chunk-y35ma3mj.js} +11 -16
- package/dist/{chunk-a44d5zgd.js.map → chunk-y35ma3mj.js.map} +3 -4
- package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
- package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
- 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/index.js +4 -4
- package/dist/execution/agent.d.ts +18 -9
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +52 -43
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +14 -4
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/primitive.js +45 -43
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +3 -1
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +46 -44
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/types.d.ts +1 -1
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -77
- 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/index.js +5 -5
- 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 +33 -29
- 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/index.js +38 -34
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +32 -28
- package/dist/objects/query/index.js.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/internal.js +4 -4
- package/dist/pipelines/index.js +37 -35
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +35 -31
- package/dist/projections/internal.js.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/runtime/create.d.ts +4 -4
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +2 -2
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +3 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +2 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +4 -2
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -4
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +6 -5
- 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 +1 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +13 -5
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -2
- package/dist/security/validation.d.ts.map +1 -1
- 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/provider.js +1 -1
- package/dist/storage/executions/run-link.d.ts +7 -2
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +4 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +7 -4
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +51 -38
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/ontology/provider.js +3 -3
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +4 -4
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +5 -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 +10 -11
- 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/index.js +37 -35
- package/dist/syncs/index.js.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/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3637 -1962
- package/dist/testing/index.js.map +14 -12
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +32 -28
- 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 +53 -45
- package/dist/workflows/index.js.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 +19 -4
- package/src/agents/adapters.ts +109 -115
- package/src/agents/authority.ts +214 -32
- package/src/agents/builders.ts +3 -50
- package/src/agents/context-compaction.ts +4 -0
- package/src/agents/dispatch.ts +59 -2
- package/src/agents/errors.ts +5 -2
- package/src/agents/execution.ts +53 -52
- package/src/agents/ids.ts +16 -1
- package/src/agents/index.ts +23 -11
- package/src/agents/message.ts +18 -9
- package/src/agents/model-loop.ts +1023 -0
- package/src/agents/reference.ts +7 -0
- package/src/agents/request.ts +141 -74
- 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 +23 -0
- package/src/agents/types.ts +39 -81
- package/src/agents/validation.ts +34 -180
- package/src/ai-usage/execution.ts +196 -0
- package/src/ai-usage/index.ts +15 -0
- package/src/authorization/decision.ts +27 -10
- package/src/authorization/grant-kinds.ts +62 -15
- package/src/authorization/index.ts +1 -0
- package/src/authorization/resolve.ts +12 -5
- package/src/authorization/types.ts +7 -5
- package/src/bootstrap/discovery.ts +0 -3
- package/src/error-reporting/types.ts +4 -2
- package/src/errors/catalog.ts +8 -0
- package/src/execution/agent.ts +129 -22
- package/src/execution/authorization.ts +48 -18
- package/src/execution/request.ts +4 -1
- package/src/execution/types.ts +1 -1
- package/src/http/api-routes.ts +63 -0
- package/src/index.ts +36 -7
- package/src/json.ts +9 -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/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +11 -0
- package/src/queues/types.ts +20 -3
- package/src/runtime/create.ts +7 -5
- package/src/runtime/definitions.ts +2 -2
- package/src/runtime/host.ts +3 -2
- package/src/runtime/resolve-definitions.ts +13 -36
- package/src/runtime/sixb.ts +6 -8
- package/src/security/every.ts +0 -4
- package/src/security/grants.ts +55 -11
- package/src/security/index.ts +2 -0
- package/src/security/registry.ts +6 -5
- package/src/security/types.ts +15 -4
- package/src/security/validation.ts +30 -9
- 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/run-link.ts +16 -6
- package/src/storage/executions/validation.ts +36 -6
- package/src/storage/in-memory/index.ts +48 -4
- package/src/storage/index.ts +51 -1
- package/src/storage/types.ts +37 -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/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/execution-storage-contract.ts +2 -2
- package/src/testing/index.ts +10 -0
- package/src/testing/queues-contract.ts +36 -1
- package/src/workflows/agent-step-identity.ts +4 -0
- package/src/workflows/builders.ts +95 -9
- package/src/workflows/execution.ts +2 -2
- package/src/workflows/failure.ts +2 -2
- package/src/workflows/index.ts +3 -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-6gjqgd3d.js.map +0 -11
- package/dist/chunk-dm72y8wt.js.map +0 -10
- package/dist/chunk-drjqm1aa.js.map +0 -15
- 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-n4spznws.js.map +0 -11
- package/dist/chunk-nva1xkjz.js.map +0 -46
- package/dist/chunk-t0jjkep3.js.map +0 -10
- package/dist/chunk-t8t39h7v.js.map +0 -10
- /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
- /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
- /package/dist/{chunk-md8k0r54.js.map → chunk-3fqt22c4.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-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
- /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
- /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
- /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
- /package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +0 -0
- /package/dist/{chunk-nkbfrt0c.js.map → chunk-9aehf39w.js.map} +0 -0
- /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
- /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
- /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
- /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
- /package/dist/{chunk-tg5mee00.js.map → chunk-ha58tjtt.js.map} +0 -0
- /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.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-znagycq7.js.map → chunk-kt81c11h.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-8gv5z0zm.js.map → chunk-rp1mvzb4.js.map} +0 -0
- /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
- /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
- /package/dist/{chunk-e42bc6m3.js.map → chunk-vjjv9mrb.js.map} +0 -0
- /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
- /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
- /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
- /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
|
@@ -31,8 +31,10 @@ export type AuthzRequest =
|
|
|
31
31
|
| { readonly kind: "workflow.run"; readonly workflowId: string }
|
|
32
32
|
| { readonly kind: "sync.run"; readonly syncId: string }
|
|
33
33
|
| { readonly kind: "pipeline.run"; readonly pipelineId: string }
|
|
34
|
-
| { readonly kind: "agent.run"
|
|
34
|
+
| { readonly kind: "agent.run" }
|
|
35
35
|
| { readonly kind: "logs.observe" }
|
|
36
|
+
| { readonly kind: "aiUsage.observe" }
|
|
37
|
+
| { readonly kind: "aiUsage.manage" }
|
|
36
38
|
| { readonly kind: "connector.manage"; readonly connectorId: string }
|
|
37
39
|
| { readonly kind: "object.query"; readonly touchedObjectTypeIds: readonly string[] }
|
|
38
40
|
|
|
@@ -53,10 +55,9 @@ interface AuthorizedRuntime {
|
|
|
53
55
|
// the single unit that both names a requirement and tests the grant index, so
|
|
54
56
|
// the two can never drift. `kind` is the resolved-index key, so enforcement is
|
|
55
57
|
// a direct lookup with no per-target dispatch.
|
|
56
|
-
|
|
57
|
-
readonly kind:
|
|
58
|
-
readonly id: string
|
|
59
|
-
}
|
|
58
|
+
type Atom =
|
|
59
|
+
| { readonly kind: "run:agent" }
|
|
60
|
+
| { readonly kind: Exclude<GrantKind, "run:agent">; readonly id: string }
|
|
60
61
|
|
|
61
62
|
function atomsFor(request: AuthzRequest): readonly Atom[] {
|
|
62
63
|
switch (request.kind) {
|
|
@@ -79,9 +80,13 @@ function atomsFor(request: AuthzRequest): readonly Atom[] {
|
|
|
79
80
|
case "pipeline.run":
|
|
80
81
|
return [{ kind: "run:pipeline", id: request.pipelineId }]
|
|
81
82
|
case "agent.run":
|
|
82
|
-
return [{ kind: "run:agent"
|
|
83
|
+
return [{ kind: "run:agent" }]
|
|
83
84
|
case "logs.observe":
|
|
84
85
|
return [{ kind: "observe:logs", id: "logs" }]
|
|
86
|
+
case "aiUsage.observe":
|
|
87
|
+
return [{ kind: "observe:aiUsage", id: "aiUsage" }]
|
|
88
|
+
case "aiUsage.manage":
|
|
89
|
+
return [{ kind: "manage:aiUsage", id: "aiUsage" }]
|
|
85
90
|
case "connector.manage":
|
|
86
91
|
return [{ kind: "manage:connector", id: request.connectorId }]
|
|
87
92
|
case "object.query":
|
|
@@ -90,11 +95,19 @@ function atomsFor(request: AuthzRequest): readonly Atom[] {
|
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
function atomKey(atom: Atom): string {
|
|
93
|
-
if (atom.kind === "
|
|
98
|
+
if (atom.kind === "run:agent") return atom.kind
|
|
99
|
+
if (
|
|
100
|
+
atom.kind === "observe:logs" ||
|
|
101
|
+
atom.kind === "observe:aiUsage" ||
|
|
102
|
+
atom.kind === "manage:aiUsage"
|
|
103
|
+
) {
|
|
104
|
+
return atom.kind
|
|
105
|
+
}
|
|
94
106
|
return `${atom.kind}:${atom.id}`
|
|
95
107
|
}
|
|
96
108
|
|
|
97
109
|
function holds(grants: GrantIndex, atom: Atom): boolean {
|
|
110
|
+
if (atom.kind === "run:agent") return grants[atom.kind]
|
|
98
111
|
return grants[atom.kind].has(atom.id)
|
|
99
112
|
}
|
|
100
113
|
|
|
@@ -205,7 +218,7 @@ export function assertPrivileged(runtime: AuthorizedRuntime, operation: string):
|
|
|
205
218
|
* Assert access to process providers that trusted executions and genuine agent runs may use.
|
|
206
219
|
*
|
|
207
220
|
* Agent provenance alone is not authority: the registered capability must be bound to the exact
|
|
208
|
-
* same
|
|
221
|
+
* same execution identity and run before this check succeeds.
|
|
209
222
|
*/
|
|
210
223
|
export function assertProviderAccess(
|
|
211
224
|
runtime: AuthorizedRuntime,
|
|
@@ -223,7 +236,7 @@ export function assertProviderAccess(
|
|
|
223
236
|
binding?.type === "agent" &&
|
|
224
237
|
executor.type === "agent" &&
|
|
225
238
|
binding.executionId === execution.id &&
|
|
226
|
-
binding.
|
|
239
|
+
binding.actorId === executor.actorId &&
|
|
227
240
|
binding.runId === executor.runId
|
|
228
241
|
) {
|
|
229
242
|
return
|
|
@@ -260,9 +273,13 @@ function deniedMessage(
|
|
|
260
273
|
case "pipeline.run":
|
|
261
274
|
return `[Sixb] Principal '${principalId}' is not allowed to run pipeline '${request.pipelineId}'.`
|
|
262
275
|
case "agent.run":
|
|
263
|
-
return `[Sixb] Principal '${principalId}' is not allowed to run
|
|
276
|
+
return `[Sixb] Principal '${principalId}' is not allowed to run the project Agent.`
|
|
264
277
|
case "logs.observe":
|
|
265
278
|
return `[Sixb] Principal '${principalId}' is not allowed to observe project logs.`
|
|
279
|
+
case "aiUsage.observe":
|
|
280
|
+
return `[Sixb] Principal '${principalId}' is not allowed to observe project AI usage.`
|
|
281
|
+
case "aiUsage.manage":
|
|
282
|
+
return `[Sixb] Principal '${principalId}' is not allowed to manage project AI usage limits.`
|
|
266
283
|
case "connector.manage":
|
|
267
284
|
return `[Sixb] Principal '${principalId}' is not allowed to manage connector '${request.connectorId}'.`
|
|
268
285
|
case "object.query": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* entry in `GRANT_KINDS` plus the compile errors that forces at every consumer.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { GrantDefinition } from "../security/types"
|
|
11
|
+
import type { AgentRunGrant, GrantDefinition } from "../security/types"
|
|
12
12
|
|
|
13
13
|
export type GrantKind =
|
|
14
14
|
| "access:application"
|
|
@@ -22,7 +22,12 @@ export type GrantKind =
|
|
|
22
22
|
| "run:pipeline"
|
|
23
23
|
| "run:agent"
|
|
24
24
|
| "observe:logs"
|
|
25
|
+
| "observe:aiUsage"
|
|
25
26
|
| "manage:connector"
|
|
27
|
+
| "manage:aiUsage"
|
|
28
|
+
|
|
29
|
+
export type SingletonGrantKind = "run:agent"
|
|
30
|
+
export type TargetedGrantKind = Exclude<GrantKind, SingletonGrantKind>
|
|
26
31
|
|
|
27
32
|
/** Registered id universes a grant kind ranges over, plus subtype expansion. */
|
|
28
33
|
export interface GrantUniverse {
|
|
@@ -33,16 +38,16 @@ export interface GrantUniverse {
|
|
|
33
38
|
readonly workflowIds: ReadonlySet<string>
|
|
34
39
|
readonly syncIds: ReadonlySet<string>
|
|
35
40
|
readonly pipelineIds: ReadonlySet<string>
|
|
36
|
-
readonly agentIds: ReadonlySet<string>
|
|
37
41
|
readonly observableIds: ReadonlySet<string>
|
|
38
42
|
readonly connectorIds: ReadonlySet<string>
|
|
43
|
+
readonly manageableIds: ReadonlySet<string>
|
|
39
44
|
readonly getSubTypes: (objectTypeId: string) => readonly string[]
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
/** The registered-id sets a grant kind validates against (no subtype hook). */
|
|
43
48
|
export type GrantUniverseKey = Exclude<keyof GrantUniverse, "getSubTypes">
|
|
44
49
|
|
|
45
|
-
interface
|
|
50
|
+
interface TargetedGrantKindSpec {
|
|
46
51
|
/** Registered universe the grant's ids must belong to. */
|
|
47
52
|
readonly universeKey: GrantUniverseKey
|
|
48
53
|
/** Subject noun used in validation errors ("unknown <subject> '<id>'"). */
|
|
@@ -53,11 +58,22 @@ interface GrantKindSpec {
|
|
|
53
58
|
readonly expandsSubtypes?: true
|
|
54
59
|
}
|
|
55
60
|
|
|
61
|
+
interface SingletonGrantKindSpec {
|
|
62
|
+
/** Project-wide capability with no resource selection; resolves to a boolean. */
|
|
63
|
+
readonly singleton: true
|
|
64
|
+
readonly subject: string
|
|
65
|
+
readonly fix: string
|
|
66
|
+
}
|
|
67
|
+
|
|
56
68
|
/**
|
|
57
69
|
* The exhaustive grant-kind table. A new grant family is one entry here; the
|
|
58
|
-
*
|
|
70
|
+
* mapped type makes every omission a compile error.
|
|
59
71
|
*/
|
|
60
|
-
export const GRANT_KINDS:
|
|
72
|
+
export const GRANT_KINDS: {
|
|
73
|
+
readonly [TKind in GrantKind]: TKind extends SingletonGrantKind
|
|
74
|
+
? SingletonGrantKindSpec
|
|
75
|
+
: TargetedGrantKindSpec
|
|
76
|
+
} = {
|
|
61
77
|
"access:application": {
|
|
62
78
|
universeKey: "applicationIds",
|
|
63
79
|
subject: "application",
|
|
@@ -108,25 +124,41 @@ export const GRANT_KINDS: Record<GrantKind, GrantKindSpec> = {
|
|
|
108
124
|
fix: "Add it to 'pipelines/' or pass it to createSixb({ pipelines }).",
|
|
109
125
|
},
|
|
110
126
|
"run:agent": {
|
|
111
|
-
|
|
127
|
+
singleton: true,
|
|
112
128
|
subject: "agent",
|
|
113
|
-
fix: "
|
|
129
|
+
fix: "Configure models.language and use the exported agent reference in can.run(agent).",
|
|
114
130
|
},
|
|
115
131
|
"observe:logs": {
|
|
116
132
|
universeKey: "observableIds",
|
|
117
133
|
subject: "observability surface",
|
|
118
134
|
fix: 'Use can.observe("logs").',
|
|
119
135
|
},
|
|
136
|
+
"observe:aiUsage": {
|
|
137
|
+
universeKey: "observableIds",
|
|
138
|
+
subject: "observability surface",
|
|
139
|
+
fix: "Use can.observe(agent.usage).",
|
|
140
|
+
},
|
|
120
141
|
"manage:connector": {
|
|
121
142
|
universeKey: "connectorIds",
|
|
122
143
|
subject: "connector",
|
|
123
144
|
fix: "Add it to 'connectors/' or pass it to createSixb({ connectors }).",
|
|
124
145
|
},
|
|
146
|
+
"manage:aiUsage": {
|
|
147
|
+
universeKey: "manageableIds",
|
|
148
|
+
subject: "management surface",
|
|
149
|
+
fix: "Use can.manage(agent.usage).",
|
|
150
|
+
},
|
|
125
151
|
}
|
|
126
152
|
|
|
127
153
|
export const GRANT_KIND_KEYS = Object.keys(GRANT_KINDS) as readonly GrantKind[]
|
|
154
|
+
export const TARGETED_GRANT_KIND_KEYS = GRANT_KIND_KEYS.filter(
|
|
155
|
+
(kind): kind is TargetedGrantKind => kind !== "run:agent"
|
|
156
|
+
)
|
|
128
157
|
|
|
129
158
|
/** The grant kind a stored grant resolves to. */
|
|
159
|
+
export function grantKindOf(grant: AgentRunGrant): SingletonGrantKind
|
|
160
|
+
export function grantKindOf(grant: Exclude<GrantDefinition, AgentRunGrant>): TargetedGrantKind
|
|
161
|
+
export function grantKindOf(grant: GrantDefinition): GrantKind
|
|
130
162
|
export function grantKindOf(grant: GrantDefinition): GrantKind {
|
|
131
163
|
switch (grant.capability) {
|
|
132
164
|
case "access":
|
|
@@ -142,17 +174,32 @@ export function grantKindOf(grant: GrantDefinition): GrantKind {
|
|
|
142
174
|
case "run":
|
|
143
175
|
return `run:${grant.target}`
|
|
144
176
|
case "observe":
|
|
145
|
-
return
|
|
177
|
+
return `observe:${grant.target}`
|
|
146
178
|
case "manage":
|
|
147
|
-
return
|
|
179
|
+
return `manage:${grant.target}`
|
|
148
180
|
}
|
|
149
181
|
}
|
|
150
182
|
|
|
151
|
-
/**
|
|
152
|
-
export
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
183
|
+
/** Mutable grant index: booleans for singleton capabilities, id sets for selected resources. */
|
|
184
|
+
export type MutableGrantIndex = {
|
|
185
|
+
[TKind in GrantKind]: TKind extends SingletonGrantKind ? boolean : Set<string>
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function emptyGrantSets(): MutableGrantIndex {
|
|
189
|
+
return {
|
|
190
|
+
"access:application": new Set(),
|
|
191
|
+
"view:object": new Set(),
|
|
192
|
+
"view:dataset": new Set(),
|
|
193
|
+
"edit:object": new Set(),
|
|
194
|
+
"append:telemetry": new Set(),
|
|
195
|
+
"apply:action": new Set(),
|
|
196
|
+
"run:workflow": new Set(),
|
|
197
|
+
"run:sync": new Set(),
|
|
198
|
+
"run:pipeline": new Set(),
|
|
199
|
+
"run:agent": false,
|
|
200
|
+
"observe:logs": new Set(),
|
|
201
|
+
"observe:aiUsage": new Set(),
|
|
202
|
+
"manage:connector": new Set(),
|
|
203
|
+
"manage:aiUsage": new Set(),
|
|
156
204
|
}
|
|
157
|
-
return sets
|
|
158
205
|
}
|
|
@@ -2,19 +2,19 @@ import type { Principal } from "../auth/types"
|
|
|
2
2
|
import type { RoleDefinition, Selection } from "../security"
|
|
3
3
|
import {
|
|
4
4
|
emptyGrantSets,
|
|
5
|
-
GRANT_KIND_KEYS,
|
|
6
5
|
GRANT_KINDS,
|
|
7
6
|
type GrantUniverse,
|
|
8
7
|
grantKindOf,
|
|
8
|
+
TARGETED_GRANT_KIND_KEYS,
|
|
9
9
|
} from "./grant-kinds"
|
|
10
10
|
import type { AuthorizationContext, GrantIndex, ResolvedRole } from "./types"
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Resolve a role's grants once at startup.
|
|
14
14
|
*
|
|
15
15
|
* Broad grants (`every.object().except([...])`) expand against the registered
|
|
16
|
-
* universe; object-type grants also expand to subtypes.
|
|
17
|
-
*
|
|
16
|
+
* universe; object-type grants also expand to subtypes. Resource grants become
|
|
17
|
+
* id sets; the project Agent grant becomes a boolean.
|
|
18
18
|
* The per-kind universe and subtype rules come from the `GRANT_KINDS` table, so
|
|
19
19
|
* this loop never enumerates targets by hand.
|
|
20
20
|
*/
|
|
@@ -22,6 +22,10 @@ export function resolveRoleGrants(role: RoleDefinition, universe: GrantUniverse)
|
|
|
22
22
|
const grants = emptyGrantSets()
|
|
23
23
|
|
|
24
24
|
for (const grant of role.grants) {
|
|
25
|
+
if (grant.capability === "run" && grant.target === "agent") {
|
|
26
|
+
grants["run:agent"] = true
|
|
27
|
+
continue
|
|
28
|
+
}
|
|
25
29
|
const kind = grantKindOf(grant)
|
|
26
30
|
const spec = GRANT_KINDS[kind]
|
|
27
31
|
expandSelection(
|
|
@@ -84,7 +88,10 @@ export function resolveAuthorizationContext(input: {
|
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
roleIds.push(role.id)
|
|
87
|
-
|
|
91
|
+
if (role.grants["run:agent"]) {
|
|
92
|
+
grants["run:agent"] = true
|
|
93
|
+
}
|
|
94
|
+
for (const kind of TARGETED_GRANT_KIND_KEYS) {
|
|
88
95
|
for (const id of role.grants[kind]) {
|
|
89
96
|
grants[kind].add(id)
|
|
90
97
|
}
|
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type { Principal } from "../auth/types"
|
|
11
|
-
import { emptyGrantSets, type GrantKind } from "./grant-kinds"
|
|
11
|
+
import { emptyGrantSets, type GrantKind, type SingletonGrantKind } from "./grant-kinds"
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Grants
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* Grants keyed by kind (`view:object`, `run:sync`, …). Resource selections resolve
|
|
15
|
+
* to id sets; project-wide singleton capabilities resolve to booleans.
|
|
16
|
+
* Broad grants and object subtypes are already expanded. Keyed by `GrantKind`
|
|
17
17
|
* so a new grant family adds one key, not a new bucket every consumer must
|
|
18
18
|
* learn.
|
|
19
19
|
*/
|
|
20
|
-
export type GrantIndex = Readonly<
|
|
20
|
+
export type GrantIndex = Readonly<{
|
|
21
|
+
[TKind in GrantKind]: TKind extends SingletonGrantKind ? boolean : ReadonlySet<string>
|
|
22
|
+
}>
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
25
|
* A grant index that grants nothing, as the base for a hand-built context — typically in tests.
|
|
@@ -10,7 +10,6 @@ import { readdir } from "node:fs/promises"
|
|
|
10
10
|
import { join, relative } from "node:path"
|
|
11
11
|
import { pathToFileURL } from "node:url"
|
|
12
12
|
import { isActionDefinition } from "../actions"
|
|
13
|
-
import { isAgentDefinition } from "../agents"
|
|
14
13
|
import { isConnectorDefinition } from "../connectors"
|
|
15
14
|
import { isDatasetDefinition } from "../datasets"
|
|
16
15
|
import type { OntologyDocumentInput, OntologySource } from "../ontology/registry"
|
|
@@ -73,7 +72,6 @@ export async function discoverOntologySources(
|
|
|
73
72
|
|
|
74
73
|
type DiscoveryModuleKind =
|
|
75
74
|
| "action"
|
|
76
|
-
| "agent"
|
|
77
75
|
| "connector"
|
|
78
76
|
| "dataset"
|
|
79
77
|
| "group"
|
|
@@ -138,7 +136,6 @@ const definitionDiscoveryRegistry = {
|
|
|
138
136
|
kind: "membershipPolicy",
|
|
139
137
|
isDefinition: isMembershipPolicyDefinition,
|
|
140
138
|
},
|
|
141
|
-
agents: { directory: ["agents"], kind: "agent", isDefinition: isAgentDefinition },
|
|
142
139
|
} as const satisfies Record<string, DefinitionDiscoveryFamily<unknown>>
|
|
143
140
|
|
|
144
141
|
type DefinitionFromFamily<TFamily> =
|
|
@@ -15,8 +15,10 @@ export interface SixbRunIdentityByKind {
|
|
|
15
15
|
}
|
|
16
16
|
readonly agent: {
|
|
17
17
|
readonly runId: string
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
} & (
|
|
19
|
+
| { readonly threadId: string; readonly parentRunId?: never }
|
|
20
|
+
| { readonly parentRunId: string; readonly threadId?: never }
|
|
21
|
+
)
|
|
20
22
|
readonly pipeline: {
|
|
21
23
|
readonly runId: string
|
|
22
24
|
readonly pipelineId: string
|
package/src/errors/catalog.ts
CHANGED
|
@@ -18,6 +18,14 @@ export const SIXB_ERROR_DEFINITIONS = {
|
|
|
18
18
|
publicMessage: "Agent execution failed.",
|
|
19
19
|
retryable: false,
|
|
20
20
|
},
|
|
21
|
+
"ai.usage_limit_exceeded": {
|
|
22
|
+
publicMessage: "AI usage limit exceeded.",
|
|
23
|
+
retryable: false,
|
|
24
|
+
},
|
|
25
|
+
"ai.usage_limit_unavailable": {
|
|
26
|
+
publicMessage: "AI usage limit could not be evaluated.",
|
|
27
|
+
retryable: true,
|
|
28
|
+
},
|
|
21
29
|
"connector.adapter_invalid": {
|
|
22
30
|
publicMessage: "Connector adapter returned an invalid result.",
|
|
23
31
|
retryable: false,
|
package/src/execution/agent.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { agentServiceAccountId } from "../agents/authority"
|
|
2
|
-
import type { AuthorizationContext } from "../authorization"
|
|
1
|
+
import { type AgentExecutionAuthorization, agentServiceAccountId } from "../agents/authority"
|
|
3
2
|
import type { OntologySource } from "../ontology"
|
|
4
3
|
import { isBoundSixb, type Sixb } from "../runtime/sixb"
|
|
5
4
|
import type { CreateExecutionInput, ExecutionRecord } from "../storage/executions"
|
|
6
5
|
import { ExecutionStorageError } from "../storage/executions"
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
|
|
7
|
+
export { ensureExecutionRecord } from "./durable"
|
|
8
|
+
|
|
9
|
+
import { createAgentRuntimeAuthorization, getAuthorizationRef } from "./authorization"
|
|
10
|
+
import type {
|
|
11
|
+
AuthorizablePrincipal,
|
|
12
|
+
ExecutionContext,
|
|
13
|
+
ExecutionScope,
|
|
14
|
+
RuntimeAuthorization,
|
|
15
|
+
} from "./types"
|
|
9
16
|
|
|
10
17
|
/** Minimal host boundary required by agent workers. */
|
|
11
18
|
export interface AgentExecutionHost {
|
|
@@ -13,15 +20,24 @@ export interface AgentExecutionHost {
|
|
|
13
20
|
withScope(scope: ExecutionScope): object
|
|
14
21
|
}
|
|
15
22
|
|
|
23
|
+
/** Whether a conversational Agent run can durably restore this request authority without widening it. */
|
|
24
|
+
export function canInheritAgentRequestAuthorization(authorization: RuntimeAuthorization): boolean {
|
|
25
|
+
const ref = getAuthorizationRef(authorization)
|
|
26
|
+
return (
|
|
27
|
+
ref.type === "disabled" ||
|
|
28
|
+
(ref.type === "principal" && ref.principal.type === "user" && ref.credential !== undefined)
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
16
32
|
/** Build the immutable child execution owned by one direct or Workflow Agent run. */
|
|
17
33
|
export function createAgentExecutionRecord(input: {
|
|
18
34
|
readonly id: string
|
|
19
35
|
readonly parent: ExecutionRecord
|
|
20
|
-
readonly
|
|
36
|
+
readonly actorId: string
|
|
21
37
|
readonly runId: string
|
|
22
38
|
readonly principal: Extract<AuthorizablePrincipal, { readonly type: "serviceAccount" }>
|
|
23
39
|
}): CreateExecutionInput {
|
|
24
|
-
assertAgentPrincipal(input.
|
|
40
|
+
assertAgentPrincipal(input.actorId, input.principal)
|
|
25
41
|
return {
|
|
26
42
|
id: input.id,
|
|
27
43
|
projectId: input.parent.projectId,
|
|
@@ -38,14 +54,48 @@ export function createAgentExecutionRecord(input: {
|
|
|
38
54
|
}
|
|
39
55
|
}
|
|
40
56
|
|
|
57
|
+
/** Build an Agent execution that carries its parent's exact durable authority reference. */
|
|
58
|
+
export function createInheritedAgentExecutionRecord(input: {
|
|
59
|
+
readonly id: string
|
|
60
|
+
readonly parent: ExecutionRecord
|
|
61
|
+
readonly runId: string
|
|
62
|
+
}): CreateExecutionInput {
|
|
63
|
+
const authority = input.parent.authorizationRef
|
|
64
|
+
if (
|
|
65
|
+
authority.type !== "disabled" &&
|
|
66
|
+
!(
|
|
67
|
+
authority.type === "principal" &&
|
|
68
|
+
authority.principal.type === "user" &&
|
|
69
|
+
authority.credential !== undefined
|
|
70
|
+
)
|
|
71
|
+
) {
|
|
72
|
+
throw new ExecutionStorageError(
|
|
73
|
+
"invalid_input",
|
|
74
|
+
`[Sixb] Agent run '${input.runId}' requires inheritable user or auth-disabled authority.`
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
id: input.id,
|
|
80
|
+
projectId: input.parent.projectId,
|
|
81
|
+
...(input.parent.requestedBy === undefined
|
|
82
|
+
? {}
|
|
83
|
+
: { requestedBy: structuredClone(input.parent.requestedBy) }),
|
|
84
|
+
executor: { type: "agent", runId: input.runId },
|
|
85
|
+
source: { type: "execution", executionId: input.parent.id },
|
|
86
|
+
correlationId: input.parent.correlationId,
|
|
87
|
+
authorizationRef: structuredClone(authority),
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
41
91
|
/** Bind a worker to the immutable execution already owned by its durable Agent run. */
|
|
42
92
|
export function bindDurableAgentExecution(
|
|
43
93
|
host: AgentExecutionHost,
|
|
44
94
|
input: {
|
|
45
95
|
readonly execution: ExecutionRecord
|
|
46
|
-
readonly
|
|
96
|
+
readonly actorId?: string
|
|
47
97
|
readonly runId: string
|
|
48
|
-
readonly authorization:
|
|
98
|
+
readonly authorization: AgentExecutionAuthorization
|
|
49
99
|
}
|
|
50
100
|
): Sixb<readonly OntologySource[]> {
|
|
51
101
|
const scope = restoreAgentExecutionScope(input)
|
|
@@ -59,9 +109,9 @@ export function bindDurableAgentExecution(
|
|
|
59
109
|
/** Restore one provider-validated Agent execution with its currently resolved grants. */
|
|
60
110
|
export function restoreAgentExecutionScope(input: {
|
|
61
111
|
readonly execution: ExecutionRecord
|
|
62
|
-
readonly
|
|
112
|
+
readonly actorId?: string
|
|
63
113
|
readonly runId: string
|
|
64
|
-
readonly authorization:
|
|
114
|
+
readonly authorization: AgentExecutionAuthorization
|
|
65
115
|
}): ExecutionScope {
|
|
66
116
|
assertAgentExecutionRecord(input)
|
|
67
117
|
const context: ExecutionContext = Object.freeze({
|
|
@@ -70,7 +120,11 @@ export function restoreAgentExecutionScope(input: {
|
|
|
70
120
|
...(input.execution.requestedBy === undefined
|
|
71
121
|
? {}
|
|
72
122
|
: { requestedBy: Object.freeze(structuredClone(input.execution.requestedBy)) }),
|
|
73
|
-
executor: Object.freeze({
|
|
123
|
+
executor: Object.freeze({
|
|
124
|
+
type: "agent",
|
|
125
|
+
...(input.actorId === undefined ? {} : { actorId: input.actorId }),
|
|
126
|
+
runId: input.runId,
|
|
127
|
+
}),
|
|
74
128
|
source: Object.freeze(structuredClone(input.execution.source)),
|
|
75
129
|
correlationId: input.execution.correlationId,
|
|
76
130
|
})
|
|
@@ -78,10 +132,20 @@ export function restoreAgentExecutionScope(input: {
|
|
|
78
132
|
execution: context,
|
|
79
133
|
authorization: createAgentRuntimeAuthorization({
|
|
80
134
|
projectId: input.execution.projectId,
|
|
81
|
-
context: input.authorization,
|
|
82
135
|
executionId: input.execution.id,
|
|
83
|
-
|
|
136
|
+
...(input.actorId === undefined ? {} : { actorId: input.actorId }),
|
|
84
137
|
runId: input.runId,
|
|
138
|
+
authority:
|
|
139
|
+
input.authorization.type === "principal"
|
|
140
|
+
? {
|
|
141
|
+
type: "principal",
|
|
142
|
+
context: input.authorization.context,
|
|
143
|
+
...(input.execution.authorizationRef.type === "principal" &&
|
|
144
|
+
input.execution.authorizationRef.credential !== undefined
|
|
145
|
+
? { credential: input.execution.authorizationRef.credential }
|
|
146
|
+
: {}),
|
|
147
|
+
}
|
|
148
|
+
: { type: "disabled" },
|
|
85
149
|
}),
|
|
86
150
|
})
|
|
87
151
|
}
|
|
@@ -89,35 +153,78 @@ export function restoreAgentExecutionScope(input: {
|
|
|
89
153
|
/** Validate that a durable record belongs to the exact resolved Agent execution. */
|
|
90
154
|
export function assertAgentExecutionRecord(input: {
|
|
91
155
|
readonly execution: ExecutionRecord
|
|
92
|
-
readonly
|
|
156
|
+
readonly actorId?: string
|
|
93
157
|
readonly runId: string
|
|
94
|
-
readonly authorization:
|
|
158
|
+
readonly authorization: AgentExecutionAuthorization
|
|
95
159
|
}): void {
|
|
96
160
|
const authority = input.execution.authorizationRef
|
|
97
161
|
if (
|
|
98
162
|
input.execution.executor.type !== "agent" ||
|
|
99
163
|
input.execution.executor.runId !== input.runId ||
|
|
100
|
-
input.execution.source.type !== "execution"
|
|
164
|
+
input.execution.source.type !== "execution"
|
|
165
|
+
) {
|
|
166
|
+
invalidAgentExecution(input.execution.id, input.runId)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (
|
|
170
|
+
input.authorization.type === "disabled" ||
|
|
171
|
+
input.authorization.context.principal.type === "user"
|
|
172
|
+
) {
|
|
173
|
+
assertInheritedAgentAuthority(input.execution, input.runId, input.authorization)
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (
|
|
178
|
+
input.authorization.type !== "principal" ||
|
|
101
179
|
authority.type !== "principal" ||
|
|
102
180
|
authority.principal.type !== "serviceAccount" ||
|
|
103
|
-
input.authorization.principal.type !== "serviceAccount" ||
|
|
104
|
-
authority.principal.id !== input.authorization.principal.id ||
|
|
181
|
+
input.authorization.context.principal.type !== "serviceAccount" ||
|
|
182
|
+
authority.principal.id !== input.authorization.context.principal.id ||
|
|
105
183
|
authority.credential !== undefined
|
|
106
184
|
) {
|
|
107
185
|
invalidAgentExecution(input.execution.id, input.runId)
|
|
108
186
|
}
|
|
109
|
-
|
|
187
|
+
if (input.actorId === undefined) {
|
|
188
|
+
invalidAgentExecution(input.execution.id, input.runId)
|
|
189
|
+
}
|
|
190
|
+
assertAgentPrincipal(input.actorId, authority.principal)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function assertInheritedAgentAuthority(
|
|
194
|
+
execution: ExecutionRecord,
|
|
195
|
+
runId: string,
|
|
196
|
+
authorization: AgentExecutionAuthorization
|
|
197
|
+
): void {
|
|
198
|
+
const authority = execution.authorizationRef
|
|
199
|
+
if (authorization.type === "disabled") {
|
|
200
|
+
if (authority.type !== "disabled") invalidAgentExecution(execution.id, runId)
|
|
201
|
+
return
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const principal = authorization.context.principal
|
|
205
|
+
if (
|
|
206
|
+
authority.type !== "principal" ||
|
|
207
|
+
authority.principal.type !== "user" ||
|
|
208
|
+
principal.type !== "user" ||
|
|
209
|
+
authority.principal.id !== principal.id ||
|
|
210
|
+
authority.credential === undefined ||
|
|
211
|
+
(authority.credential.type === "session"
|
|
212
|
+
? authorization.context.sessionId !== authority.credential.id
|
|
213
|
+
: authorization.context.sessionId !== undefined)
|
|
214
|
+
) {
|
|
215
|
+
invalidAgentExecution(execution.id, runId)
|
|
216
|
+
}
|
|
110
217
|
}
|
|
111
218
|
|
|
112
219
|
function assertAgentPrincipal(
|
|
113
|
-
|
|
220
|
+
actorId: string,
|
|
114
221
|
principal: Extract<AuthorizablePrincipal, { readonly type: "serviceAccount" }>
|
|
115
222
|
): void {
|
|
116
|
-
const expectedId = agentServiceAccountId(
|
|
223
|
+
const expectedId = agentServiceAccountId(actorId)
|
|
117
224
|
if (principal.id !== expectedId) {
|
|
118
225
|
throw new ExecutionStorageError(
|
|
119
226
|
"invalid_input",
|
|
120
|
-
`[Sixb] Agent '${
|
|
227
|
+
`[Sixb] Agent '${actorId}' execution authority must reference service account '${expectedId}'.`
|
|
121
228
|
)
|
|
122
229
|
}
|
|
123
230
|
}
|