@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
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/datasets/write.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { BlobStorage, FileRef } from \"../blob-storage\"\nimport { isFileRef } from \"../blob-storage\"\nimport type { DatasetMergeCommitResult } from \"../lake-storage/merge\"\nimport { getDatasetMergeChangeValidationError } from \"../lake-storage/merge-validation\"\nimport type {\n DatasetProducer,\n DatasetRow,\n DatasetWriteMode,\n LakeStorage,\n} from \"../lake-storage/types\"\nimport type { MergeChange } from \"./changes\"\nimport type { DatasetDefinition } from \"./types\"\nimport { getDatasetRowValidationFailure } from \"./validation\"\n\nexport interface DatasetWriteValue {\n readonly value: unknown\n}\n\nexport interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {\n readonly lakeStorage: LakeStorage\n readonly blobStorage: Pick<BlobStorage, \"stat\">\n readonly dataset: DatasetDefinition\n readonly mode: DatasetWriteMode | \"merge\"\n readonly signal: AbortSignal\n /** Lazy so a merge's latest-version guard is checked before fetching source data. */\n readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>\n readonly producer?: DatasetProducer\n readonly expectedLatestVersionId?: string\n readonly commitMessage?: string\n /** Diagnostic label for the caller, including its component prefix. */\n readonly sourceLabel?: string\n /** Progress includes validated values even if the operation subsequently fails. */\n onRead?(rowsRead: number): void\n /** Attach caller-owned source provenance to a validation failure. */\n mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown\n}\n\nexport type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }\n\n/**\n * Validate, stage, and commit one dataset write using existing lake sessions.\n *\n * The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the\n * dataset-update notification for a `created` result. This operation returns immediately after\n * the lake commit; it does not wait for downstream pipelines or projections.\n */\nexport async function writeDataset<TValue extends DatasetWriteValue>(\n input: WriteDatasetInput<TValue>\n): Promise<WriteDatasetResult> {\n const { lakeStorage, dataset, signal } = input\n let abortWrite: (() => Promise<void>) | undefined\n let rowsRead = 0\n const onRead = () => {\n rowsRead += 1\n input.onRead?.(rowsRead)\n }\n\n throwIfAborted(signal)\n await lakeStorage.createDataset(dataset)\n try {\n throwIfAborted(signal)\n const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === \"snapshot\"\n if (input.mode === \"merge\" || reconcileSnapshot) {\n const session = await lakeStorage.beginMerge({\n dataset,\n expectedLatestVersionId: input.expectedLatestVersionId,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n throwIfAborted(signal)\n const values = await input.readValues()\n throwIfAborted(signal)\n await session.writeChanges(\n validatedValues(\n input,\n values,\n async (value, itemIndex) =>\n reconcileSnapshot\n ? { kind: \"upsert\" as const, row: await validateRow(value, input, itemIndex) }\n : validateMergeChange(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n const result = await session.commit({\n commitMessage: input.commitMessage,\n createInitialVersion: reconcileSnapshot,\n retryOnConflict: dataset.sequenceBy !== undefined,\n signal,\n })\n return { ...result, rowsRead }\n }\n\n const values = await input.readValues()\n throwIfAborted(signal)\n const session = await lakeStorage.beginWrite({\n dataset,\n mode: input.mode,\n producer: input.producer,\n })\n abortWrite = () => session.abort()\n await session.writeRows(\n validatedValues(\n input,\n values,\n (value, itemIndex) => validateRow(value, input, itemIndex),\n onRead\n )\n )\n throwIfAborted(signal)\n\n // Preserve sync semantics: an empty append must not invent an initial dataset version.\n if (rowsRead === 0 && input.mode === \"append\") {\n const version = await lakeStorage.getLatestVersion(dataset.id)\n await session.abort()\n return { outcome: \"unchanged\", version, rowsRead }\n }\n\n const { outcome, ...version } = await session.commit({\n expectedLatestVersionId: input.expectedLatestVersionId,\n commitMessage: input.commitMessage,\n })\n return { outcome, version, rowsRead }\n } catch (error) {\n // Cleanup must not replace the source, validation, cancellation, or commit failure.\n await abortWrite?.().catch(() => {})\n throw error\n }\n}\n\nasync function* validatedValues<TValue extends DatasetWriteValue, TResult>(\n input: WriteDatasetInput<TValue>,\n values: Iterable<TValue> | AsyncIterable<TValue>,\n validate: (value: unknown, itemIndex: number) => Promise<TResult>,\n onRead: () => void\n): AsyncIterable<TResult> {\n let itemIndex = 0\n for await (const sourceValue of values) {\n throwIfAborted(input.signal)\n itemIndex += 1\n let value: TResult\n try {\n value = await validate(sourceValue.value, itemIndex)\n } catch (error) {\n throw input.mapValidationError\n ? input.mapValidationError(error, sourceValue, itemIndex)\n : error\n }\n onRead()\n yield value\n }\n}\n\nfunction sourceLabel(input: Pick<WriteDatasetInput, \"dataset\" | \"sourceLabel\">): string {\n return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`\n}\n\nasync function validateRow(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<DatasetRow> {\n const validationError = getDatasetRowValidationFailure(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError.message}`,\n { cause: validationError }\n )\n }\n // The validator above establishes the row shape.\n const row = value as DatasetRow\n await verifyRowFileRefs(row, input, itemIndex)\n return row\n}\n\nasync function validateMergeChange(\n value: unknown,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<MergeChange<DatasetRow, DatasetRow>> {\n const validationError = getDatasetMergeChangeValidationError(value, input.dataset)\n if (validationError) {\n throw new Error(\n `${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`\n )\n }\n const change = value as MergeChange<DatasetRow, DatasetRow>\n if (change.kind === \"upsert\") await verifyRowFileRefs(change.row, input, itemIndex)\n return change\n}\n\nasync function verifyRowFileRefs(\n row: DatasetRow,\n input: WriteDatasetInput,\n itemIndex: number\n): Promise<void> {\n for (const column of input.dataset.schema.columns) {\n if (column.type !== \"fileRef\") continue\n const value = row[column.name]\n if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)\n }\n}\n\nasync function verifyFileRef(\n fileRef: FileRef,\n input: WriteDatasetInput,\n columnName: string,\n itemIndex: number\n): Promise<void> {\n const blobInfo = await input.blobStorage.stat(fileRef.blobId)\n const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`\n if (!blobInfo) {\n throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)\n }\n if (blobInfo.digest !== fileRef.digest) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`\n )\n }\n if (blobInfo.sizeBytes !== fileRef.sizeBytes) {\n throw new Error(\n `${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`\n )\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (!signal.aborted) return\n if (signal.reason instanceof Error) throw signal.reason\n const error = new Error(\n typeof signal.reason === \"string\" && signal.reason.length > 0\n ? signal.reason\n : \"[Sixb] Dataset write was cancelled.\"\n )\n error.name = \"AbortError\"\n throw error\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "013E5C6E3459B8F964756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/agents/types.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { AgentMessage, AgentMessagePart, AgentMessageRole } from \"../../agents/message\"\nimport type { AgentReasoningLevel } from \"../../agents/types\"\nimport type { Principal } from \"../../auth\"\nimport type { FileRef } from \"../../blob-storage\"\nimport type { SixbErrorCode, SixbFailure } from \"../../errors/types\"\nimport type { JsonValue } from \"../../json\"\nimport type { LanguageModelRef } from \"../../models\"\n\n// ── agent_threads — one conversation with an agent ──────────────────────────────────────────────\n\nexport type AgentThreadStatus = \"active\" | \"archived\"\n\n/** Immutable, non-secret application input. Never store resolved env or credentials here. */\nexport type AgentThreadSandboxParams = Readonly<Record<string, JsonValue>>\n\n/** Worker-owned state, independent from the immutable application binding. */\nexport interface AgentThreadSandboxState {\n /** Exact name passed to the provider. Replacements always receive a fresh name. */\n readonly name: string\n readonly status: \"new\" | \"busy\" | \"ready\" | \"blocked\" | \"unavailable\"\n readonly sourceFingerprint?: string\n readonly initialized: boolean\n /** Durable context boundary: local files from before this reset are no longer available. */\n readonly resetAt?: string\n /** Never expires automatically: a delayed provider operation must not reach a successor. */\n readonly owner?: { readonly runId: string; readonly executionToken: string }\n}\n\nexport type TransitionAgentThreadSandboxInput = {\n readonly projectId: string\n readonly id: string\n} & (\n | {\n readonly action: \"acquire\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly sourceFingerprint: string\n }\n | {\n readonly action: \"replace\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly nextName: string\n }\n | {\n readonly action: \"settle\"\n readonly runId: string\n readonly executionToken: string\n readonly name: string\n readonly status: \"ready\" | \"blocked\" | \"unavailable\"\n readonly initialized: boolean\n }\n | {\n readonly action: \"recreate\"\n readonly expectedSandboxName: string\n readonly name: string\n }\n)\n\nexport interface AgentThreadRecord {\n readonly id: string\n readonly projectId: string\n /** Who owns/opened the thread. Reuses the canonical auth principal (gains `agent` later for free). */\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly sandboxParams?: AgentThreadSandboxParams\n readonly sandboxState?: AgentThreadSandboxState\n readonly status: AgentThreadStatus\n /** Single-flight anchor: the id of the one run currently allowed to write, or `null` when idle. */\n readonly activeRunId: string | null\n readonly lastMessageAt?: Date\n readonly messageCount: number\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface CreateAgentThreadInput {\n readonly id: string\n readonly projectId: string\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly sandboxParams?: AgentThreadSandboxParams\n readonly status?: AgentThreadStatus\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface ListAgentThreadsInput {\n readonly projectId: string\n readonly statuses?: readonly AgentThreadStatus[]\n readonly ownerPrincipal?: Principal\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentThreadsResult {\n readonly threads: readonly AgentThreadRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_runs — one loop execution (the worker job; attribution + fencing) ───────────────────\n\n/** Lifecycle shared by every durable agent execution, conversational or workflow-owned. */\nexport type AgentExecutionStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\"\n\nexport type AgentRunStatus = AgentExecutionStatus\nexport type AgentRunKind = \"conversation\" | \"subagent\"\n\n/** Error codes an agent execution can persist and expose through its public contract. */\nexport const AGENT_RUN_FAILURE_CODES = [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n \"agent.execution_failed\",\n \"ai.usage_limit_exceeded\",\n \"ai.usage_limit_unavailable\",\n] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport type AgentRunFailureCode = (typeof AGENT_RUN_FAILURE_CODES)[number]\n\n/**\n * Why a run ended — Sixb's provider-independent vocabulary. It includes model-loop reasons plus\n * platform-level endings such as `timeout`, so reads remain typed and exhaustive. `other` and\n * `unknown` preserve terminal state when a provider adds a new reason.\n */\nexport const AGENT_RUN_FINISH_REASONS = [\n \"stop\",\n \"length\",\n \"content-filter\",\n \"tool-calls\",\n \"timeout\",\n \"error\",\n \"other\",\n \"unknown\",\n] as const\n\nexport type AgentRunFinishReason = (typeof AGENT_RUN_FINISH_REASONS)[number]\n\n/**\n * Coerce an external finish-reason string — a DB column or an SDK value — to {@link\n * AgentRunFinishReason}. An unrecognised value becomes `\"unknown\"` rather than being dropped.\n */\nexport function coerceAgentRunFinishReason(\n value: string | null | undefined\n): AgentRunFinishReason | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n return (AGENT_RUN_FINISH_REASONS as readonly string[]).includes(value)\n ? (value as AgentRunFinishReason)\n : \"unknown\"\n}\n\n/** Stable, user-facing diagnostics emitted by the platform while executing a run. */\nexport const AGENT_RUN_DIAGNOSTIC_CODES = [\n \"output_file_limit_exceeded\",\n \"output_file_too_large\",\n \"output_budget_exhausted\",\n \"output_collection_failed\",\n \"output_file_changed\",\n \"output_storage_failed\",\n] as const\n\n/**\n * Closed on purpose, and the wire is closed with it.\n *\n * Sixb writes these codes and the generated client is what reads them, so an open union would only\n * be honest if the HTTP schema were open too — and that costs the OpenAPI enum, the client's\n * autocompletion, and Atlas's exhaustive `switch`. Sixb owns both ends, so a new code is a minor\n * version bump: cheap here, and a broken `switch` is better than a 500 from `z.enum`.\n */\nexport type AgentRunDiagnosticCode = (typeof AGENT_RUN_DIAGNOSTIC_CODES)[number]\nexport type AgentRunDiagnosticSeverity = \"warning\" | \"error\"\n\nexport interface AgentRunDiagnostic {\n readonly code: AgentRunDiagnosticCode\n readonly severity: AgentRunDiagnosticSeverity\n readonly scope: \"output\"\n /** Relative path inside the run's published output directory, when one file is involved. */\n readonly path?: string\n /** Sanitized, stable copy suitable for display to an end user. */\n readonly message: string\n}\n\n/**\n * Authorization state for the current queue delivery.\n *\n * `queueLeaseExpiresAt` is a persisted projection of `ClaimedQueueJob.leaseExpiresAt`, not an\n * independently managed run lease. It may only be extended from a successful queue lease renewal.\n */\nexport interface AgentRunExecution {\n readonly token: string\n readonly queueLeaseExpiresAt: Date\n}\n\ninterface AgentRunRecordBase {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly status: AgentRunStatus\n readonly modelId?: string\n /** Why the run ended (our own SDK-independent enum). */\n readonly finishReason?: AgentRunFinishReason\n /** Platform diagnostics are transcript annotations, never agent-authored message content. */\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n /** Portable failure snapshot when the run did not succeed. */\n readonly error?: SixbFailure<AgentRunFailureCode>\n /** Execution attempts: `0` while queued, `1` on first start, incremented on redelivery. */\n readonly attempt: number\n readonly execution?: AgentRunExecution\n readonly createdAt: Date\n readonly startedAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface ConversationAgentRunRecord extends AgentRunRecordBase {\n readonly kind: \"conversation\"\n readonly threadId: string\n readonly triggerMessageId: string\n /** Immutable model selection captured at admission. Absent only on runs predating this field. */\n readonly spec?: ConversationAgentRunSpec\n}\n\n/** Immutable, serialisable model selection for one conversational turn. */\nexport interface ConversationAgentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n}\n\n/** Immutable, serialisable child configuration captured before dispatch. */\nexport interface SubagentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n /** Focused task supplied by the parent Agent. */\n readonly task: string\n /** Project tools available when the child was admitted. Runtime tools are injected separately. */\n readonly toolNames: readonly string[]\n readonly maxSteps: number\n}\n\n/** Durable child output returned to its parent by `wait_agent`. */\nexport interface SubagentRunResult {\n readonly text?: string\n readonly files?: readonly FileRef[]\n}\n\nexport interface SubagentRunRecord extends AgentRunRecordBase {\n readonly kind: \"subagent\"\n readonly parentRunId: string\n /** Stable parent-selected key that makes repeated tool execution idempotent. */\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n readonly result?: SubagentRunResult\n}\n\nexport type AgentRunRecord = ConversationAgentRunRecord | SubagentRunRecord\n\nexport interface CreateAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly threadId: string\n readonly triggerMessageId: string\n readonly spec: ConversationAgentRunSpec\n readonly createdAt?: Date\n}\n\nexport interface CreateSubagentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly parentRunId: string\n /** Current parent delivery token. New children are admitted only while that delivery owns it. */\n readonly parentExecutionToken: string\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n /** Internal safety bound enforced atomically across worker processes. */\n readonly maxActiveChildren: number\n readonly createdAt?: Date\n}\n\nexport interface StartAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly modelId?: string\n readonly execution: AgentRunExecution\n readonly startedAt?: Date\n}\n\nexport interface FinishQueuedAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\" | \"cancelled\"\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n}\n\nexport interface ReclaimAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly execution: AgentRunExecution\n}\n\nexport interface ConfirmAgentRunExecutionOwnershipInput {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n /** Exact expiration returned by the queue claim or its latest successful renewal. */\n readonly queueLeaseExpiresAt: Date\n}\n\nexport type FinishAgentRunInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"succeeded\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly result?: SubagentRunResult\n readonly completedAt?: Date\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"failed\" | \"cancelled\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n }\n\nexport interface ListAgentRunsInput {\n readonly projectId: string\n readonly kinds?: readonly AgentRunKind[]\n readonly threadId?: string\n readonly parentRunId?: string\n readonly statuses?: readonly AgentRunStatus[]\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedAfter?: Date\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedBefore?: Date\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentRunsResult {\n readonly runs: readonly AgentRunRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_messages — one message (assistant messages inserted only once finalized) ─────────────\n\nexport type { AgentMessageRole }\n\nexport interface AgentMessageRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n /** The run that produced this message; `null` for user-authored messages. */\n readonly runId: string | null\n readonly role: AgentMessageRole\n /** Principal that authored this persisted message: caller for user messages, agent identity later for assistant messages. */\n readonly authorPrincipal?: Principal\n /** Monotonic per thread, assigned by the store. */\n readonly seq: number\n /** Structured message content — text / reasoning / step boundaries / tool calls. */\n readonly parts: readonly AgentMessagePart[]\n /** Message-level metadata (mirrors `UIMessage.metadata`). */\n readonly metadata?: JsonValue\n /** Versions the `parts` shape so it can be migrated; stamped from `AGENT_MESSAGE_CONTENT_VERSION`. */\n readonly contentVersion: number\n readonly createdAt: Date\n readonly completedAt?: Date\n}\n\n/** Append a message: a {@link AgentMessage} (role + parts + metadata) plus its storage identity. */\nexport interface AppendAgentMessageInput extends AgentMessage {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly runId: string | null\n readonly authorPrincipal?: Principal\n readonly createdAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface DeleteAgentMessagesByRunInput {\n readonly projectId: string\n readonly threadId: string\n readonly runId: string\n}\n\nexport interface ListAgentMessagesInput {\n readonly projectId: string\n readonly threadId: string\n /** Return only messages whose per-thread sequence is greater than this retained boundary. */\n readonly afterSeq?: number\n readonly roles?: readonly AgentMessageRole[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentMessagesResult {\n readonly messages: readonly AgentMessageRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_context_checkpoints — append-only model-context boundaries ──────────────────────────\n\nexport type AgentContextCheckpointReason = \"threshold\" | \"overflow\"\n\n/**\n * A durable summary boundary used only when projecting a thread into model context.\n *\n * Checkpoints never replace or mutate transcript messages. Normal thread reads remain authoritative\n * and complete; the worker reads the latest checkpoint and only the retained message tail.\n */\nexport interface AgentContextCheckpointRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n readonly previousCheckpointId?: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt: Date\n}\n\nexport interface CreateAgentContextCheckpointInput {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n /** Compare-and-swap anchor. `null` means the thread must not have a prior checkpoint. */\n readonly expectedPreviousCheckpointId: string | null\n /** Compare-and-swap anchor for the complete transcript observed by the summarizer. */\n readonly expectedHeadSeq: number\n /** Current delivery token for `createdByRunId`; stale redeliveries must not write. */\n readonly executionToken: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt?: Date\n}\n\n// ── Store ───────────────────────────────────────────────────────────────────────────────────────\n\nexport interface AgentThreadStore {\n /** Atomic run-fenced transition, or explicit idle-thread recreation. */\n transitionSandbox(input: TransitionAgentThreadSandboxInput): Promise<AgentThreadSandboxState>\n create(input: CreateAgentThreadInput): Promise<AgentThreadRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null>\n list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult>\n}\n\nexport interface AgentRunStore {\n /** Persist a queued run and atomically claim the thread's single-flight slot. */\n create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord>\n /** Persist or replay one idempotent child run while atomically enforcing parent fan-out. */\n createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord>\n /** Transition a queued run to running and install the first delivery's execution token. */\n start(input: StartAgentRunInput): Promise<AgentRunRecord>\n /** Finish a queued run before execution and release the thread's single-flight slot. */\n finishQueued(input: FinishQueuedAgentRunInput): Promise<AgentRunRecord>\n /** Rotate the execution token for a redelivered running job (`attempt++`). */\n reclaim(input: ReclaimAgentRunInput): Promise<AgentRunRecord>\n /**\n * Project the queue's latest confirmed ownership expiration onto the current execution.\n * Implementations must fence by token and must never move the expiration backwards.\n */\n confirmExecutionOwnership(input: ConfirmAgentRunExecutionOwnershipInput): Promise<AgentRunRecord>\n /** Finalize a run and release the thread's `activeRunId`. */\n finish(input: FinishAgentRunInput): Promise<AgentRunRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentRunRecord | null>\n getByIds(params: {\n projectId: string\n ids: readonly string[]\n }): Promise<readonly AgentRunRecord[]>\n list(input: ListAgentRunsInput): Promise<ListAgentRunsResult>\n}\n\nexport interface AgentMessageStore {\n /** Insert a message (its `parts` are the canonical content) and bump thread stats. */\n append(input: AppendAgentMessageInput): Promise<AgentMessageRecord>\n /** Delete every message produced by one run and repair the thread's message stats. */\n deleteByRunId(input: DeleteAgentMessagesByRunInput): Promise<number>\n getById(params: { projectId: string; id: string }): Promise<AgentMessageRecord | null>\n list(input: ListAgentMessagesInput): Promise<ListAgentMessagesResult>\n}\n\nexport interface AgentContextCheckpointStore {\n /**\n * Append one checkpoint after atomically validating run ownership and both transcript anchors.\n * Repeating the same payload for the same creating run is idempotent.\n */\n create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord>\n /** Return checkpoints created by the requested runs, in first-occurrence input order. */\n getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]>\n getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null>\n}\n\nexport interface AgentStorage {\n readonly threads: AgentThreadStore\n readonly runs: AgentRunStore\n readonly messages: AgentMessageStore\n readonly checkpoints: AgentContextCheckpointStore\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";;AAiHO,IAAM,2BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AASO,IAAM,4BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,2BAA0B,CACxC,OACkC;AAAA,EAClC,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,OAAQ,0BAA+C,SAAS,KAAK,IAChE,QACD;AAAA;AAIC,IAAM,8BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
8
|
-
"debugId": "305DAAAEB1335EE664756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/http/api-routes.ts", "../src/http/route-pattern.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * The single source of truth for the Sixb HTTP API surface and its auth capabilities.\n *\n * Two views are derived from this one table:\n * - `AGENT_API_ROUTES` (@sixb/core agent gateway) = the `agentApi` rows, projected to {method, path}.\n * - `ACCESS_TOKEN_ROUTES` (@sixb/server bearer boundary) = the `accessToken` rows, with operationId.\n *\n * Because both views are projections of this table, the agent gateway allow-list is structurally a\n * subset of the bearer boundary — the invariant below enforces `agentApi ⇒ accessToken` at load\n * time. This table lives in @sixb/core (never @sixb/server) because @sixb/server depends on core,\n * not the reverse; the operationId strings are opaque here.\n */\nexport interface SixbApiRoute {\n /** OpenAPI operationId — the server keys its bearer security requirement off this. */\n readonly operationId: string\n readonly method: string\n readonly path: string\n /** The route accepts a bearer access token (enforced by the server access-token boundary). */\n readonly accessToken: boolean\n /** The route is proxied by the agent API gateway (a strict subset of the accessToken routes). */\n readonly agentApi: boolean\n /** The canonical handler may run under an explicitly selected shared session. */\n readonly sharedSession?: boolean\n}\n\nexport const SIXB_API_ROUTES: readonly SixbApiRoute[] = [\n {\n operationId: \"getProjectInfo\",\n method: \"GET\",\n path: \"/api/project\",\n accessToken: true,\n agentApi: true,\n },\n // Token and service-account management is bearer-capable so the CLI can authenticate with a\n // personal access token. It is NOT exposed to agents. The runtime still confines every operation\n // to the caller's own groups, and service-account tokens are rejected (only user principals may\n // manage credentials).\n {\n operationId: \"getAuthAccessManagementOptions\",\n method: \"GET\",\n path: \"/api/auth/access-management-options\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAuthAccessTokens\",\n method: \"GET\",\n path: \"/api/auth/access-tokens\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"createAuthPersonalAccessToken\",\n method: \"POST\",\n path: \"/api/auth/access-tokens\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"revokeAuthAccessToken\",\n method: \"POST\",\n path: \"/api/auth/access-tokens/:tokenId/revoke\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAuthServiceAccounts\",\n method: \"GET\",\n path: \"/api/auth/service-accounts\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"createAuthServiceAccount\",\n method: \"POST\",\n path: \"/api/auth/service-accounts\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"disableAuthServiceAccount\",\n method: \"POST\",\n path: \"/api/auth/service-accounts/:serviceAccountId/disable\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAuthServiceAccountAccessTokens\",\n method: \"GET\",\n path: \"/api/auth/service-accounts/:serviceAccountId/access-tokens\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"createAuthServiceAccountAccessToken\",\n method: \"POST\",\n path: \"/api/auth/service-accounts/:serviceAccountId/access-tokens\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"revokeAuthServiceAccountAccessToken\",\n method: \"POST\",\n path: \"/api/auth/service-accounts/:serviceAccountId/access-tokens/:tokenId/revoke\",\n accessToken: true,\n agentApi: false,\n },\n // Share lifecycle management is bearer-capable for programmatic administration but never\n // agent-proxied. Shared sessions themselves use the canonical object/action routes and land in\n // the request boundary separately.\n {\n operationId: \"issueSharedAccessGrant\",\n method: \"POST\",\n path: \"/api/share-grants\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listSharedAccessGrants\",\n method: \"GET\",\n path: \"/api/share-grants\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"revokeSharedAccessGrant\",\n method: \"DELETE\",\n path: \"/api/share-grants/:grantId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listObjectTypes\",\n method: \"GET\",\n path: \"/api/object-types\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getObjectType\",\n method: \"GET\",\n path: \"/api/object-types/:objectTypeId\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"listObjects\",\n method: \"GET\",\n path: \"/api/objects\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"queryObjects\",\n method: \"POST\",\n path: \"/api/objects/query\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"queryObjectLinks\",\n method: \"POST\",\n path: \"/api/objects/query/links\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"countObjects\",\n method: \"POST\",\n path: \"/api/objects/query/count\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"existsObjects\",\n method: \"POST\",\n path: \"/api/objects/query/exists\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"facetObjects\",\n method: \"POST\",\n path: \"/api/objects/query/facets\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getObject\",\n method: \"GET\",\n path: \"/api/objects/:objectTypeId/:objectId\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n // The four write routes. Bearer-capable because their execution facade enforces authorization\n // (`edit:object` / `append:telemetry`), which is exactly the precondition this table requires.\n // NOT agent-proxied: letting an agent turn write objects on its own is a separate decision, and\n // the gateway already hands routes an execution SDK, so flipping `agentApi` later needs no\n // authorization work — only that decision.\n {\n operationId: \"upsertObject\",\n method: \"PUT\",\n path: \"/api/objects/:objectTypeId/:objectId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"upsertObjectLink\",\n method: \"PUT\",\n path: \"/api/objects/:objectTypeId/:objectId/links/:linkId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"removeObjectLink\",\n method: \"DELETE\",\n path: \"/api/objects/:objectTypeId/:objectId/links/:linkId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"appendTelemetry\",\n method: \"POST\",\n path: \"/api/objects/:objectTypeId/:objectId/telemetry/:propertyId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getBulkTelemetryHistory\",\n method: \"POST\",\n path: \"/api/telemetry/history\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getTelemetryHistory\",\n method: \"GET\",\n path: \"/api/objects/:objectTypeId/:objectId/telemetry/:propertyId/history\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getLatestTelemetry\",\n method: \"GET\",\n path: \"/api/objects/:objectTypeId/:objectId/telemetry/:propertyId/latest\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getObjectFileContent\",\n method: \"GET\",\n path: \"/api/objects/:objectTypeId/:objectId/files/content\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n // Bearer-capable (CLI/programmatic existence + range probes) but NOT agent-proxied: the agent\n // API gateway only forwards GET/POST, and an agent gains nothing from HEAD over GET (a file's\n // size already travels in its FileRef). Keeping this agentApi:true would throw at gateway\n // registration (\"Unsupported agent API gateway method 'HEAD'\") and stop the server booting.\n operationId: \"headObjectFileContent\",\n method: \"HEAD\",\n path: \"/api/objects/:objectTypeId/:objectId/files/content\",\n accessToken: true,\n agentApi: false,\n sharedSession: true,\n },\n {\n operationId: \"listActions\",\n method: \"GET\",\n path: \"/api/actions\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getAction\",\n method: \"GET\",\n path: \"/api/actions/:actionId\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"requestAction\",\n method: \"POST\",\n path: \"/api/actions/:actionId\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"uploadFileRaw\",\n method: \"POST\",\n path: \"/api/files\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"listActionRuns\",\n method: \"GET\",\n path: \"/api/action-runs\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"getActionRun\",\n method: \"GET\",\n path: \"/api/action-runs/:runId\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"getActionRunFileContent\",\n method: \"GET\",\n path: \"/api/action-runs/:runId/files/content\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"headActionRunFileContent\",\n method: \"HEAD\",\n path: \"/api/action-runs/:runId/files/content\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listWorkflows\",\n method: \"GET\",\n path: \"/api/workflows\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"getWorkflow\",\n method: \"GET\",\n path: \"/api/workflows/:workflowId\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"requestWorkflowRun\",\n method: \"POST\",\n path: \"/api/workflows/:workflowId/runs\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"listWorkflowRuns\",\n method: \"GET\",\n path: \"/api/workflow-runs\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"getWorkflowRun\",\n method: \"GET\",\n path: \"/api/workflow-runs/:runId\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"cancelWorkflowRun\",\n method: \"POST\",\n path: \"/api/workflow-runs/:runId/cancel\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getWorkflowAgentNodeExecution\",\n method: \"GET\",\n path: \"/api/workflow-runs/:runId/nodes/:nodeKey/agent-execution\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getWorkflowRunFileContent\",\n method: \"GET\",\n path: \"/api/workflow-runs/:runId/files/content\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"headWorkflowRunFileContent\",\n method: \"HEAD\",\n path: \"/api/workflow-runs/:runId/files/content\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getWorkflowNodeRunFileContent\",\n method: \"GET\",\n path: \"/api/workflow-runs/:runId/nodes/:nodeKey/files/content\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"headWorkflowNodeRunFileContent\",\n method: \"HEAD\",\n path: \"/api/workflow-runs/:runId/nodes/:nodeKey/files/content\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getAgentMessageFileContent\",\n method: \"GET\",\n path: \"/api/agent-threads/:threadId/messages/:messageId/files/content\",\n accessToken: true,\n agentApi: true,\n },\n {\n operationId: \"headAgentMessageFileContent\",\n method: \"HEAD\",\n path: \"/api/agent-threads/:threadId/messages/:messageId/files/content\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"searchObjects\",\n method: \"GET\",\n path: \"/api/objects/search\",\n accessToken: true,\n agentApi: true,\n sharedSession: true,\n },\n {\n operationId: \"listEvents\",\n method: \"GET\",\n path: \"/api/events\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listLogs\",\n method: \"GET\",\n path: \"/api/logs\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getAiAccountingOverview\",\n method: \"GET\",\n path: \"/api/ai/accounting/overview\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAiModelCalls\",\n method: \"GET\",\n path: \"/api/ai/model-calls\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAiModelCallGroups\",\n method: \"GET\",\n path: \"/api/ai/model-call-groups\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"listAiLimitPolicies\",\n method: \"GET\",\n path: \"/api/ai/limits\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getAiLimitStatus\",\n method: \"GET\",\n path: \"/api/ai/limits/status\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"getAiLimitSubjectOptions\",\n method: \"GET\",\n path: \"/api/ai/limits/subjects\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"createAiLimitPolicy\",\n method: \"POST\",\n path: \"/api/ai/limits\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"updateAiLimitPolicy\",\n method: \"PUT\",\n path: \"/api/ai/limits/:limitId\",\n accessToken: true,\n agentApi: false,\n },\n {\n operationId: \"deleteAiLimitPolicy\",\n method: \"DELETE\",\n path: \"/api/ai/limits/:limitId\",\n accessToken: true,\n agentApi: false,\n },\n]\n\n// Enforce the subset invariant at module load: a gateway-proxied route must also be a bearer route,\n// or the gateway would expose a surface the access-token boundary does not recognize.\nfor (const route of SIXB_API_ROUTES) {\n if (route.agentApi && !route.accessToken) {\n throw new Error(\n `[Sixb] agent API route '${route.method} ${route.path}' must also be an access-token route.`\n )\n }\n}\n",
|
|
6
|
-
"/**\n * Shared HTTP route-pattern matching. Used by both the agent API gateway allow-list (@sixb/core)\n * and the server's access-token boundary (@sixb/server) so the two never drift.\n */\n\n/** Split a path into its non-empty segments (drops leading/trailing/empty parts). */\nexport function pathSegmentsFor(pathname: string): string[] {\n return pathname.split(\"/\").filter(Boolean)\n}\n\n/**\n * Match a concrete pathname against a route pattern. A `:param` pattern segment matches any single\n * non-empty segment; every other segment must match exactly. Segment counts must be equal.\n */\nexport function matchesPathPattern(pathname: string, pattern: string): boolean {\n const pathSegments = pathSegmentsFor(pathname)\n const patternSegments = pathSegmentsFor(pattern)\n\n if (pathSegments.length !== patternSegments.length) {\n return false\n }\n\n return patternSegments.every((patternSegment, index) => {\n if (patternSegment.startsWith(\":\")) {\n return pathSegments[index] !== \"\"\n }\n return patternSegment === pathSegments[index]\n })\n}\n\n/** Strip a single trailing slash so `/api/foo` and `/api/foo/` compare equal (leaves \"/\" alone). */\nexport function normalizeRoutePath(pathname: string): string {\n if (pathname.length > 1 && pathname.endsWith(\"/\")) {\n return pathname.slice(0, -1)\n }\n return pathname\n}\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "F7A146857839ED1764756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/datasets/errors.ts", "../src/datasets/sequence.ts", "../src/datasets/validation.ts", "../src/datasets/builders.ts", "../src/datasets/changes.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"export class DatasetValidationError extends Error {\n readonly name = \"DatasetValidationError\"\n}\n",
|
|
6
|
-
"import type { DatasetDefinition } from \"./types\"\n\nconst MIN_INT64 = -(1n << 63n)\nconst MAX_INT64 = (1n << 63n) - 1n\n\n/** Normalize source ordering to an exact integer (timestamp milliseconds or signed int64). */\nexport function datasetSequenceValue(dataset: DatasetDefinition, value: unknown): bigint {\n const column = dataset.schema.columns.find((column) => column.name === dataset.sequenceBy)\n if (column?.type === \"int64\") {\n if (\n (typeof value === \"number\" && Number.isSafeInteger(value)) ||\n (typeof value === \"string\" && /^-?\\d+$/.test(value))\n ) {\n const integer = BigInt(value)\n if (integer >= MIN_INT64 && integer <= MAX_INT64) return integer\n }\n throw new Error(\n `Dataset '${dataset.id}' sequence must be a signed int64; use a string outside the safe integer range.`\n )\n }\n if (column?.type === \"timestamp\") {\n const millis = parseDatasetTimestamp(value)\n if (millis !== null) return BigInt(millis)\n throw new Error(\n `Dataset '${dataset.id}' sequence must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`\n )\n }\n throw new Error(\n `Dataset '${dataset.id}' sequenceBy must reference a non-nullable timestamp or int64 column.`\n )\n}\n\n/** Date.parse alone normalizes impossible calendar dates instead of rejecting them. */\nexport function parseDatasetTimestamp(value: unknown): number | null {\n if (value instanceof Date && Number.isFinite(value.getTime())) return value.getTime()\n if (typeof value === \"string\") {\n const match =\n /^([+-]\\d{6}|\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?(Z|[+-]\\d{2}:\\d{2})$/.exec(\n value\n )\n if (match) {\n const [, year, month, day, hour, minute, second, , zone] = match\n const numericYear = Number(year)\n const leapYear = numericYear % 4 === 0 && (numericYear % 100 !== 0 || numericYear % 400 === 0)\n const days =\n Number(month) === 2 ? (leapYear ? 29 : 28) : [4, 6, 9, 11].includes(Number(month)) ? 30 : 31\n const validZone =\n zone === \"Z\" || (Number(zone?.slice(1, 3)) <= 23 && Number(zone?.slice(4)) <= 59)\n const millis = Date.parse(value)\n if (\n Number(month) >= 1 &&\n Number(month) <= 12 &&\n Number(day) >= 1 &&\n Number(day) <= days &&\n Number(hour) < 24 &&\n Number(minute) < 60 &&\n Number(second) < 60 &&\n validZone &&\n Number.isFinite(millis)\n )\n return millis\n }\n }\n return null\n}\n\nexport function getDatasetSequenceValidationError(\n dataset: DatasetDefinition,\n value: unknown\n): string | null {\n try {\n datasetSequenceValue(dataset, value)\n return null\n } catch (error) {\n return error instanceof Error ? error.message : String(error)\n }\n}\n",
|
|
7
|
-
"import { isFileRef } from \"../blob-storage\"\nimport { withFailureMessage } from \"../errors/failure-message\"\nimport { isJsonValue, isPlainRecord } from \"../json\"\nimport { isDecimalString } from \"../ontology/decimal\"\nimport { DatasetValidationError } from \"./errors\"\nimport { getDatasetSequenceValidationError, parseDatasetTimestamp } from \"./sequence\"\nimport type {\n DatasetColumnDefinition,\n DatasetColumnType,\n DatasetDefinition,\n DatasetSchema,\n} from \"./types\"\n\nconst datasetColumnTypes = new Set<DatasetColumnType>([\n \"string\",\n \"boolean\",\n \"int64\",\n \"float64\",\n \"decimal\",\n \"date\",\n \"timestamp\",\n \"json\",\n \"fileRef\",\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isValidDateValue(value: unknown): boolean {\n return value instanceof Date && !Number.isNaN(value.getTime())\n}\n\nfunction isDateString(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n /^\\d{4}-\\d{2}-\\d{2}$/.test(value) &&\n !Number.isNaN(Date.parse(value))\n )\n}\n\nfunction isTimestampString(value: unknown): value is string {\n return typeof value === \"string\" && !Number.isNaN(Date.parse(value))\n}\n\nfunction matchesColumnType(value: unknown, type: DatasetColumnType): boolean {\n switch (type) {\n case \"string\":\n return typeof value === \"string\"\n case \"boolean\":\n return typeof value === \"boolean\"\n case \"int64\":\n return (\n (typeof value === \"number\" && Number.isInteger(value)) ||\n (typeof value === \"string\" && /^-?\\d+$/.test(value))\n )\n case \"float64\":\n return typeof value === \"number\" && Number.isFinite(value)\n case \"decimal\":\n return isDecimalString(value)\n case \"date\":\n return isValidDateValue(value) || isDateString(value)\n case \"timestamp\":\n return isValidDateValue(value) || isTimestampString(value)\n case \"json\":\n return isJsonValue(value)\n case \"fileRef\":\n return isFileRef(value)\n }\n}\n\nfunction assertNonEmptyString(\n value: unknown,\n field: string,\n createError: (message: string) => Error\n): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw createError(`${field} must not be empty.`)\n }\n}\n\nexport function assertDatasetColumnDefinition(\n column: unknown,\n createError: (message: string) => Error,\n fieldPrefix = \"Dataset column\"\n): asserts column is DatasetColumnDefinition {\n if (!isRecord(column)) {\n throw createError(`${fieldPrefix} must be an object.`)\n }\n\n assertNonEmptyString(column.name, `${fieldPrefix} name`, createError)\n\n if (!datasetColumnTypes.has(column.type as DatasetColumnType)) {\n throw createError(\n `${fieldPrefix} '${column.name}' has an invalid type '${String(column.type)}'.`\n )\n }\n\n if (column.nullable !== undefined && typeof column.nullable !== \"boolean\") {\n throw createError(`${fieldPrefix} '${column.name}' nullable must be a boolean.`)\n }\n}\n\nfunction assertDatasetSchema(\n schema: unknown,\n createError: (message: string) => Error\n): asserts schema is DatasetSchema {\n if (!isRecord(schema) || !Array.isArray(schema.columns)) {\n throw createError(\"Dataset definitions must declare a schema.\")\n }\n\n const seenColumnNames = new Set<string>()\n for (const column of schema.columns) {\n assertDatasetColumnDefinition(column, createError)\n\n if (seenColumnNames.has(column.name)) {\n throw createError(`Dataset schema contains a duplicate column '${column.name}'.`)\n }\n\n seenColumnNames.add(column.name)\n }\n}\n\nfunction assertDatasetPrimaryKey(\n primaryKey: unknown,\n schema: DatasetSchema,\n createError: (message: string) => Error\n): void {\n let keyColumns: readonly unknown[]\n if (typeof primaryKey === \"string\") {\n keyColumns = [primaryKey]\n } else if (Array.isArray(primaryKey)) {\n if (primaryKey.length < 2) {\n throw createError(\n \"Dataset primaryKey arrays must contain at least two column names. Use a string for a single-column key.\"\n )\n }\n keyColumns = primaryKey\n } else {\n throw createError(\n \"Dataset primaryKey must be a column name or an array of at least two column names.\"\n )\n }\n\n const columnsByName = new Map(schema.columns.map((column) => [column.name, column] as const))\n const seenColumnNames = new Set<string>()\n\n for (const columnName of keyColumns) {\n if (typeof columnName !== \"string\" || columnName.trim().length === 0) {\n throw createError(\"Dataset primaryKey columns must be non-empty strings.\")\n }\n\n if (seenColumnNames.has(columnName)) {\n throw createError(`Dataset primaryKey contains duplicate column '${columnName}'.`)\n }\n seenColumnNames.add(columnName)\n\n const column = columnsByName.get(columnName)\n if (column === undefined) {\n throw createError(`Dataset primaryKey column '${columnName}' is not declared in the schema.`)\n }\n if (column.type !== \"string\") {\n throw createError(`Dataset primaryKey column '${columnName}' must have type 'string'.`)\n }\n if (column.nullable === true) {\n throw createError(`Dataset primaryKey column '${columnName}' must not be nullable.`)\n }\n }\n}\n\nexport function assertDatasetDefinition(\n definition: unknown,\n createError: (message: string) => Error = (message) => new DatasetValidationError(message)\n): asserts definition is DatasetDefinition {\n if (!isRecord(definition)) {\n throw createError(\"Dataset definition must be an object.\")\n }\n\n if (definition.kind !== \"dataset\") {\n throw createError(\"Dataset definition kind must be 'dataset'.\")\n }\n\n assertNonEmptyString(definition.id, \"Dataset id\", createError)\n assertDatasetSchema(definition.schema, createError)\n\n if (definition.primaryKey !== undefined) {\n assertDatasetPrimaryKey(definition.primaryKey, definition.schema, createError)\n }\n\n if (definition.sequenceBy !== undefined) {\n const column = definition.schema.columns.find((column) => column.name === definition.sequenceBy)\n if (\n definition.primaryKey === undefined ||\n !column ||\n column.nullable ||\n ![\"timestamp\", \"int64\"].includes(column.type)\n ) {\n throw createError(\n \"Dataset sequenceBy requires a primaryKey and a non-nullable timestamp or int64 column.\"\n )\n }\n }\n\n if (definition.partitionBy !== undefined) {\n if (!Array.isArray(definition.partitionBy)) {\n throw createError(\"Dataset partitionBy must be an array of column names.\")\n }\n\n const columnNames = new Set(definition.schema.columns.map((column) => column.name))\n for (const columnName of definition.partitionBy) {\n assertNonEmptyString(columnName, \"Dataset partition column\", createError)\n if (!columnNames.has(columnName)) {\n throw createError(`Dataset partition column '${columnName}' is not declared in the schema.`)\n }\n }\n }\n\n if (definition.description !== undefined && typeof definition.description !== \"string\") {\n throw createError(\"Dataset description must be a string.\")\n }\n}\n\nexport function isDatasetDefinition(value: unknown): value is DatasetDefinition {\n try {\n assertDatasetDefinition(value, (message) => new Error(message))\n return true\n } catch {\n return false\n }\n}\n\nexport function getDatasetRowValidationError(\n row: unknown,\n dataset: DatasetDefinition,\n options?: { readonly columns?: Iterable<string> }\n): string | null {\n return getDatasetRowValidationFailure(row, dataset, options)?.message ?? null\n}\n\n/** Internal form retains a value-free explanation for the durable failure boundary. */\nexport function getDatasetRowValidationFailure(\n row: unknown,\n dataset: DatasetDefinition,\n options?: { readonly columns?: Iterable<string> }\n): Error | null {\n if (!isPlainRecord(row)) {\n return rowFailure(`Dataset '${dataset.id}' rows must be plain objects.`)\n }\n\n const columnsByName = new Map(\n dataset.schema.columns.map((column) => [column.name, column] as const)\n )\n\n // When `columns` is provided, validate only that subset (e.g. the columns a\n // projection actually maps). Projection reads are column-pruned, so the row\n // never carries unmapped columns and must not be checked against them.\n if (options?.columns !== undefined) {\n const columnsToValidate = new Set(options.columns)\n for (const column of dataset.schema.columns) {\n if (!columnsToValidate.has(column.name)) {\n continue\n }\n\n const error = getColumnValidationFailure(row, column, dataset)\n if (error) {\n return error\n }\n }\n\n return null\n }\n\n for (const columnName of Object.keys(row)) {\n if (!columnsByName.has(columnName)) {\n return rowFailure(\n `Dataset '${dataset.id}' row contains unknown column '${columnName}'.`,\n `Dataset '${dataset.id}' row contains an undeclared column.`\n )\n }\n }\n\n for (const column of dataset.schema.columns) {\n const error = getColumnValidationFailure(row, column, dataset)\n if (error) {\n return error\n }\n }\n\n return null\n}\n\nfunction getColumnValidationFailure(\n row: Record<string, unknown>,\n column: DatasetColumnDefinition,\n dataset: DatasetDefinition\n): Error | null {\n const hasValue = Object.hasOwn(row, column.name)\n const value = row[column.name]\n if (column.name === dataset.sequenceBy) {\n const message = getDatasetSequenceValidationError(dataset, value)\n return message === null\n ? null\n : rowFailure(\n message,\n `Dataset '${dataset.id}' sequence column '${column.name}' must contain a valid ${column.type} source sequence.`\n )\n }\n\n // Treat `undefined` the same as an omitted field so callers either send a real\n // value or use `null` explicitly on nullable columns.\n if (!hasValue || value === undefined) {\n if (!column.nullable) {\n return rowFailure(`Dataset '${dataset.id}' row is missing required column '${column.name}'.`)\n }\n return null\n }\n\n if (value === null) {\n if (!column.nullable) {\n return rowFailure(\n `Dataset '${dataset.id}' column '${column.name}' does not allow null values.`\n )\n }\n return null\n }\n\n // Every timestamp contributes to a sequenced row's millisecond-precision content digest.\n // Reject ambiguous or lossy values before staging, even when another column orders the row.\n if (dataset.sequenceBy !== undefined && column.type === \"timestamp\") {\n return parseDatasetTimestamp(value) === null\n ? rowFailure(\n `Dataset '${dataset.id}' column '${column.name}' must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`\n )\n : null\n }\n\n if (!matchesColumnType(value, column.type)) {\n return rowFailure(\n `Dataset '${dataset.id}' column '${column.name}' must match type '${column.type}'.`\n )\n }\n\n return null\n}\n\nfunction rowFailure(message: string, publicMessage = message): Error {\n return withFailureMessage(new DatasetValidationError(message), publicMessage)\n}\n",
|
|
8
|
-
"import { DatasetValidationError } from \"./errors\"\nimport type {\n DatasetColumnDefinition,\n DatasetColumnNameOf,\n DatasetColumnType,\n DatasetDefinition,\n DatasetPrimaryKey,\n} from \"./types\"\nimport { assertDatasetColumnDefinition, assertDatasetDefinition } from \"./validation\"\n\ntype DatasetColumnOptions = {\n readonly nullable?: boolean\n}\n\ntype DefineDatasetOptions = {\n readonly schema: readonly DatasetColumnDefinition[]\n readonly primaryKey?: DatasetPrimaryKey\n readonly sequenceBy?: string\n readonly partitionBy?: readonly string[]\n readonly description?: string\n}\n\ntype DeriveDatasetOptions<TParent extends DatasetDefinition> = {\n readonly pick?: readonly DatasetColumnNameOf<TParent>[]\n readonly add?: readonly DatasetColumnDefinition[]\n readonly primaryKey?: DatasetPrimaryKey\n readonly sequenceBy?: string\n readonly partitionBy?: readonly string[]\n readonly description?: string\n}\n\ntype FieldFromOptions<TOptions, TKey extends string, TFallback> = TOptions extends {\n readonly [K in TKey]: infer TValue\n}\n ? TValue extends TFallback\n ? { readonly [K in TKey]: TValue }\n : { readonly [K in TKey]?: TFallback }\n : { readonly [K in TKey]?: TFallback }\n\ntype ColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]> = TColumns[number][\"name\"]\n\ntype ColumnDefinitionOf<\n TColumns extends readonly DatasetColumnDefinition[],\n TName extends ColumnNameOf<TColumns>,\n> = Extract<TColumns[number], { readonly name: TName }>\n\ntype PrimaryKeyColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]> =\n string extends ColumnNameOf<TColumns>\n ? string\n : {\n [TName in ColumnNameOf<TColumns>]: ColumnDefinitionOf<\n TColumns,\n TName\n >[\"type\"] extends \"string\"\n ? ColumnDefinitionOf<TColumns, TName> extends { readonly nullable: true }\n ? never\n : TName\n : never\n }[ColumnNameOf<TColumns>]\n\ntype CheckedDefineDatasetOptions<TOptions extends DefineDatasetOptions> = TOptions & {\n readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<TOptions[\"schema\"]>>\n readonly sequenceBy?: SequenceColumnNameOf<TOptions[\"schema\"]>\n}\n\ntype SequenceColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]> =\n string extends ColumnNameOf<TColumns>\n ? string\n : {\n [TName in ColumnNameOf<TColumns>]: ColumnDefinitionOf<TColumns, TName>[\"type\"] extends\n | \"timestamp\"\n | \"int64\"\n ? ColumnDefinitionOf<TColumns, TName> extends { readonly nullable: true }\n ? never\n : TName\n : never\n }[ColumnNameOf<TColumns>]\n\ntype PickColumns<\n TColumns extends readonly DatasetColumnDefinition[],\n TNames extends readonly ColumnNameOf<TColumns>[],\n> = TNames extends readonly [infer THead, ...infer TTail]\n ? THead extends ColumnNameOf<TColumns>\n ? TTail extends readonly ColumnNameOf<TColumns>[]\n ? readonly [ColumnDefinitionOf<TColumns, THead>, ...PickColumns<TColumns, TTail>]\n : never\n : never\n : TNames extends readonly []\n ? readonly []\n : readonly ColumnDefinitionOf<TColumns, TNames[number]>[]\n\ntype AddColumns<\n TColumns extends readonly DatasetColumnDefinition[],\n TAdd extends readonly DatasetColumnDefinition[],\n> = readonly [...TColumns, ...TAdd]\n\ntype DerivedBaseColumns<\n TParent extends DatasetDefinition,\n TOptions extends DeriveDatasetOptions<TParent> | undefined,\n> = TOptions extends { readonly pick: infer TPick }\n ? TPick extends readonly DatasetColumnNameOf<TParent>[]\n ? PickColumns<TParent[\"schema\"][\"columns\"], TPick>\n : TParent[\"schema\"][\"columns\"]\n : TParent[\"schema\"][\"columns\"]\n\ntype DerivedColumns<\n TParent extends DatasetDefinition,\n TOptions extends DeriveDatasetOptions<TParent> | undefined,\n> = TOptions extends { readonly add: infer TAdd }\n ? TAdd extends readonly DatasetColumnDefinition[]\n ? AddColumns<DerivedBaseColumns<TParent, TOptions>, TAdd>\n : DerivedBaseColumns<TParent, TOptions>\n : DerivedBaseColumns<TParent, TOptions>\n\ntype DatasetColumnResult<\n TName extends string,\n TType extends DatasetColumnType,\n TOptions extends DatasetColumnOptions | undefined,\n> = {\n readonly name: TName\n readonly type: TType\n} & FieldFromOptions<TOptions, \"nullable\", boolean>\n\ntype DatasetDefinitionResult<TId extends string, TOptions extends DefineDatasetOptions> = Omit<\n DatasetDefinition<TId, TOptions[\"schema\"]>,\n \"primaryKey\" | \"sequenceBy\" | \"partitionBy\" | \"description\"\n> &\n FieldFromOptions<TOptions, \"sequenceBy\", string> &\n FieldFromOptions<TOptions, \"primaryKey\", DatasetPrimaryKey> &\n FieldFromOptions<TOptions, \"partitionBy\", readonly string[]> &\n FieldFromOptions<TOptions, \"description\", string>\n\ntype DerivedDatasetDefinitionResult<\n TId extends string,\n TParent extends DatasetDefinition,\n TOptions extends DeriveDatasetOptions<TParent> | undefined,\n> = Omit<\n DatasetDefinition<TId, DerivedColumns<TParent, TOptions>>,\n \"primaryKey\" | \"sequenceBy\" | \"partitionBy\" | \"description\"\n> &\n FieldFromOptions<TOptions, \"sequenceBy\", string> &\n FieldFromOptions<TOptions, \"primaryKey\", DatasetPrimaryKey> &\n FieldFromOptions<TOptions, \"partitionBy\", readonly string[]> &\n FieldFromOptions<TOptions, \"description\", string>\n\ntype CheckedDeriveDatasetOptions<\n TParent extends DatasetDefinition,\n TOptions extends DeriveDatasetOptions<TParent>,\n> = TOptions & {\n readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<DerivedColumns<TParent, TOptions>>>\n readonly sequenceBy?: SequenceColumnNameOf<DerivedColumns<TParent, TOptions>>\n}\n\nexport function col<const TName extends string, const TType extends DatasetColumnType>(\n name: TName,\n type: TType\n): DatasetColumnResult<TName, TType, undefined>\nexport function col<\n const TName extends string,\n const TType extends DatasetColumnType,\n const TOptions extends DatasetColumnOptions,\n>(name: TName, type: TType, options: TOptions): DatasetColumnResult<TName, TType, TOptions>\nexport function col(\n name: string,\n type: DatasetColumnType,\n options?: DatasetColumnOptions\n): DatasetColumnDefinition {\n const column: DatasetColumnDefinition = {\n name,\n type,\n ...(options?.nullable !== undefined ? { nullable: options.nullable } : {}),\n }\n\n assertDatasetColumnDefinition(column, (message) => new DatasetValidationError(message))\n return column\n}\n\nfunction assertDatasetId(id: string): void {\n if (!id.trim()) {\n throw new DatasetValidationError(\"Dataset id must not be empty.\")\n }\n}\n\nfunction createDatasetDefinition(id: string, options: DefineDatasetOptions): DatasetDefinition {\n const definition: unknown = {\n kind: \"dataset\",\n id,\n schema: {\n columns: [...options.schema],\n },\n ...(options.primaryKey !== undefined\n ? {\n primaryKey: Array.isArray(options.primaryKey)\n ? [...options.primaryKey]\n : options.primaryKey,\n }\n : {}),\n ...(options.partitionBy !== undefined ? { partitionBy: [...options.partitionBy] } : {}),\n ...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),\n ...(options.description !== undefined ? { description: options.description } : {}),\n }\n\n assertDatasetDefinition(definition, (message) => new DatasetValidationError(message))\n return definition\n}\n\nfunction assertStringArray(value: unknown, field: string): asserts value is readonly string[] {\n if (!Array.isArray(value)) {\n throw new DatasetValidationError(`${field} must be an array of column names.`)\n }\n\n for (const item of value) {\n if (typeof item !== \"string\" || !item.trim()) {\n throw new DatasetValidationError(`${field} must contain only non-empty column names.`)\n }\n }\n}\n\nfunction deriveDatasetDefinition(\n id: string,\n parent: DatasetDefinition,\n options: DeriveDatasetOptions<DatasetDefinition> = {}\n): DatasetDefinition {\n assertDatasetDefinition(parent, (message) => new DatasetValidationError(message))\n\n if (options.pick !== undefined) {\n assertStringArray(options.pick, \"Dataset derive pick\")\n }\n\n if (options.add !== undefined && !Array.isArray(options.add)) {\n throw new DatasetValidationError(\"Dataset derive add must be an array of columns.\")\n }\n\n const parentColumnsByName = new Map(\n parent.schema.columns.map((column) => [column.name, column] as const)\n )\n const pickedColumns =\n options.pick === undefined\n ? parent.schema.columns\n : options.pick.map((columnName) => {\n const column = parentColumnsByName.get(columnName)\n if (column === undefined) {\n throw new DatasetValidationError(\n `Dataset derive pick column '${columnName}' is not declared on parent dataset '${parent.id}'.`\n )\n }\n return column\n })\n\n return createDatasetDefinition(id, {\n schema: [...pickedColumns, ...(options.add ?? [])],\n ...(options.primaryKey !== undefined ? { primaryKey: options.primaryKey } : {}),\n ...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),\n ...(options.partitionBy !== undefined ? { partitionBy: options.partitionBy } : {}),\n ...(options.description !== undefined ? { description: options.description } : {}),\n })\n}\n\nfunction createDatasetDeriveBuilder<TId extends string>(id: TId) {\n assertDatasetId(id)\n\n function derive<const TParent extends DatasetDefinition>(\n parent: TParent\n ): DerivedDatasetDefinitionResult<TId, TParent, undefined>\n function derive<\n const TParent extends DatasetDefinition,\n const TOptions extends DeriveDatasetOptions<TParent>,\n >(\n parent: TParent,\n options: CheckedDeriveDatasetOptions<TParent, TOptions>\n ): DerivedDatasetDefinitionResult<TId, TParent, TOptions>\n function derive(\n parent: DatasetDefinition,\n options?: DeriveDatasetOptions<DatasetDefinition>\n ): DatasetDefinition {\n return deriveDatasetDefinition(id, parent, options)\n }\n\n return { derive }\n}\n\nexport function defineDataset<const TId extends string>(\n id: TId\n): ReturnType<typeof createDatasetDeriveBuilder<TId>>\nexport function defineDataset<\n const TId extends string,\n const TOptions extends DefineDatasetOptions,\n>(id: TId, options: CheckedDefineDatasetOptions<TOptions>): DatasetDefinitionResult<TId, TOptions>\nexport function defineDataset(\n id: string,\n options?: DefineDatasetOptions\n): DatasetDefinition | ReturnType<typeof createDatasetDeriveBuilder<string>> {\n if (options === undefined) {\n return createDatasetDeriveBuilder(id)\n }\n\n return createDatasetDefinition(id, options)\n}\n",
|
|
9
|
-
"export type MergeChange<Row, Key> =\n | { readonly kind: \"upsert\"; readonly row: Row }\n | { readonly kind: \"delete\"; readonly key: Key; readonly sequence?: string | number | Date }\n\nexport const change = {\n upsert<const Row extends object>(row: Row): { readonly kind: \"upsert\"; readonly row: Row } {\n return { kind: \"upsert\", row }\n },\n\n delete: deleteChange,\n}\n\nfunction deleteChange<const Key extends object>(\n key: Key\n): { readonly kind: \"delete\"; readonly key: Key }\nfunction deleteChange<const Key extends object, const Sequence extends string | number | Date>(\n key: Key,\n options: { readonly sequence: Sequence }\n): { readonly kind: \"delete\"; readonly key: Key; readonly sequence: Sequence }\nfunction deleteChange<Key extends object>(\n key: Key,\n options?: { readonly sequence: string | number | Date }\n): { readonly kind: \"delete\"; readonly key: Key; readonly sequence?: string | number | Date } {\n return { kind: \"delete\", key, ...(options ? { sequence: options.sequence } : {}) }\n}\n"
|
|
10
|
-
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "7C0F6204600961F564756E2164756E21",
|
|
13
|
-
"names": []
|
|
14
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
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\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 /** 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 === \"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 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 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 \"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 \"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": "0D5BA249FD53D9DC64756E2164756E21",
|
|
18
|
-
"names": []
|
|
19
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/agents/errors.ts", "../src/agents/context/entries.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * Base error for the agents module. Specific subclasses extend this so callers\n * can catch any agent-scoped failure with a single `instanceof AgentDefinitionError` check.\n */\nexport class AgentDefinitionError extends Error {\n readonly name: string = \"AgentDefinitionError\"\n}\n\n/**\n * An agent-tool failure whose message is intentionally safe to expose to the model and persist in\n * the durable trace. Tool authors must keep the message free of credentials and internal details;\n * unknown errors remain masked by the worker.\n */\nexport class AgentToolPublicError extends Error {\n readonly name: string = \"AgentToolPublicError\"\n}\n\n/** Raised when an agent tool result cannot cross the durable message boundary. */\nexport class AgentToolResultValidationError extends Error {\n readonly name = \"AgentToolResultValidationError\"\n\n constructor(\n readonly toolName: string,\n readonly reason: string,\n options?: ErrorOptions\n ) {\n super(`[Sixb] Agent tool '${toolName}' returned an invalid result; ${reason}.`, options)\n }\n}\n\nexport type AgentRequestErrorCode =\n | \"agent_selector_removed\"\n | \"agent_not_found\"\n | \"model_not_found\"\n | \"invalid_model_selection\"\n | \"run_not_found\"\n | \"run_not_retryable\"\n | \"thread_not_found\"\n | \"active_run_exists\"\n | \"authority_not_inheritable\"\n | \"invalid_context\"\n | \"storage_unavailable\"\n | \"sandbox_not_configured\"\n | \"invalid_sandbox_params\"\n | \"sandbox_execution_unavailable\"\n\n/**\n * Raised by {@link requestAgentRun} (the trigger). Callers branch on `code` rather than message text\n * — e.g. the HTTP layer maps `active_run_exists` to 409 and `agent_not_found` to 404.\n */\nexport class AgentRequestError extends Error {\n readonly name = \"AgentRequestError\"\n\n constructor(\n readonly code: AgentRequestErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
|
|
6
|
-
"import type { JsonValue } from \"../../json\"\nimport { cloneJsonValue, getInvalidJsonValueReason, stableJsonStringify } from \"../../json\"\nimport type { ObjectRef } from \"../../ontology/refs\"\nimport { AgentRequestError } from \"../errors\"\n\nexport type AgentContextInput =\n | { readonly kind: \"object\"; readonly ref: ObjectRef }\n | {\n readonly kind: \"app-state\"\n readonly id: string\n readonly label: string\n readonly description: string\n readonly value: JsonValue\n }\n\nexport type AgentContextOrigin = \"ambient\" | \"explicit\"\n\nexport interface AgentContextEntryInput {\n readonly context: AgentContextInput\n readonly origin: AgentContextOrigin\n}\n\n/** Durable user-message part. Origin is display provenance, never an authorization grant. */\nexport interface AgentContextPart extends AgentContextEntryInput {\n readonly type: \"context\"\n}\n\nexport const MAX_AGENT_CONTEXT_ENTRIES = 12\nexport const MAX_AGENT_APP_STATE_ENTRY_BYTES = 16 * 1024\nexport const MAX_AGENT_APP_STATE_TOTAL_BYTES = 64 * 1024\n\n/** Typed constructors for context values shared by custom apps and agent clients. */\nexport const agentContext = {\n object<const TObjectTypeId extends string>(\n objectType: { readonly id: TObjectTypeId },\n primaryId: string\n ) {\n return {\n kind: \"object\" as const,\n ref: { objectTypeId: objectType.id, primaryId },\n }\n },\n\n appState<const TValue extends JsonValue>(\n id: string,\n input: {\n readonly label: string\n readonly description: string\n readonly value: TValue\n }\n ) {\n return { kind: \"app-state\" as const, id, ...input }\n },\n}\n\n/** Stable identity shared by core deduplication and context-aware clients. */\nexport function agentContextIdentity(context: AgentContextInput): string {\n return context.kind === \"object\"\n ? `object:${encodeURIComponent(context.ref.objectTypeId)}:${encodeURIComponent(context.ref.primaryId)}`\n : `app-state:${encodeURIComponent(context.id)}`\n}\n\n/** Stable semantic key for client-side comparisons. */\nexport function agentContextFingerprint(context: AgentContextInput): string {\n return stableJsonStringify(context)\n}\n\n/**\n * Validate transport-independent context rules and clone mutable app state before it can become\n * durable. Object existence and visibility are resolved separately because they require a runtime.\n */\nexport function normalizeAgentContextEntries(\n input: readonly AgentContextEntryInput[] | undefined\n): readonly AgentContextEntryInput[] {\n if (input === undefined) return []\n if (!Array.isArray(input)) invalidContext(\"context must be an array\")\n if (input.length > MAX_AGENT_CONTEXT_ENTRIES) {\n invalidContext(`context cannot contain more than ${MAX_AGENT_CONTEXT_ENTRIES} entries`)\n }\n\n const entries: AgentContextEntryInput[] = []\n const byIdentity = new Map<string, string>()\n let totalAppStateBytes = 0\n\n for (const [index, rawEntry] of input.entries()) {\n const entry = normalizeEntry(rawEntry, index)\n const identity = agentContextIdentity(entry.context)\n const serialized = stableJsonStringify(entry)\n const existing = byIdentity.get(identity)\n\n if (existing !== undefined) {\n if (existing === serialized) continue\n invalidContext(`context contains conflicting entries for '${identity}'`)\n }\n\n if (entry.context.kind === \"app-state\") {\n const bytes = utf8ByteLength(serialized)\n if (bytes > MAX_AGENT_APP_STATE_ENTRY_BYTES) {\n invalidContext(\n `context entry '${identity}' exceeds the ${MAX_AGENT_APP_STATE_ENTRY_BYTES}-byte limit`\n )\n }\n totalAppStateBytes += bytes\n if (totalAppStateBytes > MAX_AGENT_APP_STATE_TOTAL_BYTES) {\n invalidContext(\n `app-state context exceeds the ${MAX_AGENT_APP_STATE_TOTAL_BYTES}-byte message limit`\n )\n }\n }\n\n byIdentity.set(identity, serialized)\n entries.push(entry)\n }\n\n return entries\n}\n\nfunction normalizeEntry(rawEntry: unknown, index: number): AgentContextEntryInput {\n if (!isRecord(rawEntry)) invalidContext(`context[${index}] must be an object`)\n if (rawEntry.origin !== \"ambient\" && rawEntry.origin !== \"explicit\") {\n invalidContext(`context[${index}].origin must be 'ambient' or 'explicit'`)\n }\n if (!isRecord(rawEntry.context)) invalidContext(`context[${index}].context must be an object`)\n\n const context = rawEntry.context\n if (context.kind === \"object\") {\n if (!isRecord(context.ref)) invalidContext(`context[${index}].context.ref must be an object`)\n const objectTypeId = requireNonEmptyString(\n context.ref.objectTypeId,\n `context[${index}].context.ref.objectTypeId`\n )\n const primaryId = requireNonEmptyString(\n context.ref.primaryId,\n `context[${index}].context.ref.primaryId`\n )\n return {\n context: { kind: \"object\", ref: { objectTypeId, primaryId } },\n origin: rawEntry.origin,\n }\n }\n\n if (context.kind === \"app-state\") {\n const id = requireNonEmptyString(context.id, `context[${index}].context.id`)\n const label = requireNonEmptyString(context.label, `context[${index}].context.label`)\n const description = requireNonEmptyString(\n context.description,\n `context[${index}].context.description`\n )\n const reason = getInvalidJsonValueReason(context.value, `context[${index}].context.value`)\n if (reason) {\n invalidContext(`context[${index}].context.value must be a JSON value; ${reason}`)\n }\n return {\n context: {\n kind: \"app-state\",\n id,\n label,\n description,\n value: cloneJsonValue(context.value as JsonValue),\n },\n origin: rawEntry.origin,\n }\n }\n\n invalidContext(`context[${index}].context.kind must be 'object' or 'app-state'`)\n}\n\nfunction requireNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n invalidContext(`${label} must be a non-empty string`)\n }\n return value\n}\n\nfunction utf8ByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction invalidContext(message: string): never {\n throw new AgentRequestError(\"invalid_context\", `[Sixb] Invalid agent context: ${message}.`)\n}\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": ";;;;;;;;AAIO,MAAM,8BAA6B,MAAM;AAAA,EACrC,OAAe;AAC1B;AAAA;AAOO,MAAM,8BAA6B,MAAM;AAAA,EACrC,OAAe;AAC1B;AAAA;AAGO,MAAM,wCAAuC,MAAM;AAAA,EAI7C;AAAA,EACA;AAAA,EAJF,OAAO;AAAA,EAEhB,WAAW,CACA,UACA,QACT,SACA;AAAA,IACA,MAAM,sBAAsB,yCAAyC,WAAW,OAAO;AAAA,IAJ9E;AAAA,IACA;AAAA;AAKb;AAAA;AAsBO,MAAM,2BAA0B,MAAM;AAAA,EAIhC;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;;;AChCO,IAAM,6BAA4B;AAClC,IAAM,mCAAkC,KAAK;AAC7C,IAAM,mCAAkC,KAAK;AAG7C,IAAM,gBAAe;AAAA,EAC1B,MAA0C,CACxC,YACA,WACA;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,EAAE,cAAc,WAAW,IAAI,UAAU;AAAA,IAChD;AAAA;AAAA,EAGF,QAAwC,CACtC,IACA,OAKA;AAAA,IACA,OAAO,EAAE,MAAM,aAAsB,OAAO,MAAM;AAAA;AAEtD;AAGO,SAAS,qBAAoB,CAAC,SAAoC;AAAA,EACvE,OAAO,QAAQ,SAAS,WACpB,UAAU,mBAAmB,QAAQ,IAAI,YAAY,KAAK,mBAAmB,QAAQ,IAAI,SAAS,MAClG,aAAa,mBAAmB,QAAQ,EAAE;AAAA;AAIzC,SAAS,wBAAuB,CAAC,SAAoC;AAAA,EAC1E,OAAO,qBAAoB,OAAO;AAAA;AAO7B,SAAS,6BAA4B,CAC1C,OACmC;AAAA,EACnC,IAAI,UAAU;AAAA,IAAW,OAAO,CAAC;AAAA,EACjC,IAAI,CAAC,MAAM,QAAQ,KAAK;AAAA,IAAG,eAAe,0BAA0B;AAAA,EACpE,IAAI,MAAM,SAAS,4BAA2B;AAAA,IAC5C,eAAe,oCAAoC,oCAAmC;AAAA,EACxF;AAAA,EAEA,MAAM,UAAoC,CAAC;AAAA,EAC3C,MAAM,aAAa,IAAI;AAAA,EACvB,IAAI,qBAAqB;AAAA,EAEzB,YAAY,OAAO,aAAa,MAAM,QAAQ,GAAG;AAAA,IAC/C,MAAM,QAAQ,eAAe,UAAU,KAAK;AAAA,IAC5C,MAAM,WAAW,sBAAqB,MAAM,OAAO;AAAA,IACnD,MAAM,aAAa,qBAAoB,KAAK;AAAA,IAC5C,MAAM,WAAW,WAAW,IAAI,QAAQ;AAAA,IAExC,IAAI,aAAa,WAAW;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAY;AAAA,MAC7B,eAAe,6CAA6C,WAAW;AAAA,IACzE;AAAA,IAEA,IAAI,MAAM,QAAQ,SAAS,aAAa;AAAA,MACtC,MAAM,QAAQ,eAAe,UAAU;AAAA,MACvC,IAAI,QAAQ,kCAAiC;AAAA,QAC3C,eACE,kBAAkB,yBAAyB,6CAC7C;AAAA,MACF;AAAA,MACA,sBAAsB;AAAA,MACtB,IAAI,qBAAqB,kCAAiC;AAAA,QACxD,eACE,iCAAiC,qDACnC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,WAAW,IAAI,UAAU,UAAU;AAAA,IACnC,QAAQ,KAAK,KAAK;AAAA,EACpB;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,UAAmB,OAAuC;AAAA,EAChF,IAAI,CAAC,SAAS,QAAQ;AAAA,IAAG,eAAe,WAAW,0BAA0B;AAAA,EAC7E,IAAI,SAAS,WAAW,aAAa,SAAS,WAAW,YAAY;AAAA,IACnE,eAAe,WAAW,+CAA+C;AAAA,EAC3E;AAAA,EACA,IAAI,CAAC,SAAS,SAAS,OAAO;AAAA,IAAG,eAAe,WAAW,kCAAkC;AAAA,EAE7F,MAAM,UAAU,SAAS;AAAA,EACzB,IAAI,QAAQ,SAAS,UAAU;AAAA,IAC7B,IAAI,CAAC,SAAS,QAAQ,GAAG;AAAA,MAAG,eAAe,WAAW,sCAAsC;AAAA,IAC5F,MAAM,eAAe,sBACnB,QAAQ,IAAI,cACZ,WAAW,iCACb;AAAA,IACA,MAAM,YAAY,sBAChB,QAAQ,IAAI,WACZ,WAAW,8BACb;AAAA,IACA,OAAO;AAAA,MACL,SAAS,EAAE,MAAM,UAAU,KAAK,EAAE,cAAc,UAAU,EAAE;AAAA,MAC5D,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,SAAS,aAAa;AAAA,IAChC,MAAM,KAAK,sBAAsB,QAAQ,IAAI,WAAW,mBAAmB;AAAA,IAC3E,MAAM,QAAQ,sBAAsB,QAAQ,OAAO,WAAW,sBAAsB;AAAA,IACpF,MAAM,cAAc,sBAClB,QAAQ,aACR,WAAW,4BACb;AAAA,IACA,MAAM,SAAS,2BAA0B,QAAQ,OAAO,WAAW,sBAAsB;AAAA,IACzF,IAAI,QAAQ;AAAA,MACV,eAAe,WAAW,8CAA8C,QAAQ;AAAA,IAClF;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,QACP,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,gBAAe,QAAQ,KAAkB;AAAA,MAClD;AAAA,MACA,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,eAAe,WAAW,qDAAqD;AAAA;AAGjF,SAAS,qBAAqB,CAAC,OAAgB,OAAuB;AAAA,EACpE,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,eAAe,GAAG,kCAAkC;AAAA,EACtD;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,cAAc,CAAC,OAAuB;AAAA,EAC7C,OAAO,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE;AAAA;AAGzC,SAAS,QAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,cAAc,CAAC,SAAwB;AAAA,EAC9C,MAAM,IAAI,mBAAkB,mBAAmB,iCAAiC,UAAU;AAAA;",
|
|
9
|
-
"debugId": "20BA4BBDB86CC4AA64756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/workflows/agent-step-identity.ts", "../src/workflows/builders.ts", "../src/workflows/failure.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/** Stable internal actor id for one workflow Agent step. */\nexport function workflowAgentStepActorId(workflowId: string, stepId: string): string {\n return `workflow:${encodeURIComponent(workflowId)}:step:${encodeURIComponent(stepId)}`\n}\n",
|
|
6
|
-
"import type { ActionDefinition } from \"../actions\"\nimport { isActionDefinition } from \"../actions\"\nimport { AGENT_REASONING_LEVELS, isAgentToolDefinition } from \"../agents\"\nimport { isModelReasoning } from \"../models/language-model\"\nimport type { SchemaOrRef } from \"../ontology\"\nimport type { ScheduleDefinition, ScheduleDefinitionForEvent } from \"../schedules\"\nimport { isScheduleDefinition } from \"../schedules\"\nimport { isGroupDefinition } from \"../security\"\nimport { WorkflowDefinitionError } from \"./errors\"\nimport type {\n AgentStepBuilder,\n AgentStepDefinition,\n DefineAgentStepConfig,\n InterventionBuilder,\n InterventionDefaultsRuntimeHandler,\n InterventionDefinition,\n InterventionFieldConfig,\n StepBuilder,\n StepDefinition,\n StepHandler,\n WorkflowBuilder,\n WorkflowChainDefinition,\n WorkflowNodeDefinition,\n WorkflowScheduleMapper,\n WorkflowTriggerDefinition,\n} from \"./types\"\nimport {\n assertNonEmpty,\n isAgentStepDefinition,\n isInterventionDefinition,\n isStepDefinition,\n} from \"./validation\"\n\ntype InterventionOptions = {\n description?: string\n}\n\ntype RuntimeWorkflowInput = Record<string, SchemaOrRef>\ntype RuntimeWorkflowValueInput = Record<string, unknown>\ntype RuntimeWorkflowMapper = (...args: never[]) => unknown\ntype RuntimeWorkflowScheduleMapper = WorkflowScheduleMapper<unknown, RuntimeWorkflowValueInput>\ntype RuntimeWorkflowThenDefinition =\n | StepDefinition\n | InterventionDefinition\n | ActionDefinition\n | AgentStepDefinition\ntype RuntimeWorkflowThen = (\n nodeDefinition: RuntimeWorkflowThenDefinition,\n mapper?: RuntimeWorkflowMapper\n) => WorkflowChainDefinition\ntype RuntimeWorkflowDraftBuilder = {\n when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n readonly then: RuntimeWorkflowThen\n}\n\n/**\n * See the action-param helper for why widened booleans are rejected. Optional\n * response fields must be an explicit literal decision so inference stays honest.\n */\ntype StrictBoolean<T extends boolean> = boolean extends T ? never : T\n\ntype InterventionFieldResult<TSchema extends SchemaOrRef, TRequired extends boolean> = {\n readonly schema: TSchema\n readonly required: TRequired\n readonly description?: string\n}\n\nexport function interventionField<const TSchema extends SchemaOrRef>(\n schema: TSchema\n): InterventionFieldResult<TSchema, true>\nexport function interventionField<\n const TSchema extends SchemaOrRef,\n const TRequired extends boolean = true,\n>(\n schema: TSchema,\n options: {\n required?: StrictBoolean<TRequired>\n description?: string\n }\n): InterventionFieldResult<TSchema, TRequired>\nexport function interventionField(\n schema: SchemaOrRef,\n options?: { required?: boolean; description?: string }\n): InterventionFieldConfig {\n return {\n schema,\n required: options?.required ?? true,\n ...(options?.description !== undefined ? { description: options.description } : {}),\n }\n}\n\nexport function defineWorkflowStep<const TId extends string>(id: TId): StepBuilder<TId> {\n assertNonEmpty(id, \"Step\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n run(handler: StepHandler<Record<string, unknown>, Record<string, unknown>>): unknown {\n return {\n kind: \"step\",\n id,\n input,\n output,\n handler,\n }\n },\n }\n },\n }\n },\n } as unknown as StepBuilder<TId>\n}\n\nexport function defineAgentStep<const TId extends string>(\n id: TId,\n config: DefineAgentStepConfig\n): AgentStepBuilder<TId> {\n assertNonEmpty(id, \"Agent step\", \"id\")\n if (!isRecord(config)) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" config must be an object.`)\n }\n if (typeof config.instructions !== \"string\" || !config.instructions.trim()) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" instructions must not be empty.`)\n }\n if (config.reasoning !== undefined && !isModelReasoning(config.reasoning)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${id}\" reasoning must be one of: ${AGENT_REASONING_LEVELS.join(\", \")}, or a nonnegative budgetTokens object.`\n )\n }\n const { model, reasoning, instructions } = config\n const groupIds = groupIdsFromAgentStepConfig(id, config)\n const toolNames = toolNamesFromAgentStepConfig(id, config)\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n prompt(prompt: unknown): unknown {\n if (typeof prompt !== \"function\") {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" prompt must be a function.`)\n }\n return {\n kind: \"agentStep\",\n id,\n ...(model === undefined ? {} : { model }),\n ...(reasoning === undefined ? {} : { reasoning }),\n instructions,\n groupIds,\n toolNames,\n input,\n output,\n prompt,\n }\n },\n }\n },\n }\n },\n } as unknown as AgentStepBuilder<TId>\n}\n\nfunction groupIdsFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.groups !== undefined && !Array.isArray(config.groups)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must be an array of group definitions.`\n )\n }\n const groupIds = Array.from(config.groups ?? [], (group) => {\n if (!isGroupDefinition(group)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must contain only group definitions.`\n )\n }\n return group.id\n })\n assertUniqueAgentStepValues(stepId, \"group\", groupIds)\n return Object.freeze(groupIds)\n}\n\nfunction toolNamesFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.tools !== undefined && !Array.isArray(config.tools)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must be an array of agent tool definitions.`\n )\n }\n const toolNames = Array.from(config.tools ?? [], (tool) => {\n if (!isAgentToolDefinition(tool)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must contain only agent tool definitions.`\n )\n }\n return tool.name\n })\n assertUniqueAgentStepValues(stepId, \"tool\", toolNames)\n return Object.freeze(toolNames)\n}\n\nfunction assertUniqueAgentStepValues(\n stepId: string,\n kind: \"group\" | \"tool\",\n values: readonly string[]\n): void {\n const seen = new Set<string>()\n for (const value of values) {\n if (seen.has(value)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" ${kind}s contains duplicate ${kind} '${value}'.`\n )\n }\n seen.add(value)\n }\n}\n\nexport function defineIntervention<const TId extends string>(\n id: TId,\n options?: InterventionOptions\n): InterventionBuilder<TId> {\n assertNonEmpty(id, \"Intervention\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n response(response: Record<string, unknown>): unknown {\n return createInterventionDefinition({\n id,\n input,\n response,\n description: options?.description,\n })\n },\n }\n },\n } as unknown as InterventionBuilder<TId>\n}\n\nexport function defineWorkflow<const TId extends string>(id: TId): WorkflowBuilder<TId> {\n assertNonEmpty(id, \"Workflow\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return createWorkflowDraftBuilder(id, input)\n },\n } as unknown as WorkflowBuilder<TId>\n}\n\nfunction createWorkflowDraftBuilder(\n id: string,\n input: RuntimeWorkflowInput\n): RuntimeWorkflowDraftBuilder {\n const triggers: WorkflowTriggerDefinition[] = []\n const nodes: WorkflowNodeDefinition[] = []\n let definition: WorkflowChainDefinition | null = null\n\n const appendNode = (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): WorkflowChainDefinition => {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n if (isStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createStepNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isAgentStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createAgentNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isInterventionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createInterventionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isActionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createActionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n let draft: RuntimeWorkflowDraftBuilder\n\n function when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n function when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n function when(\n schedule: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): RuntimeWorkflowDraftBuilder {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) call.`)\n }\n\n if (isScheduleDefinition(schedule)) {\n if (mapper !== undefined && schedule.trigger.type !== \"event\") {\n throw new WorkflowDefinitionError(`Workflow \"${id}\" cron schedules do not accept a mapper.`)\n }\n if (mapper !== undefined && !isRuntimeWorkflowScheduleMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) schedule mapper.`)\n }\n\n triggers.push({\n type: \"schedule\",\n scheduleId: schedule.id,\n ...(mapper !== undefined ? { mapper } : {}),\n })\n return draft\n }\n\n throw new WorkflowDefinitionError(`Workflow \"${id}\" .when(...) only accepts schedules.`)\n }\n\n draft = {\n when,\n // biome-ignore lint/suspicious/noThenProperty: Workflows intentionally expose a chainable .then(...) DSL.\n then: appendNode,\n }\n\n return draft\n}\n\nfunction createWorkflowDefinition(\n id: string,\n input: RuntimeWorkflowInput,\n triggers: readonly WorkflowTriggerDefinition[],\n nodes: readonly WorkflowNodeDefinition[],\n then: (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ) => WorkflowChainDefinition\n): WorkflowChainDefinition {\n return {\n kind: \"workflow\",\n id,\n input,\n triggers,\n nodes,\n then,\n } as unknown as WorkflowChainDefinition\n}\n\nfunction createStepNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n step: StepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(step.id)\n assertNodeKey(workflowId, step.id, key)\n assertUniqueNode(workflowId, nodes, step.id, key)\n\n return {\n type: \"step\",\n id: step.id,\n key,\n step,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createAgentNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n agentStep: AgentStepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(agentStep.id)\n assertNodeKey(workflowId, agentStep.id, key)\n assertUniqueNode(workflowId, nodes, agentStep.id, key)\n\n return {\n type: \"agent\",\n id: agentStep.id,\n key,\n agentStep,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionDefinition(input: {\n readonly id: string\n readonly input: RuntimeWorkflowInput\n readonly response: Record<string, unknown>\n readonly description?: string\n}): unknown {\n const base = {\n kind: \"intervention\" as const,\n id: input.id,\n input: input.input,\n response: input.response,\n ...(input.description !== undefined ? { description: input.description } : {}),\n }\n\n const defaults = (handlerOrContext: unknown) => {\n if (typeof handlerOrContext === \"function\") {\n return {\n ...base,\n defaults: handlerOrContext as InterventionDefaultsRuntimeHandler,\n }\n }\n\n // A no-defaults intervention is still usable as a definition immediately after\n // `.response(...)`. Treating the builder method as an empty default handler keeps\n // future executor code simple if it calls `definition.defaults?.(ctx) ?? {}`.\n return {}\n }\n\n Object.defineProperty(base, \"defaults\", {\n value: defaults,\n enumerable: false,\n })\n\n return base\n}\n\nfunction createActionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n action: ActionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(action.id)\n assertNodeKey(workflowId, action.id, key)\n assertUniqueNode(workflowId, nodes, action.id, key)\n\n return {\n type: \"action\",\n id: action.id,\n key,\n action,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n intervention: InterventionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(intervention.id)\n assertNodeKey(workflowId, intervention.id, key)\n assertUniqueNode(workflowId, nodes, intervention.id, key)\n\n return {\n type: \"intervention\",\n id: intervention.id,\n key,\n intervention,\n ...(mapper !== undefined ? { mapper } : {}),\n } as WorkflowNodeDefinition\n}\n\nfunction assertNodeKey(workflowId: string, nodeId: string, key: string): void {\n if (key.length === 0) {\n throw new WorkflowDefinitionError(\n `Workflow \"${workflowId}\" node id \"${nodeId}\" must contain at least one letter or number.`\n )\n }\n}\n\nfunction assertUniqueNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n nodeId: string,\n key: string\n): void {\n const duplicateId = nodes.find((node) => node.id === nodeId)\n if (duplicateId) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node id \"${nodeId}\" in workflow \"${workflowId}\".`\n )\n }\n\n const duplicateKey = nodes.find((node) => node.key === key)\n if (duplicateKey) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node key \"${key}\" in workflow \"${workflowId}\". Node ids \"${duplicateKey.id}\" and \"${nodeId}\" derive the same key.`\n )\n }\n}\n\nfunction deriveWorkflowNodeKey(id: string): string {\n const segments = id\n .trim()\n .split(/[^A-Za-z0-9]+/)\n .filter((segment) => segment.length > 0)\n\n return segments\n .map((segment, index) => {\n const normalized = uncapitalize(segment)\n return index === 0 ? normalized : capitalize(normalized)\n })\n .join(\"\")\n}\n\nfunction uncapitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toLowerCase()}${value.slice(1)}`\n}\n\nfunction capitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toUpperCase()}${value.slice(1)}`\n}\n\nfunction isRuntimeWorkflowMapper(value: unknown): value is RuntimeWorkflowMapper {\n return typeof value === \"function\"\n}\n\nfunction isRuntimeWorkflowScheduleMapper(value: unknown): value is RuntimeWorkflowScheduleMapper {\n return typeof value === \"function\"\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
7
|
-
"import { withFailureMessage } from \"../errors/failure-message\"\nimport { createSixbError, isSixbError, summarizeErrorMessage } from \"../errors/internal\"\nimport {\n ModelProviderError,\n StructuredOutputError,\n UnsupportedModelFeatureError,\n} from \"../models/errors\"\n\ninterface WorkflowNodeFailureIdentityBase {\n readonly workflowId: string\n readonly workflowRunId: string\n readonly nodeId: string\n readonly nodeRunId?: string\n readonly failurePhase?: \"output-preflight\" | \"agent-loop\" | \"structured-finalizer\"\n readonly modelId?: string\n}\n\nexport interface WorkflowNodeFailureIdentity extends WorkflowNodeFailureIdentityBase {\n readonly child:\n | { readonly type: \"step\"; readonly stepId: string }\n | {\n readonly type: \"action\"\n readonly actionId: string\n readonly actionRunId?: string\n }\n | { readonly type: \"agent\"; readonly agentStepId: string }\n | { readonly type: \"intervention\"; readonly interventionId: string }\n}\n\n/** Translate a node-local failure into the workflow primitive's durable vocabulary. */\nexport function createWorkflowNodeFailure(error: unknown, identity: WorkflowNodeFailureIdentity) {\n const modelDetails = safeModelFailureDetails(error)\n const failure = createSixbError(\n \"workflow.node_failed\",\n summarizeErrorMessage(error, \"Workflow node execution failed.\"),\n {\n cause: error,\n details: {\n ...workflowNodeFailureDetails(identity),\n ...modelDetails,\n },\n }\n )\n return modelDetails.modelFailure\n ? withFailureMessage(failure, modelDetails.modelFailure.message)\n : failure\n}\n\n/** Only controlled diagnostics cross the durable boundary; provider messages/output stay private. */\nfunction safeModelFailureDetails(error: unknown): {\n modelFailure?: { source: string; reason: string; message: string; status?: number }\n} {\n if (error instanceof UnsupportedModelFeatureError) {\n const reason = error.reason ?? \"unsupported-feature\"\n const messages = {\n \"unsupported-feature\":\n \"The adapter cannot support a requested model feature. Check provider configuration.\",\n \"unsupported-model\":\n \"The model is configured without structured-output support. Choose a supported model.\",\n \"unsupported-schema\":\n \"The output schema is incompatible with the adapter. Use valid JSON Schema types, require every property, and disallow additional properties.\",\n }\n return { modelFailure: { source: \"adapter\", reason, message: messages[reason] } }\n }\n if (error instanceof ModelProviderError) {\n // Interpret only known machine codes, never provider prose (which can echo private inputs).\n const schemaRejected = error.code === \"invalid_json_schema\" || error.code === \"invalid_schema\"\n const modelRejected = error.code === \"model_not_supported\" || error.code === \"unsupported_model\"\n return {\n modelFailure: {\n source: \"provider\",\n reason: schemaRejected\n ? \"unsupported-schema\"\n : modelRejected\n ? \"unsupported-model\"\n : \"provider-rejection\",\n message: schemaRejected\n ? \"The model endpoint rejected the supplied schema. Check the routed provider's supported JSON Schema subset.\"\n : modelRejected\n ? \"The model endpoint does not support the requested model configuration. Choose a supported model or route.\"\n : \"The model endpoint rejected the request or failed its response. Check provider diagnostics for model, schema, authentication, or availability errors.\",\n ...(error.status === undefined ? {} : { status: error.status }),\n },\n }\n }\n if (error instanceof StructuredOutputError) {\n return {\n modelFailure: {\n source: \"validation\",\n reason: \"invalid-output\",\n message:\n \"The model response did not complete with valid output matching the workflow schema.\",\n },\n }\n }\n return {}\n}\n\n/** Recover the native child error for direct callers and error-monitoring integrations. */\nexport function unwrapWorkflowNodeFailure(error: unknown): unknown {\n return isSixbError(error) && error.code === \"workflow.node_failed\" && error.cause !== undefined\n ? error.cause\n : error\n}\n\nfunction workflowNodeFailureDetails(identity: WorkflowNodeFailureIdentity) {\n const base = {\n workflowId: identity.workflowId,\n workflowRunId: identity.workflowRunId,\n nodeId: identity.nodeId,\n ...(identity.nodeRunId ? { nodeRunId: identity.nodeRunId } : {}),\n ...(identity.failurePhase ? { failurePhase: identity.failurePhase } : {}),\n ...(identity.modelId ? { modelId: identity.modelId } : {}),\n }\n\n switch (identity.child.type) {\n case \"step\":\n return { ...base, stepId: identity.child.stepId }\n case \"action\":\n return {\n ...base,\n actionId: identity.child.actionId,\n ...(identity.child.actionRunId ? { actionRunId: identity.child.actionRunId } : {}),\n }\n case \"agent\":\n return { ...base, agentStepId: identity.child.agentStepId }\n case \"intervention\":\n return { ...base, interventionId: identity.child.interventionId }\n }\n}\n"
|
|
8
|
-
],
|
|
9
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,SAAS,yBAAwB,CAAC,YAAoB,QAAwB;AAAA,EACnF,OAAO,YAAY,mBAAmB,UAAU,UAAU,mBAAmB,MAAM;AAAA;;ACkF9E,SAAS,kBAAiB,CAC/B,QACA,SACyB;AAAA,EACzB,OAAO;AAAA,IACL;AAAA,IACA,UAAU,SAAS,YAAY;AAAA,OAC3B,SAAS,gBAAgB,YAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,EACnF;AAAA;AAGK,SAAS,mBAA4C,CAAC,IAA2B;AAAA,EACtF,eAAe,IAAI,QAAQ,IAAI;AAAA,EAE/B,OAAO;AAAA,IACL,KAAK,CAAC,OAAsC;AAAA,MAC1C,OAAO;AAAA,QACL,MAAM,CAAC,QAAuC;AAAA,UAC5C,OAAO;AAAA,YACL,GAAG,CAAC,SAAiF;AAAA,cACnF,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,UAEJ;AAAA;AAAA,MAEJ;AAAA;AAAA,EAEJ;AAAA;AAGK,SAAS,gBAAyC,CACvD,IACA,QACuB;AAAA,EACvB,eAAe,IAAI,cAAc,IAAI;AAAA,EACrC,IAAI,CAAC,SAAS,MAAM,GAAG;AAAA,IACrB,MAAM,IAAI,yBAAwB,eAAe,+BAA+B;AAAA,EAClF;AAAA,EACA,IAAI,OAAO,OAAO,iBAAiB,YAAY,CAAC,OAAO,aAAa,KAAK,GAAG;AAAA,IAC1E,MAAM,IAAI,yBAAwB,eAAe,qCAAqC;AAAA,EACxF;AAAA,EACA,IAAI,OAAO,cAAc,aAAa,CAAC,kBAAiB,OAAO,SAAS,GAAG;AAAA,IACzE,MAAM,IAAI,yBACR,eAAe,iCAAiC,wBAAuB,KAAK,IAAI,0CAClF;AAAA,EACF;AAAA,EACA,QAAQ,OAAO,WAAW,iBAAiB;AAAA,EAC3C,MAAM,WAAW,4BAA4B,IAAI,MAAM;AAAA,EACvD,MAAM,YAAY,6BAA6B,IAAI,MAAM;AAAA,EAEzD,OAAO;AAAA,IACL,KAAK,CAAC,OAAsC;AAAA,MAC1C,OAAO;AAAA,QACL,MAAM,CAAC,QAAuC;AAAA,UAC5C,OAAO;AAAA,YACL,MAAM,CAAC,QAA0B;AAAA,cAC/B,IAAI,OAAO,WAAW,YAAY;AAAA,gBAChC,MAAM,IAAI,yBAAwB,eAAe,gCAAgC;AAAA,cACnF;AAAA,cACA,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN;AAAA,mBACI,UAAU,YAAY,CAAC,IAAI,EAAE,MAAM;AAAA,mBACnC,cAAc,YAAY,CAAC,IAAI,EAAE,UAAU;AAAA,gBAC/C;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,UAEJ;AAAA;AAAA,MAEJ;AAAA;AAAA,EAEJ;AAAA;AAGF,SAAS,2BAA2B,CAClC,QACA,QACmB;AAAA,EACnB,IAAI,OAAO,WAAW,aAAa,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,IAChE,MAAM,IAAI,yBACR,eAAe,uDACjB;AAAA,EACF;AAAA,EACA,MAAM,WAAW,MAAM,KAAK,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU;AAAA,IAC1D,IAAI,CAAC,kBAAkB,KAAK,GAAG;AAAA,MAC7B,MAAM,IAAI,yBACR,eAAe,qDACjB;AAAA,IACF;AAAA,IACA,OAAO,MAAM;AAAA,GACd;AAAA,EACD,4BAA4B,QAAQ,SAAS,QAAQ;AAAA,EACrD,OAAO,OAAO,OAAO,QAAQ;AAAA;AAG/B,SAAS,4BAA4B,CACnC,QACA,QACmB;AAAA,EACnB,IAAI,OAAO,UAAU,aAAa,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG;AAAA,IAC9D,MAAM,IAAI,yBACR,eAAe,2DACjB;AAAA,EACF;AAAA,EACA,MAAM,YAAY,MAAM,KAAK,OAAO,SAAS,CAAC,GAAG,CAAC,SAAS;AAAA,IACzD,IAAI,CAAC,uBAAsB,IAAI,GAAG;AAAA,MAChC,MAAM,IAAI,yBACR,eAAe,yDACjB;AAAA,IACF;AAAA,IACA,OAAO,KAAK;AAAA,GACb;AAAA,EACD,4BAA4B,QAAQ,QAAQ,SAAS;AAAA,EACrD,OAAO,OAAO,OAAO,SAAS;AAAA;AAGhC,SAAS,2BAA2B,CAClC,QACA,MACA,QACM;AAAA,EACN,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,KAAK,IAAI,KAAK,GAAG;AAAA,MACnB,MAAM,IAAI,yBACR,eAAe,WAAW,4BAA4B,SAAS,SACjE;AAAA,IACF;AAAA,IACA,KAAK,IAAI,KAAK;AAAA,EAChB;AAAA;AAGK,SAAS,mBAA4C,CAC1D,IACA,SAC0B;AAAA,EAC1B,eAAe,IAAI,gBAAgB,IAAI;AAAA,EAEvC,OAAO;AAAA,IACL,KAAK,CAAC,OAAsC;AAAA,MAC1C,OAAO;AAAA,QACL,QAAQ,CAAC,UAA4C;AAAA,UACnD,OAAO,6BAA6B;AAAA,YAClC;AAAA,YACA;AAAA,YACA;AAAA,YACA,aAAa,SAAS;AAAA,UACxB,CAAC;AAAA;AAAA,MAEL;AAAA;AAAA,EAEJ;AAAA;AAGK,SAAS,eAAwC,CAAC,IAA+B;AAAA,EACtF,eAAe,IAAI,YAAY,IAAI;AAAA,EAEnC,OAAO;AAAA,IACL,KAAK,CAAC,OAAsC;AAAA,MAC1C,OAAO,2BAA2B,IAAI,KAAK;AAAA;AAAA,EAE/C;AAAA;AAGF,SAAS,0BAA0B,CACjC,IACA,OAC6B;AAAA,EAC7B,MAAM,WAAwC,CAAC;AAAA,EAC/C,MAAM,QAAkC,CAAC;AAAA,EACzC,IAAI,aAA6C;AAAA,EAEjD,MAAM,aAAa,CACjB,gBACA,WACG,cACyB;AAAA,IAC5B,IAAI,UAAU,SAAS,GAAG;AAAA,MACxB,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,IAC/E;AAAA,IAEA,IAAI,kBAAiB,cAAc,GAAG;AAAA,MACpC,IAAI,WAAW,aAAa,CAAC,wBAAwB,MAAM,GAAG;AAAA,QAC5D,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,MAC/E;AAAA,MAEA,MAAM,KAAK,eAAe,IAAI,OAAO,gBAAgB,MAAM,CAAC;AAAA,MAC5D,eAAe,yBAAyB,IAAI,OAAO,UAAU,OAAO,UAAU;AAAA,MAC9E,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,uBAAsB,cAAc,GAAG;AAAA,MACzC,IAAI,WAAW,aAAa,CAAC,wBAAwB,MAAM,GAAG;AAAA,QAC5D,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,MAC/E;AAAA,MAEA,MAAM,KAAK,gBAAgB,IAAI,OAAO,gBAAgB,MAAM,CAAC;AAAA,MAC7D,eAAe,yBAAyB,IAAI,OAAO,UAAU,OAAO,UAAU;AAAA,MAC9E,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,0BAAyB,cAAc,GAAG;AAAA,MAC5C,IAAI,WAAW,aAAa,CAAC,wBAAwB,MAAM,GAAG;AAAA,QAC5D,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,MAC/E;AAAA,MAEA,MAAM,KAAK,uBAAuB,IAAI,OAAO,gBAAgB,MAAM,CAAC;AAAA,MACpE,eAAe,yBAAyB,IAAI,OAAO,UAAU,OAAO,UAAU;AAAA,MAC9E,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,oBAAmB,cAAc,GAAG;AAAA,MACtC,IAAI,WAAW,aAAa,CAAC,wBAAwB,MAAM,GAAG;AAAA,QAC5D,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,MAC/E;AAAA,MAEA,MAAM,KAAK,iBAAiB,IAAI,OAAO,gBAAgB,MAAM,CAAC;AAAA,MAC9D,eAAe,yBAAyB,IAAI,OAAO,UAAU,OAAO,UAAU;AAAA,MAC9E,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA;AAAA,EAG/E,IAAI;AAAA,EAOJ,SAAS,IAAI,CACX,UACA,WACG,WAC0B;AAAA,IAC7B,IAAI,UAAU,SAAS,GAAG;AAAA,MACxB,MAAM,IAAI,yBAAwB,qBAAqB,sBAAsB;AAAA,IAC/E;AAAA,IAEA,IAAI,sBAAqB,QAAQ,GAAG;AAAA,MAClC,IAAI,WAAW,aAAa,SAAS,QAAQ,SAAS,SAAS;AAAA,QAC7D,MAAM,IAAI,yBAAwB,aAAa,4CAA4C;AAAA,MAC7F;AAAA,MACA,IAAI,WAAW,aAAa,CAAC,gCAAgC,MAAM,GAAG;AAAA,QACpE,MAAM,IAAI,yBAAwB,qBAAqB,iCAAiC;AAAA,MAC1F;AAAA,MAEA,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,YAAY,SAAS;AAAA,WACjB,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3C,CAAC;AAAA,MACD,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,yBAAwB,aAAa,wCAAwC;AAAA;AAAA,EAGzF,QAAQ;AAAA,IACN;AAAA,IAEA,MAAM;AAAA,EACR;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAC/B,IACA,OACA,UACA,OACA,MAKyB;AAAA,EACzB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAGF,SAAS,cAAc,CACrB,YACA,OACA,MACA,QACwB;AAAA,EACxB,MAAM,MAAM,sBAAsB,KAAK,EAAE;AAAA,EACzC,cAAc,YAAY,KAAK,IAAI,GAAG;AAAA,EACtC,iBAAiB,YAAY,OAAO,KAAK,IAAI,GAAG;AAAA,EAEhD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT;AAAA,IACA;AAAA,OACI,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,EAC3C;AAAA;AAGF,SAAS,eAAe,CACtB,YACA,OACA,WACA,QACwB;AAAA,EACxB,MAAM,MAAM,sBAAsB,UAAU,EAAE;AAAA,EAC9C,cAAc,YAAY,UAAU,IAAI,GAAG;AAAA,EAC3C,iBAAiB,YAAY,OAAO,UAAU,IAAI,GAAG;AAAA,EAErD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,UAAU;AAAA,IACd;AAAA,IACA;AAAA,OACI,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,EAC3C;AAAA;AAGF,SAAS,4BAA4B,CAAC,OAK1B;AAAA,EACV,MAAM,OAAO;AAAA,IACX,MAAM;AAAA,IACN,IAAI,MAAM;AAAA,IACV,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,OACZ,MAAM,gBAAgB,YAAY,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,WAAW,CAAC,qBAA8B;AAAA,IAC9C,IAAI,OAAO,qBAAqB,YAAY;AAAA,MAC1C,OAAO;AAAA,WACF;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IAKA,OAAO,CAAC;AAAA;AAAA,EAGV,OAAO,eAAe,MAAM,YAAY;AAAA,IACtC,OAAO;AAAA,IACP,YAAY;AAAA,EACd,CAAC;AAAA,EAED,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,YACA,OACA,QACA,QACwB;AAAA,EACxB,MAAM,MAAM,sBAAsB,OAAO,EAAE;AAAA,EAC3C,cAAc,YAAY,OAAO,IAAI,GAAG;AAAA,EACxC,iBAAiB,YAAY,OAAO,OAAO,IAAI,GAAG;AAAA,EAElD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,OAAO;AAAA,IACX;AAAA,IACA;AAAA,OACI,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,EAC3C;AAAA;AAGF,SAAS,sBAAsB,CAC7B,YACA,OACA,cACA,QACwB;AAAA,EACxB,MAAM,MAAM,sBAAsB,aAAa,EAAE;AAAA,EACjD,cAAc,YAAY,aAAa,IAAI,GAAG;AAAA,EAC9C,iBAAiB,YAAY,OAAO,aAAa,IAAI,GAAG;AAAA,EAExD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,OACI,WAAW,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,EAC3C;AAAA;AAGF,SAAS,aAAa,CAAC,YAAoB,QAAgB,KAAmB;AAAA,EAC5E,IAAI,IAAI,WAAW,GAAG;AAAA,IACpB,MAAM,IAAI,yBACR,aAAa,wBAAwB,qDACvC;AAAA,EACF;AAAA;AAGF,SAAS,gBAAgB,CACvB,YACA,OACA,QACA,KACM;AAAA,EACN,MAAM,cAAc,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,MAAM;AAAA,EAC3D,IAAI,aAAa;AAAA,IACf,MAAM,IAAI,yBACR,+BAA+B,wBAAwB,cACzD;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,MAAM,KAAK,CAAC,SAAS,KAAK,QAAQ,GAAG;AAAA,EAC1D,IAAI,cAAc;AAAA,IAChB,MAAM,IAAI,yBACR,gCAAgC,qBAAqB,0BAA0B,aAAa,YAAY,8BAC1G;AAAA,EACF;AAAA;AAGF,SAAS,qBAAqB,CAAC,IAAoB;AAAA,EACjD,MAAM,WAAW,GACd,KAAK,EACL,MAAM,eAAe,EACrB,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC;AAAA,EAEzC,OAAO,SACJ,IAAI,CAAC,SAAS,UAAU;AAAA,IACvB,MAAM,aAAa,aAAa,OAAO;AAAA,IACvC,OAAO,UAAU,IAAI,aAAa,WAAW,UAAU;AAAA,GACxD,EACA,KAAK,EAAE;AAAA;AAGZ,SAAS,YAAY,CAAC,OAAuB;AAAA,EAC3C,OAAO,MAAM,WAAW,IAAI,QAAQ,GAAG,MAAM,GAAG,YAAY,IAAI,MAAM,MAAM,CAAC;AAAA;AAG/E,SAAS,UAAU,CAAC,OAAuB;AAAA,EACzC,OAAO,MAAM,WAAW,IAAI,QAAQ,GAAG,MAAM,GAAG,YAAY,IAAI,MAAM,MAAM,CAAC;AAAA;AAG/E,SAAS,uBAAuB,CAAC,OAAgD;AAAA,EAC/E,OAAO,OAAO,UAAU;AAAA;AAG1B,SAAS,+BAA+B,CAAC,OAAwD;AAAA,EAC/F,OAAO,OAAO,UAAU;AAAA;AAG1B,SAAS,QAAQ,CAAC,OAA4D;AAAA,EAC5E,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;AC7gBrE,SAAS,0BAAyB,CAAC,OAAgB,UAAuC;AAAA,EAC/F,MAAM,eAAe,wBAAwB,KAAK;AAAA,EAClD,MAAM,UAAU,iBACd,wBACA,uBAAsB,OAAO,iCAAiC,GAC9D;AAAA,IACE,OAAO;AAAA,IACP,SAAS;AAAA,SACJ,2BAA2B,QAAQ;AAAA,SACnC;AAAA,IACL;AAAA,EACF,CACF;AAAA,EACA,OAAO,aAAa,eAChB,mBAAmB,SAAS,aAAa,aAAa,OAAO,IAC7D;AAAA;AAIN,SAAS,uBAAuB,CAAC,OAE/B;AAAA,EACA,IAAI,iBAAiB,+BAA8B;AAAA,IACjD,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,WAAW;AAAA,MACf,uBACE;AAAA,MACF,qBACE;AAAA,MACF,sBACE;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,cAAc,EAAE,QAAQ,WAAW,QAAQ,SAAS,SAAS,QAAQ,EAAE;AAAA,EAClF;AAAA,EACA,IAAI,iBAAiB,qBAAoB;AAAA,IAEvC,MAAM,iBAAiB,MAAM,SAAS,yBAAyB,MAAM,SAAS;AAAA,IAC9E,MAAM,gBAAgB,MAAM,SAAS,yBAAyB,MAAM,SAAS;AAAA,IAC7E,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ,iBACJ,uBACA,gBACE,sBACA;AAAA,QACN,SAAS,iBACL,+GACA,gBACE,8GACA;AAAA,WACF,MAAM,WAAW,YAAY,CAAC,IAAI,EAAE,QAAQ,MAAM,OAAO;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,iBAAiB,wBAAuB;AAAA,IAC1C,OAAO;AAAA,MACL,cAAc;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AAAA;AAIH,SAAS,0BAAyB,CAAC,OAAyB;AAAA,EACjE,OAAO,aAAY,KAAK,KAAK,MAAM,SAAS,0BAA0B,MAAM,UAAU,YAClF,MAAM,QACN;AAAA;AAGN,SAAS,0BAA0B,CAAC,UAAuC;AAAA,EACzE,MAAM,OAAO;AAAA,IACX,YAAY,SAAS;AAAA,IACrB,eAAe,SAAS;AAAA,IACxB,QAAQ,SAAS;AAAA,OACb,SAAS,YAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,OAC1D,SAAS,eAAe,EAAE,cAAc,SAAS,aAAa,IAAI,CAAC;AAAA,OACnE,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,IAAI,CAAC;AAAA,EAC1D;AAAA,EAEA,QAAQ,SAAS,MAAM;AAAA,SAChB;AAAA,MACH,OAAO,KAAK,MAAM,QAAQ,SAAS,MAAM,OAAO;AAAA,SAC7C;AAAA,MACH,OAAO;AAAA,WACF;AAAA,QACH,UAAU,SAAS,MAAM;AAAA,WACrB,SAAS,MAAM,cAAc,EAAE,aAAa,SAAS,MAAM,YAAY,IAAI,CAAC;AAAA,MAClF;AAAA,SACG;AAAA,MACH,OAAO,KAAK,MAAM,aAAa,SAAS,MAAM,YAAY;AAAA,SACvD;AAAA,MACH,OAAO,KAAK,MAAM,gBAAgB,SAAS,MAAM,eAAe;AAAA;AAAA;",
|
|
10
|
-
"debugId": "2EC0F96E37462C9E64756E2164756E21",
|
|
11
|
-
"names": []
|
|
12
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/blob-storage/derive.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
|
-
"import { isPlainRecord } from \"../json\"\nimport { blobIdFromDigest } from \"./derive\"\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\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"
|
|
7
|
-
],
|
|
8
|
-
"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;;;ACD9B,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;AAI9D,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;",
|
|
9
|
-
"debugId": "D9C9AEAF96D925AF64756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|