@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
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { AgentMessage, AgentMessagePart, AgentMessageRole } from "../../agents/message"
|
|
2
|
+
import type { AgentReasoningLevel } from "../../agents/types"
|
|
2
3
|
import type { Principal } from "../../auth"
|
|
4
|
+
import type { FileRef } from "../../blob-storage"
|
|
3
5
|
import type { SixbErrorCode, SixbFailure } from "../../errors/types"
|
|
4
6
|
import type { JsonValue } from "../../json"
|
|
7
|
+
import type { LanguageModelRef } from "../../models"
|
|
5
8
|
|
|
6
9
|
// ── agent_threads — one conversation with an agent ──────────────────────────────────────────────
|
|
7
10
|
|
|
@@ -10,7 +13,6 @@ export type AgentThreadStatus = "active" | "archived"
|
|
|
10
13
|
export interface AgentThreadRecord {
|
|
11
14
|
readonly id: string
|
|
12
15
|
readonly projectId: string
|
|
13
|
-
readonly agentId: string
|
|
14
16
|
/** Who owns/opened the thread. Reuses the canonical auth principal (gains `agent` later for free). */
|
|
15
17
|
readonly ownerPrincipal: Principal
|
|
16
18
|
readonly title?: string
|
|
@@ -26,7 +28,6 @@ export interface AgentThreadRecord {
|
|
|
26
28
|
export interface CreateAgentThreadInput {
|
|
27
29
|
readonly id: string
|
|
28
30
|
readonly projectId: string
|
|
29
|
-
readonly agentId: string
|
|
30
31
|
readonly ownerPrincipal: Principal
|
|
31
32
|
readonly title?: string
|
|
32
33
|
readonly status?: AgentThreadStatus
|
|
@@ -36,9 +37,6 @@ export interface CreateAgentThreadInput {
|
|
|
36
37
|
|
|
37
38
|
export interface ListAgentThreadsInput {
|
|
38
39
|
readonly projectId: string
|
|
39
|
-
readonly agentId?: string
|
|
40
|
-
/** Optional allowlist intersected with `agentId` when both are provided. Empty means no rows. */
|
|
41
|
-
readonly agentIds?: readonly string[]
|
|
42
40
|
readonly statuses?: readonly AgentThreadStatus[]
|
|
43
41
|
readonly ownerPrincipal?: Principal
|
|
44
42
|
readonly limit?: number
|
|
@@ -58,21 +56,23 @@ export interface ListAgentThreadsResult {
|
|
|
58
56
|
export type AgentExecutionStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled"
|
|
59
57
|
|
|
60
58
|
export type AgentRunStatus = AgentExecutionStatus
|
|
59
|
+
export type AgentRunKind = "conversation" | "subagent"
|
|
61
60
|
|
|
62
61
|
/** Error codes an agent execution can persist and expose through its public contract. */
|
|
63
62
|
export const AGENT_RUN_FAILURE_CODES = [
|
|
64
63
|
"internal.unexpected",
|
|
65
64
|
"runtime.cancelled",
|
|
66
65
|
"agent.execution_failed",
|
|
66
|
+
"ai.usage_limit_exceeded",
|
|
67
|
+
"ai.usage_limit_unavailable",
|
|
67
68
|
] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]
|
|
68
69
|
|
|
69
70
|
export type AgentRunFailureCode = (typeof AGENT_RUN_FAILURE_CODES)[number]
|
|
70
71
|
|
|
71
72
|
/**
|
|
72
|
-
* Why a run ended —
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* records *that* the run ended.
|
|
73
|
+
* Why a run ended — Sixb's provider-independent vocabulary. It includes model-loop reasons plus
|
|
74
|
+
* platform-level endings such as `timeout`, so reads remain typed and exhaustive. `other` and
|
|
75
|
+
* `unknown` preserve terminal state when a provider adds a new reason.
|
|
76
76
|
*/
|
|
77
77
|
export const AGENT_RUN_FINISH_REASONS = [
|
|
78
78
|
"stop",
|
|
@@ -144,13 +144,10 @@ export interface AgentRunExecution {
|
|
|
144
144
|
readonly queueLeaseExpiresAt: Date
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
|
|
147
|
+
interface AgentRunRecordBase {
|
|
148
148
|
readonly id: string
|
|
149
149
|
readonly projectId: string
|
|
150
150
|
readonly executionId: string
|
|
151
|
-
readonly threadId: string
|
|
152
|
-
readonly agentId: string
|
|
153
|
-
readonly triggerMessageId: string
|
|
154
151
|
/** Durable group memberships snapshotted when the run was admitted. */
|
|
155
152
|
readonly requesterGroupIds: readonly string[]
|
|
156
153
|
readonly status: AgentRunStatus
|
|
@@ -169,17 +166,73 @@ export interface AgentRunRecord {
|
|
|
169
166
|
readonly completedAt?: Date
|
|
170
167
|
}
|
|
171
168
|
|
|
169
|
+
export interface ConversationAgentRunRecord extends AgentRunRecordBase {
|
|
170
|
+
readonly kind: "conversation"
|
|
171
|
+
readonly threadId: string
|
|
172
|
+
readonly triggerMessageId: string
|
|
173
|
+
/** Immutable model selection captured at admission. Absent only on runs predating this field. */
|
|
174
|
+
readonly spec?: ConversationAgentRunSpec
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** Immutable, serialisable model selection for one conversational turn. */
|
|
178
|
+
export interface ConversationAgentRunSpec {
|
|
179
|
+
readonly model: LanguageModelRef
|
|
180
|
+
readonly reasoning?: AgentReasoningLevel
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Immutable, serialisable child configuration captured before dispatch. */
|
|
184
|
+
export interface SubagentRunSpec {
|
|
185
|
+
readonly model: LanguageModelRef
|
|
186
|
+
readonly reasoning?: AgentReasoningLevel
|
|
187
|
+
/** Focused task supplied by the parent Agent. */
|
|
188
|
+
readonly task: string
|
|
189
|
+
/** Project tools available when the child was admitted. Runtime tools are injected separately. */
|
|
190
|
+
readonly toolNames: readonly string[]
|
|
191
|
+
readonly maxSteps: number
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Durable child output returned to its parent by `wait_agent`. */
|
|
195
|
+
export interface SubagentRunResult {
|
|
196
|
+
readonly text?: string
|
|
197
|
+
readonly files?: readonly FileRef[]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export interface SubagentRunRecord extends AgentRunRecordBase {
|
|
201
|
+
readonly kind: "subagent"
|
|
202
|
+
readonly parentRunId: string
|
|
203
|
+
/** Stable parent-selected key that makes repeated tool execution idempotent. */
|
|
204
|
+
readonly spawnKey: string
|
|
205
|
+
readonly spec: SubagentRunSpec
|
|
206
|
+
readonly result?: SubagentRunResult
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export type AgentRunRecord = ConversationAgentRunRecord | SubagentRunRecord
|
|
210
|
+
|
|
172
211
|
export interface CreateAgentRunInput {
|
|
173
212
|
readonly id: string
|
|
174
213
|
readonly projectId: string
|
|
175
214
|
readonly executionId: string
|
|
176
215
|
readonly threadId: string
|
|
177
|
-
readonly agentId: string
|
|
178
216
|
readonly triggerMessageId: string
|
|
217
|
+
readonly spec: ConversationAgentRunSpec
|
|
179
218
|
readonly requesterGroupIds: readonly string[]
|
|
180
219
|
readonly createdAt?: Date
|
|
181
220
|
}
|
|
182
221
|
|
|
222
|
+
export interface CreateSubagentRunInput {
|
|
223
|
+
readonly id: string
|
|
224
|
+
readonly projectId: string
|
|
225
|
+
readonly executionId: string
|
|
226
|
+
readonly parentRunId: string
|
|
227
|
+
/** Current parent delivery token. New children are admitted only while that delivery owns it. */
|
|
228
|
+
readonly parentExecutionToken: string
|
|
229
|
+
readonly spawnKey: string
|
|
230
|
+
readonly spec: SubagentRunSpec
|
|
231
|
+
/** Internal safety bound enforced atomically across worker processes. */
|
|
232
|
+
readonly maxActiveChildren: number
|
|
233
|
+
readonly createdAt?: Date
|
|
234
|
+
}
|
|
235
|
+
|
|
183
236
|
export interface StartAgentRunInput {
|
|
184
237
|
readonly id: string
|
|
185
238
|
readonly projectId: string
|
|
@@ -219,6 +272,7 @@ export type FinishAgentRunInput =
|
|
|
219
272
|
readonly modelId?: string
|
|
220
273
|
readonly finishReason?: AgentRunFinishReason
|
|
221
274
|
readonly diagnostics?: readonly AgentRunDiagnostic[]
|
|
275
|
+
readonly result?: SubagentRunResult
|
|
222
276
|
readonly completedAt?: Date
|
|
223
277
|
}
|
|
224
278
|
| {
|
|
@@ -235,8 +289,9 @@ export type FinishAgentRunInput =
|
|
|
235
289
|
|
|
236
290
|
export interface ListAgentRunsInput {
|
|
237
291
|
readonly projectId: string
|
|
292
|
+
readonly kinds?: readonly AgentRunKind[]
|
|
238
293
|
readonly threadId?: string
|
|
239
|
-
readonly
|
|
294
|
+
readonly parentRunId?: string
|
|
240
295
|
readonly statuses?: readonly AgentRunStatus[]
|
|
241
296
|
/** Effective start time; runs that never started use `createdAt`. */
|
|
242
297
|
readonly startedAfter?: Date
|
|
@@ -371,7 +426,9 @@ export interface AgentThreadStore {
|
|
|
371
426
|
|
|
372
427
|
export interface AgentRunStore {
|
|
373
428
|
/** Persist a queued run and atomically claim the thread's single-flight slot. */
|
|
374
|
-
create(input: CreateAgentRunInput): Promise<
|
|
429
|
+
create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord>
|
|
430
|
+
/** Persist or replay one idempotent child run while atomically enforcing parent fan-out. */
|
|
431
|
+
createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord>
|
|
375
432
|
/** Transition a queued run to running and install the first delivery's execution token. */
|
|
376
433
|
start(input: StartAgentRunInput): Promise<AgentRunRecord>
|
|
377
434
|
/** Finish a queued run before execution and release the thread's single-flight slot. */
|
|
@@ -59,7 +59,8 @@ export interface AiAccountingAggregateFragment {
|
|
|
59
59
|
readonly start?: Date
|
|
60
60
|
readonly providerId?: string
|
|
61
61
|
readonly modelId?: string
|
|
62
|
-
readonly
|
|
62
|
+
readonly agentKind?: "agent" | "workflowAgent"
|
|
63
|
+
readonly agentStepId?: string
|
|
63
64
|
readonly workflowId?: string
|
|
64
65
|
readonly modelCallCount: string
|
|
65
66
|
readonly usage: {
|
|
@@ -154,7 +155,19 @@ export function buildAiAccountingOverview(
|
|
|
154
155
|
JSON.stringify([item.usage.providerId, item.usage.requestedModelId]),
|
|
155
156
|
item
|
|
156
157
|
)
|
|
157
|
-
if (item.attribution
|
|
158
|
+
if (item.attribution?.kind === "agent") {
|
|
159
|
+
appendGrouped(agentItems, JSON.stringify(["agent"]), item)
|
|
160
|
+
} else if (item.attribution?.kind === "workflowAgent") {
|
|
161
|
+
appendGrouped(
|
|
162
|
+
agentItems,
|
|
163
|
+
JSON.stringify([
|
|
164
|
+
"workflowAgent",
|
|
165
|
+
item.attribution.workflowId,
|
|
166
|
+
item.attribution.agentStepId,
|
|
167
|
+
]),
|
|
168
|
+
item
|
|
169
|
+
)
|
|
170
|
+
}
|
|
158
171
|
if (item.attribution?.kind === "workflowAgent") {
|
|
159
172
|
appendGrouped(workflowItems, item.attribution.workflowId, item)
|
|
160
173
|
}
|
|
@@ -171,7 +184,21 @@ export function buildAiAccountingOverview(
|
|
|
171
184
|
})
|
|
172
185
|
.sort(compareModelBreakdowns)
|
|
173
186
|
const agents: AiAccountingAgentBreakdown[] = [...agentItems]
|
|
174
|
-
.map(([
|
|
187
|
+
.map(([key, grouped]) => {
|
|
188
|
+
const [kind, workflowId, agentStepId] = JSON.parse(key) as [
|
|
189
|
+
"agent" | "workflowAgent",
|
|
190
|
+
string?,
|
|
191
|
+
string?,
|
|
192
|
+
]
|
|
193
|
+
return kind === "agent"
|
|
194
|
+
? { kind, ...aggregateAccountingItems(grouped) }
|
|
195
|
+
: {
|
|
196
|
+
kind,
|
|
197
|
+
workflowId: requiredFragmentString(workflowId, "workflowId"),
|
|
198
|
+
agentStepId: requiredFragmentString(agentStepId, "agentStepId"),
|
|
199
|
+
...aggregateAccountingItems(grouped),
|
|
200
|
+
}
|
|
201
|
+
})
|
|
175
202
|
.sort(compareAgentBreakdowns)
|
|
176
203
|
const workflows: AiAccountingWorkflowBreakdown[] = [...workflowItems]
|
|
177
204
|
.map(([workflowId, grouped]) => ({ workflowId, ...aggregateAccountingItems(grouped) }))
|
|
@@ -227,7 +254,14 @@ export function buildAiAccountingOverviewFromFragments(
|
|
|
227
254
|
)
|
|
228
255
|
break
|
|
229
256
|
case "agent":
|
|
230
|
-
target = getFragmentAccumulator(
|
|
257
|
+
target = getFragmentAccumulator(
|
|
258
|
+
agents,
|
|
259
|
+
JSON.stringify([
|
|
260
|
+
requiredFragmentString(fragment.agentKind, "agentKind"),
|
|
261
|
+
fragment.workflowId,
|
|
262
|
+
fragment.agentStepId,
|
|
263
|
+
])
|
|
264
|
+
)
|
|
231
265
|
break
|
|
232
266
|
case "workflow":
|
|
233
267
|
target = getFragmentAccumulator(
|
|
@@ -254,7 +288,21 @@ export function buildAiAccountingOverviewFromFragments(
|
|
|
254
288
|
})
|
|
255
289
|
.sort(compareModelBreakdowns),
|
|
256
290
|
agents: [...agents]
|
|
257
|
-
.map(([
|
|
291
|
+
.map(([key, value]) => {
|
|
292
|
+
const [kind, workflowId, agentStepId] = JSON.parse(key) as [
|
|
293
|
+
"agent" | "workflowAgent",
|
|
294
|
+
string?,
|
|
295
|
+
string?,
|
|
296
|
+
]
|
|
297
|
+
return kind === "agent"
|
|
298
|
+
? { kind, ...finishAggregateFragment(value) }
|
|
299
|
+
: {
|
|
300
|
+
kind,
|
|
301
|
+
workflowId: requiredFragmentString(workflowId, "workflowId"),
|
|
302
|
+
agentStepId: requiredFragmentString(agentStepId, "agentStepId"),
|
|
303
|
+
...finishAggregateFragment(value),
|
|
304
|
+
}
|
|
305
|
+
})
|
|
258
306
|
.sort(compareAgentBreakdowns),
|
|
259
307
|
workflows: [...workflows]
|
|
260
308
|
.map(([workflowId, value]) => ({ workflowId, ...finishAggregateFragment(value) }))
|
|
@@ -560,7 +608,16 @@ function compareAgentBreakdowns(
|
|
|
560
608
|
left: AiAccountingAgentBreakdown,
|
|
561
609
|
right: AiAccountingAgentBreakdown
|
|
562
610
|
): number {
|
|
563
|
-
return
|
|
611
|
+
return (
|
|
612
|
+
right.modelCallCount - left.modelCallCount ||
|
|
613
|
+
agentBreakdownKey(left).localeCompare(agentBreakdownKey(right))
|
|
614
|
+
)
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
function agentBreakdownKey(value: AiAccountingAgentBreakdown): string {
|
|
618
|
+
return value.kind === "agent"
|
|
619
|
+
? "agent"
|
|
620
|
+
: JSON.stringify(["workflowAgent", value.workflowId, value.agentStepId])
|
|
564
621
|
}
|
|
565
622
|
|
|
566
623
|
function compareWorkflowBreakdowns(
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type {
|
|
2
|
+
AiBillableMeter,
|
|
3
|
+
AiCostEstimate,
|
|
4
|
+
AiModelCallCostRecord,
|
|
5
|
+
AiPriceSource,
|
|
6
|
+
AiPricingContext,
|
|
7
|
+
} from "./types"
|
|
8
|
+
import { normalizeAiCostEstimate, normalizeAiPricingContext } from "./validation"
|
|
3
9
|
|
|
4
10
|
export interface AiModelCallCostDetails {
|
|
11
|
+
readonly estimate?: AiCostEstimate
|
|
5
12
|
readonly pricingContext: AiPricingContext
|
|
6
|
-
readonly priceSource
|
|
13
|
+
readonly priceSource?: Omit<AiPriceSource, "observedAt"> & {
|
|
7
14
|
readonly observedAt: string
|
|
8
15
|
}
|
|
9
16
|
readonly components?: Extract<AiModelCallCostRecord, { status: "rated" }>["components"]
|
|
@@ -12,8 +19,16 @@ export interface AiModelCallCostDetails {
|
|
|
12
19
|
|
|
13
20
|
export function aiModelCallCostDetails(record: AiModelCallCostRecord): AiModelCallCostDetails {
|
|
14
21
|
return {
|
|
22
|
+
...(record.estimate === undefined ? {} : { estimate: record.estimate }),
|
|
15
23
|
pricingContext: record.pricingContext,
|
|
16
|
-
|
|
24
|
+
...(record.priceSource === undefined
|
|
25
|
+
? {}
|
|
26
|
+
: {
|
|
27
|
+
priceSource: {
|
|
28
|
+
...record.priceSource,
|
|
29
|
+
observedAt: record.priceSource.observedAt.toISOString(),
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
17
32
|
...(record.status === "rated" ? { components: record.components } : {}),
|
|
18
33
|
...(record.status === "unpriceable" && record.missingMeters
|
|
19
34
|
? { missingMeters: record.missingMeters }
|
|
@@ -25,18 +40,25 @@ export function parseAiModelCallCostDetails(value: unknown): AiModelCallCostDeta
|
|
|
25
40
|
const parsed: unknown = typeof value === "string" ? JSON.parse(value) : value
|
|
26
41
|
if (!isRecord(parsed)) throw invalidDetails()
|
|
27
42
|
const priceSource = parsed.priceSource
|
|
28
|
-
if (!isRecord(priceSource)) throw invalidDetails()
|
|
43
|
+
if (priceSource !== undefined && !isRecord(priceSource)) throw invalidDetails()
|
|
29
44
|
const components = parsed.components
|
|
30
45
|
const missingMeters = parsed.missingMeters
|
|
31
46
|
return {
|
|
47
|
+
...(parsed.estimate === undefined
|
|
48
|
+
? {}
|
|
49
|
+
: { estimate: normalizeAiCostEstimate(parsed.estimate) }),
|
|
32
50
|
pricingContext: pricingContextFromUnknown(parsed.pricingContext),
|
|
33
|
-
priceSource
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
51
|
+
...(priceSource === undefined
|
|
52
|
+
? {}
|
|
53
|
+
: {
|
|
54
|
+
priceSource: {
|
|
55
|
+
sourceId: requiredString(priceSource.sourceId),
|
|
56
|
+
sourceEntryId: requiredString(priceSource.sourceEntryId),
|
|
57
|
+
sourceVersion: requiredString(priceSource.sourceVersion),
|
|
58
|
+
...optionalStringProperty(priceSource, "sourceUrl"),
|
|
59
|
+
observedAt: requiredString(priceSource.observedAt),
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
40
62
|
...(components === undefined ? {} : { components: costComponentsFromUnknown(components) }),
|
|
41
63
|
...(missingMeters === undefined ? {} : { missingMeters: metersFromUnknown(missingMeters) }),
|
|
42
64
|
}
|
|
@@ -50,6 +72,7 @@ function pricingContextFromUnknown(value: unknown): AiPricingContext {
|
|
|
50
72
|
...optionalStringProperty(value, "region"),
|
|
51
73
|
...optionalStringProperty(value, "inferenceGeo"),
|
|
52
74
|
...optionalStringProperty(value, "routedProviderId"),
|
|
75
|
+
...optionalStringProperty(value, "routedModelId"),
|
|
53
76
|
...optionalStringProperty(value, "deploymentId"),
|
|
54
77
|
...optionalStringProperty(value, "inferenceProfileId"),
|
|
55
78
|
...optionalNumberProperty(value, "cacheWriteTtlSeconds"),
|
|
@@ -83,6 +106,8 @@ function billableMeter(value: unknown): AiBillableMeter {
|
|
|
83
106
|
value !== "tokens.input.uncached" &&
|
|
84
107
|
value !== "tokens.input.cacheRead" &&
|
|
85
108
|
value !== "tokens.input.cacheWrite" &&
|
|
109
|
+
value !== "tokens.input.cacheWrite5m" &&
|
|
110
|
+
value !== "tokens.input.cacheWrite1h" &&
|
|
86
111
|
value !== "tokens.output.total" &&
|
|
87
112
|
value !== "tokens.output.text" &&
|
|
88
113
|
value !== "tokens.output.reasoning"
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { AiAccountingRecordSetItem } from "./analytics"
|
|
2
|
+
import { aiAccountingItemMatchesQuery, normalizeAiModelCallAccountingQuery } from "./analytics"
|
|
3
|
+
import type {
|
|
4
|
+
AiAccountingAttribution,
|
|
5
|
+
AiBillingIdentity,
|
|
6
|
+
AiCostSummary,
|
|
7
|
+
AiModelCallExecutionSummary,
|
|
8
|
+
AiModelCallGroup,
|
|
9
|
+
AiModelCallGroupSummary,
|
|
10
|
+
AiMoney,
|
|
11
|
+
ListAiModelCallGroupsInput,
|
|
12
|
+
ListAiModelCallGroupsResult,
|
|
13
|
+
} from "./types"
|
|
14
|
+
|
|
15
|
+
export interface AiAccountingGroupIdentity {
|
|
16
|
+
readonly executionId: string
|
|
17
|
+
readonly attribution?: AiAccountingAttribution
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** A compact SQL aggregate, never the raw provider response or a page of individual calls. */
|
|
21
|
+
export interface AiModelCallGroupFragment {
|
|
22
|
+
readonly root: AiAccountingGroupIdentity
|
|
23
|
+
readonly execution: AiAccountingGroupIdentity
|
|
24
|
+
readonly model: AiBillingIdentity
|
|
25
|
+
readonly firstCallAt: Date
|
|
26
|
+
readonly lastCallAt: Date
|
|
27
|
+
readonly callCount: string
|
|
28
|
+
readonly tokenCount: string
|
|
29
|
+
readonly totalTokens: string | null
|
|
30
|
+
readonly valuationStatus: "rated" | "unpriceable" | "unvalued"
|
|
31
|
+
readonly money?: AiMoney
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Common provider projection; SQL groups meters before returning rows to the runtime. */
|
|
35
|
+
export interface AiModelCallGroupRow {
|
|
36
|
+
readonly root_execution_id: string
|
|
37
|
+
readonly execution_id: string
|
|
38
|
+
readonly provider_id: string
|
|
39
|
+
readonly requested_model_id: string
|
|
40
|
+
readonly first_call_at: Date | string
|
|
41
|
+
readonly last_call_at: Date | string
|
|
42
|
+
readonly call_count: string
|
|
43
|
+
readonly token_count: string
|
|
44
|
+
readonly total_tokens: string | null
|
|
45
|
+
readonly valuation_status: AiModelCallGroupFragment["valuationStatus"]
|
|
46
|
+
readonly amount_currency: string | null
|
|
47
|
+
readonly amount_high: string | null
|
|
48
|
+
readonly amount_middle: string | null
|
|
49
|
+
readonly amount_low: string | null
|
|
50
|
+
readonly root_agent_run_id: string | null
|
|
51
|
+
readonly root_thread_id: string | null
|
|
52
|
+
readonly direct_kind: string | null
|
|
53
|
+
readonly direct_run_id: string | null
|
|
54
|
+
readonly parent_run_id: string | null
|
|
55
|
+
readonly workflow_agent_step_id: string | null
|
|
56
|
+
readonly workflow_node_run_id: string | null
|
|
57
|
+
readonly workflow_id: string | null
|
|
58
|
+
readonly workflow_run_id: string | null
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function aiModelCallGroupFragmentFromRow(
|
|
62
|
+
row: AiModelCallGroupRow
|
|
63
|
+
): AiModelCallGroupFragment {
|
|
64
|
+
let attribution: AiAccountingAttribution | undefined
|
|
65
|
+
if (row.root_agent_run_id && row.root_thread_id) {
|
|
66
|
+
attribution = {
|
|
67
|
+
kind: "agent",
|
|
68
|
+
agentRunId: row.root_agent_run_id,
|
|
69
|
+
threadId: row.root_thread_id,
|
|
70
|
+
}
|
|
71
|
+
} else if (
|
|
72
|
+
row.workflow_agent_step_id &&
|
|
73
|
+
row.workflow_node_run_id &&
|
|
74
|
+
row.workflow_id &&
|
|
75
|
+
row.workflow_run_id
|
|
76
|
+
) {
|
|
77
|
+
attribution = {
|
|
78
|
+
kind: "workflowAgent",
|
|
79
|
+
agentStepId: row.workflow_agent_step_id,
|
|
80
|
+
nodeRunId: row.workflow_node_run_id,
|
|
81
|
+
workflowId: row.workflow_id,
|
|
82
|
+
workflowRunId: row.workflow_run_id,
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const executionAttribution: AiAccountingAttribution | undefined =
|
|
86
|
+
row.direct_kind === "subagent" && row.direct_run_id && row.parent_run_id
|
|
87
|
+
? { kind: "subagent", subagentRunId: row.direct_run_id, parentRunId: row.parent_run_id }
|
|
88
|
+
: attribution
|
|
89
|
+
return {
|
|
90
|
+
root: { executionId: row.root_execution_id, attribution },
|
|
91
|
+
execution: { executionId: row.execution_id, attribution: executionAttribution },
|
|
92
|
+
model: { providerId: row.provider_id, modelId: row.requested_model_id },
|
|
93
|
+
firstCallAt: new Date(row.first_call_at),
|
|
94
|
+
lastCallAt: new Date(row.last_call_at),
|
|
95
|
+
callCount: row.call_count,
|
|
96
|
+
tokenCount: row.token_count,
|
|
97
|
+
totalTokens: row.total_tokens,
|
|
98
|
+
valuationStatus: row.valuation_status,
|
|
99
|
+
...(row.amount_currency === null
|
|
100
|
+
? {}
|
|
101
|
+
: {
|
|
102
|
+
money: {
|
|
103
|
+
currency: row.amount_currency,
|
|
104
|
+
amountNanos: (
|
|
105
|
+
BigInt(row.amount_high ?? "0") * 1_000_000_000_000n +
|
|
106
|
+
BigInt(row.amount_middle ?? "0") * 1_000_000n +
|
|
107
|
+
BigInt(row.amount_low ?? "0")
|
|
108
|
+
).toString(),
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function buildAiModelCallGroupsFromFragments(
|
|
115
|
+
fragments: readonly AiModelCallGroupFragment[]
|
|
116
|
+
): readonly AiModelCallGroup[] {
|
|
117
|
+
const roots = new Map<string, AiModelCallGroupFragment[]>()
|
|
118
|
+
for (const fragment of fragments) append(roots, fragment.root.executionId, fragment)
|
|
119
|
+
return [...roots.values()]
|
|
120
|
+
.map((rootFragments): AiModelCallGroup => {
|
|
121
|
+
const first = rootFragments[0]!
|
|
122
|
+
const executions = new Map<string, AiModelCallGroupFragment[]>()
|
|
123
|
+
for (const fragment of rootFragments)
|
|
124
|
+
append(executions, fragment.execution.executionId, fragment)
|
|
125
|
+
return {
|
|
126
|
+
...first.root,
|
|
127
|
+
...summarize(rootFragments),
|
|
128
|
+
...timeRange(rootFragments),
|
|
129
|
+
executions: [...executions.values()]
|
|
130
|
+
.map(
|
|
131
|
+
(items): AiModelCallExecutionSummary => ({
|
|
132
|
+
...items[0]!.execution,
|
|
133
|
+
...summarize(items),
|
|
134
|
+
...timeRange(items),
|
|
135
|
+
models: [
|
|
136
|
+
...new Map(items.map(({ model }) => [JSON.stringify(model), model])).values(),
|
|
137
|
+
].sort(
|
|
138
|
+
(a, b) =>
|
|
139
|
+
compareText(a.providerId, b.providerId) || compareText(a.modelId, b.modelId)
|
|
140
|
+
),
|
|
141
|
+
})
|
|
142
|
+
)
|
|
143
|
+
.sort(
|
|
144
|
+
(a, b) =>
|
|
145
|
+
a.firstCallAt.getTime() - b.firstCallAt.getTime() ||
|
|
146
|
+
compareText(a.executionId, b.executionId)
|
|
147
|
+
),
|
|
148
|
+
}
|
|
149
|
+
})
|
|
150
|
+
.sort(
|
|
151
|
+
(a, b) =>
|
|
152
|
+
b.lastCallAt.getTime() - a.lastCallAt.getTime() || compareText(a.executionId, b.executionId)
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function buildAiModelCallGroups(
|
|
157
|
+
input: ListAiModelCallGroupsInput,
|
|
158
|
+
source: readonly (AiAccountingRecordSetItem & { readonly root: AiAccountingGroupIdentity })[]
|
|
159
|
+
): ListAiModelCallGroupsResult {
|
|
160
|
+
const query = normalizeAiModelCallAccountingQuery(input)
|
|
161
|
+
const fragments = source
|
|
162
|
+
.filter(
|
|
163
|
+
(item) =>
|
|
164
|
+
aiAccountingItemMatchesQuery(item, query) &&
|
|
165
|
+
(query.valuationStatus === undefined ||
|
|
166
|
+
(item.cost?.status ?? "unvalued") === query.valuationStatus)
|
|
167
|
+
)
|
|
168
|
+
.map(
|
|
169
|
+
(item): AiModelCallGroupFragment => ({
|
|
170
|
+
root: item.root,
|
|
171
|
+
execution: { executionId: item.usage.executionId, attribution: item.attribution },
|
|
172
|
+
model: { providerId: item.usage.providerId, modelId: item.usage.requestedModelId },
|
|
173
|
+
firstCallAt: item.usage.occurredAt,
|
|
174
|
+
lastCallAt: item.usage.occurredAt,
|
|
175
|
+
callCount: "1",
|
|
176
|
+
tokenCount: item.usage.usage.totalTokens === undefined ? "0" : "1",
|
|
177
|
+
totalTokens: item.usage.usage.totalTokens?.toString() ?? null,
|
|
178
|
+
valuationStatus: item.cost?.status ?? "unvalued",
|
|
179
|
+
...(item.cost && item.cost.status !== "unpriceable" ? { money: item.cost.money } : {}),
|
|
180
|
+
})
|
|
181
|
+
)
|
|
182
|
+
const groups = buildAiModelCallGroupsFromFragments(fragments)
|
|
183
|
+
const items = groups.slice(query.offset, query.offset + query.limit)
|
|
184
|
+
return structuredClone({
|
|
185
|
+
items,
|
|
186
|
+
total: groups.length,
|
|
187
|
+
hasMore: query.offset + items.length < groups.length,
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function summarize(items: readonly AiModelCallGroupFragment[]): AiModelCallGroupSummary {
|
|
192
|
+
let calls = 0n
|
|
193
|
+
let tokenCount = 0n
|
|
194
|
+
let tokens = 0n
|
|
195
|
+
const counts = { rated: 0n, unpriceable: 0n, unvalued: 0n }
|
|
196
|
+
const money = new Map<string, bigint>()
|
|
197
|
+
for (const item of items) {
|
|
198
|
+
const count = BigInt(item.callCount)
|
|
199
|
+
calls += count
|
|
200
|
+
tokenCount += BigInt(item.tokenCount)
|
|
201
|
+
tokens += BigInt(item.totalTokens ?? "0")
|
|
202
|
+
counts[item.valuationStatus] += count
|
|
203
|
+
if (item.money)
|
|
204
|
+
money.set(
|
|
205
|
+
item.money.currency,
|
|
206
|
+
(money.get(item.money.currency) ?? 0n) + BigInt(item.money.amountNanos)
|
|
207
|
+
)
|
|
208
|
+
}
|
|
209
|
+
const costs: AiCostSummary = {
|
|
210
|
+
amounts: [...money]
|
|
211
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
212
|
+
.map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),
|
|
213
|
+
ratedCallCount: safeCount(counts.rated),
|
|
214
|
+
unpriceableCallCount: safeCount(counts.unpriceable),
|
|
215
|
+
unvaluedCallCount: safeCount(counts.unvalued),
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
modelCallCount: safeCount(calls),
|
|
219
|
+
...(calls === tokenCount ? { totalTokens: safeCount(tokens) } : {}),
|
|
220
|
+
costs,
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function timeRange(items: readonly AiModelCallGroupFragment[]) {
|
|
225
|
+
let first = items[0]!.firstCallAt.getTime()
|
|
226
|
+
let last = items[0]!.lastCallAt.getTime()
|
|
227
|
+
for (const item of items) {
|
|
228
|
+
first = Math.min(first, item.firstCallAt.getTime())
|
|
229
|
+
last = Math.max(last, item.lastCallAt.getTime())
|
|
230
|
+
}
|
|
231
|
+
return { firstCallAt: new Date(first), lastCallAt: new Date(last) }
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function compareText(a: string, b: string): number {
|
|
235
|
+
return a === b ? 0 : a < b ? -1 : 1
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function safeCount(value: bigint): number {
|
|
239
|
+
if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER))
|
|
240
|
+
throw new RangeError("[Sixb] AI accounting group count exceeds the safe integer range.")
|
|
241
|
+
return Number(value)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function append<T>(map: Map<string, T[]>, key: string, item: T): void {
|
|
245
|
+
const items = map.get(key)
|
|
246
|
+
if (items) items.push(item)
|
|
247
|
+
else map.set(key, [item])
|
|
248
|
+
}
|