@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/security/types.ts
CHANGED
|
@@ -86,7 +86,7 @@ export interface ApplyGrant {
|
|
|
86
86
|
readonly selection: Selection
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
export type RunGrantTarget = "workflow" | "sync" | "pipeline"
|
|
89
|
+
export type RunGrantTarget = "workflow" | "sync" | "pipeline"
|
|
90
90
|
|
|
91
91
|
export interface RunGrant<TTarget extends RunGrantTarget = RunGrantTarget> {
|
|
92
92
|
readonly kind: "grant"
|
|
@@ -95,7 +95,14 @@ export interface RunGrant<TTarget extends RunGrantTarget = RunGrantTarget> {
|
|
|
95
95
|
readonly selection: Selection
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
/** Run the project's single conversational Agent. */
|
|
99
|
+
export interface AgentRunGrant {
|
|
100
|
+
readonly kind: "grant"
|
|
101
|
+
readonly capability: "run"
|
|
102
|
+
readonly target: "agent"
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export type ObserveGrantTarget = "logs" | "aiUsage"
|
|
99
106
|
|
|
100
107
|
export interface ObserveGrant {
|
|
101
108
|
readonly kind: "grant"
|
|
@@ -104,10 +111,13 @@ export interface ObserveGrant {
|
|
|
104
111
|
readonly selection: Selection
|
|
105
112
|
}
|
|
106
113
|
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
export type ManageGrantTarget = "connector" | "aiUsage"
|
|
115
|
+
|
|
116
|
+
/** Manage a selected connector or the project's AI usage-limit policies. */
|
|
117
|
+
export interface ManageGrant<TTarget extends ManageGrantTarget = ManageGrantTarget> {
|
|
109
118
|
readonly kind: "grant"
|
|
110
119
|
readonly capability: "manage"
|
|
120
|
+
readonly target: TTarget
|
|
111
121
|
readonly selection: Selection
|
|
112
122
|
}
|
|
113
123
|
|
|
@@ -118,6 +128,7 @@ export type GrantDefinition =
|
|
|
118
128
|
| AppendGrant
|
|
119
129
|
| ApplyGrant
|
|
120
130
|
| RunGrant
|
|
131
|
+
| AgentRunGrant
|
|
121
132
|
| ObserveGrant
|
|
122
133
|
| ManageGrant
|
|
123
134
|
|
|
@@ -8,10 +8,13 @@ import type {
|
|
|
8
8
|
MembershipPolicyDefinition,
|
|
9
9
|
RegisteredSecurityDefinitions,
|
|
10
10
|
RoleDefinition,
|
|
11
|
+
Selection,
|
|
11
12
|
} from "./types"
|
|
12
13
|
|
|
13
|
-
/** Registered id universes
|
|
14
|
-
type RegisteredUniverses = Partial<Record<GrantUniverseKey, ReadonlySet<string>>>
|
|
14
|
+
/** Registered id universes and singleton capabilities available to role grants. */
|
|
15
|
+
type RegisteredUniverses = Partial<Record<GrantUniverseKey, ReadonlySet<string>>> & {
|
|
16
|
+
readonly agentAvailable?: boolean
|
|
17
|
+
}
|
|
15
18
|
|
|
16
19
|
/**
|
|
17
20
|
* Every grant capability, for validating grants that arrive from untyped code.
|
|
@@ -220,12 +223,19 @@ export function assertGrantDefinition(
|
|
|
220
223
|
)
|
|
221
224
|
}
|
|
222
225
|
|
|
223
|
-
if (value.capability === "observe" && value.target !== "logs") {
|
|
224
|
-
throw createError(`[Sixb] ${field} observe grant target must be 'logs'.`)
|
|
226
|
+
if (value.capability === "observe" && value.target !== "logs" && value.target !== "aiUsage") {
|
|
227
|
+
throw createError(`[Sixb] ${field} observe grant target must be 'logs' or 'aiUsage'.`)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (value.capability === "manage" && value.target !== "connector" && value.target !== "aiUsage") {
|
|
231
|
+
throw createError(`[Sixb] ${field} manage grant target must be 'connector' or 'aiUsage'.`)
|
|
225
232
|
}
|
|
226
233
|
|
|
227
|
-
if (value.capability === "
|
|
228
|
-
|
|
234
|
+
if (value.capability === "run" && value.target === "agent") {
|
|
235
|
+
if (value.selection !== undefined) {
|
|
236
|
+
throw createError(`[Sixb] ${field} agent run grant must not declare a selection.`)
|
|
237
|
+
}
|
|
238
|
+
return
|
|
229
239
|
}
|
|
230
240
|
|
|
231
241
|
assertSelection(value.selection, field, createError)
|
|
@@ -235,7 +245,7 @@ function assertSelection(
|
|
|
235
245
|
value: unknown,
|
|
236
246
|
field: string,
|
|
237
247
|
createError: CreateSecurityError
|
|
238
|
-
): asserts value is
|
|
248
|
+
): asserts value is Selection {
|
|
239
249
|
if (!isRecord(value) || typeof value.all !== "boolean") {
|
|
240
250
|
throw createError(`[Sixb] ${field} grant must carry a selection from 'can' or a scope.`)
|
|
241
251
|
}
|
|
@@ -303,10 +313,12 @@ export function validateSecurityDefinitionsAtStartup(input: {
|
|
|
303
313
|
readonly syncIds?: ReadonlySet<string>
|
|
304
314
|
/** Registered pipeline ids — when provided, pipeline run grants must reference them. */
|
|
305
315
|
readonly pipelineIds?: ReadonlySet<string>
|
|
306
|
-
/**
|
|
307
|
-
readonly
|
|
316
|
+
/** Whether the project's single conversational Agent is configured. */
|
|
317
|
+
readonly agentAvailable?: boolean
|
|
308
318
|
/** Registered observability surfaces. */
|
|
309
319
|
readonly observableIds?: ReadonlySet<string>
|
|
320
|
+
/** Registered singleton management surfaces. */
|
|
321
|
+
readonly manageableIds?: ReadonlySet<string>
|
|
310
322
|
/** Registered connector ids — when provided, manage grants must reference them. */
|
|
311
323
|
readonly connectorIds?: ReadonlySet<string>
|
|
312
324
|
}): RegisteredSecurityDefinitions {
|
|
@@ -415,6 +427,15 @@ function assertGrantReferences(
|
|
|
415
427
|
grant: GrantDefinition,
|
|
416
428
|
registered: RegisteredUniverses
|
|
417
429
|
): void {
|
|
430
|
+
if (grant.capability === "run" && grant.target === "agent") {
|
|
431
|
+
const spec = GRANT_KINDS[grantKindOf(grant)]
|
|
432
|
+
if (!registered.agentAvailable) {
|
|
433
|
+
throw new SecurityValidationError(
|
|
434
|
+
`[Sixb] Role '${roleId}' grants ${grant.capability} on the project Agent, but it is unavailable. ${spec.fix}`
|
|
435
|
+
)
|
|
436
|
+
}
|
|
437
|
+
return
|
|
438
|
+
}
|
|
418
439
|
const spec = GRANT_KINDS[grantKindOf(grant)]
|
|
419
440
|
const universe = registered[spec.universeKey]
|
|
420
441
|
|
|
@@ -11,7 +11,11 @@ import {
|
|
|
11
11
|
assertAgentContextCheckpointAuthority,
|
|
12
12
|
assertAgentContextCheckpointReplayState,
|
|
13
13
|
assertAgentRunExecution,
|
|
14
|
+
assertConversationAgentRunSpec,
|
|
14
15
|
assertCreateAgentContextCheckpointInput,
|
|
16
|
+
assertCreateSubagentRunInput,
|
|
17
|
+
assertSubagentRunResult,
|
|
18
|
+
subagentRunMatchesCreateInput,
|
|
15
19
|
} from "./provider"
|
|
16
20
|
import type {
|
|
17
21
|
AgentContextCheckpointRecord,
|
|
@@ -26,9 +30,11 @@ import type {
|
|
|
26
30
|
AgentThreadStore,
|
|
27
31
|
AppendAgentMessageInput,
|
|
28
32
|
ConfirmAgentRunExecutionOwnershipInput,
|
|
33
|
+
ConversationAgentRunRecord,
|
|
29
34
|
CreateAgentContextCheckpointInput,
|
|
30
35
|
CreateAgentRunInput,
|
|
31
36
|
CreateAgentThreadInput,
|
|
37
|
+
CreateSubagentRunInput,
|
|
32
38
|
DeleteAgentMessagesByRunInput,
|
|
33
39
|
FinishAgentRunInput,
|
|
34
40
|
FinishQueuedAgentRunInput,
|
|
@@ -40,6 +46,7 @@ import type {
|
|
|
40
46
|
ListAgentThreadsResult,
|
|
41
47
|
ReclaimAgentRunInput,
|
|
42
48
|
StartAgentRunInput,
|
|
49
|
+
SubagentRunRecord,
|
|
43
50
|
} from "./types"
|
|
44
51
|
import { AGENT_RUN_FAILURE_CODES } from "./types"
|
|
45
52
|
|
|
@@ -125,7 +132,6 @@ class InMemoryAgentThreadStore implements AgentThreadStore {
|
|
|
125
132
|
const record: AgentThreadRecord = {
|
|
126
133
|
id: input.id,
|
|
127
134
|
projectId: input.projectId,
|
|
128
|
-
agentId: input.agentId,
|
|
129
135
|
ownerPrincipal: clone(input.ownerPrincipal),
|
|
130
136
|
...(input.title === undefined ? {} : { title: input.title }),
|
|
131
137
|
status: input.status ?? "active",
|
|
@@ -147,12 +153,8 @@ class InMemoryAgentThreadStore implements AgentThreadStore {
|
|
|
147
153
|
async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {
|
|
148
154
|
const order = input.order ?? "desc"
|
|
149
155
|
const statuses = input.statuses ? new Set(input.statuses) : null
|
|
150
|
-
const agentIds = input.agentIds ? new Set(input.agentIds) : null
|
|
151
|
-
|
|
152
156
|
const filtered = [...this.state.threads.values()]
|
|
153
157
|
.filter((thread) => thread.projectId === input.projectId)
|
|
154
|
-
.filter((thread) => (input.agentId ? thread.agentId === input.agentId : true))
|
|
155
|
-
.filter((thread) => (agentIds ? agentIds.has(thread.agentId) : true))
|
|
156
158
|
.filter((thread) => (statuses ? statuses.has(thread.status) : true))
|
|
157
159
|
.filter((thread) =>
|
|
158
160
|
input.ownerPrincipal ? principalsEqual(thread.ownerPrincipal, input.ownerPrincipal) : true
|
|
@@ -180,13 +182,13 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
180
182
|
private readonly executions: ExecutionStorage
|
|
181
183
|
) {}
|
|
182
184
|
|
|
183
|
-
async create(input: CreateAgentRunInput): Promise<
|
|
185
|
+
async create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord> {
|
|
186
|
+
assertConversationAgentRunSpec(input.spec)
|
|
184
187
|
await assertAgentRunExecution({
|
|
185
188
|
executions: this.executions,
|
|
186
189
|
projectId: input.projectId,
|
|
187
190
|
executionId: input.executionId,
|
|
188
191
|
runId: input.id,
|
|
189
|
-
agentId: input.agentId,
|
|
190
192
|
})
|
|
191
193
|
// No `await` between read and write: the in-memory critical section is atomic, so two concurrent
|
|
192
194
|
// queued runs on the same thread cannot both win — the second observes `activeRunId` set.
|
|
@@ -224,13 +226,14 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
224
226
|
}
|
|
225
227
|
|
|
226
228
|
const createdAt = new Date(input.createdAt ?? new Date())
|
|
227
|
-
const run:
|
|
229
|
+
const run: ConversationAgentRunRecord = {
|
|
230
|
+
kind: "conversation",
|
|
228
231
|
id: input.id,
|
|
229
232
|
projectId: input.projectId,
|
|
230
233
|
executionId: input.executionId,
|
|
231
234
|
threadId: input.threadId,
|
|
232
|
-
agentId: input.agentId,
|
|
233
235
|
triggerMessageId: input.triggerMessageId,
|
|
236
|
+
spec: clone(input.spec),
|
|
234
237
|
requesterGroupIds: normalizeRequesterGroupIds(input.requesterGroupIds),
|
|
235
238
|
status: "queued",
|
|
236
239
|
attempt: 0,
|
|
@@ -248,6 +251,94 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
248
251
|
return clone(run)
|
|
249
252
|
}
|
|
250
253
|
|
|
254
|
+
async createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord> {
|
|
255
|
+
assertCreateSubagentRunInput(input)
|
|
256
|
+
const execution = await assertAgentRunExecution({
|
|
257
|
+
executions: this.executions,
|
|
258
|
+
projectId: input.projectId,
|
|
259
|
+
executionId: input.executionId,
|
|
260
|
+
runId: input.id,
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
const runKey = key(input.projectId, input.id)
|
|
264
|
+
const existing = this.state.runs.get(runKey)
|
|
265
|
+
if (existing) {
|
|
266
|
+
if (subagentRunMatchesCreateInput(existing, input)) return clone(existing)
|
|
267
|
+
throw new AgentStorageError(
|
|
268
|
+
"duplicate_id",
|
|
269
|
+
`[Sixb] Subagent run '${input.id}' already exists with different immutable inputs.`
|
|
270
|
+
)
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const parent = this.state.runs.get(key(input.projectId, input.parentRunId))
|
|
274
|
+
if (!parent || parent.kind !== "conversation") {
|
|
275
|
+
throw new AgentStorageError(
|
|
276
|
+
"run_not_found",
|
|
277
|
+
`[Sixb] Parent Agent run '${input.parentRunId}' was not found.`
|
|
278
|
+
)
|
|
279
|
+
}
|
|
280
|
+
if (parent.status !== "running") {
|
|
281
|
+
throw new AgentStorageError(
|
|
282
|
+
"invalid_state",
|
|
283
|
+
`[Sixb] Parent Agent run '${parent.id}' is not running (status '${parent.status}').`
|
|
284
|
+
)
|
|
285
|
+
}
|
|
286
|
+
if (
|
|
287
|
+
execution.source.type !== "execution" ||
|
|
288
|
+
execution.source.executionId !== parent.executionId
|
|
289
|
+
) {
|
|
290
|
+
throw new AgentStorageError(
|
|
291
|
+
"invalid_input",
|
|
292
|
+
`[Sixb] Subagent execution '${execution.id}' is not a child of parent execution '${parent.executionId}'.`
|
|
293
|
+
)
|
|
294
|
+
}
|
|
295
|
+
if (parent.execution?.token !== input.parentExecutionToken) {
|
|
296
|
+
throw new AgentStorageError(
|
|
297
|
+
"execution_lost",
|
|
298
|
+
`[Sixb] Parent Agent run '${parent.id}' is no longer owned by this execution.`
|
|
299
|
+
)
|
|
300
|
+
}
|
|
301
|
+
const activeChildren = [...this.state.runs.values()].filter(
|
|
302
|
+
(run) =>
|
|
303
|
+
run.kind === "subagent" &&
|
|
304
|
+
run.projectId === input.projectId &&
|
|
305
|
+
run.parentRunId === parent.id &&
|
|
306
|
+
(run.status === "queued" || run.status === "running")
|
|
307
|
+
).length
|
|
308
|
+
if (activeChildren >= input.maxActiveChildren) {
|
|
309
|
+
throw new AgentStorageError(
|
|
310
|
+
"active_child_limit",
|
|
311
|
+
`[Sixb] Agent run '${parent.id}' already has ${activeChildren} active subagents.`
|
|
312
|
+
)
|
|
313
|
+
}
|
|
314
|
+
if (
|
|
315
|
+
[...this.state.runs.values()].some(
|
|
316
|
+
(run) => run.projectId === input.projectId && run.executionId === input.executionId
|
|
317
|
+
)
|
|
318
|
+
) {
|
|
319
|
+
throw new AgentStorageError(
|
|
320
|
+
"duplicate_id",
|
|
321
|
+
`[Sixb] Execution '${input.executionId}' already belongs to another Agent run.`
|
|
322
|
+
)
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const run: SubagentRunRecord = {
|
|
326
|
+
kind: "subagent",
|
|
327
|
+
id: input.id,
|
|
328
|
+
projectId: input.projectId,
|
|
329
|
+
executionId: input.executionId,
|
|
330
|
+
parentRunId: input.parentRunId,
|
|
331
|
+
spawnKey: input.spawnKey,
|
|
332
|
+
spec: clone(input.spec),
|
|
333
|
+
requesterGroupIds: clone(parent.requesterGroupIds),
|
|
334
|
+
status: "queued",
|
|
335
|
+
attempt: 0,
|
|
336
|
+
createdAt: new Date(input.createdAt ?? new Date()),
|
|
337
|
+
}
|
|
338
|
+
this.state.runs.set(runKey, clone(run))
|
|
339
|
+
return clone(run)
|
|
340
|
+
}
|
|
341
|
+
|
|
251
342
|
async start(input: StartAgentRunInput): Promise<AgentRunRecord> {
|
|
252
343
|
const run = this.requireStatus(input.projectId, input.id, "queued")
|
|
253
344
|
const startedAt = new Date(input.startedAt ?? new Date())
|
|
@@ -320,6 +411,15 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
320
411
|
`[Sixb] Execution token is no longer current on agent run '${input.id}'.`
|
|
321
412
|
)
|
|
322
413
|
}
|
|
414
|
+
if (input.status === "succeeded" && run.kind === "subagent") {
|
|
415
|
+
assertSubagentRunResult(input.result, run.id)
|
|
416
|
+
}
|
|
417
|
+
if (input.status === "succeeded" && run.kind === "conversation" && input.result !== undefined) {
|
|
418
|
+
throw new AgentStorageError(
|
|
419
|
+
"invalid_input",
|
|
420
|
+
`[Sixb] Conversational Agent run '${run.id}' cannot persist a subagent result.`
|
|
421
|
+
)
|
|
422
|
+
}
|
|
323
423
|
|
|
324
424
|
const completedAt = new Date(input.completedAt ?? new Date())
|
|
325
425
|
const next: AgentRunRecord = {
|
|
@@ -328,6 +428,9 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
328
428
|
...(input.modelId === undefined ? {} : { modelId: input.modelId }),
|
|
329
429
|
...(input.finishReason === undefined ? {} : { finishReason: input.finishReason }),
|
|
330
430
|
...(input.diagnostics === undefined ? {} : { diagnostics: clone(input.diagnostics) }),
|
|
431
|
+
...(input.status === "succeeded" && input.result !== undefined
|
|
432
|
+
? { result: clone(input.result) }
|
|
433
|
+
: {}),
|
|
331
434
|
...(input.status === "succeeded" || input.error === undefined
|
|
332
435
|
? {}
|
|
333
436
|
: { error: normalizeFailure(input.error) }),
|
|
@@ -359,11 +462,17 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
359
462
|
async list(input: ListAgentRunsInput): Promise<ListAgentRunsResult> {
|
|
360
463
|
const order = input.order ?? "desc"
|
|
361
464
|
const statuses = input.statuses ? new Set(input.statuses) : null
|
|
465
|
+
const kinds = input.kinds ? new Set(input.kinds) : null
|
|
362
466
|
|
|
363
467
|
const filtered = [...this.state.runs.values()]
|
|
364
468
|
.filter((run) => run.projectId === input.projectId)
|
|
365
|
-
.filter((run) => (
|
|
366
|
-
.filter((run) =>
|
|
469
|
+
.filter((run) => (kinds ? kinds.has(run.kind) : true))
|
|
470
|
+
.filter((run) =>
|
|
471
|
+
input.threadId ? run.kind === "conversation" && run.threadId === input.threadId : true
|
|
472
|
+
)
|
|
473
|
+
.filter((run) =>
|
|
474
|
+
input.parentRunId ? run.kind === "subagent" && run.parentRunId === input.parentRunId : true
|
|
475
|
+
)
|
|
367
476
|
.filter((run) => (statuses ? statuses.has(run.status) : true))
|
|
368
477
|
.filter((run) =>
|
|
369
478
|
input.startedAfter ? (run.startedAt ?? run.createdAt) >= input.startedAfter : true
|
|
@@ -405,6 +514,7 @@ class InMemoryAgentRunStore implements AgentRunStore {
|
|
|
405
514
|
}
|
|
406
515
|
|
|
407
516
|
private releaseThread(run: AgentRunRecord, completedAt: Date): void {
|
|
517
|
+
if (run.kind !== "conversation") return
|
|
408
518
|
const threadKey = key(run.projectId, run.threadId)
|
|
409
519
|
const thread = this.state.threads.get(threadKey)
|
|
410
520
|
if (thread && thread.activeRunId === run.id) {
|
|
@@ -16,6 +16,7 @@ export type {
|
|
|
16
16
|
AgentRunExecution,
|
|
17
17
|
AgentRunFailureCode,
|
|
18
18
|
AgentRunFinishReason,
|
|
19
|
+
AgentRunKind,
|
|
19
20
|
AgentRunRecord,
|
|
20
21
|
AgentRunStatus,
|
|
21
22
|
AgentRunStore,
|
|
@@ -25,9 +26,12 @@ export type {
|
|
|
25
26
|
AgentThreadStore,
|
|
26
27
|
AppendAgentMessageInput,
|
|
27
28
|
ConfirmAgentRunExecutionOwnershipInput,
|
|
29
|
+
ConversationAgentRunRecord,
|
|
30
|
+
ConversationAgentRunSpec,
|
|
28
31
|
CreateAgentContextCheckpointInput,
|
|
29
32
|
CreateAgentRunInput,
|
|
30
33
|
CreateAgentThreadInput,
|
|
34
|
+
CreateSubagentRunInput,
|
|
31
35
|
DeleteAgentMessagesByRunInput,
|
|
32
36
|
FinishAgentRunInput,
|
|
33
37
|
FinishQueuedAgentRunInput,
|
|
@@ -39,6 +43,9 @@ export type {
|
|
|
39
43
|
ListAgentThreadsResult,
|
|
40
44
|
ReclaimAgentRunInput,
|
|
41
45
|
StartAgentRunInput,
|
|
46
|
+
SubagentRunRecord,
|
|
47
|
+
SubagentRunResult,
|
|
48
|
+
SubagentRunSpec,
|
|
42
49
|
} from "./types"
|
|
43
50
|
export {
|
|
44
51
|
AGENT_RUN_DIAGNOSTIC_CODES,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { isDeepStrictEqual } from "node:util"
|
|
2
|
+
import { AGENT_REASONING_LEVELS } from "../../agents/types"
|
|
3
|
+
import { isFileRef } from "../../blob-storage"
|
|
4
|
+
import { isModelReasoning } from "../../models/language-model"
|
|
5
|
+
import type { ExecutionRecord, ExecutionStorage } from "../executions"
|
|
3
6
|
import { findAgentRunExecution } from "../executions/run-link"
|
|
4
7
|
import { AgentStorageError } from "./errors"
|
|
5
8
|
import type {
|
|
@@ -7,23 +10,60 @@ import type {
|
|
|
7
10
|
AgentMessageRecord,
|
|
8
11
|
AgentRunRecord,
|
|
9
12
|
AgentThreadRecord,
|
|
13
|
+
ConversationAgentRunSpec,
|
|
10
14
|
CreateAgentContextCheckpointInput,
|
|
15
|
+
CreateSubagentRunInput,
|
|
16
|
+
SubagentRunRecord,
|
|
17
|
+
SubagentRunResult,
|
|
11
18
|
} from "./types"
|
|
12
19
|
|
|
20
|
+
/** Validate the provider-neutral model selection captured for a conversational turn. */
|
|
21
|
+
export function assertConversationAgentRunSpec(
|
|
22
|
+
spec: ConversationAgentRunSpec,
|
|
23
|
+
prefix = "Sixb"
|
|
24
|
+
): void {
|
|
25
|
+
if (!isRecord(spec) || !isRecord(spec.model)) {
|
|
26
|
+
throw new AgentStorageError(
|
|
27
|
+
"invalid_input",
|
|
28
|
+
`[${prefix}] Conversational Agent run spec must contain a model reference.`
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
for (const [name, value] of [
|
|
32
|
+
["model.provider", spec.model.provider],
|
|
33
|
+
["model.modelId", spec.model.modelId],
|
|
34
|
+
] as const) {
|
|
35
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
36
|
+
throw new AgentStorageError(
|
|
37
|
+
"invalid_input",
|
|
38
|
+
`[${prefix}] Conversational Agent run '${name}' must not be empty.`
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (spec.reasoning !== undefined && !isModelReasoning(spec.reasoning)) {
|
|
43
|
+
throw new AgentStorageError(
|
|
44
|
+
"invalid_input",
|
|
45
|
+
`[${prefix}] Conversational Agent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
|
|
51
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
52
|
+
}
|
|
53
|
+
|
|
13
54
|
/** Validate the semantic link between a conversational Agent run and its immutable execution. */
|
|
14
55
|
export async function assertAgentRunExecution(input: {
|
|
15
56
|
readonly executions: ExecutionStorage
|
|
16
57
|
readonly projectId: string
|
|
17
58
|
readonly executionId: string
|
|
18
59
|
readonly runId: string
|
|
19
|
-
|
|
20
|
-
}): Promise<void> {
|
|
60
|
+
}): Promise<ExecutionRecord> {
|
|
21
61
|
const execution = await findAgentRunExecution({
|
|
22
62
|
executions: input.executions,
|
|
23
63
|
projectId: input.projectId,
|
|
24
64
|
executionId: input.executionId,
|
|
25
65
|
runId: input.runId,
|
|
26
|
-
|
|
66
|
+
authority: { type: "inherited" },
|
|
27
67
|
})
|
|
28
68
|
if (!execution) {
|
|
29
69
|
throw new AgentStorageError(
|
|
@@ -31,6 +71,110 @@ export async function assertAgentRunExecution(input: {
|
|
|
31
71
|
`[Sixb] Execution '${input.executionId}' does not authorize Agent run '${input.runId}'.`
|
|
32
72
|
)
|
|
33
73
|
}
|
|
74
|
+
return execution
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Validate the provider-neutral payload of an idempotent child admission. */
|
|
78
|
+
export function assertCreateSubagentRunInput(input: CreateSubagentRunInput, prefix = "Sixb"): void {
|
|
79
|
+
for (const [name, value] of [
|
|
80
|
+
["id", input.id],
|
|
81
|
+
["projectId", input.projectId],
|
|
82
|
+
["executionId", input.executionId],
|
|
83
|
+
["parentRunId", input.parentRunId],
|
|
84
|
+
["parentExecutionToken", input.parentExecutionToken],
|
|
85
|
+
["spawnKey", input.spawnKey],
|
|
86
|
+
["model.provider", input.spec.model.provider],
|
|
87
|
+
["model.modelId", input.spec.model.modelId],
|
|
88
|
+
["task", input.spec.task],
|
|
89
|
+
] as const) {
|
|
90
|
+
if (value.trim().length === 0) {
|
|
91
|
+
throw new AgentStorageError(
|
|
92
|
+
"invalid_input",
|
|
93
|
+
`[${prefix}] Subagent run '${name}' must not be empty.`
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (input.spawnKey.length > 128) {
|
|
98
|
+
throw new AgentStorageError(
|
|
99
|
+
"invalid_input",
|
|
100
|
+
`[${prefix}] Subagent spawn key must not exceed 128 characters.`
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
for (const [name, value] of [
|
|
104
|
+
["maxActiveChildren", input.maxActiveChildren],
|
|
105
|
+
["spec.maxSteps", input.spec.maxSteps],
|
|
106
|
+
] as const) {
|
|
107
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
108
|
+
throw new AgentStorageError(
|
|
109
|
+
"invalid_input",
|
|
110
|
+
`[${prefix}] Subagent run '${name}' must be a positive safe integer.`
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (new Set(input.spec.toolNames).size !== input.spec.toolNames.length) {
|
|
115
|
+
throw new AgentStorageError(
|
|
116
|
+
"invalid_input",
|
|
117
|
+
`[${prefix}] Subagent run tool names must be unique.`
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
if (input.spec.reasoning !== undefined && !isModelReasoning(input.spec.reasoning)) {
|
|
121
|
+
throw new AgentStorageError(
|
|
122
|
+
"invalid_input",
|
|
123
|
+
`[${prefix}] Subagent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
if (input.spec.toolNames.some((name) => !name.trim())) {
|
|
127
|
+
throw new AgentStorageError(
|
|
128
|
+
"invalid_input",
|
|
129
|
+
`[${prefix}] Subagent run tool names must not be empty.`
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
if (input.createdAt && !Number.isFinite(input.createdAt.getTime())) {
|
|
133
|
+
throw new AgentStorageError(
|
|
134
|
+
"invalid_input",
|
|
135
|
+
`[${prefix}] Subagent run createdAt must be a valid date.`
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Exact semantic match required when a durable spawn key is replayed. */
|
|
141
|
+
export function subagentRunMatchesCreateInput(
|
|
142
|
+
run: AgentRunRecord,
|
|
143
|
+
input: CreateSubagentRunInput
|
|
144
|
+
): run is SubagentRunRecord {
|
|
145
|
+
return (
|
|
146
|
+
run.kind === "subagent" &&
|
|
147
|
+
run.id === input.id &&
|
|
148
|
+
run.projectId === input.projectId &&
|
|
149
|
+
run.executionId === input.executionId &&
|
|
150
|
+
run.parentRunId === input.parentRunId &&
|
|
151
|
+
run.spawnKey === input.spawnKey &&
|
|
152
|
+
isDeepStrictEqual(run.spec, input.spec)
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** Validate the small durable result returned by a successful child. */
|
|
157
|
+
export function assertSubagentRunResult(
|
|
158
|
+
result: SubagentRunResult | undefined,
|
|
159
|
+
runId: string,
|
|
160
|
+
prefix = "Sixb"
|
|
161
|
+
): asserts result is SubagentRunResult {
|
|
162
|
+
const text = result?.text
|
|
163
|
+
const files = result?.files
|
|
164
|
+
const hasText = typeof text === "string" && text.trim().length > 0
|
|
165
|
+
const hasFiles = Array.isArray(files) && files.length > 0 && files.every(isFileRef)
|
|
166
|
+
if (!result || (!hasText && !hasFiles)) {
|
|
167
|
+
throw new AgentStorageError(
|
|
168
|
+
"invalid_input",
|
|
169
|
+
`[${prefix}] Succeeded subagent run '${runId}' requires text or files.`
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
if ((text !== undefined && !hasText) || (files !== undefined && !hasFiles)) {
|
|
173
|
+
throw new AgentStorageError(
|
|
174
|
+
"invalid_input",
|
|
175
|
+
`[${prefix}] Subagent run '${runId}' has an invalid result.`
|
|
176
|
+
)
|
|
177
|
+
}
|
|
34
178
|
}
|
|
35
179
|
|
|
36
180
|
/** Validate provider-independent checkpoint fields before entering a storage critical section. */
|
|
@@ -136,7 +280,7 @@ export function assertAgentContextCheckpointAuthority(input: {
|
|
|
136
280
|
`[${prefix}] Agent thread '${create.threadId}' not found for project '${create.projectId}'.`
|
|
137
281
|
)
|
|
138
282
|
}
|
|
139
|
-
if (run.threadId !== create.threadId) {
|
|
283
|
+
if (run.kind !== "conversation" || run.threadId !== create.threadId) {
|
|
140
284
|
throw new AgentStorageError(
|
|
141
285
|
"invalid_input",
|
|
142
286
|
`[${prefix}] Agent run '${run.id}' does not belong to thread '${create.threadId}'.`
|