@sixb/core 0.1.17 → 0.1.18
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 +22 -19
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +6 -2
- package/dist/actions/worker.js.map +3 -3
- package/dist/agents/adapters.d.ts +7 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +7 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context/entries.d.ts +10 -1
- package/dist/agents/context/entries.d.ts.map +1 -1
- package/dist/agents/context/index.d.ts +1 -1
- package/dist/agents/context/index.d.ts.map +1 -1
- package/dist/agents/context/index.js +4 -2
- package/dist/agents/context/index.js.map +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +44 -37
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +8 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/request.d.ts +19 -5
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts +41 -0
- package/dist/agents/skills.d.ts.map +1 -0
- package/dist/agents/streams/index.js +1 -1
- package/dist/agents/streams/internal.js +1 -1
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +9 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/types.d.ts +6 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/index.js +5 -3
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/file-content.d.ts +18 -0
- package/dist/blob-storage/file-content.d.ts.map +1 -0
- package/dist/blob-storage/index.d.ts +1 -1
- package/dist/blob-storage/index.d.ts.map +1 -1
- package/dist/blob-storage/index.js +2 -2
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -1
- package/dist/blob-storage/internal.js +16 -4
- package/dist/blob-storage/internal.js.map +1 -1
- package/dist/blob-storage/media-type.d.ts +8 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -0
- package/dist/blob-storage/types.d.ts +12 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/blob-storage/validation.d.ts +6 -0
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/agent-context.d.ts +33 -0
- package/dist/bootstrap/agent-context.d.ts.map +1 -0
- package/dist/bootstrap/discovery.d.ts +23 -3
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +284 -73
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-gf7yht60.js → chunk-1b1f2d5f.js} +23 -6
- package/dist/chunk-1b1f2d5f.js.map +12 -0
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
- package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
- package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
- package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
- package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
- package/dist/{chunk-2am3db31.js → chunk-48e3cn2d.js} +2 -2
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-svabwqdq.js → chunk-6h5m9xjx.js} +43 -415
- package/dist/{chunk-svabwqdq.js.map → chunk-6h5m9xjx.js.map} +7 -11
- package/dist/{chunk-f1xh7a32.js → chunk-7hpdd6r9.js} +2 -2
- package/dist/{chunk-xyvy73tj.js → chunk-bs7sqkre.js} +8 -3
- package/dist/chunk-bs7sqkre.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-t9shqx3w.js → chunk-d0eb5yy6.js} +143 -7
- package/dist/chunk-d0eb5yy6.js.map +14 -0
- package/dist/{chunk-vp3z1ckh.js → chunk-de4z2bj6.js} +5 -5
- package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
- package/dist/chunk-enpsx8k5.js +127 -0
- package/dist/chunk-enpsx8k5.js.map +10 -0
- package/dist/{chunk-a7er86jd.js → chunk-ex496vct.js} +1 -1
- package/dist/{chunk-jnfxmr3f.js → chunk-f1zxad2t.js} +1 -1
- package/dist/{chunk-6wbm6ymz.js → chunk-fe52eczz.js} +271 -83
- package/dist/chunk-fe52eczz.js.map +49 -0
- package/dist/{chunk-10styjgk.js → chunk-fx93hd2n.js} +71 -29
- package/dist/chunk-fx93hd2n.js.map +20 -0
- package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
- package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
- package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
- package/dist/chunk-hkc3jct7.js.map +10 -0
- package/dist/{chunk-pja9jfz6.js → chunk-htr6wjmv.js} +115 -53
- package/dist/chunk-htr6wjmv.js.map +19 -0
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-52c5zb0z.js → chunk-k6hrnf35.js} +5 -5
- package/dist/chunk-k6hrnf35.js.map +10 -0
- package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
- package/dist/{chunk-7ecp4v7a.js → chunk-ny3xyvcn.js} +8 -2
- package/dist/{chunk-7ecp4v7a.js.map → chunk-ny3xyvcn.js.map} +3 -3
- package/dist/{chunk-fggq3d9k.js → chunk-p0dqwj3n.js} +5 -5
- package/dist/{chunk-cnb5kv05.js → chunk-p844e0rn.js} +23 -8
- package/dist/chunk-p844e0rn.js.map +19 -0
- package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
- package/dist/chunk-pfp1txq2.js.map +11 -0
- package/dist/chunk-pqajwytd.js.map +2 -2
- package/dist/{chunk-5be2ath4.js → chunk-qkbx3tf6.js} +17 -128
- package/dist/{chunk-5be2ath4.js.map → chunk-qkbx3tf6.js.map} +6 -7
- package/dist/{chunk-sk0hcjsz.js → chunk-qkvz64nd.js} +2 -2
- package/dist/{chunk-w9yycd3t.js → chunk-qmnnhde6.js} +4 -8
- package/dist/{chunk-w9yycd3t.js.map → chunk-qmnnhde6.js.map} +3 -3
- package/dist/{chunk-5yd8cchh.js → chunk-qq90g05n.js} +8 -8
- package/dist/{chunk-5yd8cchh.js.map → chunk-qq90g05n.js.map} +1 -1
- package/dist/{chunk-tjjgy3z4.js → chunk-qxvp5epv.js} +66 -14
- package/dist/{chunk-tjjgy3z4.js.map → chunk-qxvp5epv.js.map} +9 -8
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-rx7h5fdx.js → chunk-rt9p8m9t.js} +1 -1
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-xcy5ddha.js → chunk-s4jhg8a3.js} +351 -296
- package/dist/chunk-s4jhg8a3.js.map +15 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-9g6jz9kk.js → chunk-tffvfy6s.js} +6 -5
- package/dist/{chunk-9g6jz9kk.js.map → chunk-tffvfy6s.js.map} +3 -3
- package/dist/{chunk-e67ynxcr.js → chunk-v6xpd60t.js} +3 -3
- package/dist/{chunk-jjrn5v0p.js → chunk-vgk3hknm.js} +1 -1
- package/dist/{chunk-5thzcb8g.js → chunk-vx2yp45y.js} +2 -2
- package/dist/{chunk-dam456ve.js → chunk-vz3gc1tm.js} +394 -31
- package/dist/{chunk-dam456ve.js.map → chunk-vz3gc1tm.js.map} +10 -7
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/{chunk-rpxz486p.js → chunk-y05543x6.js} +21 -5
- package/dist/{chunk-rpxz486p.js.map → chunk-y05543x6.js.map} +3 -3
- package/dist/{chunk-aq39q04r.js → chunk-y9jmd7e5.js} +4 -4
- package/dist/{chunk-aq39q04r.js.map → chunk-y9jmd7e5.js.map} +1 -1
- package/dist/{chunk-k4g51s47.js → chunk-yv9czyfr.js} +3 -3
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- package/dist/{chunk-vre348sb.js → chunk-za5yd58j.js} +2 -2
- package/dist/{chunk-23xs4qp9.js → chunk-zb77kjth.js} +3 -3
- package/dist/{chunk-33saed7g.js → chunk-zxawp1n2.js} +1 -1
- package/dist/datasets/builders.d.ts +12 -1
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +27 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -1
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/types.d.ts +2 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +5 -0
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +10 -5
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/properties.d.ts.map +1 -1
- package/dist/events/execution.d.ts +2 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/objects.d.ts +5 -0
- package/dist/events/types/objects.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +10 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -34
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +6 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +37 -34
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +38 -35
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -52
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +8 -5
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/materializer/index.js +19 -16
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/catalog.d.ts +1 -1
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +6 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.js +19 -16
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +4 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/language-model.d.ts +6 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/objects/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +6 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +2 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +23 -19
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +41 -0
- package/dist/objects/property-clearance.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +18 -15
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/validate.d.ts +10 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/file-handle.d.ts +6 -0
- package/dist/objects/sdk/file-handle.d.ts.map +1 -0
- package/dist/objects/sdk/object-handle.d.ts +2 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -0
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +12 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +35 -0
- package/dist/ontology/docs-markdown.d.ts.map +1 -0
- package/dist/ontology/docs.d.ts +50 -0
- package/dist/ontology/docs.d.ts.map +1 -0
- package/dist/ontology/index.js +7 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +19 -0
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +3 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +276 -3
- package/dist/ontology/internal.js.map +4 -3
- package/dist/ontology/tokens.d.ts +8 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +5 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +7 -0
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +21 -18
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +19 -16
- package/dist/projections/internal.js.map +1 -1
- package/dist/runtime/create.d.ts +11 -2
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -1
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +13 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +21 -18
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/locale.d.ts +9 -0
- package/dist/runtime/locale.d.ts.map +1 -0
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +30 -3
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/runtime.d.ts +3 -0
- package/dist/scheduler/runtime.d.ts.map +1 -1
- package/dist/security/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/index.d.ts +4 -4
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/markings.d.ts +19 -0
- package/dist/security/markings.d.ts.map +1 -0
- package/dist/security/redactions.d.ts +4 -0
- package/dist/security/redactions.d.ts.map +1 -0
- package/dist/security/registry.d.ts +7 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +25 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +18 -15
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +5 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +15 -9
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.js +10 -7
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +18 -15
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +4 -3
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/types.d.ts +7 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +22 -19
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/index.js +55 -53
- package/dist/testing/index.js.map +2 -2
- package/dist/webhooks/internal.js +19 -16
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +41 -38
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -3
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +2 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actions/read-facade.ts +2 -1
- package/src/actions/validation.ts +4 -1
- package/src/agents/adapters.ts +15 -0
- package/src/agents/authority.ts +15 -0
- package/src/agents/context/entries.ts +48 -4
- package/src/agents/context/index.ts +1 -0
- package/src/agents/context-compaction.ts +6 -0
- package/src/agents/errors.ts +3 -0
- package/src/agents/index.ts +13 -1
- package/src/agents/message.ts +9 -0
- package/src/agents/request.ts +178 -22
- package/src/agents/skills.ts +63 -0
- package/src/agents/types.ts +35 -5
- package/src/auth/runtime.ts +14 -0
- package/src/auth/types.ts +6 -0
- package/src/authorization/resolve.ts +6 -1
- package/src/authorization/types.ts +7 -0
- package/src/blob-storage/execution.ts +12 -0
- package/src/blob-storage/file-content.ts +106 -0
- package/src/blob-storage/index.ts +1 -0
- package/src/blob-storage/internal.ts +7 -0
- package/src/blob-storage/media-type.ts +29 -0
- package/src/blob-storage/types.ts +13 -1
- package/src/blob-storage/validation.ts +13 -0
- package/src/bootstrap/agent-context.ts +356 -0
- package/src/bootstrap/discovery.ts +100 -33
- package/src/bootstrap/index.ts +1 -1
- package/src/bootstrap/ontology-type-manifest.ts +3 -38
- package/src/datasets/builders.ts +17 -1
- package/src/datasets/execution.ts +110 -2
- package/src/datasets/index.ts +7 -1
- package/src/datasets/types.ts +2 -0
- package/src/datasets/write.ts +21 -2
- package/src/edits/properties.ts +3 -0
- package/src/events/execution.ts +15 -16
- package/src/events/types/objects.ts +5 -0
- package/src/execution/agent.ts +27 -0
- package/src/execution/authorization.ts +1 -0
- package/src/execution/authorized-object-reader.ts +96 -34
- package/src/execution/scopes.ts +2 -6
- package/src/http/api-routes.ts +4 -3
- package/src/index.ts +27 -2
- package/src/models/catalog.ts +26 -2
- package/src/models/execution/README.md +4 -3
- package/src/models/execution/binding.ts +6 -0
- package/src/models/execution/model-call-recorder.ts +10 -0
- package/src/models/execution/session.ts +2 -2
- package/src/models/execution.ts +6 -2
- package/src/models/language-model.ts +6 -0
- package/src/objects/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +4 -1
- package/src/objects/materializer-adapter.ts +3 -0
- package/src/objects/object/upsert-batch.ts +4 -1
- package/src/objects/object/upsert.ts +3 -1
- package/src/objects/property-clearance.ts +209 -0
- package/src/objects/query/executor.ts +43 -36
- package/src/objects/query/validate.ts +133 -14
- package/src/objects/sdk/file-handle.ts +77 -0
- package/src/objects/sdk/object-handle.ts +8 -4
- package/src/objects/sdk/object-set.ts +5 -2
- package/src/ontology/builders.ts +18 -2
- package/src/ontology/docs-markdown.ts +394 -0
- package/src/ontology/docs.ts +196 -0
- package/src/ontology/inference/index.ts +25 -0
- package/src/ontology/internal.ts +7 -0
- package/src/ontology/tokens.ts +13 -2
- package/src/ontology/types.ts +5 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/schema.ts +26 -1
- package/src/runtime/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +45 -1
- package/src/runtime/index.ts +3 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/resolve-definitions.ts +28 -1
- package/src/runtime/sixb.ts +1 -1
- package/src/runtime/types.ts +39 -3
- package/src/scheduler/runtime.ts +11 -2
- package/src/security/builders.ts +49 -5
- package/src/security/index.ts +6 -1
- package/src/security/markings.ts +313 -0
- package/src/security/redactions.ts +6 -0
- package/src/security/registry.ts +21 -1
- package/src/security/types.ts +26 -0
- package/src/security/validation.ts +59 -2
- package/src/storage/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/index.ts +1 -0
- package/src/storage/objects/types.ts +7 -0
- package/src/workflows/builders.ts +24 -1
- package/src/workflows/request.ts +3 -0
- package/src/workflows/types.ts +6 -3
- package/src/workflows/validation.ts +32 -4
- package/dist/chunk-10styjgk.js.map +0 -20
- package/dist/chunk-52c5zb0z.js.map +0 -10
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6wbm6ymz.js.map +0 -48
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-cnb5kv05.js.map +0 -19
- package/dist/chunk-dmn70ztd.js.map +0 -11
- package/dist/chunk-gf7yht60.js.map +0 -12
- package/dist/chunk-h3v76ams.js.map +0 -11
- package/dist/chunk-pja9jfz6.js.map +0 -19
- package/dist/chunk-t9shqx3w.js.map +0 -12
- package/dist/chunk-xcy5ddha.js.map +0 -15
- package/dist/chunk-xyvy73tj.js.map +0 -12
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
- /package/dist/{chunk-2am3db31.js.map → chunk-48e3cn2d.js.map} +0 -0
- /package/dist/{chunk-f1xh7a32.js.map → chunk-7hpdd6r9.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-vp3z1ckh.js.map → chunk-de4z2bj6.js.map} +0 -0
- /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
- /package/dist/{chunk-a7er86jd.js.map → chunk-ex496vct.js.map} +0 -0
- /package/dist/{chunk-jnfxmr3f.js.map → chunk-f1zxad2t.js.map} +0 -0
- /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-fggq3d9k.js.map → chunk-p0dqwj3n.js.map} +0 -0
- /package/dist/{chunk-sk0hcjsz.js.map → chunk-qkvz64nd.js.map} +0 -0
- /package/dist/{chunk-rx7h5fdx.js.map → chunk-rt9p8m9t.js.map} +0 -0
- /package/dist/{chunk-e67ynxcr.js.map → chunk-v6xpd60t.js.map} +0 -0
- /package/dist/{chunk-jjrn5v0p.js.map → chunk-vgk3hknm.js.map} +0 -0
- /package/dist/{chunk-5thzcb8g.js.map → chunk-vx2yp45y.js.map} +0 -0
- /package/dist/{chunk-k4g51s47.js.map → chunk-yv9czyfr.js.map} +0 -0
- /package/dist/{chunk-vre348sb.js.map → chunk-za5yd58j.js.map} +0 -0
- /package/dist/{chunk-23xs4qp9.js.map → chunk-zb77kjth.js.map} +0 -0
- /package/dist/{chunk-33saed7g.js.map → chunk-zxawp1n2.js.map} +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/blob-storage/derive.ts", "../src/blob-storage/media-type.ts", "../src/blob-storage/validation.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { BlobDigest } from \"./types\"\n\n// Pure, crypto-free derivations of blob identity from a digest. Kept out of\n// `utils.ts` (which imports `node:crypto`) so the browser-safe `./browser`\n// barrel can reuse them without dragging Node crypto into the client bundle.\n\nexport function blobDigestHex(digest: BlobDigest): string {\n return digest.slice(\"sha256:\".length)\n}\n\nexport function blobIdFromDigest(digest: BlobDigest): string {\n return `blob_${blobDigestHex(digest)}`\n}\n",
|
|
6
|
+
"// One media type as RFC 9110 defines it: `type/subtype`, each a token, then optional\n// `;name=value` parameters whose value is a token or a quoted string. Stricter than the RFC where\n// leniency only invites a second reading: no surrounding whitespace, no empty parameters, no\n// escapes, and no comma anywhere. Browsers read a comma-separated value as a list of types and\n// use the last valid one, so a value with a comma can mean something other than its first type.\nconst TOKEN = \"[!#$%&'*+.^_`|~0-9A-Za-z-]+\"\nconst QUOTED_STRING = '\"[\\\\t\\\\x20\\\\x21\\\\x23-\\\\x2b\\\\x2d-\\\\x5b\\\\x5d-\\\\x7e]*\"'\nconst PARAMETER = `[\\\\t ]*;[\\\\t ]*(${TOKEN})=(${TOKEN}|${QUOTED_STRING})`\nconst MEDIA_TYPE_PATTERN = new RegExp(`^(${TOKEN})/(${TOKEN})((?:${PARAMETER})*)$`)\nconst PARAMETER_PATTERN = new RegExp(PARAMETER, \"g\")\n\n/**\n * The canonical form of a single well-formed media type, or `null` for anything else.\n *\n * Type, subtype, and parameter names are case-insensitive, so they are lowercased; parameter\n * values keep their case. `\"Text/Plain; Charset=UTF-8\"` becomes `\"text/plain;charset=UTF-8\"`.\n */\nexport function canonicalMediaType(value: unknown): string | null {\n if (typeof value !== \"string\") return null\n const match = MEDIA_TYPE_PATTERN.exec(value)\n if (!match) return null\n\n const [, type, subtype, parameters] = match\n let canonical = `${type.toLowerCase()}/${subtype.toLowerCase()}`\n for (const [, name, parameterValue] of parameters.matchAll(PARAMETER_PATTERN)) {\n canonical += `;${name.toLowerCase()}=${parameterValue}`\n }\n return canonical\n}\n",
|
|
7
|
+
"import { isPlainRecord } from \"../json\"\nimport { blobIdFromDigest } from \"./derive\"\nimport { canonicalMediaType } from \"./media-type\"\nimport type {\n BlobDigest,\n BlobStorage,\n DirectUploadBlobStorage,\n FileRef,\n RangeReadableBlobStorage,\n} from \"./types\"\n\nexport function isBlobDigest(value: unknown): value is BlobDigest {\n return typeof value === \"string\" && value.startsWith(\"sha256:\") && value.length > \"sha256:\".length\n}\n\nexport function isFileRef(value: unknown): value is FileRef {\n return (\n isPlainRecord(value) &&\n typeof value.blobId === \"string\" &&\n value.blobId.trim().length > 0 &&\n isBlobDigest(value.digest) &&\n // Blob identity is content-addressed: the id must be derivable from the digest.\n // Rejecting a mismatch guards against tampered or malformed references.\n value.blobId === blobIdFromDigest(value.digest) &&\n typeof value.sizeBytes === \"number\" &&\n Number.isInteger(value.sizeBytes) &&\n value.sizeBytes >= 0 &&\n (value.fileName === undefined || typeof value.fileName === \"string\") &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\") &&\n (value.logicalPath === undefined || typeof value.logicalPath === \"string\")\n )\n}\n\n/**\n * `isFileRef`, plus a `mediaType` that, when present, is exactly one media type. Paths that store\n * a reference a caller hands them use this. Reads keep `isFileRef`, so references stored before\n * the rule still load; file routes re-parse the type before serving it.\n */\nexport function isValidFileRef(value: unknown): value is FileRef {\n return (\n isFileRef(value) &&\n (value.mediaType === undefined || canonicalMediaType(value.mediaType) !== null)\n )\n}\n\nexport function supportsDirectUpload(\n storage: BlobStorage\n): storage is BlobStorage & DirectUploadBlobStorage {\n const candidate = storage as Partial<DirectUploadBlobStorage>\n return (\n typeof candidate.createUpload === \"function\" &&\n typeof candidate.signUploadPart === \"function\" &&\n typeof candidate.completeUpload === \"function\" &&\n typeof candidate.abortUpload === \"function\"\n )\n}\n\nexport function supportsRangeRead(\n storage: BlobStorage\n): storage is BlobStorage & RangeReadableBlobStorage {\n const candidate = storage as Partial<RangeReadableBlobStorage>\n return typeof candidate.openRange === \"function\"\n}\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": ";;;;;;AAMO,SAAS,cAAa,CAAC,QAA4B;AAAA,EACxD,OAAO,OAAO,MAAM,UAAU,MAAM;AAAA;AAG/B,SAAS,iBAAgB,CAAC,QAA4B;AAAA,EAC3D,OAAO,QAAQ,eAAc,MAAM;AAAA;;;ACNrC,IAAM,QAAQ;AACd,IAAM,gBAAgB;AACtB,IAAM,YAAY,mBAAmB,WAAW,SAAS;AACzD,IAAM,qBAAqB,IAAI,OAAO,KAAK,WAAW,aAAa,eAAe;AAClF,IAAM,oBAAoB,IAAI,OAAO,WAAW,GAAG;AAQ5C,SAAS,mBAAkB,CAAC,OAA+B;AAAA,EAChE,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,MAAM,QAAQ,mBAAmB,KAAK,KAAK;AAAA,EAC3C,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EAEnB,SAAS,MAAM,SAAS,cAAc;AAAA,EACtC,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,QAAQ,YAAY;AAAA,EAC7D,cAAc,MAAM,mBAAmB,WAAW,SAAS,iBAAiB,GAAG;AAAA,IAC7E,aAAa,IAAI,KAAK,YAAY,KAAK;AAAA,EACzC;AAAA,EACA,OAAO;AAAA;;;AChBF,SAAS,aAAY,CAAC,OAAqC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,MAAM,WAAW,SAAS,KAAK,MAAM,SAAS,UAAU;AAAA;AAGvF,SAAS,UAAS,CAAC,OAAkC;AAAA,EAC1D,OACE,cAAc,KAAK,KACnB,OAAO,MAAM,WAAW,YACxB,MAAM,OAAO,KAAK,EAAE,SAAS,KAC7B,cAAa,MAAM,MAAM,KAGzB,MAAM,WAAW,kBAAiB,MAAM,MAAM,KAC9C,OAAO,MAAM,cAAc,YAC3B,OAAO,UAAU,MAAM,SAAS,KAChC,MAAM,aAAa,MAClB,MAAM,aAAa,aAAa,OAAO,MAAM,aAAa,cAC1D,MAAM,cAAc,aAAa,OAAO,MAAM,cAAc,cAC5D,MAAM,gBAAgB,aAAa,OAAO,MAAM,gBAAgB;AAAA;AAS9D,SAAS,cAAc,CAAC,OAAkC;AAAA,EAC/D,OACE,WAAU,KAAK,MACd,MAAM,cAAc,aAAa,oBAAmB,MAAM,SAAS,MAAM;AAAA;AAIvE,SAAS,qBAAoB,CAClC,SACkD;AAAA,EAClD,MAAM,YAAY;AAAA,EAClB,OACE,OAAO,UAAU,iBAAiB,cAClC,OAAO,UAAU,mBAAmB,cACpC,OAAO,UAAU,mBAAmB,cACpC,OAAO,UAAU,gBAAgB;AAAA;AAI9B,SAAS,kBAAiB,CAC/B,SACmD;AAAA,EACnD,MAAM,YAAY;AAAA,EAClB,OAAO,OAAO,UAAU,cAAc;AAAA;",
|
|
10
|
+
"debugId": "91CB77087AB7E2E164756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
createAiModelCallLimitController2,
|
|
5
5
|
AiModelCallRecorder2,
|
|
6
6
|
enqueueAiModelCallRecovery2
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ny3xyvcn.js";
|
|
8
8
|
import {
|
|
9
9
|
executionRecordInputFromRuntime,
|
|
10
10
|
ensureExecutionRecord2
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-ex496vct.js";
|
|
12
12
|
|
|
13
13
|
// src/models/execution/session.ts
|
|
14
14
|
class ModelExecutionSession {
|
|
@@ -37,8 +37,8 @@ class ModelExecutionSession {
|
|
|
37
37
|
await admit();
|
|
38
38
|
}
|
|
39
39
|
accounting() {
|
|
40
|
-
this.requireBinding();
|
|
41
|
-
this.recorder ??= this.createRecorder();
|
|
40
|
+
const { accounting } = this.requireBinding();
|
|
41
|
+
this.recorder ??= accounting ? Promise.resolve(accounting) : this.createRecorder();
|
|
42
42
|
return this.recorder;
|
|
43
43
|
}
|
|
44
44
|
requireBinding() {
|
|
@@ -78,4 +78,4 @@ class ModelExecutionSession {
|
|
|
78
78
|
|
|
79
79
|
export { ModelExecutionSession };
|
|
80
80
|
|
|
81
|
-
//# debugId=
|
|
81
|
+
//# debugId=10658A85B28EF50464756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/models/execution/session.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { ExecutionContext, RuntimeAuthorization } from \"../../execution\"\nimport { ensureExecutionRecord, executionRecordInputFromRuntime } from \"../../execution/durable\"\nimport type { SixbHostContext } from \"../../runtime/types\"\nimport type { ModelExecutionAttempt } from \"./binding\"\nimport { requireAccountingCapabilities } from \"./model-call-accounting\"\nimport { createAiModelCallLimitController } from \"./model-call-limits\"\nimport { AiModelCallRecorder } from \"./model-call-recorder\"\nimport { enqueueAiModelCallRecovery } from \"./recovery-queue\"\n\n/** One accounting boundary shared by all model protocols in a bound execution. */\nexport class ModelExecutionSession {\n private binding?: ModelExecutionAttempt\n private recorder?: Promise<AiModelCallRecorder>\n\n constructor(\n private readonly runtime: SixbHostContext & { runtimeAuthorization: RuntimeAuthorization },\n private readonly execution: ExecutionContext\n ) {}\n\n bind(input: ModelExecutionAttempt): void {\n if (this.binding) throw new Error(\"[SixbModels] Execution attempt is already bound.\")\n this.binding = { ...input }\n }\n\n signal(signal?: AbortSignal): AbortSignal {\n const binding = this.requireBinding()\n return signal ? AbortSignal.any([binding.signal, signal]) : binding.signal\n }\n\n async admitEmbeddingCall(admit: () => Promise<void>): Promise<void> {\n const admission = this.requireBinding().embeddingAdmission\n if (admission) await admission(admit)\n else await admit()\n }\n\n accounting(): Promise<AiModelCallRecorder> {\n const { accounting } = this.requireBinding()\n this.recorder ??= accounting ? Promise.resolve(accounting) : this.createRecorder()\n return this.recorder\n }\n\n private requireBinding(): ModelExecutionAttempt {\n if (!this.binding) {\n throw new Error(\n \"[SixbModels] Model calls require a bound request or worker execution attempt.\"\n )\n }\n return this.binding\n }\n\n private async createRecorder(): Promise<AiModelCallRecorder> {\n const runtime = this.runtime\n const execution = this.execution\n const { attempt } = this.requireBinding()\n const storage = {\n ...requireAccountingCapabilities(runtime.storage),\n transaction: runtime.storage.transaction.bind(runtime.storage),\n }\n const { requesterGroupIds } = await ensureExecutionRecord(\n runtime.storage.executions,\n executionRecordInputFromRuntime({\n execution,\n runtimeAuthorization: runtime.runtimeAuthorization,\n })\n )\n return new AiModelCallRecorder({\n storage,\n projectId: runtime.projectId,\n executionId: execution.id,\n attempt,\n requesterGroupIds,\n limits: createAiModelCallLimitController({\n storage,\n projectId: runtime.projectId,\n requestedBy: execution.requestedBy,\n requesterGroupIds,\n }),\n recoverAiModelCall: (input) => enqueueAiModelCallRecovery(runtime.queues.agents, input),\n })\n }\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;AAUO,MAAM,sBAAsB;AAAA,EAKd;AAAA,EACA;AAAA,EALX;AAAA,EACA;AAAA,EAER,WAAW,CACQ,SACA,WACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,EAGnB,IAAI,CAAC,OAAoC;AAAA,IACvC,IAAI,KAAK;AAAA,MAAS,MAAM,IAAI,MAAM,kDAAkD;AAAA,IACpF,KAAK,UAAU,KAAK,MAAM;AAAA;AAAA,EAG5B,MAAM,CAAC,QAAmC;AAAA,IACxC,MAAM,UAAU,KAAK,eAAe;AAAA,IACpC,OAAO,SAAS,YAAY,IAAI,CAAC,QAAQ,QAAQ,MAAM,CAAC,IAAI,QAAQ;AAAA;AAAA,OAGhE,mBAAkB,CAAC,OAA2C;AAAA,IAClE,MAAM,YAAY,KAAK,eAAe,EAAE;AAAA,IACxC,IAAI;AAAA,MAAW,MAAM,UAAU,KAAK;AAAA,IAC/B;AAAA,YAAM,MAAM;AAAA;AAAA,EAGnB,UAAU,GAAiC;AAAA,IACzC,QAAQ,eAAe,KAAK,eAAe;AAAA,IAC3C,KAAK,aAAa,aAAa,QAAQ,QAAQ,UAAU,IAAI,KAAK,eAAe;AAAA,IACjF,OAAO,KAAK;AAAA;AAAA,EAGN,cAAc,GAA0B;AAAA,IAC9C,IAAI,CAAC,KAAK,SAAS;AAAA,MACjB,MAAM,IAAI,MACR,+EACF;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,OAGA,eAAc,GAAiC;AAAA,IAC3D,MAAM,UAAU,KAAK;AAAA,IACrB,MAAM,YAAY,KAAK;AAAA,IACvB,QAAQ,YAAY,KAAK,eAAe;AAAA,IACxC,MAAM,UAAU;AAAA,SACX,8BAA8B,QAAQ,OAAO;AAAA,MAChD,aAAa,QAAQ,QAAQ,YAAY,KAAK,QAAQ,OAAO;AAAA,IAC/D;AAAA,IACA,QAAQ,sBAAsB,MAAM,uBAClC,QAAQ,QAAQ,YAChB,gCAAgC;AAAA,MAC9B;AAAA,MACA,sBAAsB,QAAQ;AAAA,IAChC,CAAC,CACH;AAAA,IACA,OAAO,IAAI,qBAAoB;AAAA,MAC7B;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,aAAa,UAAU;AAAA,MACvB;AAAA,MACA;AAAA,MACA,QAAQ,kCAAiC;AAAA,QACvC;AAAA,QACA,WAAW,QAAQ;AAAA,QACnB,aAAa,UAAU;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,MACD,oBAAoB,CAAC,UAAU,4BAA2B,QAAQ,OAAO,QAAQ,KAAK;AAAA,IACxF,CAAC;AAAA;AAEL;",
|
|
8
|
+
"debugId": "10658A85B28EF50464756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
} from "./chunk-ere85b8y.js";
|
|
21
21
|
import {
|
|
22
22
|
AiCostStorageError2
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-qq90g05n.js";
|
|
24
24
|
import {
|
|
25
25
|
normalizeAiModelCallRecord2
|
|
26
26
|
} from "./chunk-rj69qcrd.js";
|
|
@@ -434,6 +434,12 @@ class AiModelCallRecorder2 {
|
|
|
434
434
|
await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery });
|
|
435
435
|
});
|
|
436
436
|
}
|
|
437
|
+
get executionId() {
|
|
438
|
+
return this.input.executionId;
|
|
439
|
+
}
|
|
440
|
+
get attempt() {
|
|
441
|
+
return this.input.attempt;
|
|
442
|
+
}
|
|
437
443
|
wrapModel(model) {
|
|
438
444
|
return {
|
|
439
445
|
providerId: model.providerId,
|
|
@@ -592,4 +598,4 @@ async function enqueueAiModelCallRecovery2(queue, input) {
|
|
|
592
598
|
|
|
593
599
|
export { AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE, aiModelCallOutputTokenAllowance, requireAccountingCapabilities, createAiModelCallLimitController2, ModelUsageRecordingError2, recordRecoveredAiModelCall2, isPermanentAiUsageRecoveryError2, AiModelCallRecorder2, enqueueAiModelCallRecovery2 };
|
|
594
600
|
|
|
595
|
-
//# debugId=
|
|
601
|
+
//# debugId=4BD85BF64D5B7A3564756E2164756E21
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
"import { createHash } from \"node:crypto\"\nimport { assertJsonObject } from \"../../json\"\nimport type {\n AiBillableMeter,\n AiCostStorage,\n AiLimitStorage,\n AiModelCallCostRecord,\n AiModelCallUsageRecord,\n AiPricingContext,\n AiUsageStorage,\n RecordAiModelCallResult,\n Storage,\n} from \"../../storage\"\nimport {\n aiModelCallCostMatchesUsage,\n normalizeAiModelCallCostRecord,\n} from \"../../storage/ai-cost/provider\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport type { ModelCostEstimate } from \"../pricing\"\nimport type { ModelCallAccountingStorage, RecoverAiModelCallInput } from \"./types\"\n\ninterface RecordAiModelCallAccountingInput extends RecoverAiModelCallInput {\n readonly storage: Pick<ModelCallAccountingStorage, \"transaction\">\n}\n\ninterface AiAccountingCapabilities {\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n}\n\n/** Atomically append one provider call's usage and the valuation captured by the model runtime. */\nexport async function recordAiModelCallAccounting(\n input: RecordAiModelCallAccountingInput\n): Promise<RecordAiModelCallResult> {\n return input.storage.transaction(async (tx) => {\n const { aiUsage, aiCosts, aiLimits } = requireAccountingCapabilities(tx)\n const usage = await aiUsage.recordModelCall(input.usage)\n // Usage deduplicates provider lifecycle replays by execution/call identity. Always attach the\n // valuation to the canonical row it returns, not the fresh candidate ID from a replay.\n const canonical = normalizeModelCallAccounting({\n ...input,\n usage: usage.record,\n ratedAt: usage.record.recordedAt,\n })\n const record = modelCostRecord(canonical, usage.record.id)\n const estimate =\n canonical.cost.status !== \"reported\" || canonical.estimate === undefined\n ? undefined\n : modelCostRecord({ ...canonical, cost: canonical.estimate }, usage.record.id)\n await aiCosts.recordModelCallCost({\n ...record,\n ...(estimate === undefined\n ? {}\n : {\n estimate:\n estimate.status === \"rated\"\n ? { status: \"rated\", money: estimate.money, components: estimate.components }\n : {\n status: \"unpriceable\",\n reason: estimate.reason,\n ...(estimate.missingMeters === undefined\n ? {}\n : { missingMeters: estimate.missingMeters }),\n },\n }),\n })\n if (usage.created) {\n await aiLimits.recordModelCallActuals({\n projectId: usage.record.projectId,\n usageRecordId: usage.record.id,\n recordedAt: input.ratedAt,\n })\n }\n if (input.reconcileLimitReservation) {\n await aiLimits.reconcileModelCall({\n projectId: usage.record.projectId,\n executionId: usage.record.executionId,\n attempt: usage.record.attempt,\n callId: usage.record.callId,\n usageRecordId: usage.record.id,\n reconciledAt: input.ratedAt,\n })\n }\n return usage\n })\n}\n\n/** Sanitize optional enrichment before either persistence or a JSON-safe recovery handoff. */\nexport function normalizeModelCallAccounting(\n input: RecoverAiModelCallInput\n): RecoverAiModelCallInput {\n const usage = normalizeAiModelCallRecord(input.usage)\n return {\n ...input,\n cost:\n input.cost.status === \"reported\" ? input.cost : validatedEstimate(input.cost, input, usage),\n ...(input.estimate === undefined\n ? {}\n : { estimate: validatedEstimate(input.estimate, input, usage) }),\n }\n}\n\nfunction validatedEstimate(\n cost: ModelCostEstimate,\n input: RecoverAiModelCallInput,\n usage: AiModelCallUsageRecord\n): ModelCostEstimate {\n try {\n assertJsonObject(cost, \"model cost estimate\")\n const record = normalizeAiModelCallCostRecord(modelCostRecord({ ...input, cost }, usage.id))\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new TypeError(\"Estimate quantities do not match recorded usage.\")\n }\n return structuredClone(cost)\n } catch {\n console.warn(\n \"[SixbModels] Invalid model cost estimate; preserving call usage and provider cost.\"\n )\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n}\n\nfunction modelCostRecord(\n input: RecoverAiModelCallInput,\n usageRecordId: string\n): AiModelCallCostRecord {\n const billingIdentity = {\n providerId: input.usage.providerId,\n modelId: input.usage.requestedModelId,\n }\n const pricingContext: AiPricingContext = {\n ...(input.route?.providerId === undefined ? {} : { routedProviderId: input.route.providerId }),\n ...(input.route?.modelId === undefined ? {} : { routedModelId: input.route.modelId }),\n }\n if (input.cost.status === \"reported\" || input.cost.status === \"rated\") {\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"rated\",\n billingIdentity,\n pricingContext,\n priceSource: costPriceSource(input.usage, input.cost),\n money: input.cost.money,\n components: input.cost.status === \"rated\" ? input.cost.components : [],\n ratedAt: new Date(input.ratedAt),\n }\n }\n\n const reason =\n input.cost.reason === \"missing-rate-card\"\n ? \"missingRateCard\"\n : input.cost.reason === \"missing-usage\"\n ? \"missingUsageMeter\"\n : \"invalidUsageForFormula\"\n const missingMeters =\n reason === \"missingUsageMeter\" ? normalizeMissingMeters(input.cost.missingMeters) : undefined\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"unpriceable\",\n billingIdentity,\n pricingContext,\n reason,\n ...(missingMeters === undefined ? {} : { missingMeters }),\n ratedAt: new Date(input.ratedAt),\n }\n}\n\nfunction costPriceSource(\n usage: RecoverAiModelCallInput[\"usage\"],\n cost: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"reported\" | \"rated\" }>\n) {\n if (cost.status === \"reported\") {\n return {\n sourceId: \"provider-reported\",\n sourceEntryId: `${usage.providerId}/${usage.responseId}`,\n sourceVersion: \"response-v1\",\n observedAt: new Date(usage.occurredAt),\n }\n }\n const rates = cost.components.map(({ meter, rateAmountNanosPerMillion }) => ({\n meter,\n rateAmountNanosPerMillion,\n }))\n const version = createHash(\"sha256\").update(JSON.stringify(rates)).digest(\"hex\")\n return {\n sourceId: \"model-rate-card\",\n sourceEntryId: `${usage.providerId}/${usage.requestedModelId}`,\n sourceVersion: `sha256:${version}`,\n observedAt: new Date(usage.occurredAt),\n }\n}\n\nfunction normalizeMissingMeters(\n meters: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"unpriceable\" }>[\"missingMeters\"]\n): readonly AiBillableMeter[] {\n const fallback: readonly AiBillableMeter[] = [\"tokens.input.total\", \"tokens.output.total\"]\n return [...new Set<AiBillableMeter>(meters ?? fallback)]\n}\n\nexport function requireAccountingCapabilities(\n storage: Pick<Storage, \"aiUsage\" | \"aiCosts\" | \"aiLimits\">\n): AiAccountingCapabilities {\n if (!storage.aiUsage || !storage.aiCosts || !storage.aiLimits) {\n throw new Error(\n \"[SixbModels] AI model-call accounting requires storage.aiUsage, storage.aiCosts, and storage.aiLimits.\"\n )\n }\n return { aiUsage: storage.aiUsage, aiCosts: storage.aiCosts, aiLimits: storage.aiLimits }\n}\n",
|
|
8
8
|
"import type { AiModelCallUsageInput } from \"../../storage\"\nimport type { ModelUsage } from \"../events\"\n\n/** Map one provider-neutral model call into Sixb's durable accounting vocabulary. */\nexport function aiModelCallUsageFromModel(usage: ModelUsage): AiModelCallUsageInput {\n return {\n ...(usage.audioDurationMs === undefined ? {} : { audioDurationMs: usage.audioDurationMs }),\n ...(usage.inputTokens === undefined ? {} : { inputTokens: usage.inputTokens }),\n ...(usage.outputTokens === undefined ? {} : { outputTokens: usage.outputTokens }),\n ...(usage.uncachedInputTokens === undefined\n ? {}\n : { uncachedInputTokens: usage.uncachedInputTokens }),\n ...(usage.cacheReadInputTokens === undefined\n ? {}\n : { cacheReadInputTokens: usage.cacheReadInputTokens }),\n ...(usage.cacheWriteInputTokens === undefined\n ? {}\n : { cacheWriteInputTokens: usage.cacheWriteInputTokens }),\n ...(usage.textOutputTokens === undefined ? {} : { textOutputTokens: usage.textOutputTokens }),\n ...(usage.reasoningOutputTokens === undefined\n ? {}\n : { reasoningOutputTokens: usage.reasoningOutputTokens }),\n }\n}\n",
|
|
9
9
|
"import type { RecordAiModelCallInput, RecordAiModelCallResult } from \"../../storage\"\nimport { AiCostStorageError, AiLimitStorageError, AiUsageStorageError } from \"../../storage\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport { recordAiModelCallAccounting } from \"./model-call-accounting\"\nimport type {\n AiModelCallAccountingPayload,\n AiModelCallRecordPayload,\n AiModelCallRecoveryRecord,\n ModelCallAccountingStorage,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nclass InvalidAiUsageRecoveryJobError extends Error {\n readonly name = \"InvalidAiUsageRecoveryJobError\"\n\n constructor(message: string, options?: ErrorOptions) {\n super(`[SixbModels] ${message}`, options)\n }\n}\n\n/** Encode one failed accounting transaction for a durable, JSON-safe handoff. */\nexport function modelCallRecoveryPayload(input: RecoverAiModelCallInput): {\n readonly record: AiModelCallRecordPayload\n readonly accounting: AiModelCallAccountingPayload\n} {\n normalizeAiModelCallRecord(input.usage)\n return {\n record: toQueuePayload(input.usage),\n accounting: toAccountingPayload(input),\n }\n}\n\n/** Replay one durable handoff through the idempotent atomic accounting boundary. */\nexport async function recordRecoveredAiModelCall(\n storage: Pick<ModelCallAccountingStorage, \"transaction\">,\n job: AiModelCallRecoveryRecord\n): Promise<RecordAiModelCallResult> {\n const usage = fromQueuePayload(job)\n const accounting = accountingFromQueuePayload(job)\n return recordAiModelCallAccounting({ storage, usage, ...accounting })\n}\n\n/** Validation and referential-integrity failures cannot become valid through queue redelivery. */\nexport function isPermanentAiUsageRecoveryError(error: unknown): boolean {\n return (\n error instanceof InvalidAiUsageRecoveryJobError ||\n error instanceof TypeError ||\n (error instanceof AiUsageStorageError &&\n (error.code === \"duplicate_id\" || error.code === \"missing_execution\")) ||\n (error instanceof AiCostStorageError &&\n (error.code === \"missing_usage\" || error.code === \"cost_mismatch\")) ||\n (error instanceof AiLimitStorageError &&\n (error.code === \"missing_execution\" ||\n error.code === \"missing_reservation\" ||\n error.code === \"missing_usage_record\" ||\n error.code === \"usage_mismatch\" ||\n error.code === \"reservation_conflict\" ||\n error.code === \"reconciliation_conflict\" ||\n error.code === \"invalid_reservation_state\"))\n )\n}\n\nfunction toQueuePayload(record: RecordAiModelCallInput): AiModelCallRecordPayload {\n return {\n id: record.id,\n executionId: record.executionId,\n attempt: record.attempt,\n callId: record.callId,\n requesterGroupIds: [...record.requesterGroupIds],\n providerId: record.providerId,\n ...(record.providerIds === undefined\n ? {}\n : { providerIds: structuredClone(record.providerIds) }),\n requestedModelId: record.requestedModelId,\n ...(record.modelKind === undefined ? {} : { modelKind: record.modelKind }),\n ...(record.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: structuredClone(record.requestedReasoning) }),\n ...(record.responseModelId === undefined ? {} : { responseModelId: record.responseModelId }),\n responseId: record.responseId,\n usage: aiModelCallUsageFromModel(record.usage),\n ...(record.rawUsage === undefined ? {} : { rawUsage: structuredClone(record.rawUsage) }),\n occurredAt: record.occurredAt.toISOString(),\n }\n}\n\nfunction toAccountingPayload(input: RecoverAiModelCallInput): AiModelCallAccountingPayload {\n return {\n cost: structuredClone(input.cost),\n ...(input.estimate === undefined ? {} : { estimate: structuredClone(input.estimate) }),\n ...(input.route === undefined ? {} : { route: structuredClone(input.route) }),\n ratedAt: input.ratedAt.toISOString(),\n ...(input.reconcileLimitReservation ? { reconcileLimitReservation: true } : {}),\n }\n}\n\nfunction fromQueuePayload(job: AiModelCallRecoveryRecord): RecordAiModelCallInput {\n const occurredAt = parseDate(job.payload.record.occurredAt, job.id, \"occurredAt\")\n return { ...job.payload.record, projectId: job.projectId, occurredAt }\n}\n\nfunction accountingFromQueuePayload(\n job: AiModelCallRecoveryRecord\n): Omit<RecoverAiModelCallInput, \"usage\"> {\n const accounting = job.payload.accounting\n return {\n cost: structuredClone(accounting.cost),\n ...(accounting.estimate === undefined\n ? {}\n : { estimate: structuredClone(accounting.estimate) }),\n ...(accounting.route === undefined ? {} : { route: structuredClone(accounting.route) }),\n ratedAt: parseDate(accounting.ratedAt, job.id, \"ratedAt\"),\n reconcileLimitReservation: accounting.reconcileLimitReservation === true,\n }\n}\n\nfunction parseDate(value: string, jobId: string, field: string): Date {\n const date = new Date(value)\n if (!Number.isFinite(date.getTime())) {\n throw new InvalidAiUsageRecoveryJobError(\n `AI usage recovery job '${jobId}' has an invalid ${field} timestamp.`\n )\n }\n return date\n}\n",
|
|
10
|
-
"import { randomUUID } from \"node:crypto\"\nimport type { ReadonlyJsonObject, RecordAiModelCallInput } from \"../../storage\"\nimport type { ModelCallEndEvent, ModelUsage } from \"../events\"\nimport type { LanguageModel } from \"../language-model\"\nimport { ModelUsageRecordingError } from \"./errors\"\nimport {\n normalizeModelCallAccounting,\n recordAiModelCallAccounting,\n requireAccountingCapabilities,\n} from \"./model-call-accounting\"\nimport {\n type AiModelCallAdmissionInput,\n aiModelCallOutputTokenAllowance,\n estimateAiModelCallInputTokens,\n estimatedAiModelCallTotalTokens,\n} from \"./model-call-admission\"\nimport type { AiModelCallLimitController } from \"./model-call-limits\"\nimport { isPermanentAiUsageRecoveryError } from \"./model-call-recovery\"\nimport type {\n ModelCallAccountingStorage,\n RecoverAiModelCall,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nconst STORAGE_RETRY_DELAYS_MS = [50, 200, 600] as const\n\nexport interface AiModelCallRecorderInput {\n readonly storage: ModelCallAccountingStorage\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly limits: AiModelCallLimitController\n readonly recoverAiModelCall: RecoverAiModelCall\n}\n\ninterface AiModelCallRecorderInternals {\n readonly generateId?: () => string\n readonly now?: () => Date\n readonly retryDelaysMs?: readonly number[]\n readonly sleep?: (ms: number) => Promise<void>\n readonly recordAccounting?: (input: RecoverAiModelCallInput) => Promise<void>\n}\n\n/** Persist every completed provider call before another billable loop step can start. */\nexport class AiModelCallRecorder {\n private readonly generateId: () => string\n private readonly now: () => Date\n private readonly retryDelaysMs: readonly number[]\n private readonly sleep: (ms: number) => Promise<void>\n private readonly recordAccounting: (input: RecoverAiModelCallInput) => Promise<void>\n private readonly reservations = new Set<string>()\n private admissionError: unknown\n private recordingError: ModelUsageRecordingError | undefined\n\n constructor(\n private readonly input: AiModelCallRecorderInput,\n internals: AiModelCallRecorderInternals = {}\n ) {\n requireAccountingCapabilities(input.storage)\n this.generateId = internals.generateId ?? (() => `ai_usage_${randomUUID()}`)\n this.now = internals.now ?? (() => new Date())\n this.retryDelaysMs = internals.retryDelaysMs ?? STORAGE_RETRY_DELAYS_MS\n this.sleep = internals.sleep ?? sleep\n this.recordAccounting =\n internals.recordAccounting ??\n (async (recovery) => {\n await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery })\n })\n }\n\n /** Wrap the resolved model so all calls in an execution share admission. */\n wrapModel(model: LanguageModel): LanguageModel {\n return {\n providerId: model.providerId,\n modelId: model.modelId,\n definition: model.definition,\n costEstimator: model.costEstimator,\n ...(model.validateResponseFormat === undefined\n ? {}\n : { validateResponseFormat: model.validateResponseFormat.bind(model) }),\n stream: async (request) => {\n this.assertHealthy()\n const inputTokens = estimateAiModelCallInputTokens({\n prompt: request.messages,\n tools: request.tools,\n responseFormat: request.responseFormat,\n })\n const outputTokenAllowance = aiModelCallOutputTokenAllowance(request.maxOutputTokens)\n await this.admitCall({\n callId: request.callId,\n providerId: model.providerId,\n modelId: model.modelId,\n costEstimator: model.costEstimator,\n inputTokens,\n outputTokenAllowance,\n estimatedTotalTokens: estimatedAiModelCallTotalTokens(inputTokens, outputTokenAllowance),\n })\n try {\n return await model.stream(request)\n } catch (error) {\n await this.markCallUnknown(request.callId)\n throw error\n }\n },\n }\n }\n\n /** Admit one provider attempt, independently of its language or embedding protocol. */\n async admitCall(\n call: Omit<\n AiModelCallAdmissionInput,\n \"projectId\" | \"executionId\" | \"attempt\" | \"requesterGroupIds\"\n >\n ): Promise<void> {\n this.assertHealthy()\n try {\n const decision = await this.input.limits.beforeModelCall({\n ...call,\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n requesterGroupIds: this.input.requesterGroupIds,\n })\n if (decision.reservation === \"active\") this.reservations.add(call.callId)\n } catch (error) {\n // Execution boundaries must retain the original coded admission failure.\n this.admissionError = error\n throw error\n }\n }\n\n /** Keep an unresolved reservation when an attempted call's billable outcome is unknown. */\n private async markCallUnknown(callId: string): Promise<void> {\n if (!this.reservations.has(callId)) return\n await this.input.limits.markModelCallUnknown({\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId,\n })\n }\n\n readonly onModelCallEnd = async (event: ModelCallEndEvent): Promise<void> => {\n // Calls already in flight still need their own accounting after another call fails.\n // Only admission is gated by the execution's sticky failure.\n try {\n const occurredAt = this.now()\n const record: RecordAiModelCallInput = {\n id: this.generateId(),\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId: event.callId,\n requesterGroupIds: this.input.requesterGroupIds,\n providerId: event.providerId,\n ...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),\n requestedModelId: event.modelId,\n ...(event.modelKind === undefined ? {} : { modelKind: event.modelKind }),\n ...(event.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: event.requestedReasoning }),\n ...(event.responseModelId === undefined ? {} : { responseModelId: event.responseModelId }),\n responseId: event.responseId,\n usage: aiModelCallUsageFromModel(event.usage),\n ...(event.usage.raw === undefined ? {} : { rawUsage: rawUsage(event.usage) }),\n occurredAt,\n }\n const recoveryInput = normalizeModelCallAccounting({\n usage: record,\n cost: event.cost,\n ...(event.estimate === undefined ? {} : { estimate: event.estimate }),\n ...(event.route === undefined ? {} : { route: event.route }),\n ratedAt: new Date(occurredAt),\n ...(this.reservations.has(event.callId) ? { reconcileLimitReservation: true } : {}),\n })\n\n try {\n await retryOperation(\n () => this.recordAccounting(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (storageError) {\n if (isPermanentAiUsageRecoveryError(storageError)) throw storageError\n\n try {\n await retryOperation(\n () => this.input.recoverAiModelCall(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (recoveryError) {\n throw new AggregateError(\n [storageError, recoveryError],\n \"Direct AI accounting and durable recovery both failed.\"\n )\n }\n throw new ModelUsageRecordingError(this.input.executionId, event.callId, true, {\n cause: storageError,\n })\n }\n } catch (error) {\n const recordingError =\n error instanceof ModelUsageRecordingError\n ? error\n : new ModelUsageRecordingError(this.input.executionId, event.callId, false, {\n cause: error,\n })\n this.recordingError ??= recordingError\n throw recordingError\n }\n }\n\n assertHealthy(): void {\n if (this.admissionError !== undefined) throw this.admissionError\n if (this.recordingError) throw this.recordingError\n }\n}\n\nfunction rawUsage(usage: ModelUsage): ReadonlyJsonObject {\n return structuredClone(usage.raw ?? {})\n}\n\nasync function retryOperation<TResult>(\n operation: () => Promise<TResult>,\n retryDelaysMs: readonly number[],\n wait: (ms: number) => Promise<void>,\n shouldRetry: (error: unknown) => boolean\n): Promise<TResult> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await operation()\n } catch (error) {\n if (!shouldRetry(error)) throw error\n const delay = retryDelaysMs[attempt]\n if (delay === undefined) throw error\n await wait(delay)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n",
|
|
10
|
+
"import { randomUUID } from \"node:crypto\"\nimport type { ReadonlyJsonObject, RecordAiModelCallInput } from \"../../storage\"\nimport type { ModelCallEndEvent, ModelUsage } from \"../events\"\nimport type { LanguageModel } from \"../language-model\"\nimport { ModelUsageRecordingError } from \"./errors\"\nimport {\n normalizeModelCallAccounting,\n recordAiModelCallAccounting,\n requireAccountingCapabilities,\n} from \"./model-call-accounting\"\nimport {\n type AiModelCallAdmissionInput,\n aiModelCallOutputTokenAllowance,\n estimateAiModelCallInputTokens,\n estimatedAiModelCallTotalTokens,\n} from \"./model-call-admission\"\nimport type { AiModelCallLimitController } from \"./model-call-limits\"\nimport { isPermanentAiUsageRecoveryError } from \"./model-call-recovery\"\nimport type {\n ModelCallAccountingStorage,\n RecoverAiModelCall,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nconst STORAGE_RETRY_DELAYS_MS = [50, 200, 600] as const\n\nexport interface AiModelCallRecorderInput {\n readonly storage: ModelCallAccountingStorage\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly limits: AiModelCallLimitController\n readonly recoverAiModelCall: RecoverAiModelCall\n}\n\ninterface AiModelCallRecorderInternals {\n readonly generateId?: () => string\n readonly now?: () => Date\n readonly retryDelaysMs?: readonly number[]\n readonly sleep?: (ms: number) => Promise<void>\n readonly recordAccounting?: (input: RecoverAiModelCallInput) => Promise<void>\n}\n\n/** Persist every completed provider call before another billable loop step can start. */\nexport class AiModelCallRecorder {\n private readonly generateId: () => string\n private readonly now: () => Date\n private readonly retryDelaysMs: readonly number[]\n private readonly sleep: (ms: number) => Promise<void>\n private readonly recordAccounting: (input: RecoverAiModelCallInput) => Promise<void>\n private readonly reservations = new Set<string>()\n private admissionError: unknown\n private recordingError: ModelUsageRecordingError | undefined\n\n constructor(\n private readonly input: AiModelCallRecorderInput,\n internals: AiModelCallRecorderInternals = {}\n ) {\n requireAccountingCapabilities(input.storage)\n this.generateId = internals.generateId ?? (() => `ai_usage_${randomUUID()}`)\n this.now = internals.now ?? (() => new Date())\n this.retryDelaysMs = internals.retryDelaysMs ?? STORAGE_RETRY_DELAYS_MS\n this.sleep = internals.sleep ?? sleep\n this.recordAccounting =\n internals.recordAccounting ??\n (async (recovery) => {\n await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery })\n })\n }\n\n /** The execution every call this recorder admits is attributed to. */\n get executionId(): string {\n return this.input.executionId\n }\n\n /** The execution attempt every call this recorder admits is attributed to. */\n get attempt(): number {\n return this.input.attempt\n }\n\n /** Wrap the resolved model so all calls in an execution share admission. */\n wrapModel(model: LanguageModel): LanguageModel {\n return {\n providerId: model.providerId,\n modelId: model.modelId,\n definition: model.definition,\n costEstimator: model.costEstimator,\n ...(model.validateResponseFormat === undefined\n ? {}\n : { validateResponseFormat: model.validateResponseFormat.bind(model) }),\n stream: async (request) => {\n this.assertHealthy()\n const inputTokens = estimateAiModelCallInputTokens({\n prompt: request.messages,\n tools: request.tools,\n responseFormat: request.responseFormat,\n })\n const outputTokenAllowance = aiModelCallOutputTokenAllowance(request.maxOutputTokens)\n await this.admitCall({\n callId: request.callId,\n providerId: model.providerId,\n modelId: model.modelId,\n costEstimator: model.costEstimator,\n inputTokens,\n outputTokenAllowance,\n estimatedTotalTokens: estimatedAiModelCallTotalTokens(inputTokens, outputTokenAllowance),\n })\n try {\n return await model.stream(request)\n } catch (error) {\n await this.markCallUnknown(request.callId)\n throw error\n }\n },\n }\n }\n\n /** Admit one provider attempt, independently of its language or embedding protocol. */\n async admitCall(\n call: Omit<\n AiModelCallAdmissionInput,\n \"projectId\" | \"executionId\" | \"attempt\" | \"requesterGroupIds\"\n >\n ): Promise<void> {\n this.assertHealthy()\n try {\n const decision = await this.input.limits.beforeModelCall({\n ...call,\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n requesterGroupIds: this.input.requesterGroupIds,\n })\n if (decision.reservation === \"active\") this.reservations.add(call.callId)\n } catch (error) {\n // Execution boundaries must retain the original coded admission failure.\n this.admissionError = error\n throw error\n }\n }\n\n /** Keep an unresolved reservation when an attempted call's billable outcome is unknown. */\n private async markCallUnknown(callId: string): Promise<void> {\n if (!this.reservations.has(callId)) return\n await this.input.limits.markModelCallUnknown({\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId,\n })\n }\n\n readonly onModelCallEnd = async (event: ModelCallEndEvent): Promise<void> => {\n // Calls already in flight still need their own accounting after another call fails.\n // Only admission is gated by the execution's sticky failure.\n try {\n const occurredAt = this.now()\n const record: RecordAiModelCallInput = {\n id: this.generateId(),\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId: event.callId,\n requesterGroupIds: this.input.requesterGroupIds,\n providerId: event.providerId,\n ...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),\n requestedModelId: event.modelId,\n ...(event.modelKind === undefined ? {} : { modelKind: event.modelKind }),\n ...(event.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: event.requestedReasoning }),\n ...(event.responseModelId === undefined ? {} : { responseModelId: event.responseModelId }),\n responseId: event.responseId,\n usage: aiModelCallUsageFromModel(event.usage),\n ...(event.usage.raw === undefined ? {} : { rawUsage: rawUsage(event.usage) }),\n occurredAt,\n }\n const recoveryInput = normalizeModelCallAccounting({\n usage: record,\n cost: event.cost,\n ...(event.estimate === undefined ? {} : { estimate: event.estimate }),\n ...(event.route === undefined ? {} : { route: event.route }),\n ratedAt: new Date(occurredAt),\n ...(this.reservations.has(event.callId) ? { reconcileLimitReservation: true } : {}),\n })\n\n try {\n await retryOperation(\n () => this.recordAccounting(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (storageError) {\n if (isPermanentAiUsageRecoveryError(storageError)) throw storageError\n\n try {\n await retryOperation(\n () => this.input.recoverAiModelCall(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (recoveryError) {\n throw new AggregateError(\n [storageError, recoveryError],\n \"Direct AI accounting and durable recovery both failed.\"\n )\n }\n throw new ModelUsageRecordingError(this.input.executionId, event.callId, true, {\n cause: storageError,\n })\n }\n } catch (error) {\n const recordingError =\n error instanceof ModelUsageRecordingError\n ? error\n : new ModelUsageRecordingError(this.input.executionId, event.callId, false, {\n cause: error,\n })\n this.recordingError ??= recordingError\n throw recordingError\n }\n }\n\n assertHealthy(): void {\n if (this.admissionError !== undefined) throw this.admissionError\n if (this.recordingError) throw this.recordingError\n }\n}\n\nfunction rawUsage(usage: ModelUsage): ReadonlyJsonObject {\n return structuredClone(usage.raw ?? {})\n}\n\nasync function retryOperation<TResult>(\n operation: () => Promise<TResult>,\n retryDelaysMs: readonly number[],\n wait: (ms: number) => Promise<void>,\n shouldRetry: (error: unknown) => boolean\n): Promise<TResult> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await operation()\n } catch (error) {\n if (!shouldRetry(error)) throw error\n const delay = retryDelaysMs[attempt]\n if (delay === undefined) throw error\n await wait(delay)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n",
|
|
11
11
|
"import type { AiModelCallReservationIdentity } from \"../../storage\"\nimport type { ModelKind } from \"../definitions\"\nimport type { ModelCostEstimator, ModelMoney } from \"../pricing\"\n\n/** Default output ceiling when a call and its resolved model supply no limit. */\nexport const AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE = 4_096\n\nexport type AiModelCallInputTokenEstimate =\n | {\n readonly status: \"estimated\"\n readonly tokens: number\n readonly method: \"utf8BytesDividedByFour\"\n }\n | {\n readonly status: \"unavailable\"\n readonly reason: \"nonTextInput\" | \"unserializableInput\"\n }\n\n/** Provider-neutral snapshot passed to aggregate-budget admission before a provider request. */\nexport interface AiModelCallAdmissionInput {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly callId: string\n readonly providerId: string\n readonly modelId: string\n /** Selects the applicable limit meters; transcription and reranking skip token limits. */\n readonly modelKind?: ModelKind\n readonly costEstimator?: ModelCostEstimator\n /** A non-token estimate, computed by the resolved binding before inference. */\n readonly reservationCost?: ModelMoney\n readonly inputTokens: AiModelCallInputTokenEstimate\n readonly outputTokenAllowance: number\n readonly estimatedTotalTokens?: number\n}\n\nexport interface AiModelCallAdmissionDecision {\n /** Active means accounting must reconcile the reservation for this provider attempt. */\n readonly reservation: \"active\" | \"none\"\n}\n\nexport type BeforeAiModelCall = (\n input: AiModelCallAdmissionInput\n) => AiModelCallAdmissionDecision | Promise<AiModelCallAdmissionDecision>\n\nexport type MarkAiModelCallUnknown = (input: AiModelCallReservationIdentity) => void | Promise<void>\n\n/**\n * Estimate the exact, prepared provider request without requiring a provider-specific tokenizer.\n *\n * The heuristic is intentionally explicit so reservations are reproducible. Non-text inputs are\n * reported as unavailable; an enforced token or cost policy can then fail closed instead of\n * pretending that an image, file, or provider-defined payload has no token cost.\n */\nexport function estimateAiModelCallInputTokens(input: {\n readonly prompt: unknown\n readonly tools: unknown\n readonly responseFormat: unknown\n}): AiModelCallInputTokenEstimate {\n if (containsNonTextInput(input.prompt)) {\n return { status: \"unavailable\", reason: \"nonTextInput\" }\n }\n\n let serialized: string | undefined\n try {\n serialized = JSON.stringify(input)\n } catch {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n if (serialized === undefined) {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n\n const bytes = new TextEncoder().encode(serialized).byteLength\n return {\n status: \"estimated\",\n tokens: Math.ceil(bytes / 4),\n method: \"utf8BytesDividedByFour\",\n }\n}\n\nexport function aiModelCallOutputTokenAllowance(maxOutputTokens: number | undefined): number {\n if (maxOutputTokens === undefined) return AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE\n if (!Number.isSafeInteger(maxOutputTokens) || maxOutputTokens <= 0) {\n throw new TypeError(\n \"[SixbModels] AI model-call maxOutputTokens must be a positive safe integer.\"\n )\n }\n return maxOutputTokens\n}\n\nexport function estimatedAiModelCallTotalTokens(\n inputTokens: AiModelCallInputTokenEstimate,\n outputTokenAllowance: number\n): number | undefined {\n if (inputTokens.status !== \"estimated\") return undefined\n const total = inputTokens.tokens + outputTokenAllowance\n if (!Number.isSafeInteger(total)) {\n throw new TypeError(\"[SixbModels] AI model-call token estimate exceeds the safe range.\")\n }\n return total\n}\n\nfunction containsNonTextInput(value: unknown, seen = new WeakSet<object>()): boolean {\n if (value === null || typeof value !== \"object\") return false\n if (\n value instanceof URL ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n (typeof Blob !== \"undefined\" && value instanceof Blob)\n ) {\n return true\n }\n if (seen.has(value)) return false\n seen.add(value)\n\n if (!Array.isArray(value)) {\n const type = Reflect.get(value, \"type\")\n if (\n type === \"image\" ||\n type === \"file\" ||\n type === \"reasoning-file\" ||\n type === \"custom\" ||\n type === \"provider-state\"\n ) {\n return true\n }\n }\n\n return Object.values(value).some((entry) => containsNonTextInput(entry, seen))\n}\n",
|
|
12
12
|
"import { createSixbError } from \"../../errors/internal\"\nimport type { AgentQueueJob, Queue } from \"../../queues\"\nimport { modelCallRecoveryPayload } from \"./model-call-recovery\"\nimport type { RecoverAiModelCallInput } from \"./types\"\n\n/** Stable queue identity: a lost enqueue response can safely retry the same accounting handoff. */\nfunction agentAiUsageRecoveryJobId(recordId: string): string {\n return `agt_usage_job_${recordId}`\n}\n\n/** Transport adapter for the agent worker's existing durable recovery lane. */\nexport async function enqueueAiModelCallRecovery(\n queue: Pick<Queue<AgentQueueJob>, \"enqueue\">,\n input: RecoverAiModelCallInput\n): Promise<void> {\n const payload = modelCallRecoveryPayload(input)\n const record = input.usage\n const jobId = agentAiUsageRecoveryJobId(record.id)\n const [job] = await queue.enqueue({\n projectId: record.projectId,\n jobs: [{ id: jobId, type: \"agent.ai-usage.record.requested\", payload }],\n })\n\n if (job?.id !== jobId || job.type !== \"agent.ai-usage.record.requested\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbModels] Agent queue did not confirm AI usage recovery job '${jobId}'.`,\n { details: { jobId } }\n )\n }\n}\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "4BD85BF64D5B7A3564756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
|
@@ -35,19 +35,19 @@ import {
|
|
|
35
35
|
normalizeLinkProperties2,
|
|
36
36
|
validateLinkProperties2,
|
|
37
37
|
validateTelemetryUnit2
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-y05543x6.js";
|
|
39
39
|
import {
|
|
40
40
|
ProjectionValidationError2,
|
|
41
41
|
validateProjectionsAtStartup,
|
|
42
42
|
isProjectionDefinition2,
|
|
43
43
|
resolveExecutionScopeAuthorization
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-qkbx3tf6.js";
|
|
45
45
|
import {
|
|
46
46
|
objectBatchKey2,
|
|
47
47
|
vectorConfiguration,
|
|
48
48
|
vectorSources,
|
|
49
49
|
normalizeVector2
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-qq90g05n.js";
|
|
51
51
|
import {
|
|
52
52
|
materializationApplyPhase2
|
|
53
53
|
} from "./chunk-wt4szfec.js";
|
|
@@ -57,10 +57,10 @@ import {
|
|
|
57
57
|
import {
|
|
58
58
|
executionRecordInputFromRuntime,
|
|
59
59
|
ensureExecutionRecord2
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-ex496vct.js";
|
|
61
61
|
import {
|
|
62
62
|
isStorageSerializationFailure2
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-y9jmd7e5.js";
|
|
64
64
|
import {
|
|
65
65
|
assertPinnedDatasetWatermark2
|
|
66
66
|
} from "./chunk-6aawea28.js";
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
isFileRef2
|
|
4
|
+
} from "./chunk-jhm3zsa7.js";
|
|
2
5
|
import {
|
|
3
6
|
SIXB_API_ROUTES2,
|
|
4
7
|
matchesPathPattern2,
|
|
5
8
|
normalizeRoutePath2
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-1sr8ryzk.js";
|
|
7
10
|
import {
|
|
8
11
|
validateSchemaValue2,
|
|
9
12
|
normalizeSchemaValue2
|
|
10
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-y05543x6.js";
|
|
11
14
|
import {
|
|
12
15
|
AgentDefinitionError2,
|
|
13
16
|
AgentToolResultValidationError2
|
|
14
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-pfp1txq2.js";
|
|
15
18
|
import {
|
|
16
19
|
assertValidSchema
|
|
17
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-vgk3hknm.js";
|
|
18
21
|
import {
|
|
19
22
|
OntologyValidationError2
|
|
20
23
|
} from "./chunk-cqr3acm1.js";
|
|
21
|
-
import {
|
|
22
|
-
isFileRef2
|
|
23
|
-
} from "./chunk-h3v76ams.js";
|
|
24
24
|
import {
|
|
25
25
|
cloneJsonValue2,
|
|
26
26
|
stableJsonStringify2,
|
|
@@ -98,6 +98,7 @@ function getInvalidAgentToolResultReason(value) {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
// src/agents/adapters.ts
|
|
101
|
+
var AGENT_CONTINUATION_INSTRUCTION = "<sixb_continuation>Your previous answer stopped at the turn time limit. Continue from where it stopped, in the same language, without repeating what you already wrote.</sixb_continuation>";
|
|
101
102
|
function toModelMessages2(messages, options = {}) {
|
|
102
103
|
const result = [];
|
|
103
104
|
for (const message of messages) {
|
|
@@ -143,6 +144,10 @@ function userModelMessage(message, options) {
|
|
|
143
144
|
` });
|
|
144
145
|
}
|
|
145
146
|
message.parts.forEach((part, partIndex) => {
|
|
147
|
+
if (part.type === "continuation") {
|
|
148
|
+
content.push({ type: "text", text: AGENT_CONTINUATION_INSTRUCTION });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
146
151
|
if (part.type === "text") {
|
|
147
152
|
content.push({
|
|
148
153
|
type: "text",
|
|
@@ -169,6 +174,11 @@ function userModelMessage(message, options) {
|
|
|
169
174
|
}
|
|
170
175
|
}
|
|
171
176
|
});
|
|
177
|
+
const suffix = options.userMessageSuffix?.(message);
|
|
178
|
+
if (suffix)
|
|
179
|
+
content.push({ type: "text", text: `
|
|
180
|
+
|
|
181
|
+
${suffix}` });
|
|
172
182
|
return { role: "user", content };
|
|
173
183
|
}
|
|
174
184
|
function appendAssistantModelMessages(result, message, options) {
|
|
@@ -554,6 +564,9 @@ function estimateMessageTokens(message, attachments) {
|
|
|
554
564
|
case "step-start":
|
|
555
565
|
tokens += STEP_OVERHEAD_TOKENS;
|
|
556
566
|
break;
|
|
567
|
+
case "continuation":
|
|
568
|
+
tokens += textTokens(AGENT_CONTINUATION_INSTRUCTION);
|
|
569
|
+
break;
|
|
557
570
|
case "context":
|
|
558
571
|
tokens += textTokens(stableJsonStringify2(part.context));
|
|
559
572
|
break;
|
|
@@ -590,6 +603,8 @@ function serializeSummaryPart(message, part, partIndex) {
|
|
|
590
603
|
case "provider-state":
|
|
591
604
|
case "step-start":
|
|
592
605
|
return [];
|
|
606
|
+
case "continuation":
|
|
607
|
+
return [`${indent}<continuation_request />`];
|
|
593
608
|
case "context":
|
|
594
609
|
return part.context.kind === "object" ? [
|
|
595
610
|
`${indent}<object_context origin="${part.origin}" object_type_id="${escapeXml2(part.context.ref.objectTypeId)}" primary_id="${escapeXml2(part.context.ref.primaryId)}" />`
|
|
@@ -705,4 +720,4 @@ function escapeXml3(value) {
|
|
|
705
720
|
}
|
|
706
721
|
export { serializeAgentContextForModel2, isAgentToolResult2, toModelMessages2, AGENT_API_GATEWAY_PREFIX2, AGENT_API_ROUTES2, createAgentApiGatewayCapability2, isValidAgentApiGatewayCapability2, isAllowedAgentApiRequest2, AGENT_RESERVED_TOOL_NAMES2, isAgentToolDefinition2, validateAndNormalizeAgentToolInput2, toolsFromProjectConfig, defineAgentTool2, AGENT_CONTEXT_ESTIMATOR_VERSION2, shouldCompactAgentContext2, estimateAgentContextRequestTokens2, estimateAgentContextMessagesTokens2, selectAgentContextCompactionBoundary2, serializeAgentMessagesForSummary2, agent2, projectAgentThreadModelContext2 };
|
|
707
722
|
|
|
708
|
-
//# debugId=
|
|
723
|
+
//# debugId=2FE5CCEC390D142664756E2164756E21
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/agents/context-model.ts", "../src/agents/tool-result.ts", "../src/agents/adapters.ts", "../src/agents/api-gateway.ts", "../src/agents/validation.ts", "../src/agents/tool-definition.ts", "../src/agents/builders.ts", "../src/agents/context-compaction.ts", "../src/agents/reference.ts", "../src/agents/thread-context-projection.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { stableJsonStringify } from \"../json\"\nimport type { AgentContextPart } from \"./context/entries\"\n\n/** Project persisted context into one deterministic, escaped data block for the model. */\nexport function serializeAgentContextForModel(\n parts: readonly AgentContextPart[]\n): string | undefined {\n if (parts.length === 0) return undefined\n\n const lines = [\"<sixb_user_context>\"]\n for (const part of parts) {\n if (part.context.kind === \"object\") {\n lines.push(\n \" <object_context>\",\n ` <object_type_id>${escapeXml(part.context.ref.objectTypeId)}</object_type_id>`,\n ` <primary_id>${escapeXml(part.context.ref.primaryId)}</primary_id>`,\n \" </object_context>\"\n )\n continue\n }\n\n lines.push(\n \" <app_state_context>\",\n ` <id>${escapeXml(part.context.id)}</id>`,\n ` <description>${escapeXml(part.context.description)}</description>`,\n ` <value format=\"json\">${escapeXml(stableJsonStringify(part.context.value))}</value>`,\n \" </app_state_context>\"\n )\n }\n lines.push(\"</sixb_user_context>\")\n return lines.join(\"\\n\")\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n",
|
|
6
|
+
"import { isFileRef } from \"../blob-storage/validation\"\nimport { isPlainRecord } from \"../json\"\nimport type { AgentToolResult } from \"./types\"\n\n/** Narrow a durable JSON tool output to Sixb's file-aware result envelope. */\nexport function isAgentToolResult(value: unknown): value is AgentToolResult {\n return (\n isPlainRecord(value) &&\n value.kind === \"agentToolResult\" &&\n getInvalidAgentToolResultReason(value) === undefined\n )\n}\n\n/** Return a precise path when a tagged result does not satisfy the public rich-result contract. */\nexport function getInvalidAgentToolResultReason(value: unknown): string | undefined {\n if (!isPlainRecord(value) || value.kind !== \"agentToolResult\") {\n return undefined\n }\n\n if (!Array.isArray(value.content)) {\n return \"result.content must be an array\"\n }\n const unsupportedKey = Object.keys(value).find((key) => key !== \"kind\" && key !== \"content\")\n if (unsupportedKey) {\n return `result.${unsupportedKey} is not supported`\n }\n if (value.content.length === 0) {\n return \"result.content must contain at least one content part\"\n }\n\n for (let index = 0; index < value.content.length; index += 1) {\n const part = value.content[index]\n const path = `result.content[${index}]`\n if (!isPlainRecord(part)) {\n return `${path} must be a text or file content part`\n }\n if (part.type === \"text\") {\n if (typeof part.text !== \"string\") {\n return `${path}.text must be a string`\n }\n const unsupportedKey = Object.keys(part).find((key) => key !== \"type\" && key !== \"text\")\n if (unsupportedKey) {\n return `${path}.${unsupportedKey} is not supported`\n }\n continue\n }\n if (part.type === \"file\") {\n if (!isFileRef(part.fileRef)) {\n return `${path}.fileRef must be a valid FileRef`\n }\n const unsupportedKey = Object.keys(part).find((key) => key !== \"type\" && key !== \"fileRef\")\n if (unsupportedKey) {\n return `${path}.${unsupportedKey} is not supported`\n }\n continue\n }\n return `${path}.type must be 'text' or 'file'`\n }\n\n return undefined\n}\n",
|
|
7
|
+
"import type { JsonValue } from \"../json\"\nimport type {\n ModelAssistantPart,\n ModelFilePart,\n ModelMessage,\n ModelTextPart,\n ModelToolCallPart,\n ModelToolOutput,\n ModelToolResultPart,\n ProviderData,\n} from \"../models\"\nimport { serializeAgentContextForModel } from \"./context-model\"\nimport type {\n AgentFilePart,\n AgentMessage,\n AgentMessagePart,\n AgentTextPart,\n AgentToolCallPart,\n} from \"./message\"\nimport { isAgentToolResult } from \"./tool-result\"\nimport type { AgentToolFileContent } from \"./types\"\n\n/** What the model reads for a {@link AgentContinuationPart}, in place of a user's words. */\nexport const AGENT_CONTINUATION_INSTRUCTION =\n \"<sixb_continuation>Your previous answer stopped at the turn time limit. Continue from where it stopped, in the same language, without repeating what you already wrote.</sixb_continuation>\"\n\nexport interface AgentFileDataResolverInput<TMessage extends AgentMessage = AgentMessage> {\n readonly message: TMessage\n readonly part: AgentFilePart\n readonly partIndex: number\n}\n\nexport interface AgentFileDataProjection {\n readonly data: URL\n readonly mediaType?: string\n readonly filename?: string\n}\n\nexport interface AgentToolResultFileResolverInput<TMessage extends AgentMessage = AgentMessage> {\n readonly message: TMessage\n readonly part: AgentToolCallPart\n readonly partIndex: number\n readonly contentPart: AgentToolFileContent\n readonly contentIndex: number\n}\n\nexport interface ToModelMessagesOptions<TMessage extends AgentMessage = AgentMessage> {\n /**\n * Convert a stored file reference into model-readable data. When omitted, file parts are skipped\n * rather than leaking blob ids or passing an unsupported Sixb-only shape to model providers.\n */\n readonly fileData?:\n | ((input: AgentFileDataResolverInput<TMessage>) => URL | AgentFileDataProjection | undefined)\n | undefined\n /**\n * Convert a user file reference into model-readable text context. This is appended before any\n * file data part so metadata, truncation notes, and sandbox/API access hints stay visible even for\n * models that cannot consume inline files.\n */\n readonly fileText?: (input: AgentFileDataResolverInput<TMessage>) => string | undefined\n /**\n * Framework text closing a user message, such as when it was sent. It must derive from stored\n * data only, so replaying the same history always projects the same bytes.\n */\n readonly userMessageSuffix?: (message: TMessage) => string | undefined\n /** Add current metadata, sandbox paths, and projection notes for a tool-result file. */\n readonly toolResultFileText?: (\n input: AgentToolResultFileResolverInput<TMessage>\n ) => string | undefined\n}\n\n/**\n * Project durable messages into Sixb model messages. Assistant parts are grouped\n * into blocks at each `step-start`; each nonempty block yields one `assistant` message plus, for any\n * non-provider-executed tool calls, one `tool` message. Provider-executed tool results stay inline\n * in the assistant message. Without a tool registry, a string output maps to `text` and anything\n * else to `json`; this is the documented fidelity scope (a tool's custom `toModelOutput` is not\n * reproduced). Assistant file attachments are not projected as assistant-authored text.\n */\nexport function toModelMessages<TMessage extends AgentMessage>(\n messages: readonly TMessage[],\n options: ToModelMessagesOptions<TMessage> = {}\n): ModelMessage[] {\n const result: ModelMessage[] = []\n for (const message of messages) {\n switch (message.role) {\n case \"system\":\n result.push(systemModelMessage(message))\n break\n case \"user\":\n result.push(userModelMessage(message, options))\n break\n case \"assistant\":\n appendAssistantModelMessages(result, message, options)\n break\n }\n }\n return result\n}\n\nfunction systemModelMessage(message: AgentMessage): ModelMessage {\n const textParts = message.parts.filter((part) => part.type === \"text\")\n const providerData = mergeProviderMetadata(textParts)\n return {\n role: \"system\",\n content: textParts.map((part) => part.text).join(\"\"),\n ...(providerData === undefined ? {} : { providerData }),\n }\n}\n\nfunction mergeProviderMetadata(parts: readonly AgentTextPart[]): ProviderData | undefined {\n let merged: Record<string, JsonValue> | undefined\n for (const part of parts) {\n const meta = part.providerMetadata\n if (meta !== undefined && typeof meta === \"object\" && meta !== null && !Array.isArray(meta)) {\n merged = { ...(merged ?? {}), ...meta }\n }\n }\n return merged\n}\n\nfunction userModelMessage<TMessage extends AgentMessage>(\n message: TMessage,\n options: ToModelMessagesOptions<TMessage>\n): ModelMessage {\n const content: (ModelTextPart | ModelFilePart)[] = []\n const serializedContext = serializeAgentContextForModel(\n message.parts.filter((part) => part.type === \"context\")\n )\n if (serializedContext) {\n content.push({ type: \"text\", text: `${serializedContext}\\n\\n` })\n }\n message.parts.forEach((part, partIndex) => {\n if (part.type === \"continuation\") {\n content.push({ type: \"text\", text: AGENT_CONTINUATION_INSTRUCTION })\n return\n }\n if (part.type === \"text\") {\n content.push({\n type: \"text\",\n text: part.text,\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n return\n }\n if (part.type === \"file\") {\n const fileContext = options.fileText?.({ message, part, partIndex })\n if (fileContext) {\n content.push({ type: \"text\", text: fileContext })\n }\n const resolved = options.fileData?.({ message, part, partIndex })\n if (resolved) {\n const projection = resolved instanceof URL ? { data: resolved } : resolved\n content.push({\n type: \"file\",\n data: projection.data,\n mediaType: projection.mediaType ?? part.fileRef.mediaType ?? \"application/octet-stream\",\n ...(projection.filename !== undefined\n ? { filename: projection.filename }\n : part.fileRef.fileName === undefined\n ? {}\n : { filename: part.fileRef.fileName }),\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n }\n }\n })\n const suffix = options.userMessageSuffix?.(message)\n if (suffix) content.push({ type: \"text\", text: `\\n\\n${suffix}` })\n return { role: \"user\", content }\n}\n\nfunction appendAssistantModelMessages<TMessage extends AgentMessage>(\n result: ModelMessage[],\n message: TMessage,\n options: ToModelMessagesOptions<TMessage>\n): void {\n let block: Array<{ readonly part: AgentMessagePart; readonly partIndex: number }> = []\n const flush = (): void => {\n if (block.length === 0) {\n return\n }\n const current = block\n block = []\n\n const content: ModelAssistantPart[] = []\n const toolResults: ModelToolResultPart[] = []\n for (const { part, partIndex } of current) {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n content.push({\n type: part.type,\n text: part.text,\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n } else if (part.type === \"tool-call\") {\n content.push(toolCallModelPart(part))\n if (part.providerExecuted === true) {\n content.push(toolResultModelPart(message, part, partIndex, \"json\", options))\n } else {\n toolResults.push(toolResultModelPart(message, part, partIndex, \"text\", options))\n }\n } else if (part.type === \"provider-state\") {\n content.push({\n type: \"provider-state\",\n providerId: part.providerId,\n data: part.data,\n })\n }\n }\n if (content.length > 0) result.push({ role: \"assistant\", content })\n\n if (toolResults.length > 0) {\n result.push({ role: \"tool\", content: toolResults })\n }\n }\n\n message.parts.forEach((part, partIndex) => {\n if (part.type === \"step-start\") {\n flush()\n } else {\n block.push({ part, partIndex })\n }\n })\n flush()\n}\n\nfunction toolCallModelPart(part: AgentToolCallPart): ModelToolCallPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...(part.providerExecuted === undefined ? {} : { providerExecuted: part.providerExecuted }),\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n }\n}\n\nfunction toolResultModelPart<TMessage extends AgentMessage>(\n message: TMessage,\n part: AgentToolCallPart,\n partIndex: number,\n errorMode: \"text\" | \"json\",\n options: ToModelMessagesOptions<TMessage>\n): ModelToolResultPart {\n // Stored providerMetadata belongs to the call, not this synthesized result. Replaying it here\n // can replace the result with the provider's original tool-call block.\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: toolResultOutput(message, part, partIndex, errorMode, options),\n }\n}\n\nfunction toolResultOutput<TMessage extends AgentMessage>(\n message: TMessage,\n part: AgentToolCallPart,\n partIndex: number,\n errorMode: \"text\" | \"json\",\n options: ToModelMessagesOptions<TMessage>\n): ModelToolOutput {\n if (part.state === \"output-error\") {\n return errorMode === \"json\"\n ? { type: \"error-json\", value: part.errorText }\n : { type: \"error-text\", value: part.errorText }\n }\n if (isAgentToolResult(part.output)) {\n const value: string[] = []\n part.output.content.forEach((contentPart, contentIndex) => {\n if (contentPart.type === \"text\") {\n value.push(contentPart.text)\n return\n }\n\n const fileContext = options.toolResultFileText?.({\n message,\n part,\n partIndex,\n contentPart,\n contentIndex,\n })\n value.push(fileContext ?? toolResultFileFallbackText(contentPart))\n })\n return { type: \"text\", value: value.join(\"\\n\") }\n }\n return typeof part.output === \"string\"\n ? { type: \"text\", value: part.output }\n : { type: \"json\", value: part.output }\n}\n\nfunction toolResultFileFallbackText(part: AgentToolFileContent): string {\n const attributes = [\n part.fileRef.fileName ? `name=${JSON.stringify(part.fileRef.fileName)}` : undefined,\n part.fileRef.mediaType ? `mediaType=${JSON.stringify(part.fileRef.mediaType)}` : undefined,\n `sizeBytes=${part.fileRef.sizeBytes}`,\n ].filter((value): value is string => value !== undefined)\n return `[Tool-created file: ${attributes.join(\" \")}. Contents are not available inline.]`\n}\n",
|
|
8
|
+
"import { createHmac, timingSafeEqual } from \"node:crypto\"\nimport { SIXB_API_ROUTES } from \"../http/api-routes\"\nimport { matchesPathPattern, normalizeRoutePath } from \"../http/route-pattern\"\n\nexport const AGENT_API_GATEWAY_PREFIX = \"/__sixb/agent-api\"\n\nconst AGENT_API_GATEWAY_CAPABILITY_PREFIX = \"sixb_agw_v1_\"\n\nexport interface AgentApiGatewayCapabilityInput {\n readonly projectId: string\n readonly runId: string\n readonly executionToken: string\n}\n\nexport interface AgentApiRoute {\n readonly method: string\n readonly path: string\n}\n\n/**\n * The routes the agent API gateway may proxy — the `agentApi` projection of the canonical\n * {@link SIXB_API_ROUTES} table, so this list can never drift from (nor exceed) the bearer boundary.\n */\nexport const AGENT_API_ROUTES: readonly AgentApiRoute[] = SIXB_API_ROUTES.filter(\n (route) => route.agentApi\n).map((route) => ({ method: route.method, path: route.path }))\n\nexport function createAgentApiGatewayCapability(input: AgentApiGatewayCapabilityInput): string {\n return `${AGENT_API_GATEWAY_CAPABILITY_PREFIX}${capabilityDigest(input)}`\n}\n\nexport function isValidAgentApiGatewayCapability(\n input: AgentApiGatewayCapabilityInput & { readonly capability: string }\n): boolean {\n const expected = createAgentApiGatewayCapability(input)\n const actual = input.capability\n const expectedBuffer = Buffer.from(expected)\n const actualBuffer = Buffer.from(actual)\n return (\n expectedBuffer.byteLength === actualBuffer.byteLength &&\n timingSafeEqual(expectedBuffer, actualBuffer)\n )\n}\n\nexport function isAllowedAgentApiRequest(method: string, pathname: string): boolean {\n const normalizedMethod = method.toUpperCase()\n const normalizedPath = normalizeRoutePath(pathname)\n return AGENT_API_ROUTES.some(\n (route) => route.method === normalizedMethod && matchesPathPattern(normalizedPath, route.path)\n )\n}\n\nfunction capabilityDigest(input: AgentApiGatewayCapabilityInput): string {\n return createHmac(\"sha256\", input.executionToken)\n .update(`agent-api-gateway:${input.projectId}:${input.runId}`)\n .digest(\"base64url\")\n}\n",
|
|
9
|
+
"import { getInvalidJsonValueReason, isPlainRecord, type JsonValue } from \"../json\"\nimport { type ObjectSchema, OntologyValidationError, type ValueType } from \"../ontology\"\nimport { assertValidSchema } from \"../ontology/validation/definition\"\nimport { normalizeSchemaValue } from \"../ontology/validation/normalize\"\nimport { validateSchemaValue } from \"../ontology/validation/schema\"\nimport { AgentDefinitionError } from \"./errors\"\nimport type { AgentToolDefinition, AgentToolInputSchema } from \"./types\"\n\nconst AGENT_TOOL_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]{0,63}$/\nexport const AGENT_RESERVED_TOOL_NAMES = [\n \"bash\",\n \"read\",\n \"view_file\",\n \"spawn_agent\",\n \"wait_agent\",\n] as const\n\nexport function isAgentToolDefinition(value: unknown): value is AgentToolDefinition {\n return (\n isRecord(value) &&\n value.kind === \"agentTool\" &&\n typeof value.name === \"string\" &&\n typeof value.description === \"string\" &&\n isPlainRecord(value.input) &&\n typeof value.handler === \"function\"\n )\n}\n\nexport function assertValidAgentToolName(name: unknown): asserts name is string {\n if (typeof name !== \"string\" || !AGENT_TOOL_NAME_PATTERN.test(name)) {\n throw new AgentDefinitionError(\n \"[Sixb] Agent tool name must be 1-64 characters, start with a letter or underscore, and contain only letters, numbers, underscores, or hyphens.\"\n )\n }\n if ((AGENT_RESERVED_TOOL_NAMES as readonly string[]).includes(name)) {\n throw new AgentDefinitionError(`[Sixb] Agent tool name '${name}' is reserved by the framework.`)\n }\n}\n\nexport function assertValidAgentToolDescription(name: string, description: unknown): void {\n if (typeof description !== \"string\" || !description.trim()) {\n throw new AgentDefinitionError(`[Sixb] Agent tool '${name}' description must not be empty.`)\n }\n}\n\nexport function assertValidAgentToolInput(name: string, input: unknown): void {\n if (!isPlainRecord(input)) {\n throw new AgentDefinitionError(`[Sixb] Agent tool '${name}' input must be a schema object.`)\n }\n\n for (const [field, schema] of Object.entries(input)) {\n if (!field.trim()) {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${name}' input field names must not be empty.`\n )\n }\n assertValidSchema(schema, `input.${field}`, (path) => invalidAgentToolSchema(name, path))\n }\n}\n\nexport function validateAndSnapshotAgentToolInput<TInput extends AgentToolInputSchema>(\n toolName: string,\n input: TInput\n): TInput {\n assertValidAgentToolInput(toolName, input)\n try {\n return deepFreeze(structuredClone(input))\n } catch {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${toolName}' input must be safely snapshot-compatible.`\n )\n }\n}\n\n/** Validate model input against a tool schema, normalize it to JSON, and lock the snapshot. */\nexport function validateAndNormalizeAgentToolInput(\n toolName: string,\n shape: AgentToolInputSchema,\n value: unknown,\n valueTypesById: ReadonlyMap<string, ValueType>\n): Record<string, JsonValue> {\n const label = `Agent tool '${toolName}' input`\n if (!isPlainRecord(value)) {\n throw new OntologyValidationError(`[Sixb] ${label} must be a JSON object.`)\n }\n\n const reason = getInvalidJsonValueReason(value, label)\n if (reason) {\n throw new OntologyValidationError(`[Sixb] ${label} must be JSON-compatible; ${reason}.`)\n }\n\n const schema: ObjectSchema = {\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(shape).map(([field, fieldSchema]) => [\n field,\n { schema: fieldSchema, required: true },\n ])\n ),\n }\n validateSchemaValue(schema, value, label, valueTypesById)\n return deepFreeze(\n normalizeSchemaValue(schema, value, label, valueTypesById) as Record<string, JsonValue>\n )\n}\n\nfunction invalidAgentToolSchema(toolName: string, path: string): AgentDefinitionError {\n return new AgentDefinitionError(\n `[Sixb] Agent tool '${toolName}' ${path} must be a valid Sixb schema.`\n )\n}\n\nexport function assertValidProjectAgentToolDefinitions(\n tools: readonly AgentToolDefinition[]\n): void {\n const seen = new Set<string>()\n for (let index = 0; index < tools.length; index += 1) {\n const tool = tools[index]\n if (!Object.hasOwn(tools, index) || !isAgentToolDefinition(tool)) {\n throw new AgentDefinitionError(\n \"[Sixb] Project tools must contain only agent tool definitions.\"\n )\n }\n\n assertValidAgentToolName(tool.name)\n assertValidAgentToolDescription(tool.name, tool.description)\n assertValidAgentToolInput(tool.name, tool.input)\n if (seen.has(tool.name)) {\n throw new AgentDefinitionError(\n `[Sixb] Project tools contain duplicate tool name '${tool.name}'.`\n )\n }\n seen.add(tool.name)\n }\n}\n\nfunction deepFreeze<T>(value: T, seen: Set<object> = new Set()): T {\n if (value === null || typeof value !== \"object\" || seen.has(value)) {\n return value\n }\n\n seen.add(value)\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (descriptor && \"value\" in descriptor) {\n deepFreeze(descriptor.value, seen)\n }\n }\n return Object.freeze(value)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
10
|
+
"import {\n cloneJsonValue,\n getInvalidJsonValueReason,\n type JsonValue,\n type ReadonlyJsonValue,\n} from \"../json\"\nimport { AgentDefinitionError, AgentToolResultValidationError } from \"./errors\"\nimport { getInvalidAgentToolResultReason } from \"./tool-result\"\nimport type {\n AgentToolDefinition,\n AgentToolHandler,\n AgentToolInputSchema,\n InferAgentToolInputSchema,\n} from \"./types\"\nimport {\n assertValidAgentToolDescription,\n assertValidAgentToolName,\n assertValidProjectAgentToolDefinitions,\n validateAndSnapshotAgentToolInput,\n} from \"./validation\"\n\nconst EMPTY_AGENT_TOOLS: readonly AgentToolDefinition[] = Object.freeze([])\nconst normalizedAgentTools = new WeakSet<AgentToolDefinition>()\n\nexport function createAgentToolDefinition<\n const TName extends string,\n const TInput extends AgentToolInputSchema,\n>(definition: {\n readonly name: TName\n readonly description: string\n readonly input: TInput\n readonly handler: AgentToolHandler<InferAgentToolInputSchema<TInput>>\n}): AgentToolDefinition<TName, TInput> {\n assertValidAgentToolName(definition.name)\n assertValidAgentToolDescription(definition.name, definition.description)\n if (typeof definition.handler !== \"function\") {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${definition.name}' handler must be a function.`\n )\n }\n\n const input = validateAndSnapshotAgentToolInput(definition.name, definition.input)\n const tool: AgentToolDefinition<TName, TInput> = {\n kind: \"agentTool\",\n name: definition.name,\n description: definition.description,\n input,\n handler: async (context) => {\n const result = await definition.handler(context)\n let snapshot: JsonValue\n try {\n // AgentToolResult is intentionally expressed with FileRef instead of a duplicate JSON-only\n // shape. Runtime validation below proves that the complete envelope crosses the same JSON\n // boundary as legacy results.\n snapshot = cloneJsonValue(result as ReadonlyJsonValue, \"result\")\n } catch (cause) {\n throw new AgentToolResultValidationError(\n definition.name,\n getInvalidJsonValueReason(result, \"result\") ?? \"result could not be cloned safely\",\n { cause }\n )\n }\n const richResultReason = getInvalidAgentToolResultReason(snapshot)\n if (richResultReason) {\n throw new AgentToolResultValidationError(definition.name, richResultReason)\n }\n return snapshot\n },\n }\n\n normalizedAgentTools.add(tool)\n return Object.freeze(tool)\n}\n\nexport function toolsFromProjectConfig(\n tools: readonly AgentToolDefinition[] | undefined\n): readonly AgentToolDefinition[] {\n if (tools === undefined) {\n return EMPTY_AGENT_TOOLS\n }\n if (!Array.isArray(tools)) {\n throw new AgentDefinitionError(\n \"[Sixb] Project tools must be an array of agent tool definitions.\"\n )\n }\n\n assertValidProjectAgentToolDefinitions(tools)\n return normalizeAgentToolDefinitions(tools)\n}\n\nfunction normalizeAgentToolDefinitions(\n tools: readonly AgentToolDefinition[]\n): readonly AgentToolDefinition[] {\n const normalized: AgentToolDefinition[] = []\n for (const tool of tools) {\n normalized.push(normalizeAgentToolDefinition(tool))\n }\n return Object.freeze(normalized)\n}\n\nfunction normalizeAgentToolDefinition(tool: AgentToolDefinition): AgentToolDefinition {\n if (normalizedAgentTools.has(tool)) {\n return tool\n }\n\n return createAgentToolDefinition({\n name: tool.name,\n description: tool.description,\n input: tool.input,\n handler: (context) => tool.handler(context),\n })\n}\n",
|
|
11
|
+
"import { createAgentToolDefinition } from \"./tool-definition\"\nimport type {\n AgentToolDefinition,\n AgentToolDescriptionBuilder,\n AgentToolHandler,\n AgentToolInputBuilder,\n AgentToolInputSchema,\n AgentToolRunBuilder,\n InferAgentToolInputSchema,\n} from \"./types\"\nimport {\n assertValidAgentToolDescription,\n assertValidAgentToolInput,\n assertValidAgentToolName,\n} from \"./validation\"\n\n/**\n * Define a reusable tool registered through `createSixb({ tools })`.\n *\n * The returned definition is inert. The agent worker supplies its run-scoped\n * context and executes the handler only when a run calls the tool.\n */\nexport function defineAgentTool<const TName extends string>(\n name: TName\n): AgentToolDescriptionBuilder<TName> {\n assertValidAgentToolName(name)\n\n return {\n description(description: string): AgentToolInputBuilder<TName> {\n assertValidAgentToolDescription(name, description)\n\n return {\n input<const TInput extends AgentToolInputSchema>(\n input: TInput\n ): AgentToolRunBuilder<TName, TInput> {\n assertValidAgentToolInput(name, input)\n\n return {\n run(\n handler: AgentToolHandler<InferAgentToolInputSchema<TInput>>\n ): AgentToolDefinition<TName, TInput> {\n return createAgentToolDefinition({ name, description, input, handler })\n },\n }\n },\n }\n },\n }\n}\n",
|
|
12
|
+
"import { stableJsonStringify } from \"../json\"\nimport type { AgentMessageRecord } from \"../storage/agents/types\"\nimport { AGENT_CONTINUATION_INSTRUCTION } from \"./adapters\"\nimport type { AgentMessage, AgentMessagePart } from \"./message\"\n\nexport const AGENT_CONTEXT_ESTIMATOR_VERSION = 1 as const\n\nconst CHARS_PER_TOKEN = 4\nconst REQUEST_OVERHEAD_TOKENS = 8\nconst MESSAGE_OVERHEAD_TOKENS = 8\nconst TOOL_OVERHEAD_TOKENS = 16\nconst STEP_OVERHEAD_TOKENS = 2\nconst IMAGE_ALLOWANCE_TOKENS = 1_200\nconst FILE_TEXT_INLINE_MAX_BYTES = 50 * 1024\nconst FILE_TEXT_INLINE_TOTAL_MAX_BYTES = 200 * 1024\nconst TOOL_RESULT_SUMMARY_MAX_CHARS = 2_000\n\nexport interface AgentContextEstimateTool {\n readonly name: string\n readonly description: string\n /** Deterministic JSON-schema serialization sent for this tool. */\n readonly inputSchema: string\n}\n\nexport interface EstimateAgentContextRequestTokensInput {\n readonly systemPrompt: string\n readonly tools: readonly AgentContextEstimateTool[]\n readonly messages: readonly AgentMessage[]\n}\n\nexport interface AgentContextTokenEstimate {\n readonly tokens: number\n readonly estimatorVersion: typeof AGENT_CONTEXT_ESTIMATOR_VERSION\n}\n\nexport interface AgentContextCompactionBoundary {\n readonly messagesToSummarize: readonly AgentMessageRecord[]\n readonly retainedMessages: readonly AgentMessageRecord[]\n readonly summarizedThroughSeq: number\n}\n\n/** Compaction begins only once the estimated request crosses the reserved input budget. */\nexport function shouldCompactAgentContext(input: {\n readonly estimatedInputTokens: number\n readonly inputBudgetTokens: number\n}): boolean {\n return input.estimatedInputTokens > input.inputBudgetTokens\n}\n\n/** Estimate the provider request shape with one stable, conservative character heuristic. */\nexport function estimateAgentContextRequestTokens(\n input: EstimateAgentContextRequestTokensInput\n): AgentContextTokenEstimate {\n const toolTokens = input.tools.reduce(\n (total, tool) =>\n total +\n TOOL_OVERHEAD_TOKENS +\n textTokens(tool.name) +\n textTokens(tool.description) +\n textTokens(tool.inputSchema),\n 0\n )\n return {\n tokens:\n REQUEST_OVERHEAD_TOKENS +\n textTokens(input.systemPrompt) +\n toolTokens +\n estimateAgentContextMessagesTokens(input.messages).tokens,\n estimatorVersion: AGENT_CONTEXT_ESTIMATOR_VERSION,\n }\n}\n\n/** Estimate message-only growth after a provider-usage anchor. */\nexport function estimateAgentContextMessagesTokens(\n messages: readonly AgentMessage[]\n): AgentContextTokenEstimate {\n const attachments = { textBytesRemaining: FILE_TEXT_INLINE_TOTAL_MAX_BYTES }\n let tokens = 0\n for (const message of messages) {\n tokens += estimateMessageTokens(message, attachments)\n }\n return { tokens, estimatorVersion: AGENT_CONTEXT_ESTIMATOR_VERSION }\n}\n\n/** Select the safe user boundary whose retained tail is closest to the configured recent budget. */\nexport function selectAgentContextCompactionBoundary(input: {\n readonly messages: readonly AgentMessageRecord[]\n readonly keepRecentTokens: number\n}): AgentContextCompactionBoundary | null {\n if (input.messages.length < 2) return null\n\n let retainedTokens = 0\n let boundaryIndex: number | null = null\n let closestDistance = Number.POSITIVE_INFINITY\n for (let index = input.messages.length - 1; index > 0; index -= 1) {\n retainedTokens += estimateAgentContextMessagesTokens([input.messages[index]!]).tokens\n if (input.messages[index]?.role !== \"user\") continue\n\n const distance = Math.abs(input.keepRecentTokens - retainedTokens)\n if (distance <= closestDistance) {\n boundaryIndex = index\n closestDistance = distance\n }\n if (retainedTokens >= input.keepRecentTokens) break\n }\n\n if (boundaryIndex === null) return null\n\n const summarizedThroughSeq = input.messages[boundaryIndex - 1]?.seq\n if (summarizedThroughSeq === undefined) return null\n return {\n messagesToSummarize: input.messages.slice(0, boundaryIndex),\n retainedMessages: input.messages.slice(boundaryIndex),\n summarizedThroughSeq,\n }\n}\n\n/** Serialize durable conversation content as escaped quoted data for the summary model. */\nexport function serializeAgentMessagesForSummary(messages: readonly AgentMessageRecord[]): string {\n const lines = [\"<sixb_conversation_history>\"]\n for (const message of messages) {\n lines.push(\n ` <message id=\"${escapeXml(message.id)}\" seq=\"${message.seq}\" role=\"${message.role}\">`\n )\n message.parts.forEach((part, partIndex) => {\n lines.push(...serializeSummaryPart(message, part, partIndex))\n })\n lines.push(\" </message>\")\n }\n lines.push(\"</sixb_conversation_history>\")\n return lines.join(\"\\n\")\n}\n\nfunction estimateMessageTokens(\n message: AgentMessage,\n attachments: { textBytesRemaining: number }\n): number {\n let tokens = MESSAGE_OVERHEAD_TOKENS\n for (const part of message.parts) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n tokens += textTokens(part.text)\n break\n case \"step-start\":\n tokens += STEP_OVERHEAD_TOKENS\n break\n case \"continuation\":\n tokens += textTokens(AGENT_CONTINUATION_INSTRUCTION)\n break\n case \"context\":\n tokens += textTokens(stableJsonStringify(part.context))\n break\n case \"provider-state\":\n tokens += textTokens(stableJsonStringify(part.data))\n break\n case \"tool-call\":\n tokens +=\n TOOL_OVERHEAD_TOKENS +\n textTokens(part.toolName) +\n textTokens(stableJsonStringify(part.input)) +\n (part.state === \"output-available\"\n ? textTokens(stableJsonStringify(part.output))\n : textTokens(part.errorText))\n break\n case \"file\": {\n const file = part.fileRef\n tokens += textTokens(\n [file.blobId, file.digest, file.fileName, file.mediaType, file.logicalPath]\n .filter((value): value is string => value !== undefined)\n .join(\" \")\n )\n if (message.role !== \"assistant\") {\n if (looksLikeImage(file.mediaType, file.fileName)) {\n tokens += IMAGE_ALLOWANCE_TOKENS\n } else {\n const inlineBytes = Math.min(\n file.sizeBytes,\n FILE_TEXT_INLINE_MAX_BYTES,\n attachments.textBytesRemaining\n )\n attachments.textBytesRemaining -= inlineBytes\n tokens += Math.ceil(inlineBytes / CHARS_PER_TOKEN)\n }\n }\n break\n }\n }\n }\n return tokens\n}\n\nfunction serializeSummaryPart(\n message: AgentMessageRecord,\n part: AgentMessagePart,\n partIndex: number\n): string[] {\n const indent = \" \"\n switch (part.type) {\n case \"text\":\n return [`${indent}<text>${escapeXml(part.text)}</text>`]\n case \"reasoning\":\n case \"provider-state\":\n case \"step-start\":\n return []\n case \"continuation\":\n return [`${indent}<continuation_request />`]\n case \"context\":\n return part.context.kind === \"object\"\n ? [\n `${indent}<object_context origin=\"${part.origin}\" object_type_id=\"${escapeXml(part.context.ref.objectTypeId)}\" primary_id=\"${escapeXml(part.context.ref.primaryId)}\" />`,\n ]\n : [\n `${indent}<app_context origin=\"${part.origin}\" id=\"${escapeXml(part.context.id)}\" label=\"${escapeXml(part.context.label)}\">`,\n `${indent} <description>${escapeXml(part.context.description)}</description>`,\n `${indent} <value format=\"json\">${escapeXml(stableJsonStringify(part.context.value))}</value>`,\n `${indent}</app_context>`,\n ]\n case \"file\": {\n const file = part.fileRef\n const attributes = [\n `message_id=\"${escapeXml(message.id)}\"`,\n `part_index=\"${partIndex}\"`,\n `blob_id=\"${escapeXml(file.blobId)}\"`,\n `digest=\"${escapeXml(file.digest)}\"`,\n `size_bytes=\"${file.sizeBytes}\"`,\n ...(file.fileName === undefined ? [] : [`file_name=\"${escapeXml(file.fileName)}\"`]),\n ...(file.mediaType === undefined ? [] : [`media_type=\"${escapeXml(file.mediaType)}\"`]),\n ...(file.logicalPath === undefined\n ? []\n : [`logical_path=\"${escapeXml(file.logicalPath)}\"`]),\n ]\n return [`${indent}<file ${attributes.join(\" \")} />`]\n }\n case \"tool-call\": {\n const output =\n part.state === \"output-available\"\n ? truncateToolResult(stableJsonStringify(part.output))\n : truncateToolResult(part.errorText)\n return [\n `${indent}<tool_call id=\"${escapeXml(part.toolCallId)}\" name=\"${escapeXml(part.toolName)}\" state=\"${part.state}\">`,\n `${indent} <input format=\"json\">${escapeXml(stableJsonStringify(part.input))}</input>`,\n `${indent} <result>${escapeXml(output)}</result>`,\n `${indent}</tool_call>`,\n ]\n }\n }\n}\n\nfunction truncateToolResult(value: string): string {\n if (value.length <= TOOL_RESULT_SUMMARY_MAX_CHARS) return value\n return `${value.slice(0, TOOL_RESULT_SUMMARY_MAX_CHARS)}\\n[truncated ${value.length - TOOL_RESULT_SUMMARY_MAX_CHARS} characters]`\n}\n\nfunction looksLikeImage(mediaType: string | undefined, fileName: string | undefined): boolean {\n if (mediaType?.toLowerCase().startsWith(\"image/\")) return true\n return /\\.(?:avif|gif|jpe?g|png|webp)$/i.test(fileName ?? \"\")\n}\n\nfunction textTokens(value: string): number {\n return Math.ceil(new TextEncoder().encode(value).byteLength / CHARS_PER_TOKEN)\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n",
|
|
13
|
+
"import type { AgentReference } from \"./types\"\n\n/** Project Agent capability used in security grants such as `can.run(agent)`. */\nexport const agent: AgentReference = Object.freeze({\n kind: \"agent\",\n usage: Object.freeze({ kind: \"aiUsage\" }),\n})\n",
|
|
14
|
+
"import type { AgentContextCheckpointRecord, AgentMessageRecord } from \"../storage/agents/types\"\nimport type { AgentMessage } from \"./message\"\n\n/** A model-only message. Persisted tail messages carry `id`; the synthetic summary does not. */\nexport interface AgentThreadModelContextMessage extends AgentMessage {\n readonly id?: string\n}\n\nexport interface ProjectAgentThreadModelContextInput {\n readonly checkpoint: AgentContextCheckpointRecord | null\n /** Complete retained tail, ordered by ascending per-thread sequence. */\n readonly messages: readonly AgentMessageRecord[]\n}\n\n/**\n * Build the bounded, model-only view of a durable thread.\n *\n * The function is deliberately pure: storage chooses the latest checkpoint and reads its retained\n * tail; this function validates that projection and prepends one synthetic user-role summary.\n */\nexport function projectAgentThreadModelContext(\n input: ProjectAgentThreadModelContextInput\n): readonly AgentThreadModelContextMessage[] {\n const { checkpoint, messages } = input\n if (!checkpoint) return messages\n\n assertConsistentCheckpointProjection(checkpoint, messages)\n return [\n {\n role: \"user\",\n parts: [{ type: \"text\", text: serializeThreadSummary(checkpoint.summary) }],\n },\n ...messages,\n ]\n}\n\nfunction assertConsistentCheckpointProjection(\n checkpoint: AgentContextCheckpointRecord,\n messages: readonly AgentMessageRecord[]\n): void {\n if (checkpoint.summaryFormatVersion !== 1 || checkpoint.summary.trim().length === 0) {\n throw projectionError(checkpoint, \"has an invalid summary\")\n }\n if (checkpoint.summarizedThroughSeq >= checkpoint.observedHeadSeq) {\n throw projectionError(checkpoint, \"does not retain its observed head\")\n }\n if (messages.length === 0) {\n throw projectionError(checkpoint, \"has no retained messages\")\n }\n\n let expectedSeq = checkpoint.summarizedThroughSeq + 1\n for (const message of messages) {\n if (message.projectId !== checkpoint.projectId || message.threadId !== checkpoint.threadId) {\n throw projectionError(checkpoint, \"contains a message from another thread\")\n }\n if (message.seq !== expectedSeq) {\n throw projectionError(checkpoint, `has a sequence gap before message '${message.id}'`)\n }\n expectedSeq += 1\n }\n\n if (messages[0]?.role !== \"user\") {\n throw projectionError(checkpoint, \"does not begin at a user turn boundary\")\n }\n if ((messages.at(-1)?.seq ?? 0) < checkpoint.observedHeadSeq) {\n throw projectionError(checkpoint, \"ends before the checkpoint's observed head\")\n }\n}\n\nfunction serializeThreadSummary(summary: string): string {\n return [\n \"The earlier conversation was compacted into this continuation summary.\",\n \"\",\n \"<sixb_thread_summary>\",\n escapeXml(summary),\n \"</sixb_thread_summary>\",\n ].join(\"\\n\")\n}\n\nfunction projectionError(checkpoint: AgentContextCheckpointRecord, detail: string): Error {\n return new Error(\n `[Sixb] Agent context checkpoint '${checkpoint.id}' for thread '${checkpoint.threadId}' ${detail}.`\n )\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n"
|
|
15
|
+
],
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "2FE5CCEC390D142664756E2164756E21",
|
|
18
|
+
"names": []
|
|
19
|
+
}
|