@sixb/core 0.1.5 → 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/types/definitions.d.ts +8 -2
- package/dist/actions/types/definitions.d.ts.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.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +7 -7
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/strategy.d.ts +1 -1
- package/dist/auth/strategy.d.ts.map +1 -1
- package/dist/auth/types.d.ts +13 -0
- package/dist/auth/types.d.ts.map +1 -1
- 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-xdf9yswn.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-h6h91mfy.js → chunk-2b5qtban.js} +12 -12
- package/dist/{chunk-h6h91mfy.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-6d5xdj1q.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-v0egge8b.js → chunk-6ed5bwnd.js} +666 -81
- package/dist/chunk-6ed5bwnd.js.map +57 -0
- 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-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +3 -3
- package/dist/{chunk-tbv03sx2.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-78c6xvyr.js → chunk-d2ndstdf.js} +8 -6
- package/dist/{chunk-78c6xvyr.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-z3ga9q5m.js → chunk-e4rvtvpw.js} +13 -11
- package/dist/{chunk-z3ga9q5m.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-84h6qhmp.js → chunk-h0knpbz5.js} +468 -1236
- package/dist/chunk-h0knpbz5.js.map +38 -0
- package/dist/{chunk-zp2v2rv6.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-4h947jd8.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-gadsm794.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-am6eczah.js → chunk-qv38twt8.js} +50 -69
- package/dist/{chunk-am6eczah.js.map → chunk-qv38twt8.js.map} +8 -8
- package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
- package/dist/{chunk-r0rry8dn.js → chunk-rp1mvzb4.js} +6 -6
- package/dist/{chunk-tkdscva6.js → chunk-rre42skh.js} +187 -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-ea73pzk7.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-1q02e95s.js → chunk-y35ma3mj.js} +11 -16
- package/dist/{chunk-1q02e95s.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 +8 -5
- 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/in-memory/materializations.d.ts +4 -3
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +1 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +7 -3
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +2 -2
- package/dist/storage/ontology/provider.d.ts.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 +3758 -1945
- package/dist/testing/index.js.map +15 -13
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- 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/actions/types/definitions.ts +24 -2
- 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/auth/index.ts +1 -0
- package/src/auth/runtime.ts +8 -0
- package/src/auth/strategy.ts +1 -0
- package/src/auth/types.ts +14 -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 +52 -1
- package/src/storage/ontology/in-memory/materializations.ts +34 -22
- package/src/storage/ontology/index.ts +1 -0
- package/src/storage/ontology/materializations.ts +8 -3
- package/src/storage/ontology/provider.ts +2 -2
- 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/materializer-storage-contract.ts +170 -2
- 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-6gjqgd3d.js.map +0 -11
- package/dist/chunk-84h6qhmp.js.map +0 -46
- package/dist/chunk-a09jx26t.js +0 -55
- package/dist/chunk-a09jx26t.js.map +0 -11
- package/dist/chunk-dm72y8wt.js.map +0 -10
- package/dist/chunk-drjqm1aa.js.map +0 -15
- package/dist/chunk-gadsm794.js.map +0 -11
- package/dist/chunk-h9kxd41f.js.map +0 -11
- package/dist/chunk-nzw7sm3b.js +0 -137
- package/dist/chunk-nzw7sm3b.js.map +0 -10
- package/dist/chunk-t0jjkep3.js.map +0 -10
- package/dist/chunk-t8t39h7v.js.map +0 -10
- package/dist/chunk-tkdscva6.js.map +0 -37
- package/dist/chunk-v0egge8b.js.map +0 -56
- package/dist/chunk-xdf9yswn.js.map +0 -11
- /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-6d5xdj1q.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-tbv03sx2.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-zp2v2rv6.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-4h947jd8.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-r0rry8dn.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-ea73pzk7.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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { agentServiceAccountId } from "../agents/authority"
|
|
2
|
+
import { SYSTEM_PRINCIPAL } from "../auth"
|
|
2
3
|
import type { AuthStorage } from "../storage/auth"
|
|
3
4
|
import { AuthStorageError } from "../storage/auth"
|
|
4
5
|
import type { ExecutionStorage } from "../storage/executions"
|
|
@@ -8,35 +9,43 @@ export async function createTestAgentExecution(
|
|
|
8
9
|
storage: { readonly auth?: AuthStorage; readonly executions: ExecutionStorage },
|
|
9
10
|
input: {
|
|
10
11
|
readonly projectId: string
|
|
11
|
-
readonly
|
|
12
|
+
readonly actorId?: string
|
|
12
13
|
readonly runId: string
|
|
13
14
|
readonly executionId?: string
|
|
14
15
|
readonly sourceExecutionId?: string
|
|
16
|
+
/** Conversational runs inherit authority; workflow fixtures use managed authority. */
|
|
17
|
+
readonly authority?: "managed" | "inherited"
|
|
15
18
|
}
|
|
16
19
|
): Promise<string> {
|
|
17
|
-
const
|
|
18
|
-
if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
20
|
+
const authority = input.authority ?? (input.actorId === undefined ? "inherited" : "managed")
|
|
21
|
+
if (authority === "managed" && input.actorId === undefined) {
|
|
22
|
+
throw new Error("Managed Agent execution fixtures require an agent id.")
|
|
23
|
+
}
|
|
24
|
+
const serviceAccountId = input.actorId ? agentServiceAccountId(input.actorId) : undefined
|
|
25
|
+
if (authority === "managed") {
|
|
26
|
+
const auth = storage.auth
|
|
27
|
+
if (!auth) throw new Error("Managed Agent execution fixtures require auth storage.")
|
|
28
|
+
const serviceAccount = await auth.serviceAccounts.getById({
|
|
29
|
+
projectId: input.projectId,
|
|
30
|
+
id: serviceAccountId!,
|
|
31
|
+
})
|
|
32
|
+
if (!serviceAccount) {
|
|
33
|
+
const now = new Date()
|
|
34
|
+
try {
|
|
35
|
+
await auth.serviceAccounts.create({
|
|
36
|
+
id: serviceAccountId!,
|
|
37
|
+
projectId: input.projectId,
|
|
38
|
+
name: `Test Agent ${input.actorId}`,
|
|
39
|
+
description: `Test service account for Agent '${input.actorId}'.`,
|
|
40
|
+
status: "active",
|
|
41
|
+
createdByPrincipal: SYSTEM_PRINCIPAL,
|
|
42
|
+
createdAt: now,
|
|
43
|
+
updatedAt: now,
|
|
44
|
+
})
|
|
45
|
+
} catch (error) {
|
|
46
|
+
if (!(error instanceof AuthStorageError) || error.code !== "duplicate_service_account") {
|
|
47
|
+
throw error
|
|
48
|
+
}
|
|
40
49
|
}
|
|
41
50
|
}
|
|
42
51
|
}
|
|
@@ -72,10 +81,13 @@ export async function createTestAgentExecution(
|
|
|
72
81
|
? {}
|
|
73
82
|
: { requestedBy: structuredClone(parent.requestedBy) }),
|
|
74
83
|
correlationId: parent.correlationId,
|
|
75
|
-
authorizationRef:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
authorizationRef:
|
|
85
|
+
authority === "inherited"
|
|
86
|
+
? structuredClone(parent.authorizationRef)
|
|
87
|
+
: {
|
|
88
|
+
type: "principal",
|
|
89
|
+
principal: { type: "serviceAccount", id: serviceAccountId! },
|
|
90
|
+
},
|
|
79
91
|
})
|
|
80
92
|
return executionId
|
|
81
93
|
}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
type CreateAgentContextCheckpointInput,
|
|
12
12
|
type CreateAgentRunInput,
|
|
13
13
|
type CreateAgentThreadInput,
|
|
14
|
+
type CreateSubagentRunInput,
|
|
14
15
|
type StartAgentRunInput,
|
|
15
16
|
} from "../storage/agents"
|
|
16
17
|
import type { AuthStorage } from "../storage/auth"
|
|
@@ -65,7 +66,6 @@ function threadInput(overrides: Partial<CreateAgentThreadInput> = {}): CreateAge
|
|
|
65
66
|
return {
|
|
66
67
|
id: "thr_1",
|
|
67
68
|
projectId,
|
|
68
|
-
agentId: "sales",
|
|
69
69
|
ownerPrincipal: owner,
|
|
70
70
|
createdAt: at("2026-06-23T10:00:00.000Z"),
|
|
71
71
|
...overrides,
|
|
@@ -90,8 +90,8 @@ function runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {
|
|
|
90
90
|
id: "run_1",
|
|
91
91
|
projectId,
|
|
92
92
|
threadId: "thr_1",
|
|
93
|
-
agentId: "sales",
|
|
94
93
|
triggerMessageId: "msg_user_1",
|
|
94
|
+
spec: { model: { provider: "test", modelId: "large" } },
|
|
95
95
|
executionId: "test_agent_execution:run_1",
|
|
96
96
|
requesterGroupIds: ["support", "engineering", "support"],
|
|
97
97
|
execution: execution("exec_1"),
|
|
@@ -104,6 +104,74 @@ function runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
function subagentInput(
|
|
108
|
+
parentExecutionToken: string,
|
|
109
|
+
overrides: Partial<CreateSubagentRunInput> = {}
|
|
110
|
+
): CreateSubagentRunInput {
|
|
111
|
+
const id = overrides.id ?? "child_1"
|
|
112
|
+
return {
|
|
113
|
+
id,
|
|
114
|
+
projectId,
|
|
115
|
+
executionId: overrides.executionId ?? `test_agent_execution:${id}`,
|
|
116
|
+
parentRunId: "parent_1",
|
|
117
|
+
parentExecutionToken,
|
|
118
|
+
spawnKey: "research-orders",
|
|
119
|
+
spec: {
|
|
120
|
+
model: { provider: "test", modelId: "small" },
|
|
121
|
+
reasoning: "medium",
|
|
122
|
+
task: "Research the open orders.",
|
|
123
|
+
toolNames: ["search_orders"],
|
|
124
|
+
maxSteps: 25,
|
|
125
|
+
},
|
|
126
|
+
maxActiveChildren: 4,
|
|
127
|
+
createdAt: at("2026-06-23T10:01:00.000Z"),
|
|
128
|
+
...overrides,
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function createRunningParent(
|
|
133
|
+
storage: AgentStorage,
|
|
134
|
+
fixture: AgentStorageContractStorage
|
|
135
|
+
): Promise<void> {
|
|
136
|
+
await storage.threads.create(threadInput({ id: "parent_thread" }))
|
|
137
|
+
const parent = runInput({
|
|
138
|
+
id: "parent_1",
|
|
139
|
+
threadId: "parent_thread",
|
|
140
|
+
execution: execution("parent_token"),
|
|
141
|
+
})
|
|
142
|
+
await createTestAgentExecution(fixture, {
|
|
143
|
+
projectId,
|
|
144
|
+
runId: parent.id,
|
|
145
|
+
executionId: parent.executionId,
|
|
146
|
+
authority: "inherited",
|
|
147
|
+
})
|
|
148
|
+
await storage.runs.create(parent)
|
|
149
|
+
await storage.runs.start({
|
|
150
|
+
projectId,
|
|
151
|
+
id: parent.id,
|
|
152
|
+
modelId: "large",
|
|
153
|
+
execution: parent.execution,
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async function createSubagent(
|
|
158
|
+
storage: AgentStorage,
|
|
159
|
+
fixture: AgentStorageContractStorage,
|
|
160
|
+
overrides: Partial<CreateSubagentRunInput> = {}
|
|
161
|
+
) {
|
|
162
|
+
const input = subagentInput("parent_token", overrides)
|
|
163
|
+
const parent = await storage.runs.getById({ projectId: input.projectId, id: input.parentRunId })
|
|
164
|
+
if (!parent || parent.kind !== "conversation") throw new Error("Expected child parent fixture")
|
|
165
|
+
await createTestAgentExecution(fixture, {
|
|
166
|
+
projectId: input.projectId,
|
|
167
|
+
runId: input.id,
|
|
168
|
+
executionId: input.executionId,
|
|
169
|
+
sourceExecutionId: parent.executionId,
|
|
170
|
+
authority: "inherited",
|
|
171
|
+
})
|
|
172
|
+
return storage.runs.createSubagent(input)
|
|
173
|
+
}
|
|
174
|
+
|
|
107
175
|
function checkpointInput(
|
|
108
176
|
overrides: Partial<CreateAgentContextCheckpointInput> = {}
|
|
109
177
|
): CreateAgentContextCheckpointInput {
|
|
@@ -150,9 +218,9 @@ async function createRun(
|
|
|
150
218
|
) {
|
|
151
219
|
await createTestAgentExecution(fixture, {
|
|
152
220
|
projectId: input.projectId,
|
|
153
|
-
agentId: input.agentId,
|
|
154
221
|
runId: input.id,
|
|
155
222
|
executionId: input.executionId,
|
|
223
|
+
authority: "inherited",
|
|
156
224
|
})
|
|
157
225
|
return storage.runs.create(input)
|
|
158
226
|
}
|
|
@@ -230,7 +298,6 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
230
298
|
const thread = await storage.threads.create(threadInput({ title: "Q3 pipeline" }))
|
|
231
299
|
expect(thread).toMatchObject({
|
|
232
300
|
id: "thr_1",
|
|
233
|
-
agentId: "sales",
|
|
234
301
|
title: "Q3 pipeline",
|
|
235
302
|
status: "active",
|
|
236
303
|
activeRunId: null,
|
|
@@ -256,19 +323,17 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
256
323
|
test("lists threads with filters, ordering, and pagination", async () => {
|
|
257
324
|
await withStorage(async (storage) => {
|
|
258
325
|
await storage.threads.create(
|
|
259
|
-
threadInput({ id: "thr_a",
|
|
326
|
+
threadInput({ id: "thr_a", createdAt: at("2026-06-23T10:00:00.000Z") })
|
|
260
327
|
)
|
|
261
328
|
await storage.threads.create(
|
|
262
329
|
threadInput({
|
|
263
330
|
id: "thr_b",
|
|
264
|
-
agentId: "support",
|
|
265
331
|
createdAt: at("2026-06-23T10:01:00.000Z"),
|
|
266
332
|
})
|
|
267
333
|
)
|
|
268
334
|
await storage.threads.create(
|
|
269
335
|
threadInput({
|
|
270
336
|
id: "thr_c",
|
|
271
|
-
agentId: "sales",
|
|
272
337
|
status: "archived",
|
|
273
338
|
createdAt: at("2026-06-23T10:02:00.000Z"),
|
|
274
339
|
})
|
|
@@ -280,25 +345,6 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
280
345
|
expect(all.total).toBe(3)
|
|
281
346
|
expect(all.hasMore).toBe(false)
|
|
282
347
|
|
|
283
|
-
const sales = await storage.threads.list({ projectId, agentId: "sales", order: "asc" })
|
|
284
|
-
expect(sales.threads.map((thread) => thread.id)).toEqual(["thr_a", "thr_c"])
|
|
285
|
-
|
|
286
|
-
const visibleAgents = await storage.threads.list({
|
|
287
|
-
projectId,
|
|
288
|
-
agentIds: ["support"],
|
|
289
|
-
order: "asc",
|
|
290
|
-
})
|
|
291
|
-
expect(visibleAgents.threads.map((thread) => thread.id)).toEqual(["thr_b"])
|
|
292
|
-
|
|
293
|
-
const salesVisibleAgents = await storage.threads.list({
|
|
294
|
-
projectId,
|
|
295
|
-
agentId: "sales",
|
|
296
|
-
agentIds: ["support"],
|
|
297
|
-
order: "asc",
|
|
298
|
-
})
|
|
299
|
-
expect(salesVisibleAgents.threads).toEqual([])
|
|
300
|
-
expect(salesVisibleAgents.total).toBe(0)
|
|
301
|
-
|
|
302
348
|
const active = await storage.threads.list({ projectId, statuses: ["active"], order: "asc" })
|
|
303
349
|
expect(active.threads.map((thread) => thread.id)).toEqual(["thr_a", "thr_b"])
|
|
304
350
|
|
|
@@ -325,7 +371,12 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
325
371
|
await storage.threads.create(threadInput())
|
|
326
372
|
|
|
327
373
|
const queued = await createRun(storage, fixture, runInput({ id: "run_1" }))
|
|
328
|
-
expect(queued).toMatchObject({
|
|
374
|
+
expect(queued).toMatchObject({
|
|
375
|
+
status: "queued",
|
|
376
|
+
attempt: 0,
|
|
377
|
+
threadId: "thr_1",
|
|
378
|
+
spec: { model: { provider: "test", modelId: "large" } },
|
|
379
|
+
})
|
|
329
380
|
expect(queued.execution).toBeUndefined()
|
|
330
381
|
expect(queued.startedAt).toBeUndefined()
|
|
331
382
|
await expect(storage.runs.list({ projectId, statuses: ["queued"] })).resolves.toMatchObject(
|
|
@@ -357,7 +408,7 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
357
408
|
await storage.threads.create(threadInput())
|
|
358
409
|
const executionId = await createTestAgentExecution(fixture, {
|
|
359
410
|
projectId,
|
|
360
|
-
|
|
411
|
+
actorId: "support",
|
|
361
412
|
runId: "run_1",
|
|
362
413
|
})
|
|
363
414
|
|
|
@@ -425,6 +476,176 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
425
476
|
})
|
|
426
477
|
})
|
|
427
478
|
|
|
479
|
+
// ── durable child runs ─────────────────────────────────────────────────────────────────────
|
|
480
|
+
|
|
481
|
+
test("creates and exactly replays a child run without claiming a thread", async () => {
|
|
482
|
+
await withStorage(async (storage, fixture) => {
|
|
483
|
+
await createRunningParent(storage, fixture)
|
|
484
|
+
const input = subagentInput("parent_token")
|
|
485
|
+
const child = await createSubagent(storage, fixture)
|
|
486
|
+
|
|
487
|
+
expect(child).toMatchObject({
|
|
488
|
+
kind: "subagent",
|
|
489
|
+
id: "child_1",
|
|
490
|
+
parentRunId: "parent_1",
|
|
491
|
+
spawnKey: "research-orders",
|
|
492
|
+
status: "queued",
|
|
493
|
+
attempt: 0,
|
|
494
|
+
requesterGroupIds: ["engineering", "support"],
|
|
495
|
+
spec: input.spec,
|
|
496
|
+
})
|
|
497
|
+
expect(child).not.toHaveProperty("threadId")
|
|
498
|
+
await expect(storage.runs.createSubagent(input)).resolves.toEqual(child)
|
|
499
|
+
await expectAgentError(
|
|
500
|
+
storage.runs.createSubagent({
|
|
501
|
+
...input,
|
|
502
|
+
spec: { ...input.spec, task: "Research different orders." },
|
|
503
|
+
}),
|
|
504
|
+
"duplicate_id"
|
|
505
|
+
)
|
|
506
|
+
|
|
507
|
+
const listed = await storage.runs.list({
|
|
508
|
+
projectId,
|
|
509
|
+
kinds: ["subagent"],
|
|
510
|
+
parentRunId: "parent_1",
|
|
511
|
+
})
|
|
512
|
+
expect(listed.runs.map((run) => run.id)).toEqual(["child_1"])
|
|
513
|
+
await expect(
|
|
514
|
+
storage.runs.list({ projectId, kinds: ["conversation"] })
|
|
515
|
+
).resolves.toMatchObject({ runs: [{ id: "parent_1" }], total: 1 })
|
|
516
|
+
await expect(
|
|
517
|
+
storage.threads.getById({ projectId, id: "parent_thread" })
|
|
518
|
+
).resolves.toMatchObject({ activeRunId: "parent_1" })
|
|
519
|
+
})
|
|
520
|
+
})
|
|
521
|
+
|
|
522
|
+
test("fences child admission by the active parent execution", async () => {
|
|
523
|
+
await withStorage(async (storage, fixture) => {
|
|
524
|
+
await createRunningParent(storage, fixture)
|
|
525
|
+
const wrongLineage = subagentInput("parent_token", {
|
|
526
|
+
id: "child_wrong_parent",
|
|
527
|
+
executionId: "test_agent_execution:child_wrong_parent",
|
|
528
|
+
spawnKey: "wrong-parent",
|
|
529
|
+
})
|
|
530
|
+
await createTestAgentExecution(fixture, {
|
|
531
|
+
projectId,
|
|
532
|
+
runId: wrongLineage.id,
|
|
533
|
+
executionId: wrongLineage.executionId,
|
|
534
|
+
sourceExecutionId: "unrelated_request_execution",
|
|
535
|
+
authority: "inherited",
|
|
536
|
+
})
|
|
537
|
+
await expectAgentError(storage.runs.createSubagent(wrongLineage), "invalid_input")
|
|
538
|
+
|
|
539
|
+
const input = subagentInput("stale_parent_token")
|
|
540
|
+
await createTestAgentExecution(fixture, {
|
|
541
|
+
projectId,
|
|
542
|
+
runId: input.id,
|
|
543
|
+
executionId: input.executionId,
|
|
544
|
+
sourceExecutionId: "test_agent_execution:parent_1",
|
|
545
|
+
authority: "inherited",
|
|
546
|
+
})
|
|
547
|
+
await expectAgentError(storage.runs.createSubagent(input), "execution_lost")
|
|
548
|
+
|
|
549
|
+
await storage.runs.finish({
|
|
550
|
+
projectId,
|
|
551
|
+
id: "parent_1",
|
|
552
|
+
executionToken: "parent_token",
|
|
553
|
+
status: "succeeded",
|
|
554
|
+
})
|
|
555
|
+
await expectAgentError(
|
|
556
|
+
storage.runs.createSubagent({ ...input, parentExecutionToken: "parent_token" }),
|
|
557
|
+
"invalid_state"
|
|
558
|
+
)
|
|
559
|
+
})
|
|
560
|
+
})
|
|
561
|
+
|
|
562
|
+
test("enforces the active-child limit atomically", async () => {
|
|
563
|
+
await withStorage(async (storage, fixture) => {
|
|
564
|
+
await createRunningParent(storage, fixture)
|
|
565
|
+
const inputs = ["child_a", "child_b"].map((id) =>
|
|
566
|
+
subagentInput("parent_token", {
|
|
567
|
+
id,
|
|
568
|
+
executionId: `test_agent_execution:${id}`,
|
|
569
|
+
spawnKey: id,
|
|
570
|
+
maxActiveChildren: 1,
|
|
571
|
+
})
|
|
572
|
+
)
|
|
573
|
+
for (const input of inputs) {
|
|
574
|
+
await createTestAgentExecution(fixture, {
|
|
575
|
+
projectId,
|
|
576
|
+
runId: input.id,
|
|
577
|
+
executionId: input.executionId,
|
|
578
|
+
sourceExecutionId: "test_agent_execution:parent_1",
|
|
579
|
+
authority: "inherited",
|
|
580
|
+
})
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
const settled = await Promise.allSettled(
|
|
584
|
+
inputs.map((input) => storage.runs.createSubagent(input))
|
|
585
|
+
)
|
|
586
|
+
expect(settled.filter((result) => result.status === "fulfilled")).toHaveLength(1)
|
|
587
|
+
const rejected = settled.filter(
|
|
588
|
+
(result): result is PromiseRejectedResult => result.status === "rejected"
|
|
589
|
+
)
|
|
590
|
+
expect(rejected).toHaveLength(1)
|
|
591
|
+
expect(rejected[0]?.reason).toMatchObject({ code: "active_child_limit" })
|
|
592
|
+
})
|
|
593
|
+
})
|
|
594
|
+
|
|
595
|
+
test("requires and round-trips a successful child result", async () => {
|
|
596
|
+
await withStorage(async (storage, fixture) => {
|
|
597
|
+
await createRunningParent(storage, fixture)
|
|
598
|
+
await createSubagent(storage, fixture)
|
|
599
|
+
await storage.runs.start({
|
|
600
|
+
projectId,
|
|
601
|
+
id: "child_1",
|
|
602
|
+
modelId: "small",
|
|
603
|
+
execution: execution("child_token"),
|
|
604
|
+
})
|
|
605
|
+
await expectAgentError(
|
|
606
|
+
storage.runs.finish({
|
|
607
|
+
projectId,
|
|
608
|
+
id: "child_1",
|
|
609
|
+
executionToken: "child_token",
|
|
610
|
+
status: "succeeded",
|
|
611
|
+
}),
|
|
612
|
+
"invalid_input"
|
|
613
|
+
)
|
|
614
|
+
await expectAgentError(
|
|
615
|
+
storage.runs.finish({
|
|
616
|
+
projectId,
|
|
617
|
+
id: "child_1",
|
|
618
|
+
executionToken: "child_token",
|
|
619
|
+
status: "succeeded",
|
|
620
|
+
result: {},
|
|
621
|
+
}),
|
|
622
|
+
"invalid_input"
|
|
623
|
+
)
|
|
624
|
+
|
|
625
|
+
const result = {
|
|
626
|
+
text: "Three open orders.",
|
|
627
|
+
files: [
|
|
628
|
+
{
|
|
629
|
+
blobId: `blob_${"a".repeat(64)}`,
|
|
630
|
+
digest: `sha256:${"a".repeat(64)}` as const,
|
|
631
|
+
fileName: "orders.csv",
|
|
632
|
+
mediaType: "text/csv",
|
|
633
|
+
sizeBytes: 42,
|
|
634
|
+
},
|
|
635
|
+
],
|
|
636
|
+
}
|
|
637
|
+
const completed = await storage.runs.finish({
|
|
638
|
+
projectId,
|
|
639
|
+
id: "child_1",
|
|
640
|
+
executionToken: "child_token",
|
|
641
|
+
status: "succeeded",
|
|
642
|
+
result,
|
|
643
|
+
})
|
|
644
|
+
expect(completed).toMatchObject({ status: "succeeded", result })
|
|
645
|
+
await expect(storage.runs.getById({ projectId, id: "child_1" })).resolves.toEqual(completed)
|
|
646
|
+
})
|
|
647
|
+
})
|
|
648
|
+
|
|
428
649
|
// ── single-flight execution ─────────────────────────────────────────────────────────────────
|
|
429
650
|
|
|
430
651
|
test("allows a single active run per thread", async () => {
|
|
@@ -68,8 +68,7 @@ function unpriceableCost(): Extract<AiModelCallCostRecord, { status: "unpriceabl
|
|
|
68
68
|
status: "unpriceable",
|
|
69
69
|
billingIdentity: { providerId: "vercel", modelId: "unpriced/model" },
|
|
70
70
|
pricingContext: {},
|
|
71
|
-
|
|
72
|
-
reason: "missingCatalogEntry",
|
|
71
|
+
reason: "missingRateCard",
|
|
73
72
|
ratedAt: new Date("2026-08-01T12:00:00.200Z"),
|
|
74
73
|
}
|
|
75
74
|
}
|
|
@@ -99,7 +98,75 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
|
|
|
99
98
|
})
|
|
100
99
|
).resolves.toMatchObject({
|
|
101
100
|
total: 1,
|
|
102
|
-
items: [
|
|
101
|
+
items: [
|
|
102
|
+
{
|
|
103
|
+
usage: {
|
|
104
|
+
id: "usage_1",
|
|
105
|
+
},
|
|
106
|
+
cost: ratedCost(),
|
|
107
|
+
valuationStatus: "rated",
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
})
|
|
111
|
+
} finally {
|
|
112
|
+
await options.cleanup?.(storage)
|
|
113
|
+
}
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
test("retains named, budgeted, and absent reasoning in accounting listings", async () => {
|
|
117
|
+
// Regression proof: omit requested_reasoning in either SQL accounting usageFromRow decoder.
|
|
118
|
+
const storage = await fixture()
|
|
119
|
+
try {
|
|
120
|
+
const page = await storage.listModelCalls({
|
|
121
|
+
projectId,
|
|
122
|
+
from: new Date("2026-08-01T00:00:00.000Z"),
|
|
123
|
+
to: new Date("2026-08-02T00:00:00.000Z"),
|
|
124
|
+
})
|
|
125
|
+
expect(page.items.map(({ usage }) => [usage.id, usage.requestedReasoning])).toEqual([
|
|
126
|
+
["usage_1", "high"],
|
|
127
|
+
["usage_2", { budgetTokens: 4_096 }],
|
|
128
|
+
["usage_3", undefined],
|
|
129
|
+
])
|
|
130
|
+
} finally {
|
|
131
|
+
await options.cleanup?.(storage)
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
test("retains an estimate beside an inline provider cost without double counting", async () => {
|
|
136
|
+
// Removal proof: drop estimate from the cost codec/normalizer, or sum it into the selected cost.
|
|
137
|
+
const storage = await fixture()
|
|
138
|
+
try {
|
|
139
|
+
const local = ratedCost()
|
|
140
|
+
const estimate = {
|
|
141
|
+
status: "rated" as const,
|
|
142
|
+
money: local.money,
|
|
143
|
+
components: local.components,
|
|
144
|
+
}
|
|
145
|
+
const report: AiModelCallCostRecord = {
|
|
146
|
+
...local,
|
|
147
|
+
status: "rated",
|
|
148
|
+
money: { currency: "USD", amountNanos: "80000" },
|
|
149
|
+
components: [],
|
|
150
|
+
priceSource: { ...priceSource("generation-1"), sourceId: "provider-reported" },
|
|
151
|
+
estimate,
|
|
152
|
+
}
|
|
153
|
+
await Promise.all([
|
|
154
|
+
storage.recordModelCallCost(report),
|
|
155
|
+
storage.recordModelCallCost(report),
|
|
156
|
+
])
|
|
157
|
+
expect(
|
|
158
|
+
(await storage.summarizeExecutions({ projectId, executionIds: [executionId] }))[0]
|
|
159
|
+
?.amounts
|
|
160
|
+
).toEqual([{ currency: "USD", amountNanos: "80000" }])
|
|
161
|
+
const page = await storage.listModelCalls({
|
|
162
|
+
projectId,
|
|
163
|
+
from: new Date("2026-08-01"),
|
|
164
|
+
to: new Date("2026-08-02"),
|
|
165
|
+
valuationStatus: "rated",
|
|
166
|
+
})
|
|
167
|
+
expect(page.items[0]?.cost).toMatchObject({
|
|
168
|
+
money: { amountNanos: "80000" },
|
|
169
|
+
estimate,
|
|
103
170
|
})
|
|
104
171
|
} finally {
|
|
105
172
|
await options.cleanup?.(storage)
|
|
@@ -115,11 +182,15 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
|
|
|
115
182
|
status: "unpriceable",
|
|
116
183
|
billingIdentity: { providerId: "openai", modelId: "gpt-5" },
|
|
117
184
|
pricingContext: { deploymentId: "production" },
|
|
118
|
-
priceSource: priceSource("openai/gpt-5"),
|
|
119
185
|
reason: "unsupportedPricingDimension",
|
|
120
186
|
ratedAt: new Date("2026-08-03T12:00:00.200Z"),
|
|
121
187
|
}
|
|
122
|
-
|
|
188
|
+
// Historical API allowed a report source even when no charge was available. This is
|
|
189
|
+
// ambiguous history, not a provider cost. Regression proof: classify solely by sourceId.
|
|
190
|
+
await storage.recordModelCallCost({
|
|
191
|
+
...unpriceableCost(),
|
|
192
|
+
priceSource: { ...priceSource("unavailable-report"), sourceId: "provider-reported" },
|
|
193
|
+
})
|
|
123
194
|
await storage.recordModelCallCost(deploymentCost)
|
|
124
195
|
await expect(
|
|
125
196
|
storage.listModelCalls({
|
|
@@ -238,6 +309,16 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
|
|
|
238
309
|
const mismatchError = await storage.recordModelCallCost(mismatch).catch((value) => value)
|
|
239
310
|
expect(mismatchError).toBeInstanceOf(AiCostStorageError)
|
|
240
311
|
expect((mismatchError as AiCostStorageError).code).toBe("cost_mismatch")
|
|
312
|
+
// Removal proof: skip the estimate check in aiModelCallCostMatchesUsage; this is accepted.
|
|
313
|
+
await expect(
|
|
314
|
+
storage.recordModelCallCost({
|
|
315
|
+
...base,
|
|
316
|
+
money: { currency: "USD", amountNanos: "1" },
|
|
317
|
+
components: [],
|
|
318
|
+
priceSource: { ...base.priceSource, sourceId: "provider-reported" },
|
|
319
|
+
estimate: { status: "rated", money: mismatch.money, components: mismatch.components },
|
|
320
|
+
})
|
|
321
|
+
).rejects.toMatchObject({ code: "cost_mismatch" })
|
|
241
322
|
} finally {
|
|
242
323
|
await options.cleanup?.(storage)
|
|
243
324
|
}
|
|
@@ -272,9 +353,15 @@ export async function seedAiCostStorageContractUsage(
|
|
|
272
353
|
}
|
|
273
354
|
|
|
274
355
|
for (const fixture of [
|
|
275
|
-
{ id: "usage_1", model: "openai/gpt-5", input: 12, output: 8 },
|
|
276
|
-
{
|
|
277
|
-
|
|
356
|
+
{ id: "usage_1", model: "openai/gpt-5", input: 12, output: 8, reasoning: "high" as const },
|
|
357
|
+
{
|
|
358
|
+
id: "usage_2",
|
|
359
|
+
model: "unpriced/model",
|
|
360
|
+
input: 1,
|
|
361
|
+
output: 1,
|
|
362
|
+
reasoning: { budgetTokens: 4_096 },
|
|
363
|
+
},
|
|
364
|
+
{ id: "usage_3", model: "openai/gpt-5", input: 2, output: 3, reasoning: undefined },
|
|
278
365
|
]) {
|
|
279
366
|
await usage.recordModelCall({
|
|
280
367
|
id: fixture.id,
|
|
@@ -285,6 +372,7 @@ export async function seedAiCostStorageContractUsage(
|
|
|
285
372
|
requesterGroupIds: [],
|
|
286
373
|
providerId: "gateway",
|
|
287
374
|
requestedModelId: fixture.model,
|
|
375
|
+
...(fixture.reasoning === undefined ? {} : { requestedReasoning: fixture.reasoning }),
|
|
288
376
|
responseId: `response_${projectId}_${fixture.id}`,
|
|
289
377
|
usage: {
|
|
290
378
|
inputTokens: fixture.input,
|