@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
|
@@ -4,7 +4,15 @@ import type { ObjectRef } from "../../ontology/refs"
|
|
|
4
4
|
import { AgentRequestError } from "../errors"
|
|
5
5
|
|
|
6
6
|
export type AgentContextInput =
|
|
7
|
-
| {
|
|
7
|
+
| {
|
|
8
|
+
readonly kind: "object"
|
|
9
|
+
readonly ref: ObjectRef
|
|
10
|
+
/**
|
|
11
|
+
* What the chat shows for this object instead of its title. Display only: it is not part of
|
|
12
|
+
* the context's identity and is never sent to the model.
|
|
13
|
+
*/
|
|
14
|
+
readonly label?: string
|
|
15
|
+
}
|
|
8
16
|
| {
|
|
9
17
|
readonly kind: "app-state"
|
|
10
18
|
readonly id: string
|
|
@@ -28,16 +36,25 @@ export interface AgentContextPart extends AgentContextEntryInput {
|
|
|
28
36
|
export const MAX_AGENT_CONTEXT_ENTRIES = 12
|
|
29
37
|
export const MAX_AGENT_APP_STATE_ENTRY_BYTES = 16 * 1024
|
|
30
38
|
export const MAX_AGENT_APP_STATE_TOTAL_BYTES = 64 * 1024
|
|
39
|
+
export const MAX_AGENT_CONTEXT_LABEL_LENGTH = 200
|
|
31
40
|
|
|
32
41
|
/** Typed constructors for context values shared by custom apps and agent clients. */
|
|
33
42
|
export const agentContext = {
|
|
34
43
|
object<const TObjectTypeId extends string>(
|
|
35
44
|
objectType: { readonly id: TObjectTypeId },
|
|
36
|
-
primaryId: string
|
|
45
|
+
primaryId: string,
|
|
46
|
+
options: { readonly label?: string } = {}
|
|
37
47
|
) {
|
|
48
|
+
const label =
|
|
49
|
+
options.label === undefined
|
|
50
|
+
? undefined
|
|
51
|
+
: objectContextLabel(options.label, "agentContext.object() label", (message) => {
|
|
52
|
+
throw new TypeError(`[Sixb] ${message}.`)
|
|
53
|
+
})
|
|
38
54
|
return {
|
|
39
55
|
kind: "object" as const,
|
|
40
56
|
ref: { objectTypeId: objectType.id, primaryId },
|
|
57
|
+
...(label === undefined ? {} : { label }),
|
|
41
58
|
}
|
|
42
59
|
},
|
|
43
60
|
|
|
@@ -85,7 +102,13 @@ export function normalizeAgentContextEntries(
|
|
|
85
102
|
for (const [index, rawEntry] of input.entries()) {
|
|
86
103
|
const entry = normalizeEntry(rawEntry, index)
|
|
87
104
|
const identity = agentContextIdentity(entry.context)
|
|
88
|
-
|
|
105
|
+
// A label is display only, so two entries that differ only by label are the same entry; the
|
|
106
|
+
// first one's label is kept.
|
|
107
|
+
const serialized = stableJsonStringify(
|
|
108
|
+
entry.context.kind === "object"
|
|
109
|
+
? { ...entry, context: { kind: "object", ref: entry.context.ref } }
|
|
110
|
+
: entry
|
|
111
|
+
)
|
|
89
112
|
const existing = byIdentity.get(identity)
|
|
90
113
|
|
|
91
114
|
if (existing !== undefined) {
|
|
@@ -133,8 +156,16 @@ function normalizeEntry(rawEntry: unknown, index: number): AgentContextEntryInpu
|
|
|
133
156
|
context.ref.primaryId,
|
|
134
157
|
`context[${index}].context.ref.primaryId`
|
|
135
158
|
)
|
|
159
|
+
const label =
|
|
160
|
+
context.label === undefined
|
|
161
|
+
? undefined
|
|
162
|
+
: objectContextLabel(context.label, `context[${index}].context.label`, invalidContext)
|
|
136
163
|
return {
|
|
137
|
-
context: {
|
|
164
|
+
context: {
|
|
165
|
+
kind: "object",
|
|
166
|
+
ref: { objectTypeId, primaryId },
|
|
167
|
+
...(label === undefined ? {} : { label }),
|
|
168
|
+
},
|
|
138
169
|
origin: rawEntry.origin,
|
|
139
170
|
}
|
|
140
171
|
}
|
|
@@ -165,6 +196,19 @@ function normalizeEntry(rawEntry: unknown, index: number): AgentContextEntryInpu
|
|
|
165
196
|
invalidContext(`context[${index}].context.kind must be 'object' or 'app-state'`)
|
|
166
197
|
}
|
|
167
198
|
|
|
199
|
+
function objectContextLabel(
|
|
200
|
+
value: unknown,
|
|
201
|
+
label: string,
|
|
202
|
+
fail: (message: string) => never
|
|
203
|
+
): string {
|
|
204
|
+
const trimmed = typeof value === "string" ? value.trim() : ""
|
|
205
|
+
if (!trimmed) fail(`${label} must be a non-empty string`)
|
|
206
|
+
if (trimmed.length > MAX_AGENT_CONTEXT_LABEL_LENGTH) {
|
|
207
|
+
fail(`${label} must be at most ${MAX_AGENT_CONTEXT_LABEL_LENGTH} characters`)
|
|
208
|
+
}
|
|
209
|
+
return trimmed
|
|
210
|
+
}
|
|
211
|
+
|
|
168
212
|
function requireNonEmptyString(value: unknown, label: string): string {
|
|
169
213
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
170
214
|
invalidContext(`${label} must be a non-empty string`)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { stableJsonStringify } from "../json"
|
|
2
2
|
import type { AgentMessageRecord } from "../storage/agents/types"
|
|
3
|
+
import { AGENT_CONTINUATION_INSTRUCTION } from "./adapters"
|
|
3
4
|
import type { AgentMessage, AgentMessagePart } from "./message"
|
|
4
5
|
|
|
5
6
|
export const AGENT_CONTEXT_ESTIMATOR_VERSION = 1 as const
|
|
@@ -144,6 +145,9 @@ function estimateMessageTokens(
|
|
|
144
145
|
case "step-start":
|
|
145
146
|
tokens += STEP_OVERHEAD_TOKENS
|
|
146
147
|
break
|
|
148
|
+
case "continuation":
|
|
149
|
+
tokens += textTokens(AGENT_CONTINUATION_INSTRUCTION)
|
|
150
|
+
break
|
|
147
151
|
case "context":
|
|
148
152
|
tokens += textTokens(stableJsonStringify(part.context))
|
|
149
153
|
break
|
|
@@ -199,6 +203,8 @@ function serializeSummaryPart(
|
|
|
199
203
|
case "provider-state":
|
|
200
204
|
case "step-start":
|
|
201
205
|
return []
|
|
206
|
+
case "continuation":
|
|
207
|
+
return [`${indent}<continuation_request />`]
|
|
202
208
|
case "context":
|
|
203
209
|
return part.context.kind === "object"
|
|
204
210
|
? [
|
package/src/agents/errors.ts
CHANGED
|
@@ -33,12 +33,15 @@ export type AgentRequestErrorCode =
|
|
|
33
33
|
| "agent_not_found"
|
|
34
34
|
| "model_not_found"
|
|
35
35
|
| "invalid_model_selection"
|
|
36
|
+
| "invalid_locale"
|
|
37
|
+
| "invalid_message"
|
|
36
38
|
| "run_not_found"
|
|
37
39
|
| "run_not_retryable"
|
|
38
40
|
| "thread_not_found"
|
|
39
41
|
| "active_run_exists"
|
|
40
42
|
| "authority_not_inheritable"
|
|
41
43
|
| "invalid_context"
|
|
44
|
+
| "invalid_attachment"
|
|
42
45
|
| "storage_unavailable"
|
|
43
46
|
| "sandbox_not_configured"
|
|
44
47
|
| "invalid_sandbox_params"
|
package/src/agents/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export type { PropertyClearance } from "../objects/property-clearance"
|
|
1
2
|
export type {
|
|
2
3
|
AgentFileDataProjection,
|
|
3
4
|
AgentFileDataResolverInput,
|
|
@@ -18,6 +19,7 @@ export {
|
|
|
18
19
|
agentServiceAccountId,
|
|
19
20
|
ensureManagedAgentExecutionIdentity,
|
|
20
21
|
resolveAgentExecutionAuthorization,
|
|
22
|
+
resolveAgentPropertyClearance,
|
|
21
23
|
resolveInheritedAgentExecutionAuthorization,
|
|
22
24
|
} from "./authority"
|
|
23
25
|
export { defineAgentTool } from "./builders"
|
|
@@ -84,6 +86,7 @@ export {
|
|
|
84
86
|
} from "./ids"
|
|
85
87
|
export {
|
|
86
88
|
AGENT_MESSAGE_CONTENT_VERSION,
|
|
89
|
+
type AgentContinuationPart,
|
|
87
90
|
type AgentFilePart,
|
|
88
91
|
type AgentMessage,
|
|
89
92
|
type AgentMessagePart,
|
|
@@ -105,11 +108,19 @@ export type {
|
|
|
105
108
|
export { runModelLoop } from "./model-loop"
|
|
106
109
|
export { agent } from "./reference"
|
|
107
110
|
export {
|
|
111
|
+
isRetryableAgentRun,
|
|
108
112
|
type RequestAgentRunInput,
|
|
109
113
|
type RequestAgentRunResult,
|
|
110
114
|
requestAgentRun,
|
|
111
115
|
retryAgentRun,
|
|
112
116
|
} from "./request"
|
|
117
|
+
export type {
|
|
118
|
+
AgentDefinitions,
|
|
119
|
+
AgentDefinitionsInput,
|
|
120
|
+
AgentProjectFile,
|
|
121
|
+
AgentSkillCatalog,
|
|
122
|
+
AgentSkillDefinition,
|
|
123
|
+
} from "./skills"
|
|
113
124
|
export type {
|
|
114
125
|
AgentCompactionFailureCode,
|
|
115
126
|
AgentRunControlStreamId,
|
|
@@ -144,11 +155,11 @@ export { isAgentToolResult } from "./tool-result"
|
|
|
144
155
|
export type {
|
|
145
156
|
AgentDescriptor,
|
|
146
157
|
AgentReasoning,
|
|
147
|
-
AgentReasoningLevel,
|
|
148
158
|
AgentReference,
|
|
149
159
|
AgentToolArtifact,
|
|
150
160
|
AgentToolArtifactPutInput,
|
|
151
161
|
AgentToolArtifacts,
|
|
162
|
+
AgentToolAttachments,
|
|
152
163
|
AgentToolContent,
|
|
153
164
|
AgentToolDefinition,
|
|
154
165
|
AgentToolDescriptionBuilder,
|
|
@@ -161,6 +172,7 @@ export type {
|
|
|
161
172
|
AgentToolRunBuilder,
|
|
162
173
|
AgentToolRunContext,
|
|
163
174
|
AgentToolRunInfo,
|
|
175
|
+
AgentToolRuntimeFacade,
|
|
164
176
|
AgentToolTextContent,
|
|
165
177
|
AgentUsageReference,
|
|
166
178
|
InferAgentToolInput,
|
package/src/agents/message.ts
CHANGED
|
@@ -60,6 +60,14 @@ interface AgentToolCallBase {
|
|
|
60
60
|
readonly providerMetadata?: ProviderData
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The user asked the Agent to continue an answer the turn limit cut short. Sixb writes the
|
|
65
|
+
* instruction the model reads; chats show no message for it.
|
|
66
|
+
*/
|
|
67
|
+
export interface AgentContinuationPart {
|
|
68
|
+
readonly type: "continuation"
|
|
69
|
+
}
|
|
70
|
+
|
|
63
71
|
/** Ordered, hidden provider state required to replay a model response losslessly. */
|
|
64
72
|
export interface AgentProviderStatePart {
|
|
65
73
|
readonly type: "provider-state"
|
|
@@ -84,6 +92,7 @@ export type AgentMessagePart =
|
|
|
84
92
|
| AgentStepStartPart
|
|
85
93
|
| AgentFilePart
|
|
86
94
|
| AgentContextPart
|
|
95
|
+
| AgentContinuationPart
|
|
87
96
|
| AgentToolCallPart
|
|
88
97
|
| AgentProviderStatePart
|
|
89
98
|
|
package/src/agents/request.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { Principal } from "../auth"
|
|
|
3
3
|
import { SYSTEM_PRINCIPAL } from "../auth"
|
|
4
4
|
import { assertAuthorized } from "../authorization"
|
|
5
5
|
import type { FileRef } from "../blob-storage"
|
|
6
|
+
import { isValidFileRef } from "../blob-storage/validation"
|
|
6
7
|
import {
|
|
7
8
|
canInheritAgentRequestAuthorization,
|
|
8
9
|
createInheritedAgentExecutionRecord,
|
|
@@ -10,8 +11,10 @@ import {
|
|
|
10
11
|
import { resolveExecutionScopeAuthorization } from "../execution/authorization"
|
|
11
12
|
import { ensureExecutionRecord, executionRecordInputFromRuntime } from "../execution/durable"
|
|
12
13
|
import type { ExecutionContext } from "../execution/types"
|
|
13
|
-
import type { LanguageModelCatalog, LanguageModelRef } from "../models"
|
|
14
|
-
import { isModelReasoning } from "../models/language-model"
|
|
14
|
+
import type { LanguageModelCatalog, LanguageModelEntry, LanguageModelRef } from "../models"
|
|
15
|
+
import { isModelReasoning, modelReasoningSupportIssue } from "../models/language-model"
|
|
16
|
+
import { resolveLanguageModel } from "../models/resolve"
|
|
17
|
+
import { canonicalLocale, canonicalTimeZone } from "../runtime/locale"
|
|
15
18
|
import type { SixbRuntimeContext } from "../runtime/types"
|
|
16
19
|
import {
|
|
17
20
|
type AgentStorage,
|
|
@@ -33,13 +36,19 @@ import { resolveAgentContextParts } from "./context-resolution"
|
|
|
33
36
|
import { dispatchQueuedAgentRuns } from "./dispatch"
|
|
34
37
|
import { AgentRequestError } from "./errors"
|
|
35
38
|
import { createAgentMessageId, createAgentRunId, createAgentThreadId } from "./ids"
|
|
39
|
+
import type { AgentMessagePart } from "./message"
|
|
36
40
|
import { assertNoAgentSelector } from "./retired-config"
|
|
37
41
|
import { publishAgentRunActivity } from "./streams/protocol"
|
|
38
|
-
import { AGENT_REASONING_LEVELS, type
|
|
42
|
+
import { AGENT_REASONING_LEVELS, type AgentReasoning } from "./types"
|
|
39
43
|
|
|
40
44
|
export interface RequestAgentRunInput {
|
|
41
|
-
/** The user's message that triggers the turn. */
|
|
42
|
-
readonly text
|
|
45
|
+
/** The user's message that triggers the turn. Omitted only to {@link continue}. */
|
|
46
|
+
readonly text?: string
|
|
47
|
+
/**
|
|
48
|
+
* Continue an answer the turn limit cut short, in an existing thread. Sixb writes the
|
|
49
|
+
* instruction the model reads, so the request carries no text, attachments, or context.
|
|
50
|
+
*/
|
|
51
|
+
readonly continue?: boolean
|
|
43
52
|
/** Blob-backed files attached to the trigger message. */
|
|
44
53
|
readonly attachments?: readonly FileRef[]
|
|
45
54
|
/** Structured page/object context snapshotted onto the triggering user message. */
|
|
@@ -48,8 +57,15 @@ export interface RequestAgentRunInput {
|
|
|
48
57
|
readonly threadId?: string
|
|
49
58
|
/** Configured language model selected for this turn. Omitted uses the agent default. */
|
|
50
59
|
readonly model?: LanguageModelRef
|
|
51
|
-
/**
|
|
52
|
-
readonly reasoning?:
|
|
60
|
+
/** Reasoning effort or token budget for this turn. Omitted uses the model's default. */
|
|
61
|
+
readonly reasoning?: AgentReasoning
|
|
62
|
+
/**
|
|
63
|
+
* IANA time zone of the person asking, such as their browser's. The Agent presents dates and
|
|
64
|
+
* times in it. Omitted uses the project time zone.
|
|
65
|
+
*/
|
|
66
|
+
readonly timeZone?: string
|
|
67
|
+
/** BCP 47 language of the person asking. Omitted uses the project locale. */
|
|
68
|
+
readonly locale?: string
|
|
53
69
|
/** Title to stamp on the thread when one is created. */
|
|
54
70
|
readonly title?: string
|
|
55
71
|
/** Explicit id for the trigger (user) message. Defaults to a generated id. */
|
|
@@ -88,7 +104,17 @@ export async function requestAgentRun(
|
|
|
88
104
|
assertNoAgentSelector(input)
|
|
89
105
|
assertAuthorized(runtime, { kind: "agent.run" })
|
|
90
106
|
assertRequestAuthorityCanRunAgent(runtime)
|
|
91
|
-
const
|
|
107
|
+
const trigger = triggerParts(input)
|
|
108
|
+
const continued = input.continue ? await continuedSelection(runtime, models, input) : {}
|
|
109
|
+
const spec = await resolveConversationRunSpec({
|
|
110
|
+
models,
|
|
111
|
+
input: {
|
|
112
|
+
...input,
|
|
113
|
+
model: input.model ?? continued.model,
|
|
114
|
+
reasoning: input.reasoning ?? continued.reasoning,
|
|
115
|
+
},
|
|
116
|
+
})
|
|
117
|
+
assertAttachments(input.attachments)
|
|
92
118
|
|
|
93
119
|
// Resolve context before creating a thread: invalid or inaccessible references must not leave an
|
|
94
120
|
// empty conversation behind. The resulting parts are the exact snapshot persisted below.
|
|
@@ -142,7 +168,7 @@ export async function requestAgentRun(
|
|
|
142
168
|
role: "user",
|
|
143
169
|
parts: [
|
|
144
170
|
...contextParts,
|
|
145
|
-
|
|
171
|
+
...trigger,
|
|
146
172
|
...(input.attachments ?? []).map((fileRef) => ({ type: "file" as const, fileRef })),
|
|
147
173
|
],
|
|
148
174
|
authorPrincipal: principal,
|
|
@@ -173,6 +199,15 @@ export async function requestAgentRun(
|
|
|
173
199
|
}
|
|
174
200
|
}
|
|
175
201
|
|
|
202
|
+
/** A failed turn, or one its worker died during, can run again from the same trigger message. */
|
|
203
|
+
export function isRetryableAgentRun(
|
|
204
|
+
run: Pick<ConversationAgentRunRecord, "status" | "finishReason">
|
|
205
|
+
): boolean {
|
|
206
|
+
return (
|
|
207
|
+
run.status === "failed" || (run.status === "cancelled" && run.finishReason === "interrupted")
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
|
|
176
211
|
/** Retry a failed turn as a new child execution while reusing its immutable trigger message. */
|
|
177
212
|
export async function retryAgentRun(
|
|
178
213
|
runtime: SixbRuntimeContext,
|
|
@@ -186,10 +221,10 @@ export async function retryAgentRun(
|
|
|
186
221
|
})
|
|
187
222
|
assertAuthorized(runtime, { kind: "agent.run" })
|
|
188
223
|
assertRequestAuthorityCanRunAgent(runtime)
|
|
189
|
-
if (failedRun
|
|
224
|
+
if (!isRetryableAgentRun(failedRun)) {
|
|
190
225
|
throw new AgentRequestError(
|
|
191
226
|
"run_not_retryable",
|
|
192
|
-
`[Sixb] Only failed Agent runs can be retried.`
|
|
227
|
+
`[Sixb] Only failed or interrupted Agent runs can be retried.`
|
|
193
228
|
)
|
|
194
229
|
}
|
|
195
230
|
|
|
@@ -227,10 +262,10 @@ export async function retryAgentRun(
|
|
|
227
262
|
triggerMessageId: failedRun.triggerMessageId,
|
|
228
263
|
spec:
|
|
229
264
|
failedRun.spec ??
|
|
230
|
-
resolveConversationRunSpec({
|
|
265
|
+
(await resolveConversationRunSpec({
|
|
231
266
|
models,
|
|
232
267
|
input: {},
|
|
233
|
-
}),
|
|
268
|
+
})),
|
|
234
269
|
})
|
|
235
270
|
})
|
|
236
271
|
await publishRunActivity(runtime, run)
|
|
@@ -238,6 +273,70 @@ export async function retryAgentRun(
|
|
|
238
273
|
return { run, ...(jobId ? { jobId } : {}), createdThread: false }
|
|
239
274
|
}
|
|
240
275
|
|
|
276
|
+
/**
|
|
277
|
+
* A continuation picks up where the cut-short turn stopped, with its model and reasoning unless the
|
|
278
|
+
* request chooses others. A model that has since left the catalog falls back to the defaults.
|
|
279
|
+
*/
|
|
280
|
+
async function continuedSelection(
|
|
281
|
+
runtime: SixbRuntimeContext,
|
|
282
|
+
models: LanguageModelCatalog | undefined,
|
|
283
|
+
input: RequestAgentRunInput
|
|
284
|
+
): Promise<Pick<RequestAgentRunInput, "model" | "reasoning">> {
|
|
285
|
+
const agents = requireAgentStorage(runtime)
|
|
286
|
+
const threadId = input.threadId ?? ""
|
|
287
|
+
if (!(await agents.threads.getById({ projectId: runtime.projectId, id: threadId }))) {
|
|
288
|
+
throw new AgentRequestError(
|
|
289
|
+
"thread_not_found",
|
|
290
|
+
"[Sixb] An Agent continuation needs an existing thread."
|
|
291
|
+
)
|
|
292
|
+
}
|
|
293
|
+
if (input.model !== undefined || input.reasoning !== undefined) return {}
|
|
294
|
+
const { runs } = await agents.runs.list({
|
|
295
|
+
projectId: runtime.projectId,
|
|
296
|
+
threadId,
|
|
297
|
+
kinds: ["conversation"],
|
|
298
|
+
order: "desc",
|
|
299
|
+
limit: 1,
|
|
300
|
+
})
|
|
301
|
+
const spec = runs[0]?.kind === "conversation" ? runs[0].spec : undefined
|
|
302
|
+
if (!spec || !models?.getByRef(spec.model)) return {}
|
|
303
|
+
return {
|
|
304
|
+
model: spec.model,
|
|
305
|
+
...(spec.reasoning === undefined ? {} : { reasoning: spec.reasoning }),
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** The words of the user, or the continuation Sixb words for them. */
|
|
310
|
+
function triggerParts(input: RequestAgentRunInput): readonly AgentMessagePart[] {
|
|
311
|
+
if (input.continue === true) {
|
|
312
|
+
if (input.text !== undefined || input.attachments?.length || input.context?.length) {
|
|
313
|
+
throw new AgentRequestError(
|
|
314
|
+
"invalid_message",
|
|
315
|
+
"[Sixb] An Agent continuation carries no text, attachments, or context."
|
|
316
|
+
)
|
|
317
|
+
}
|
|
318
|
+
return [{ type: "continuation" }]
|
|
319
|
+
}
|
|
320
|
+
if (typeof input.text !== "string" || input.text.trim().length === 0) {
|
|
321
|
+
throw new AgentRequestError(
|
|
322
|
+
"invalid_message",
|
|
323
|
+
"[Sixb] An Agent message needs text, or `continue: true` to continue the previous answer."
|
|
324
|
+
)
|
|
325
|
+
}
|
|
326
|
+
return [{ type: "text", text: input.text }]
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function assertAttachments(attachments: readonly FileRef[] | undefined): void {
|
|
330
|
+
for (const [index, attachment] of (attachments ?? []).entries()) {
|
|
331
|
+
if (!isValidFileRef(attachment)) {
|
|
332
|
+
throw new AgentRequestError(
|
|
333
|
+
"invalid_attachment",
|
|
334
|
+
`[Sixb] Attachment ${index} is not a valid file reference.`
|
|
335
|
+
)
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
241
340
|
function assertSandboxExecutionAvailable(thread: AgentThreadRecord): void {
|
|
242
341
|
if (thread.sandboxState && !["new", "ready"].includes(thread.sandboxState.status)) {
|
|
243
342
|
throw new AgentRequestError(
|
|
@@ -281,10 +380,14 @@ async function assertAiLimitPreflight(
|
|
|
281
380
|
}
|
|
282
381
|
}
|
|
283
382
|
|
|
284
|
-
|
|
383
|
+
/**
|
|
384
|
+
* Freeze the model selection of a turn. The model's default reasoning is resolved here, not by the
|
|
385
|
+
* worker, so a retry runs with the reasoning the turn was admitted with.
|
|
386
|
+
*/
|
|
387
|
+
async function resolveConversationRunSpec(input: {
|
|
285
388
|
readonly models?: LanguageModelCatalog
|
|
286
|
-
readonly input: Pick<RequestAgentRunInput, "model" | "reasoning">
|
|
287
|
-
}): ConversationAgentRunSpec {
|
|
389
|
+
readonly input: Pick<RequestAgentRunInput, "model" | "reasoning" | "timeZone" | "locale">
|
|
390
|
+
}): Promise<ConversationAgentRunSpec> {
|
|
288
391
|
if (!input.models) {
|
|
289
392
|
throw new AgentRequestError(
|
|
290
393
|
"model_not_found",
|
|
@@ -300,20 +403,73 @@ function resolveConversationRunSpec(input: {
|
|
|
300
403
|
)
|
|
301
404
|
}
|
|
302
405
|
|
|
303
|
-
const
|
|
304
|
-
if (
|
|
305
|
-
|
|
306
|
-
"invalid_model_selection",
|
|
307
|
-
`[Sixb] Agent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
|
|
308
|
-
)
|
|
406
|
+
const explicitReasoning = input.input.reasoning
|
|
407
|
+
if (explicitReasoning !== undefined) {
|
|
408
|
+
await assertModelSupportsReasoning(model, explicitReasoning)
|
|
309
409
|
}
|
|
410
|
+
const reasoning = explicitReasoning ?? model.model.defaultReasoning
|
|
411
|
+
const timeZone = requestedSetting(
|
|
412
|
+
"timeZone",
|
|
413
|
+
input.input.timeZone,
|
|
414
|
+
canonicalTimeZone,
|
|
415
|
+
"an IANA time zone"
|
|
416
|
+
)
|
|
417
|
+
const locale = requestedSetting(
|
|
418
|
+
"locale",
|
|
419
|
+
input.input.locale,
|
|
420
|
+
canonicalLocale,
|
|
421
|
+
"a BCP 47 language tag"
|
|
422
|
+
)
|
|
310
423
|
|
|
311
424
|
return Object.freeze({
|
|
312
425
|
model: Object.freeze({ provider: selected.provider, modelId: selected.modelId }),
|
|
313
426
|
...(reasoning === undefined ? {} : { reasoning }),
|
|
427
|
+
...(timeZone === undefined ? {} : { timeZone }),
|
|
428
|
+
...(locale === undefined ? {} : { locale }),
|
|
314
429
|
})
|
|
315
430
|
}
|
|
316
431
|
|
|
432
|
+
function requestedSetting(
|
|
433
|
+
field: "timeZone" | "locale",
|
|
434
|
+
value: string | undefined,
|
|
435
|
+
canonical: (value: unknown) => string | undefined,
|
|
436
|
+
expected: string
|
|
437
|
+
): string | undefined {
|
|
438
|
+
if (value === undefined) return undefined
|
|
439
|
+
const resolved = canonical(value)
|
|
440
|
+
if (resolved === undefined) {
|
|
441
|
+
throw new AgentRequestError(
|
|
442
|
+
"invalid_locale",
|
|
443
|
+
`[Sixb] Agent request '${field}' must be ${expected}; received ${JSON.stringify(value)}.`
|
|
444
|
+
)
|
|
445
|
+
}
|
|
446
|
+
return resolved
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Checked against the model's resolved capabilities, as `GET /api/models` reports them (its
|
|
450
|
+
// configured ones when the provider catalog is unavailable). Undeclared capabilities accept any
|
|
451
|
+
// level; the provider then falls back to its own default.
|
|
452
|
+
async function assertModelSupportsReasoning(
|
|
453
|
+
entry: LanguageModelEntry,
|
|
454
|
+
reasoning: unknown
|
|
455
|
+
): Promise<void> {
|
|
456
|
+
if (!isModelReasoning(reasoning)) {
|
|
457
|
+
throw new AgentRequestError(
|
|
458
|
+
"invalid_model_selection",
|
|
459
|
+
`[Sixb] Agent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
|
|
460
|
+
)
|
|
461
|
+
}
|
|
462
|
+
if (reasoning === "provider-default") return
|
|
463
|
+
const model = await resolveLanguageModel(entry.model)
|
|
464
|
+
const issue = modelReasoningSupportIssue(model.definition.capabilities.reasoning, reasoning)
|
|
465
|
+
if (issue !== undefined) {
|
|
466
|
+
throw new AgentRequestError(
|
|
467
|
+
"invalid_model_selection",
|
|
468
|
+
`[Sixb] Language model '${entry.provider}/${entry.modelId}' cannot use this reasoning: ${issue}.`
|
|
469
|
+
)
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
317
473
|
async function prepareDurableAgentExecution(
|
|
318
474
|
runtime: SixbRuntimeContext,
|
|
319
475
|
execution: ExecutionContext,
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { OntologyDocsCatalog, OntologyDocsInput } from "../ontology/docs"
|
|
2
|
+
import { RuntimeError } from "../runtime/errors"
|
|
3
|
+
|
|
4
|
+
/** A project file the Agent receives byte-for-byte in its sandbox. */
|
|
5
|
+
export interface AgentProjectFile {
|
|
6
|
+
/** POSIX path, relative to the directory the file is installed in. */
|
|
7
|
+
readonly path: string
|
|
8
|
+
readonly contents: string | Uint8Array
|
|
9
|
+
/** Permission bits, kept only for executable files. */
|
|
10
|
+
readonly mode?: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** An Agent Skill read from `skills/<name>/SKILL.md` and the files next to it. */
|
|
14
|
+
export interface AgentSkillDefinition {
|
|
15
|
+
readonly name: string
|
|
16
|
+
readonly description: string
|
|
17
|
+
/** Every file of the skill directory, `SKILL.md` included. */
|
|
18
|
+
readonly files: readonly AgentProjectFile[]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Immutable catalog of the Agent Skills registered with a Sixb host. */
|
|
22
|
+
export interface AgentSkillCatalog {
|
|
23
|
+
list(): readonly AgentSkillDefinition[]
|
|
24
|
+
getByName(name: string): AgentSkillDefinition | null
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The project files the Agent reads. createSixb() discovers them; tests may pass them directly. */
|
|
28
|
+
export interface AgentDefinitionsInput {
|
|
29
|
+
/** Agent Skills, from `skills/`. */
|
|
30
|
+
readonly skills?: readonly AgentSkillDefinition[]
|
|
31
|
+
/** The conversational Agent's instructions, from `SIXB.md`. */
|
|
32
|
+
readonly instructions?: string
|
|
33
|
+
/** The modules, docs, and scripts of `ontology/`. */
|
|
34
|
+
readonly ontologyDocs?: OntologyDocsInput
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** The project files the Agent reads, validated with the other definitions. */
|
|
38
|
+
export interface AgentDefinitions {
|
|
39
|
+
readonly skills: AgentSkillCatalog
|
|
40
|
+
/** Absent without `SIXB.md`. */
|
|
41
|
+
readonly instructions?: string
|
|
42
|
+
/** Where each object type's reference doc lives, with the docs and scripts of `ontology/`. */
|
|
43
|
+
readonly ontologyDocs: OntologyDocsCatalog
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Index skills by name. Discovery validates each skill; names must also be unique. */
|
|
47
|
+
export function createAgentSkillCatalog(
|
|
48
|
+
definitions: readonly AgentSkillDefinition[] | undefined
|
|
49
|
+
): AgentSkillCatalog {
|
|
50
|
+
const skills = Object.freeze([...(definitions ?? [])])
|
|
51
|
+
const skillsByName = new Map<string, AgentSkillDefinition>()
|
|
52
|
+
for (const skill of skills) {
|
|
53
|
+
if (skillsByName.has(skill.name)) {
|
|
54
|
+
throw new RuntimeError(`[Sixb] Duplicate Agent Skill name: ${skill.name}`)
|
|
55
|
+
}
|
|
56
|
+
skillsByName.set(skill.name, skill)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return Object.freeze({
|
|
60
|
+
list: () => skills,
|
|
61
|
+
getByName: (name: string) => skillsByName.get(name) ?? null,
|
|
62
|
+
})
|
|
63
|
+
}
|
package/src/agents/types.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ActionsRuntime } from "../actions/execution"
|
|
2
|
+
import type { BlobBody, FileRef, OpenedFileRef } from "../blob-storage"
|
|
2
3
|
import type { ConnectorRuntime } from "../connectors"
|
|
3
4
|
import type { JsonPrimitive, JsonValue, ReadonlyJsonValue } from "../json"
|
|
4
5
|
import type { Logger } from "../logging"
|
|
5
6
|
import { type LanguageModelRef, MODEL_REASONING_LEVELS, type ModelReasoning } from "../models"
|
|
7
|
+
import type { ModelsRuntime } from "../models/generation-types"
|
|
6
8
|
import type { InferSchema } from "../ontology/inference"
|
|
7
9
|
import type { Schema } from "../ontology/types"
|
|
10
|
+
import type { ObjectReader } from "../runtime/types"
|
|
8
11
|
|
|
9
12
|
export type {
|
|
10
13
|
AgentContextEntryInput,
|
|
@@ -32,9 +35,6 @@ export interface AgentDescriptor {
|
|
|
32
35
|
|
|
33
36
|
export type AgentReasoning = ModelReasoning
|
|
34
37
|
|
|
35
|
-
/** @deprecated Use {@link AgentReasoning}. */
|
|
36
|
-
export type AgentReasoningLevel = AgentReasoning
|
|
37
|
-
|
|
38
38
|
export const AGENT_REASONING_LEVELS = MODEL_REASONING_LEVELS
|
|
39
39
|
|
|
40
40
|
type Simplify<T> = { [K in keyof T]: T[K] } & {}
|
|
@@ -98,6 +98,19 @@ export interface AgentToolArtifacts {
|
|
|
98
98
|
put(input: AgentToolArtifactPutInput): Promise<AgentToolArtifact>
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
/**
|
|
102
|
+
* The files attached to the run that invoked a tool: the messages of a chat's thread, or the input
|
|
103
|
+
* files of a workflow AI task. A child Agent has none.
|
|
104
|
+
*/
|
|
105
|
+
export interface AgentToolAttachments {
|
|
106
|
+
/**
|
|
107
|
+
* Open an attachment by the `key` the Agent sees in `$SIXB_ATTACHMENTS`. Returns null when its
|
|
108
|
+
* stored file is gone, and throws an `AgentToolPublicError` for a key that is not one of this
|
|
109
|
+
* run's attachments.
|
|
110
|
+
*/
|
|
111
|
+
open(key: string): Promise<OpenedFileRef | null>
|
|
112
|
+
}
|
|
113
|
+
|
|
101
114
|
export type AgentToolTextContent = {
|
|
102
115
|
readonly type: "text"
|
|
103
116
|
readonly text: string
|
|
@@ -120,6 +133,22 @@ export type AgentToolResult = {
|
|
|
120
133
|
readonly content: readonly AgentToolContent[]
|
|
121
134
|
}
|
|
122
135
|
|
|
136
|
+
/**
|
|
137
|
+
* The run's domain SDK as an agent tool sees it. Unlike workflow steps and actions, it acts as the
|
|
138
|
+
* run's requester: the signed-in user in a chat, that same user in a child Agent, and the step's
|
|
139
|
+
* groups in a workflow AI task.
|
|
140
|
+
*
|
|
141
|
+
* A structural view of the public `Sixb` SDK, like `WorkflowRuntimeFacade`: the handler receives the
|
|
142
|
+
* run's bound SDK, and this type guides it to what a tool should do. It reads objects and changes
|
|
143
|
+
* them by requesting actions, which validate and record the change. Authority comes from the run,
|
|
144
|
+
* not from this view.
|
|
145
|
+
*/
|
|
146
|
+
export interface AgentToolRuntimeFacade extends ObjectReader {
|
|
147
|
+
readonly actions: ActionsRuntime
|
|
148
|
+
readonly models: ModelsRuntime
|
|
149
|
+
readonly connector: ConnectorRuntime
|
|
150
|
+
}
|
|
151
|
+
|
|
123
152
|
/** The narrow, run-scoped surface passed to an agent tool handler. */
|
|
124
153
|
export interface AgentToolRunContext<
|
|
125
154
|
TInput extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>,
|
|
@@ -128,9 +157,10 @@ export interface AgentToolRunContext<
|
|
|
128
157
|
readonly toolCallId: string
|
|
129
158
|
readonly signal: AbortSignal
|
|
130
159
|
readonly run: AgentToolRunInfo
|
|
131
|
-
readonly
|
|
160
|
+
readonly sixb: AgentToolRuntimeFacade
|
|
132
161
|
readonly logger: Logger
|
|
133
162
|
readonly artifacts: AgentToolArtifacts
|
|
163
|
+
readonly attachments: AgentToolAttachments
|
|
134
164
|
}
|
|
135
165
|
|
|
136
166
|
/** Agent tool handlers may return only values safe to persist in agent messages. */
|