@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
package/src/agents/types.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { LanguageModelV4, LanguageModelV4CallOptions } from "@ai-sdk/provider"
|
|
2
1
|
import type { BlobBody, FileRef } from "../blob-storage"
|
|
3
2
|
import type { ConnectorRuntime } from "../connectors"
|
|
4
3
|
import type { JsonPrimitive, JsonValue, ReadonlyJsonValue } from "../json"
|
|
5
4
|
import type { Logger } from "../logging"
|
|
5
|
+
import { type LanguageModelRef, MODEL_REASONING_LEVELS, type ModelReasoning } from "../models"
|
|
6
6
|
import type { InferSchema } from "../ontology/inference"
|
|
7
7
|
import type { Schema } from "../ontology/types"
|
|
8
|
-
import type { GroupDefinition } from "../security"
|
|
9
8
|
|
|
10
9
|
export type {
|
|
11
10
|
AgentContextEntryInput,
|
|
@@ -14,41 +13,30 @@ export type {
|
|
|
14
13
|
AgentContextPart,
|
|
15
14
|
} from "./context"
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"none",
|
|
22
|
-
"minimal",
|
|
23
|
-
"low",
|
|
24
|
-
"medium",
|
|
25
|
-
"high",
|
|
26
|
-
"xhigh",
|
|
27
|
-
] as const satisfies readonly AgentReasoningLevel[]
|
|
28
|
-
|
|
29
|
-
export interface AgentContextConfig {
|
|
30
|
-
/** Override the provider context-window size inferred by the agent worker. */
|
|
31
|
-
readonly windowTokens?: number
|
|
32
|
-
/** Tokens reserved for the next response and compaction work. */
|
|
33
|
-
readonly reserveTokens?: number
|
|
34
|
-
/** Approximate recent-message budget retained verbatim after compaction. */
|
|
35
|
-
readonly keepRecentTokens?: number
|
|
16
|
+
/** Public capability reference used by security grants such as `can.run(agent)`. */
|
|
17
|
+
export interface AgentReference {
|
|
18
|
+
readonly kind: "agent"
|
|
19
|
+
readonly usage: AgentUsageReference
|
|
36
20
|
}
|
|
37
21
|
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
readonly context?: AgentContextConfig
|
|
48
|
-
/** Automatic provider prompt caching. Defaults to `auto`; use `off` to opt out. */
|
|
49
|
-
readonly caching?: "auto" | "off"
|
|
22
|
+
/** Project-wide AI accounting and limit capability, independent of permission to run the Agent. */
|
|
23
|
+
export interface AgentUsageReference {
|
|
24
|
+
readonly kind: "aiUsage"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Public metadata for the project's conversational Agent. */
|
|
28
|
+
export interface AgentDescriptor {
|
|
29
|
+
readonly name: string
|
|
30
|
+
readonly model: LanguageModelRef
|
|
50
31
|
}
|
|
51
32
|
|
|
33
|
+
export type AgentReasoning = ModelReasoning
|
|
34
|
+
|
|
35
|
+
/** @deprecated Use {@link AgentReasoning}. */
|
|
36
|
+
export type AgentReasoningLevel = AgentReasoning
|
|
37
|
+
|
|
38
|
+
export const AGENT_REASONING_LEVELS = MODEL_REASONING_LEVELS
|
|
39
|
+
|
|
52
40
|
type Simplify<T> = { [K in keyof T]: T[K] } & {}
|
|
53
41
|
type JsonifyAgentToolInput<T> = unknown extends T
|
|
54
42
|
? ReadonlyJsonValue
|
|
@@ -73,12 +61,24 @@ export type InferAgentToolInputSchema<TInput extends AgentToolInputSchema> =
|
|
|
73
61
|
readonly [K in keyof TInput]: JsonifyAgentToolInput<InferSchema<TInput[K]>>
|
|
74
62
|
}>
|
|
75
63
|
|
|
76
|
-
/** Identifies the
|
|
77
|
-
export
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
64
|
+
/** Identifies the conversational, workflow, or child Agent execution that invoked a tool. */
|
|
65
|
+
export type AgentToolRunInfo =
|
|
66
|
+
| {
|
|
67
|
+
readonly kind: "conversation"
|
|
68
|
+
readonly id: string
|
|
69
|
+
readonly threadId: string
|
|
70
|
+
}
|
|
71
|
+
| {
|
|
72
|
+
readonly kind: "subagent"
|
|
73
|
+
readonly id: string
|
|
74
|
+
readonly parentRunId: string
|
|
75
|
+
}
|
|
76
|
+
| {
|
|
77
|
+
readonly kind: "workflow"
|
|
78
|
+
readonly id: string
|
|
79
|
+
readonly workflowId: string
|
|
80
|
+
readonly stepId: string
|
|
81
|
+
}
|
|
82
82
|
|
|
83
83
|
/** Input accepted by the run-scoped artifact publisher exposed to agent tools. */
|
|
84
84
|
export interface AgentToolArtifactPutInput {
|
|
@@ -183,45 +183,3 @@ export interface AgentToolInputBuilder<TName extends string> {
|
|
|
183
183
|
export interface AgentToolDescriptionBuilder<TName extends string> {
|
|
184
184
|
description(description: string): AgentToolInputBuilder<TName>
|
|
185
185
|
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Declarative config accepted by {@link defineAgent}.
|
|
189
|
-
*
|
|
190
|
-
* Every field is a static value. `instructions` is a plain string; widening it to
|
|
191
|
-
* `string | (ctx) => string` later would be backwards-compatible.
|
|
192
|
-
*/
|
|
193
|
-
export interface DefineAgentConfig {
|
|
194
|
-
readonly name: string
|
|
195
|
-
readonly description?: string
|
|
196
|
-
readonly model: LanguageModelV4
|
|
197
|
-
readonly reasoning?: AgentReasoningLevel
|
|
198
|
-
readonly providerOptions?: LanguageModelV4CallOptions["providerOptions"]
|
|
199
|
-
readonly instructions: string
|
|
200
|
-
readonly groups?: readonly GroupDefinition[]
|
|
201
|
-
/** Reusable tools this agent is explicitly allowed to call. */
|
|
202
|
-
readonly tools?: readonly AgentToolDefinition[]
|
|
203
|
-
readonly loop?: AgentLoopConfig
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Agent definition registered with Sixb.
|
|
208
|
-
*
|
|
209
|
-
* Definitions are safe to export from `agents/` modules; the runtime loads and
|
|
210
|
-
* registers them. The agent worker runs them as streaming turns. The `model` is an
|
|
211
|
-
* AI SDK language model instance and is therefore not serialisable — the worker
|
|
212
|
-
* resolves a definition from its own discovery rather than over the wire.
|
|
213
|
-
*/
|
|
214
|
-
export interface AgentDefinition<TId extends string = string> {
|
|
215
|
-
readonly kind: "agent"
|
|
216
|
-
readonly id: TId
|
|
217
|
-
readonly name: string
|
|
218
|
-
readonly description?: string
|
|
219
|
-
readonly model: LanguageModelV4
|
|
220
|
-
readonly reasoning?: AgentReasoningLevel
|
|
221
|
-
readonly providerOptions?: LanguageModelV4CallOptions["providerOptions"]
|
|
222
|
-
readonly instructions: string
|
|
223
|
-
readonly groupIds: readonly string[]
|
|
224
|
-
/** Selected tool definitions, normalized to an empty array when omitted. */
|
|
225
|
-
readonly tools: readonly AgentToolDefinition[]
|
|
226
|
-
readonly loop?: AgentLoopConfig
|
|
227
|
-
}
|
package/src/agents/validation.ts
CHANGED
|
@@ -6,18 +6,9 @@ import {
|
|
|
6
6
|
type ValueType,
|
|
7
7
|
validateSchemaValue,
|
|
8
8
|
} from "../ontology"
|
|
9
|
-
import type { GroupDefinition
|
|
9
|
+
import type { GroupDefinition } from "../security"
|
|
10
10
|
import { AgentDefinitionError } from "./errors"
|
|
11
|
-
import {
|
|
12
|
-
AGENT_REASONING_LEVELS,
|
|
13
|
-
type AgentContextConfig,
|
|
14
|
-
type AgentDefinition,
|
|
15
|
-
type AgentLoopConfig,
|
|
16
|
-
type AgentReasoningLevel,
|
|
17
|
-
type AgentToolDefinition,
|
|
18
|
-
type AgentToolInputSchema,
|
|
19
|
-
type DefineAgentConfig,
|
|
20
|
-
} from "./types"
|
|
11
|
+
import type { AgentToolDefinition, AgentToolInputSchema } from "./types"
|
|
21
12
|
|
|
22
13
|
const AGENT_TOOL_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]{0,63}$/
|
|
23
14
|
const AGENT_TOOL_PRIMITIVE_SCHEMAS = new Set([
|
|
@@ -32,7 +23,13 @@ const AGENT_TOOL_PRIMITIVE_SCHEMAS = new Set([
|
|
|
32
23
|
"fileRef",
|
|
33
24
|
])
|
|
34
25
|
|
|
35
|
-
export const AGENT_RESERVED_TOOL_NAMES = [
|
|
26
|
+
export const AGENT_RESERVED_TOOL_NAMES = [
|
|
27
|
+
"bash",
|
|
28
|
+
"read",
|
|
29
|
+
"view_file",
|
|
30
|
+
"spawn_agent",
|
|
31
|
+
"wait_agent",
|
|
32
|
+
] as const
|
|
36
33
|
|
|
37
34
|
export function assertNonEmpty(value: string, field: string): void {
|
|
38
35
|
if (!value.trim()) {
|
|
@@ -40,20 +37,6 @@ export function assertNonEmpty(value: string, field: string): void {
|
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
|
|
43
|
-
export function isAgentDefinition(value: unknown): value is AgentDefinition {
|
|
44
|
-
return (
|
|
45
|
-
isRecord(value) &&
|
|
46
|
-
value.kind === "agent" &&
|
|
47
|
-
typeof value.id === "string" &&
|
|
48
|
-
typeof value.name === "string" &&
|
|
49
|
-
typeof value.instructions === "string" &&
|
|
50
|
-
(value.reasoning === undefined || isAgentReasoningLevel(value.reasoning)) &&
|
|
51
|
-
(value.providerOptions === undefined || isProviderOptions(value.providerOptions)) &&
|
|
52
|
-
Array.isArray(value.groupIds) &&
|
|
53
|
-
isAgentToolDefinitionArray(value.tools)
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
40
|
export function isAgentToolDefinition(value: unknown): value is AgentToolDefinition {
|
|
58
41
|
return (
|
|
59
42
|
isRecord(value) &&
|
|
@@ -143,108 +126,6 @@ export function validateAndNormalizeAgentToolInput(
|
|
|
143
126
|
)
|
|
144
127
|
}
|
|
145
128
|
|
|
146
|
-
/** Revalidate and lock tool definitions supplied directly to the runtime. */
|
|
147
|
-
export function validateAgentToolsAtStartup(agents: readonly AgentDefinition[]): void {
|
|
148
|
-
for (const agent of agents) {
|
|
149
|
-
if (!isAgentDefinition(agent)) {
|
|
150
|
-
throw new AgentDefinitionError("[Sixb] Agents must contain only valid agent definitions.")
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
assertValidAgentToolDefinitions(agent.id, agent.tools)
|
|
154
|
-
for (const tool of agent.tools) {
|
|
155
|
-
deepFreeze(tool.input)
|
|
156
|
-
Object.freeze(tool)
|
|
157
|
-
}
|
|
158
|
-
Object.freeze(agent.tools)
|
|
159
|
-
Object.freeze(agent)
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export function resolveAgentLoopConfig(
|
|
164
|
-
loop: AgentLoopConfig | undefined
|
|
165
|
-
): AgentLoopConfig | undefined {
|
|
166
|
-
if (loop === undefined) return undefined
|
|
167
|
-
|
|
168
|
-
const maxSteps = loop?.stopWhen?.maxSteps
|
|
169
|
-
if (maxSteps !== undefined && (!Number.isSafeInteger(maxSteps) || maxSteps <= 0)) {
|
|
170
|
-
throw new AgentDefinitionError(
|
|
171
|
-
"[Sixb] Agent loop.stopWhen.maxSteps must be a positive safe integer."
|
|
172
|
-
)
|
|
173
|
-
}
|
|
174
|
-
if (loop.caching !== undefined && loop.caching !== "auto" && loop.caching !== "off") {
|
|
175
|
-
throw new AgentDefinitionError("[Sixb] Agent loop.caching must be 'auto' or 'off'.")
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const context = loop.context ? snapshotAgentContextConfig(loop.context) : undefined
|
|
179
|
-
return Object.freeze({
|
|
180
|
-
...(loop.stopWhen === undefined
|
|
181
|
-
? {}
|
|
182
|
-
: { stopWhen: Object.freeze({ ...(maxSteps === undefined ? {} : { maxSteps }) }) }),
|
|
183
|
-
...(context === undefined ? {} : { context }),
|
|
184
|
-
...(loop.caching === undefined ? {} : { caching: loop.caching }),
|
|
185
|
-
})
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function snapshotAgentContextConfig(context: AgentContextConfig): AgentContextConfig {
|
|
189
|
-
const snapshot: Record<string, number> = {}
|
|
190
|
-
for (const field of ["windowTokens", "reserveTokens", "keepRecentTokens"] as const) {
|
|
191
|
-
const value = context[field]
|
|
192
|
-
if (value === undefined) continue
|
|
193
|
-
assertPositiveSafeInteger(value, field)
|
|
194
|
-
snapshot[field] = value
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return Object.freeze(snapshot)
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
function assertPositiveSafeInteger(value: unknown, field: string): asserts value is number {
|
|
201
|
-
if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) {
|
|
202
|
-
throw new AgentDefinitionError(
|
|
203
|
-
`[Sixb] Agent loop.context.${field} must be a positive safe integer.`
|
|
204
|
-
)
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
export function assertValidReasoningLevel(reasoning: AgentReasoningLevel | undefined): void {
|
|
209
|
-
if (reasoning === undefined) {
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
if (!isAgentReasoningLevel(reasoning)) {
|
|
213
|
-
throw new AgentDefinitionError(
|
|
214
|
-
`[Sixb] Agent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}.`
|
|
215
|
-
)
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
export function assertValidProviderOptions(
|
|
220
|
-
providerOptions: DefineAgentConfig["providerOptions"]
|
|
221
|
-
): void {
|
|
222
|
-
if (providerOptions === undefined) {
|
|
223
|
-
return
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
const reason = getInvalidJsonValueReason(providerOptions, "providerOptions")
|
|
227
|
-
if (!isRecord(providerOptions) || reason) {
|
|
228
|
-
throw new AgentDefinitionError(
|
|
229
|
-
`[Sixb] Agent providerOptions must be a provider-keyed JSON object${reason ? `; ${reason}` : "."}`
|
|
230
|
-
)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
for (const [provider, options] of Object.entries(providerOptions)) {
|
|
234
|
-
if (!provider.trim()) {
|
|
235
|
-
throw new AgentDefinitionError(
|
|
236
|
-
"[Sixb] Agent providerOptions provider names must not be empty."
|
|
237
|
-
)
|
|
238
|
-
}
|
|
239
|
-
const optionsReason = getInvalidJsonValueReason(options, `providerOptions.${provider}`)
|
|
240
|
-
if (!isRecord(options) || optionsReason) {
|
|
241
|
-
throw new AgentDefinitionError(
|
|
242
|
-
`[Sixb] Agent providerOptions.${provider} must be a JSON object${optionsReason ? `; ${optionsReason}` : "."}`
|
|
243
|
-
)
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
129
|
export function groupIdsFromDefinitions(
|
|
249
130
|
agentId: string,
|
|
250
131
|
groups: readonly GroupDefinition[] | undefined
|
|
@@ -264,22 +145,6 @@ export function groupIdsFromDefinitions(
|
|
|
264
145
|
return Object.freeze(groupIds)
|
|
265
146
|
}
|
|
266
147
|
|
|
267
|
-
export function validateAgentGroupReferences(
|
|
268
|
-
agents: readonly AgentDefinition[],
|
|
269
|
-
security: SecurityDefinitionCatalog
|
|
270
|
-
): void {
|
|
271
|
-
for (const agent of agents) {
|
|
272
|
-
assertNoDuplicateGroupIds(agent.id, agent.groupIds)
|
|
273
|
-
for (const groupId of agent.groupIds) {
|
|
274
|
-
if (!security.getGroupById(groupId)) {
|
|
275
|
-
throw new AgentDefinitionError(
|
|
276
|
-
`[Sixb] Agent '${agent.id}' groups references unknown group '${groupId}'. Add it to 'security/groups/' or pass it to createSixb({ groups }).`
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
148
|
function assertNoDuplicateGroupIds(agentId: string, groupIds: readonly string[]): void {
|
|
284
149
|
const seen = new Set<string>()
|
|
285
150
|
for (const groupId of groupIds) {
|
|
@@ -293,24 +158,6 @@ function assertNoDuplicateGroupIds(agentId: string, groupIds: readonly string[])
|
|
|
293
158
|
}
|
|
294
159
|
}
|
|
295
160
|
|
|
296
|
-
function isAgentReasoningLevel(value: unknown): value is AgentReasoningLevel {
|
|
297
|
-
return typeof value === "string" && (AGENT_REASONING_LEVELS as readonly string[]).includes(value)
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
function isProviderOptions(
|
|
301
|
-
value: unknown
|
|
302
|
-
): value is NonNullable<DefineAgentConfig["providerOptions"]> {
|
|
303
|
-
if (!isRecord(value) || getInvalidJsonValueReason(value) !== undefined) {
|
|
304
|
-
return false
|
|
305
|
-
}
|
|
306
|
-
return Object.entries(value).every(
|
|
307
|
-
([provider, options]) =>
|
|
308
|
-
provider.trim().length > 0 &&
|
|
309
|
-
isRecord(options) &&
|
|
310
|
-
getInvalidJsonValueReason(options) === undefined
|
|
311
|
-
)
|
|
312
|
-
}
|
|
313
|
-
|
|
314
161
|
function assertValidAgentToolSchema(
|
|
315
162
|
toolName: string,
|
|
316
163
|
schema: unknown,
|
|
@@ -391,38 +238,45 @@ function invalidAgentToolSchema(toolName: string, path: string): AgentDefinition
|
|
|
391
238
|
)
|
|
392
239
|
}
|
|
393
240
|
|
|
394
|
-
function isAgentToolDefinitionArray(value: unknown): value is readonly AgentToolDefinition[] {
|
|
395
|
-
if (!Array.isArray(value)) {
|
|
396
|
-
return false
|
|
397
|
-
}
|
|
398
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
399
|
-
if (!Object.hasOwn(value, index) || !isAgentToolDefinition(value[index])) {
|
|
400
|
-
return false
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
return true
|
|
404
|
-
}
|
|
405
|
-
|
|
406
241
|
export function assertValidAgentToolDefinitions(
|
|
407
242
|
agentId: string,
|
|
408
243
|
tools: readonly AgentToolDefinition[]
|
|
244
|
+
): void {
|
|
245
|
+
assertValidAgentToolDefinitionList(tools, {
|
|
246
|
+
invalidDefinitions: `[Sixb] Agent '${agentId}' tools must contain only agent tool definitions.`,
|
|
247
|
+
duplicateName: (name) =>
|
|
248
|
+
`[Sixb] Agent '${agentId}' tools contains duplicate tool name '${name}'.`,
|
|
249
|
+
})
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function assertValidProjectAgentToolDefinitions(
|
|
253
|
+
tools: readonly AgentToolDefinition[]
|
|
254
|
+
): void {
|
|
255
|
+
assertValidAgentToolDefinitionList(tools, {
|
|
256
|
+
invalidDefinitions: "[Sixb] Project tools must contain only agent tool definitions.",
|
|
257
|
+
duplicateName: (name) => `[Sixb] Project tools contain duplicate tool name '${name}'.`,
|
|
258
|
+
})
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function assertValidAgentToolDefinitionList(
|
|
262
|
+
tools: readonly AgentToolDefinition[],
|
|
263
|
+
messages: {
|
|
264
|
+
readonly invalidDefinitions: string
|
|
265
|
+
readonly duplicateName: (name: string) => string
|
|
266
|
+
}
|
|
409
267
|
): void {
|
|
410
268
|
const seen = new Set<string>()
|
|
411
269
|
for (let index = 0; index < tools.length; index += 1) {
|
|
412
270
|
const tool = tools[index]
|
|
413
271
|
if (!Object.hasOwn(tools, index) || !isAgentToolDefinition(tool)) {
|
|
414
|
-
throw new AgentDefinitionError(
|
|
415
|
-
`[Sixb] Agent '${agentId}' tools must contain only agent tool definitions.`
|
|
416
|
-
)
|
|
272
|
+
throw new AgentDefinitionError(messages.invalidDefinitions)
|
|
417
273
|
}
|
|
418
274
|
|
|
419
275
|
assertValidAgentToolName(tool.name)
|
|
420
276
|
assertValidAgentToolDescription(tool.name, tool.description)
|
|
421
277
|
assertValidAgentToolInput(tool.name, tool.input)
|
|
422
278
|
if (seen.has(tool.name)) {
|
|
423
|
-
throw new AgentDefinitionError(
|
|
424
|
-
`[Sixb] Agent '${agentId}' tools contains duplicate tool name '${tool.name}'.`
|
|
425
|
-
)
|
|
279
|
+
throw new AgentDefinitionError(messages.duplicateName(tool.name))
|
|
426
280
|
}
|
|
427
281
|
seen.add(tool.name)
|
|
428
282
|
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto"
|
|
2
|
+
import { assertAuthorized, assertRuntimeAuthorizationBound, isAllowed } from "../authorization"
|
|
3
|
+
import type { SixbRuntimeContext } from "../runtime/types"
|
|
4
|
+
import type { SecurityDefinitionCatalog } from "../security"
|
|
5
|
+
import type {
|
|
6
|
+
AiAccountingOverview,
|
|
7
|
+
AiLimitPolicy,
|
|
8
|
+
AiLimitPolicyStatus,
|
|
9
|
+
CreateAiLimitPolicyInput,
|
|
10
|
+
ListAiLimitPoliciesInput,
|
|
11
|
+
ListAiLimitPolicyStatusesInput,
|
|
12
|
+
ListAiModelCallAccountingInput,
|
|
13
|
+
ListAiModelCallAccountingResult,
|
|
14
|
+
ListAiModelCallGroupsInput,
|
|
15
|
+
ListAiModelCallGroupsResult,
|
|
16
|
+
QueryAiAccountingOverviewInput,
|
|
17
|
+
ServiceAccountStatus,
|
|
18
|
+
UpdateAiLimitPolicyInput,
|
|
19
|
+
UserStatus,
|
|
20
|
+
} from "../storage"
|
|
21
|
+
|
|
22
|
+
export type QueryAiUsageOverviewInput = Omit<QueryAiAccountingOverviewInput, "projectId">
|
|
23
|
+
export type ListAiUsageModelCallsInput = Omit<ListAiModelCallAccountingInput, "projectId">
|
|
24
|
+
export type ListAiUsageModelCallGroupsInput = Omit<ListAiModelCallGroupsInput, "projectId">
|
|
25
|
+
export type ListAiUsageLimitPoliciesInput = Omit<ListAiLimitPoliciesInput, "projectId">
|
|
26
|
+
export type ListAiUsageLimitStatusesInput = Omit<
|
|
27
|
+
ListAiLimitPolicyStatusesInput,
|
|
28
|
+
"projectId" | "existingGroupIds" | "at"
|
|
29
|
+
>
|
|
30
|
+
export type CreateAiUsageLimitPolicyInput = Omit<
|
|
31
|
+
CreateAiLimitPolicyInput,
|
|
32
|
+
"id" | "projectId" | "createdAt"
|
|
33
|
+
> & { readonly id?: string }
|
|
34
|
+
export type UpdateAiUsageLimitPolicyInput = Omit<
|
|
35
|
+
UpdateAiLimitPolicyInput,
|
|
36
|
+
"projectId" | "updatedAt"
|
|
37
|
+
>
|
|
38
|
+
|
|
39
|
+
export interface AiUsageLimitGroupOption {
|
|
40
|
+
readonly id: string
|
|
41
|
+
readonly label?: string
|
|
42
|
+
readonly description?: string
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface AiUsageLimitUserOption {
|
|
46
|
+
readonly id: string
|
|
47
|
+
readonly email: string
|
|
48
|
+
readonly displayName?: string
|
|
49
|
+
readonly status: UserStatus
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface AiUsageLimitServiceAccountOption {
|
|
53
|
+
readonly id: string
|
|
54
|
+
readonly name: string
|
|
55
|
+
readonly description?: string
|
|
56
|
+
readonly status: ServiceAccountStatus
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface AiUsageLimitSubjectOptions {
|
|
60
|
+
readonly groups: readonly AiUsageLimitGroupOption[]
|
|
61
|
+
readonly users: readonly AiUsageLimitUserOption[]
|
|
62
|
+
readonly serviceAccounts: readonly AiUsageLimitServiceAccountOption[]
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Project AI accounting and limit controls bound to one execution's authority. */
|
|
66
|
+
export interface AiUsageRuntime {
|
|
67
|
+
readonly accountingConfigured: boolean
|
|
68
|
+
readonly limitsConfigured: boolean
|
|
69
|
+
assertObservable(): void
|
|
70
|
+
assertManageable(): void
|
|
71
|
+
canManageLimits(): boolean
|
|
72
|
+
queryOverview(input: QueryAiUsageOverviewInput): Promise<AiAccountingOverview>
|
|
73
|
+
listModelCalls(input: ListAiUsageModelCallsInput): Promise<ListAiModelCallAccountingResult>
|
|
74
|
+
listModelCallGroups(input: ListAiUsageModelCallGroupsInput): Promise<ListAiModelCallGroupsResult>
|
|
75
|
+
listLimitPolicies(input?: ListAiUsageLimitPoliciesInput): Promise<readonly AiLimitPolicy[]>
|
|
76
|
+
listLimitStatuses(input?: ListAiUsageLimitStatusesInput): Promise<readonly AiLimitPolicyStatus[]>
|
|
77
|
+
listLimitSubjectOptions(): Promise<AiUsageLimitSubjectOptions>
|
|
78
|
+
createLimitPolicy(input: CreateAiUsageLimitPolicyInput): Promise<AiLimitPolicy>
|
|
79
|
+
updateLimitPolicy(input: UpdateAiUsageLimitPolicyInput): Promise<AiLimitPolicy>
|
|
80
|
+
deleteLimitPolicy(id: string): Promise<boolean>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function createAiUsageRuntime(
|
|
84
|
+
runtime: SixbRuntimeContext,
|
|
85
|
+
security: SecurityDefinitionCatalog
|
|
86
|
+
): AiUsageRuntime {
|
|
87
|
+
const assertObservable = () => assertAuthorized(runtime, { kind: "aiUsage.observe" })
|
|
88
|
+
const assertManageable = () => assertAuthorized(runtime, { kind: "aiUsage.manage" })
|
|
89
|
+
const assertPolicyReadable = () => {
|
|
90
|
+
const resolved = assertRuntimeAuthorizationBound(runtime)
|
|
91
|
+
if (
|
|
92
|
+
resolved.type === "principal" &&
|
|
93
|
+
!isAllowed(resolved.context, { kind: "aiUsage.observe" }) &&
|
|
94
|
+
!isAllowed(resolved.context, { kind: "aiUsage.manage" })
|
|
95
|
+
) {
|
|
96
|
+
assertObservable()
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const requireCosts = () => {
|
|
100
|
+
if (!runtime.storage.aiCosts) {
|
|
101
|
+
throw new Error("[Sixb] AI cost storage is not configured.")
|
|
102
|
+
}
|
|
103
|
+
return runtime.storage.aiCosts
|
|
104
|
+
}
|
|
105
|
+
const requireLimits = () => {
|
|
106
|
+
if (!runtime.storage.aiLimits) {
|
|
107
|
+
throw new Error("[Sixb] AI limit storage is not configured.")
|
|
108
|
+
}
|
|
109
|
+
return runtime.storage.aiLimits
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
accountingConfigured: runtime.storage.aiCosts !== undefined,
|
|
114
|
+
limitsConfigured: runtime.storage.aiLimits !== undefined,
|
|
115
|
+
assertObservable,
|
|
116
|
+
assertManageable,
|
|
117
|
+
canManageLimits: () => {
|
|
118
|
+
const resolved = assertRuntimeAuthorizationBound(runtime)
|
|
119
|
+
return (
|
|
120
|
+
resolved.type !== "principal" || isAllowed(resolved.context, { kind: "aiUsage.manage" })
|
|
121
|
+
)
|
|
122
|
+
},
|
|
123
|
+
queryOverview: (input) => {
|
|
124
|
+
assertObservable()
|
|
125
|
+
return requireCosts().queryProjectOverview({ ...input, projectId: runtime.projectId })
|
|
126
|
+
},
|
|
127
|
+
listModelCalls: (input) => {
|
|
128
|
+
assertObservable()
|
|
129
|
+
return requireCosts().listModelCalls({ ...input, projectId: runtime.projectId })
|
|
130
|
+
},
|
|
131
|
+
listModelCallGroups: (input) => {
|
|
132
|
+
assertObservable()
|
|
133
|
+
return requireCosts().listModelCallGroups({ ...input, projectId: runtime.projectId })
|
|
134
|
+
},
|
|
135
|
+
listLimitPolicies: (input = {}) => {
|
|
136
|
+
assertPolicyReadable()
|
|
137
|
+
return requireLimits().listPolicies({ ...input, projectId: runtime.projectId })
|
|
138
|
+
},
|
|
139
|
+
listLimitStatuses: (input = {}) => {
|
|
140
|
+
assertObservable()
|
|
141
|
+
return requireLimits().listPolicyStatuses({
|
|
142
|
+
...(input.includeDisabled === undefined ? {} : { includeDisabled: input.includeDisabled }),
|
|
143
|
+
projectId: runtime.projectId,
|
|
144
|
+
existingGroupIds: security.listGroups().map((group) => group.id),
|
|
145
|
+
})
|
|
146
|
+
},
|
|
147
|
+
listLimitSubjectOptions: async () => {
|
|
148
|
+
assertManageable()
|
|
149
|
+
const groups = security.listGroups().map((group) => ({
|
|
150
|
+
id: group.id,
|
|
151
|
+
...(group.label === undefined ? {} : { label: group.label }),
|
|
152
|
+
...(group.description === undefined ? {} : { description: group.description }),
|
|
153
|
+
}))
|
|
154
|
+
const auth = runtime.storage.auth
|
|
155
|
+
if (!auth) return { groups, users: [], serviceAccounts: [] }
|
|
156
|
+
|
|
157
|
+
const [users, serviceAccounts] = await Promise.all([
|
|
158
|
+
auth.users.list({ projectId: runtime.projectId, order: "asc" }),
|
|
159
|
+
auth.serviceAccounts.list({ projectId: runtime.projectId, order: "asc" }),
|
|
160
|
+
])
|
|
161
|
+
return {
|
|
162
|
+
groups,
|
|
163
|
+
users: users.users.map((user) => ({
|
|
164
|
+
id: user.id,
|
|
165
|
+
email: user.email,
|
|
166
|
+
...(user.displayName === undefined ? {} : { displayName: user.displayName }),
|
|
167
|
+
status: user.status,
|
|
168
|
+
})),
|
|
169
|
+
serviceAccounts: serviceAccounts.serviceAccounts.map((serviceAccount) => ({
|
|
170
|
+
id: serviceAccount.id,
|
|
171
|
+
name: serviceAccount.name,
|
|
172
|
+
...(serviceAccount.description === undefined
|
|
173
|
+
? {}
|
|
174
|
+
: { description: serviceAccount.description }),
|
|
175
|
+
status: serviceAccount.status,
|
|
176
|
+
})),
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
createLimitPolicy: (input) => {
|
|
180
|
+
assertManageable()
|
|
181
|
+
return requireLimits().createPolicy({
|
|
182
|
+
...input,
|
|
183
|
+
id: input.id ?? `ailim_${randomUUID()}`,
|
|
184
|
+
projectId: runtime.projectId,
|
|
185
|
+
})
|
|
186
|
+
},
|
|
187
|
+
updateLimitPolicy: (input) => {
|
|
188
|
+
assertManageable()
|
|
189
|
+
return requireLimits().updatePolicy({ ...input, projectId: runtime.projectId })
|
|
190
|
+
},
|
|
191
|
+
deleteLimitPolicy: (id) => {
|
|
192
|
+
assertManageable()
|
|
193
|
+
return requireLimits().deletePolicy({ id, projectId: runtime.projectId })
|
|
194
|
+
},
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
AiUsageLimitGroupOption,
|
|
3
|
+
AiUsageLimitServiceAccountOption,
|
|
4
|
+
AiUsageLimitSubjectOptions,
|
|
5
|
+
AiUsageLimitUserOption,
|
|
6
|
+
AiUsageRuntime,
|
|
7
|
+
CreateAiUsageLimitPolicyInput,
|
|
8
|
+
ListAiUsageLimitPoliciesInput,
|
|
9
|
+
ListAiUsageLimitStatusesInput,
|
|
10
|
+
ListAiUsageModelCallGroupsInput,
|
|
11
|
+
ListAiUsageModelCallsInput,
|
|
12
|
+
QueryAiUsageOverviewInput,
|
|
13
|
+
UpdateAiUsageLimitPolicyInput,
|
|
14
|
+
} from "./execution"
|
|
15
|
+
export { createAiUsageRuntime } from "./execution"
|