@sixb/core 0.1.10 → 0.1.12
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/builders/params.d.ts +1 -22
- package/dist/actions/builders/params.d.ts.map +1 -1
- package/dist/actions/index.js +29 -28
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/types/params.d.ts +10 -44
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -2
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +15 -9
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/ids.d.ts +2 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +48 -42
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/sandbox.d.ts +5 -0
- package/dist/agents/sandbox.d.ts.map +1 -0
- package/dist/agents/streams/index.js +4 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.js +4 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.js +8 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/index.js +5 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/blob-storage/types.d.ts +4 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/bootstrap/index.js +50 -46
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-17kfctj6.js → chunk-0mza4xb2.js} +2 -2
- package/dist/chunk-2c4j899j.js.map +1 -1
- package/dist/{chunk-g00bfdq6.js → chunk-2cxv584m.js} +12 -56
- package/dist/{chunk-g00bfdq6.js.map → chunk-2cxv584m.js.map} +3 -3
- package/dist/{chunk-e0d1rzef.js → chunk-2h63nrde.js} +380 -97
- package/dist/chunk-2h63nrde.js.map +20 -0
- package/dist/{chunk-rtk71jzp.js → chunk-3bnt2wna.js} +2 -2
- package/dist/{chunk-awbhdqyc.js → chunk-3ghw2t5q.js} +1 -1
- package/dist/{chunk-b19g04jk.js → chunk-3h7ctayx.js} +1 -1
- package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
- package/dist/{chunk-5hz0fnca.js → chunk-4k53sm9e.js} +6 -2
- package/dist/chunk-4k53sm9e.js.map +12 -0
- package/dist/chunk-4ph94nhd.js +81 -0
- package/dist/chunk-4ph94nhd.js.map +10 -0
- package/dist/chunk-58geavnf.js +29 -0
- package/dist/chunk-58geavnf.js.map +10 -0
- package/dist/{chunk-0y39rgsb.js → chunk-5tetw4hn.js} +1 -1
- package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
- package/dist/chunk-69266efg.js.map +12 -0
- package/dist/{chunk-g7knyczr.js → chunk-6ma8dvzc.js} +121 -53
- package/dist/chunk-6ma8dvzc.js.map +15 -0
- package/dist/{chunk-skz0hst3.js → chunk-7c2g3sz9.js} +6 -86
- package/dist/{chunk-skz0hst3.js.map → chunk-7c2g3sz9.js.map} +3 -3
- package/dist/{chunk-976rxdpx.js → chunk-7qnvhtcd.js} +93 -17
- package/dist/{chunk-976rxdpx.js.map → chunk-7qnvhtcd.js.map} +7 -6
- package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
- package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
- package/dist/chunk-91kcnbf0.js.map +10 -0
- package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
- package/dist/chunk-96yw3pwd.js.map +10 -0
- package/dist/chunk-98cw09sw.js.map +2 -2
- package/dist/{chunk-93csa55g.js → chunk-axndsymr.js} +10 -4
- package/dist/chunk-axndsymr.js.map +11 -0
- package/dist/{chunk-r7fj830t.js → chunk-b768c93y.js} +100 -29
- package/dist/chunk-b768c93y.js.map +36 -0
- package/dist/{chunk-dz5h08xv.js → chunk-bbaa1fet.js} +24 -9
- package/dist/{chunk-dz5h08xv.js.map → chunk-bbaa1fet.js.map} +4 -4
- package/dist/{chunk-7apz6hg4.js → chunk-bet1rb9h.js} +8 -4
- package/dist/chunk-bet1rb9h.js.map +10 -0
- package/dist/{chunk-358caqf5.js → chunk-bfjv1adk.js} +2 -2
- package/dist/{chunk-b0ec55a1.js → chunk-bg2bs62d.js} +5 -5
- package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
- package/dist/chunk-cd234ba4.js.map +14 -0
- package/dist/chunk-d62kjtbg.js.map +1 -1
- package/dist/chunk-dmn70ztd.js.map +2 -2
- package/dist/{chunk-28ja2cjs.js → chunk-e1f1sqba.js} +39 -53
- package/dist/{chunk-28ja2cjs.js.map → chunk-e1f1sqba.js.map} +5 -6
- package/dist/{chunk-ap0g1g74.js → chunk-eyjzgav0.js} +39 -4
- package/dist/chunk-eyjzgav0.js.map +12 -0
- package/dist/{chunk-rb1xx120.js → chunk-f06sf7rr.js} +9 -5
- package/dist/chunk-f06sf7rr.js.map +11 -0
- package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
- package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
- package/dist/{chunk-38zv5rkr.js → chunk-g2gezsg5.js} +1 -1
- package/dist/{chunk-38zv5rkr.js.map → chunk-g2gezsg5.js.map} +2 -2
- package/dist/{chunk-nmbxcaqx.js → chunk-g50nxqs5.js} +53 -66
- package/dist/chunk-g50nxqs5.js.map +18 -0
- package/dist/{chunk-1824gssz.js → chunk-gswwr35f.js} +4 -4
- package/dist/{chunk-92vk7gta.js → chunk-gzt6v1ja.js} +1 -1
- package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
- package/dist/chunk-hgqpcmyr.js.map +12 -0
- package/dist/{chunk-gqh45d2n.js → chunk-hkw8rykk.js} +2 -2
- package/dist/{chunk-f4w3yp4f.js → chunk-hzw7yv5g.js} +104 -21
- package/dist/chunk-hzw7yv5g.js.map +13 -0
- package/dist/{chunk-5c7ga8zz.js → chunk-jjwhy3rs.js} +5 -5
- package/dist/chunk-kept9cdd.js +29 -0
- package/dist/chunk-kept9cdd.js.map +10 -0
- package/dist/{chunk-ftv470j8.js → chunk-m7cx05vp.js} +247 -16
- package/dist/{chunk-ftv470j8.js.map → chunk-m7cx05vp.js.map} +14 -10
- package/dist/{chunk-qyeptdyv.js → chunk-mdnw7nj8.js} +10 -6
- package/dist/chunk-mdnw7nj8.js.map +15 -0
- package/dist/{chunk-5p1v802y.js → chunk-nzsy3xrp.js} +253 -86
- package/dist/chunk-nzsy3xrp.js.map +46 -0
- package/dist/chunk-p1683c0v.js +104 -0
- package/dist/chunk-p1683c0v.js.map +11 -0
- package/dist/chunk-p6r1ex7t.js +93 -0
- package/dist/chunk-p6r1ex7t.js.map +10 -0
- package/dist/{chunk-p5vcsw9c.js → chunk-qm535afa.js} +10 -10
- package/dist/{chunk-p5vcsw9c.js.map → chunk-qm535afa.js.map} +4 -4
- package/dist/chunk-r5zythxp.js +552 -0
- package/dist/chunk-r5zythxp.js.map +17 -0
- package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
- package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
- package/dist/{chunk-t1f4f1ve.js → chunk-sfypc7mk.js} +18 -13
- package/dist/{chunk-t1f4f1ve.js.map → chunk-sfypc7mk.js.map} +3 -3
- package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
- package/dist/chunk-t6f3tdnr.js.map +10 -0
- package/dist/{chunk-bn138h9w.js → chunk-t7dzd1tm.js} +3 -3
- package/dist/{chunk-pr2h4bv4.js → chunk-tg4g4zh0.js} +3 -3
- package/dist/chunk-vpxss818.js +56 -0
- package/dist/chunk-vpxss818.js.map +10 -0
- package/dist/{chunk-ms2tmn1k.js → chunk-vsg0g7h9.js} +53 -57
- package/dist/chunk-vsg0g7h9.js.map +17 -0
- package/dist/{chunk-8vj0rjgs.js → chunk-wjffn5m4.js} +1 -1
- package/dist/{chunk-nt99sxd6.js → chunk-x9tmx3fc.js} +18 -24
- package/dist/chunk-x9tmx3fc.js.map +14 -0
- package/dist/{chunk-agbbygvh.js → chunk-xn686q2e.js} +8 -8
- package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
- package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
- package/dist/{chunk-v2vcg0w6.js → chunk-xtfryrfb.js} +2 -2
- package/dist/chunk-y0v18c2j.js +363 -0
- package/dist/chunk-y0v18c2j.js.map +14 -0
- package/dist/{chunk-72w2pxk7.js → chunk-y1ahv8b7.js} +11 -3
- package/dist/{chunk-72w2pxk7.js.map → chunk-y1ahv8b7.js.map} +3 -3
- package/dist/chunk-y3ev53cq.js +84 -0
- package/dist/chunk-y3ev53cq.js.map +10 -0
- package/dist/{chunk-p6a4npdx.js → chunk-ybhz3j9g.js} +362 -60
- package/dist/chunk-ybhz3j9g.js.map +63 -0
- package/dist/{chunk-z30bv4ga.js → chunk-yxb4c62x.js} +3 -2
- package/dist/{chunk-z30bv4ga.js.map → chunk-yxb4c62x.js.map} +3 -3
- package/dist/chunk-z3y5kg1x.js +14 -0
- package/dist/chunk-z3y5kg1x.js.map +10 -0
- package/dist/connectors/connections/command-context.d.ts +2 -0
- package/dist/connectors/connections/command-context.d.ts.map +1 -1
- package/dist/connectors/connections/contracts.d.ts +1 -1
- package/dist/connectors/connections/contracts.d.ts.map +1 -1
- package/dist/connectors/connections/execution.d.ts +1 -0
- package/dist/connectors/connections/execution.d.ts.map +1 -1
- package/dist/connectors/connections/runs.d.ts +1 -0
- package/dist/connectors/connections/runs.d.ts.map +1 -1
- package/dist/connectors/connections/service.d.ts +2 -0
- package/dist/connectors/connections/service.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts +4 -0
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +5 -4
- package/dist/datasets/write.js.map +1 -1
- package/dist/error-reporting/capability.d.ts +3 -2
- package/dist/error-reporting/capability.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +5 -4
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/error-reporting/reports.d.ts +10 -0
- package/dist/error-reporting/reports.d.ts.map +1 -1
- package/dist/error-reporting/types.d.ts +10 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/failure-message.d.ts +8 -0
- package/dist/errors/failure-message.d.ts.map +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +3 -2
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/index.js +5 -4
- package/dist/events/index.js.map +1 -1
- package/dist/events/outbox-dispatcher.d.ts +2 -2
- package/dist/events/outbox-dispatcher.d.ts.map +1 -1
- package/dist/execution/agent.js +44 -41
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/kernel-operation.d.ts +4 -0
- package/dist/execution/kernel-operation.d.ts.map +1 -0
- package/dist/execution/primitive.js +44 -41
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +45 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/execution/types.d.ts +6 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -59
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.js +5 -4
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +2 -0
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/maintenance/types.d.ts +1 -1
- package/dist/maintenance/types.d.ts.map +1 -1
- package/dist/materialization/errors.d.ts +1 -1
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -0
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/model.d.ts +2 -0
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materialization/vectors.d.ts +19 -0
- package/dist/materialization/vectors.d.ts.map +1 -0
- package/dist/materializer/context.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/vector-authority.d.ts +6 -0
- package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
- package/dist/materializer/edits/vectors.d.ts +6 -0
- package/dist/materializer/edits/vectors.d.ts.map +1 -0
- package/dist/materializer/effective/validate.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +7 -0
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
- package/dist/materializer/effective/vectors.d.ts +6 -0
- package/dist/materializer/effective/vectors.d.ts.map +1 -0
- package/dist/materializer/execution/work-executor.d.ts +2 -1
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/index.js +26 -25
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/catalog-index.d.ts +15 -0
- package/dist/models/catalog-index.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +27 -6
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/catalog.d.ts +12 -0
- package/dist/models/decision/catalog.d.ts.map +1 -0
- package/dist/models/decision/errors.d.ts +7 -0
- package/dist/models/decision/errors.d.ts.map +1 -0
- package/dist/models/decision/output.d.ts +50 -0
- package/dist/models/decision/output.d.ts.map +1 -0
- package/dist/models/decision/questions.d.ts +14 -0
- package/dist/models/decision/questions.d.ts.map +1 -0
- package/dist/models/decision/runtime.d.ts +7 -0
- package/dist/models/decision/runtime.d.ts.map +1 -0
- package/dist/models/decision/types.d.ts +92 -0
- package/dist/models/decision/types.d.ts.map +1 -0
- package/dist/models/decision/validation.d.ts +7 -0
- package/dist/models/decision/validation.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +8 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/embedding-model.d.ts +60 -0
- package/dist/models/embedding-model.d.ts.map +1 -0
- package/dist/models/execution/binding.d.ts +2 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/embedding.d.ts +5 -0
- package/dist/models/execution/embedding.d.ts.map +1 -0
- package/dist/models/execution/index.js +29 -26
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +5 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/session.d.ts +21 -0
- package/dist/models/execution/session.d.ts.map +1 -0
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +9 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +3 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +1 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -28
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -0
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +34 -24
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +6 -2
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +5 -0
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +2 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/vectors/handle.d.ts +4 -0
- package/dist/objects/vectors/handle.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-generate.d.ts +11 -0
- package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
- package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-shared.d.ts +17 -0
- package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-single.d.ts +4 -0
- package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing.d.ts +7 -0
- package/dist/objects/vectors/indexing.d.ts.map +1 -0
- package/dist/objects/vectors/profile.d.ts +13 -0
- package/dist/objects/vectors/profile.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts +5 -0
- package/dist/objects/vectors/query.d.ts.map +1 -0
- package/dist/objects/vectors/resolve-query.d.ts +6 -0
- package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
- package/dist/objects/vectors/types.d.ts +11 -0
- package/dist/objects/vectors/types.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +5 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +5 -4
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +8 -9
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/definition.d.ts +3 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -0
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/ontology/vector-profiles.d.ts +4 -0
- package/dist/ontology/vector-profiles.d.ts.map +1 -0
- package/dist/pipelines/index.js +28 -27
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +24 -23
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +2 -1
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +5 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -3
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +9 -6
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +3 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +47 -1
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +9 -4
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +15 -3
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -0
- package/dist/sandboxes/config.d.ts +5 -0
- package/dist/sandboxes/config.d.ts.map +1 -0
- package/dist/sandboxes/configuration.d.ts +41 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -0
- package/dist/sandboxes/environment.d.ts +13 -0
- package/dist/sandboxes/environment.d.ts.map +1 -0
- package/dist/sandboxes/errors.d.ts +1 -1
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +6 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +16 -3
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +35 -3
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/builders.d.ts +25 -0
- package/dist/shared/params/builders.d.ts.map +1 -0
- package/dist/shared/params/types.d.ts +47 -0
- package/dist/shared/params/types.d.ts.map +1 -0
- package/dist/shared/params/validation.d.ts +15 -0
- package/dist/shared/params/validation.d.ts.map +1 -0
- package/dist/shares/internal.js +23 -22
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +4 -3
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/agents/in-memory.d.ts +2 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +5 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +8 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +49 -0
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +2 -2
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +4 -3
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/connector-connections/in-memory.d.ts +1 -0
- package/dist/storage/connector-connections/in-memory.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider/runs.d.ts +1 -0
- package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider/shared.d.ts +1 -0
- package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.d.ts +1 -0
- package/dist/storage/connector-connections/provider.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +12 -17
- package/dist/storage/connector-connections/provider.js.map +6 -6
- package/dist/storage/connector-connections/types.d.ts +3 -1
- package/dist/storage/connector-connections/types.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +3 -3
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +13 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +3 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/index.d.ts +5 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +25 -22
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +2 -2
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +7 -0
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +2 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -0
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -0
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/outbox.d.ts +1 -0
- package/dist/storage/ontology/outbox.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/ontology/vector-indexing.d.ts +94 -0
- package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/vectors.d.ts +56 -0
- package/dist/storage/ontology/vectors.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +4 -3
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +29 -28
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.js +488 -81
- package/dist/testing/index.js.map +10 -10
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +24 -23
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +3 -2
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +47 -43
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/builders/params.ts +1 -48
- package/src/actions/types/params.ts +14 -74
- package/src/actions/validation.ts +7 -84
- package/src/agents/errors.ts +3 -0
- package/src/agents/execution.ts +67 -15
- package/src/agents/ids.ts +8 -0
- package/src/agents/index.ts +1 -0
- package/src/agents/model-loop.ts +7 -0
- package/src/agents/request.ts +11 -0
- package/src/agents/sandbox.ts +44 -0
- package/src/agents/validation.ts +2 -108
- package/src/blob-storage/types.ts +4 -1
- package/src/connectors/connections/command-context.ts +21 -4
- package/src/connectors/connections/contracts.ts +4 -1
- package/src/connectors/connections/execution.ts +3 -0
- package/src/connectors/connections/runs.ts +38 -1
- package/src/connectors/connections/service.ts +6 -0
- package/src/datasets/validation.ts +40 -11
- package/src/datasets/write.ts +8 -11
- package/src/error-reporting/capability.ts +11 -0
- package/src/error-reporting/reports.ts +23 -0
- package/src/error-reporting/types.ts +12 -1
- package/src/errors/catalog.ts +12 -0
- package/src/errors/failure-message.ts +15 -0
- package/src/errors/internal.ts +57 -25
- package/src/events/outbox-dispatcher.ts +20 -26
- package/src/execution/authorization.ts +12 -5
- package/src/execution/authorized-object-reader.ts +37 -2
- package/src/execution/kernel-operation.ts +27 -0
- package/src/execution/scopes.ts +2 -0
- package/src/execution/types.ts +4 -4
- package/src/index.ts +60 -1
- package/src/lake-storage/in-memory.ts +7 -3
- package/src/lake-storage/types.ts +2 -0
- package/src/maintenance/ontology-maintenance.ts +6 -2
- package/src/maintenance/types.ts +1 -1
- package/src/materialization/errors.ts +2 -2
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +2 -0
- package/src/materialization/vectors.ts +18 -0
- package/src/materializer/README.md +15 -1
- package/src/materializer/context.ts +10 -0
- package/src/materializer/edits/commit.ts +8 -1
- package/src/materializer/edits/vector-authority.ts +108 -0
- package/src/materializer/edits/vectors.ts +100 -0
- package/src/materializer/effective/validate.ts +10 -3
- package/src/materializer/effective/vector-indexing.ts +84 -0
- package/src/materializer/effective/vectors.ts +47 -0
- package/src/materializer/execution/work-executor.ts +11 -3
- package/src/materializer/projections/replace.ts +1 -1
- package/src/materializer/shared/normalize.ts +11 -0
- package/src/materializer/telemetry/append.ts +1 -1
- package/src/models/catalog-index.ts +38 -0
- package/src/models/catalog.ts +66 -38
- package/src/models/decision/catalog.ts +32 -0
- package/src/models/decision/errors.ts +18 -0
- package/src/models/decision/output.ts +101 -0
- package/src/models/decision/questions.ts +29 -0
- package/src/models/decision/runtime.ts +188 -0
- package/src/models/decision/types.ts +109 -0
- package/src/models/decision/validation.ts +335 -0
- package/src/models/definitions.ts +20 -1
- package/src/models/embedding-model.ts +129 -0
- package/src/models/execution/README.md +63 -0
- package/src/models/execution/binding.ts +2 -0
- package/src/models/execution/embedding.ts +133 -0
- package/src/models/execution/model-call-recorder.ts +42 -30
- package/src/models/execution/session.ts +81 -0
- package/src/models/execution.ts +10 -52
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +37 -0
- package/src/models/pricing.ts +7 -4
- package/src/objects/authorized-ontology-view.ts +12 -8
- package/src/objects/execution.ts +2 -0
- package/src/objects/query/executor.ts +13 -4
- package/src/objects/query/explain.ts +7 -2
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +6 -2
- package/src/objects/query/normalize.ts +5 -1
- package/src/objects/query/validate.ts +74 -73
- package/src/objects/sdk/object-handle.ts +3 -0
- package/src/objects/sdk/object-set.ts +1 -0
- package/src/objects/sdk/query-builder.ts +9 -3
- package/src/objects/sdk/query-executor.ts +2 -1
- package/src/objects/sdk/runtime-query-executor.ts +6 -2
- package/src/objects/vectors/README.md +59 -0
- package/src/objects/vectors/handle.ts +91 -0
- package/src/objects/vectors/indexing-batch.ts +163 -0
- package/src/objects/vectors/indexing-generate.ts +184 -0
- package/src/objects/vectors/indexing-runtime.ts +17 -0
- package/src/objects/vectors/indexing-shared.ts +188 -0
- package/src/objects/vectors/indexing-single.ts +51 -0
- package/src/objects/vectors/indexing-store-batch.ts +62 -0
- package/src/objects/vectors/indexing.ts +23 -0
- package/src/objects/vectors/profile.ts +64 -0
- package/src/objects/vectors/query.ts +16 -0
- package/src/objects/vectors/resolve-query.ts +89 -0
- package/src/objects/vectors/types.ts +10 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/registry.ts +8 -0
- package/src/ontology/types.ts +9 -9
- package/src/ontology/validation/definition.ts +104 -0
- package/src/ontology/validation/properties.ts +14 -4
- package/src/ontology/validation/query.ts +34 -51
- package/src/ontology/validation/schema.ts +85 -23
- package/src/ontology/vector-profiles.ts +35 -0
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/types.ts +10 -0
- package/src/runtime/create.ts +7 -6
- package/src/runtime/host.ts +42 -6
- package/src/runtime/internal.ts +3 -0
- package/src/runtime/resolve-definitions.ts +19 -1
- package/src/runtime/sixb.ts +27 -9
- package/src/runtime/types.ts +16 -4
- package/src/sandboxes/README.md +41 -0
- package/src/sandboxes/auth.ts +17 -0
- package/src/sandboxes/config.ts +37 -0
- package/src/sandboxes/configuration.ts +268 -0
- package/src/sandboxes/environment.ts +107 -0
- package/src/sandboxes/errors.ts +1 -1
- package/src/sandboxes/index.ts +15 -0
- package/src/sandboxes/sandbox.ts +38 -3
- package/src/shared/params/builders.ts +50 -0
- package/src/shared/params/types.ts +84 -0
- package/src/shared/params/validation.ts +114 -0
- package/src/storage/agents/in-memory.ts +25 -1
- package/src/storage/agents/index.ts +3 -0
- package/src/storage/agents/provider.ts +105 -0
- package/src/storage/agents/types.ts +54 -0
- package/src/storage/ai-cost/analytics.ts +59 -21
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/types.ts +19 -2
- package/src/storage/connector-connections/in-memory.ts +16 -18
- package/src/storage/connector-connections/provider/connections.ts +1 -15
- package/src/storage/connector-connections/provider/runs.ts +6 -0
- package/src/storage/connector-connections/provider/shared.ts +2 -3
- package/src/storage/connector-connections/provider.ts +6 -0
- package/src/storage/connector-connections/types.ts +5 -1
- package/src/storage/executions/provider.ts +24 -12
- package/src/storage/executions/types.ts +1 -0
- package/src/storage/executions/validation.ts +7 -3
- package/src/storage/index.ts +15 -1
- package/src/storage/objects/in-memory/query.ts +25 -11
- package/src/storage/objects/in-memory/read-scope.ts +9 -2
- package/src/storage/objects/in-memory/read-source.ts +5 -0
- package/src/storage/objects/in-memory/selected-reader.ts +5 -1
- package/src/storage/objects/in-memory/storage.ts +19 -1
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +1 -0
- package/src/storage/ontology/in-memory/index.ts +20 -0
- package/src/storage/ontology/in-memory/materializations.ts +13 -0
- package/src/storage/ontology/in-memory/shared-state.ts +19 -3
- package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
- package/src/storage/ontology/in-memory/vectors.ts +73 -0
- package/src/storage/ontology/index.ts +14 -0
- package/src/storage/ontology/outbox.ts +1 -0
- package/src/storage/ontology/vector-indexing.ts +98 -0
- package/src/storage/ontology/vectors.ts +48 -0
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +3 -0
- package/src/testing/agent-storage-contract.ts +246 -0
- package/src/testing/ai-cost-storage-contract.ts +134 -0
- package/src/testing/connector-connection-storage-contract.ts +11 -11
- package/src/testing/lake-storage-contract.ts +29 -0
- package/src/testing/object-query-contract.ts +41 -25
- package/src/testing/object-read-scope-contract.ts +1 -5
- package/src/testing/ontology-storage-contract.ts +8 -3
- package/src/testing/queues-contract.ts +31 -0
- package/src/workflows/failure.ts +10 -4
- package/src/workflows/validation.ts +2 -2
- package/dist/chunk-5hz0fnca.js.map +0 -12
- package/dist/chunk-5p1v802y.js.map +0 -44
- package/dist/chunk-7apz6hg4.js.map +0 -10
- package/dist/chunk-7bs40fe1.js.map +0 -12
- package/dist/chunk-860dwwy0.js.map +0 -14
- package/dist/chunk-93csa55g.js.map +0 -11
- package/dist/chunk-aa6z4a19.js.map +0 -12
- package/dist/chunk-ap0g1g74.js.map +0 -11
- package/dist/chunk-e0d1rzef.js.map +0 -15
- package/dist/chunk-f0rwz2vh.js.map +0 -11
- package/dist/chunk-f4w3yp4f.js.map +0 -12
- package/dist/chunk-g7knyczr.js.map +0 -14
- package/dist/chunk-mrp7k0pw.js.map +0 -10
- package/dist/chunk-ms2tmn1k.js.map +0 -17
- package/dist/chunk-nmbxcaqx.js.map +0 -19
- package/dist/chunk-nt99sxd6.js.map +0 -14
- package/dist/chunk-p6a4npdx.js.map +0 -58
- package/dist/chunk-qyeptdyv.js.map +0 -15
- package/dist/chunk-r7fj830t.js.map +0 -36
- package/dist/chunk-rb1xx120.js.map +0 -11
- package/dist/chunk-yv79ncbv.js.map +0 -10
- package/dist/chunk-z3y411fq.js +0 -99
- package/dist/chunk-z3y411fq.js.map +0 -11
- /package/dist/{chunk-17kfctj6.js.map → chunk-0mza4xb2.js.map} +0 -0
- /package/dist/{chunk-rtk71jzp.js.map → chunk-3bnt2wna.js.map} +0 -0
- /package/dist/{chunk-awbhdqyc.js.map → chunk-3ghw2t5q.js.map} +0 -0
- /package/dist/{chunk-b19g04jk.js.map → chunk-3h7ctayx.js.map} +0 -0
- /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
- /package/dist/{chunk-0y39rgsb.js.map → chunk-5tetw4hn.js.map} +0 -0
- /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
- /package/dist/{chunk-358caqf5.js.map → chunk-bfjv1adk.js.map} +0 -0
- /package/dist/{chunk-b0ec55a1.js.map → chunk-bg2bs62d.js.map} +0 -0
- /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
- /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
- /package/dist/{chunk-1824gssz.js.map → chunk-gswwr35f.js.map} +0 -0
- /package/dist/{chunk-92vk7gta.js.map → chunk-gzt6v1ja.js.map} +0 -0
- /package/dist/{chunk-gqh45d2n.js.map → chunk-hkw8rykk.js.map} +0 -0
- /package/dist/{chunk-5c7ga8zz.js.map → chunk-jjwhy3rs.js.map} +0 -0
- /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
- /package/dist/{chunk-653vwrzr.js.map → chunk-rdghfsss.js.map} +0 -0
- /package/dist/{chunk-bn138h9w.js.map → chunk-t7dzd1tm.js.map} +0 -0
- /package/dist/{chunk-pr2h4bv4.js.map → chunk-tg4g4zh0.js.map} +0 -0
- /package/dist/{chunk-8vj0rjgs.js.map → chunk-wjffn5m4.js.map} +0 -0
- /package/dist/{chunk-agbbygvh.js.map → chunk-xn686q2e.js.map} +0 -0
- /package/dist/{chunk-v2vcg0w6.js.map → chunk-xtfryrfb.js.map} +0 -0
|
@@ -290,6 +290,252 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
describe(label, () => {
|
|
293
|
+
test("replaces lost state only under its current execution fence", async () => {
|
|
294
|
+
// Regression proof: remove replace's name/owner guards; the stale attempts succeed.
|
|
295
|
+
await withStorage(async (storage, fixture) => {
|
|
296
|
+
await storage.threads.create(threadInput({ sandboxParams: {} }))
|
|
297
|
+
const run = runInput({ execution: execution("first", new Date("2099-01-01")) })
|
|
298
|
+
await createAndStartRun(storage, fixture, run)
|
|
299
|
+
const acquire = {
|
|
300
|
+
projectId,
|
|
301
|
+
id: "thr_1",
|
|
302
|
+
action: "acquire" as const,
|
|
303
|
+
runId: run.id,
|
|
304
|
+
executionToken: "first",
|
|
305
|
+
name: "name-1",
|
|
306
|
+
sourceFingerprint: "a".repeat(64),
|
|
307
|
+
}
|
|
308
|
+
await storage.threads.transitionSandbox(acquire)
|
|
309
|
+
const replace = { ...acquire, action: "replace" as const, nextName: "name-2" }
|
|
310
|
+
await expectAgentError(storage.threads.transitionSandbox(replace), "invalid_state")
|
|
311
|
+
await storage.threads.transitionSandbox({
|
|
312
|
+
...acquire,
|
|
313
|
+
action: "settle",
|
|
314
|
+
status: "ready",
|
|
315
|
+
initialized: true,
|
|
316
|
+
})
|
|
317
|
+
await expectAgentError(storage.threads.transitionSandbox(replace), "invalid_state")
|
|
318
|
+
await storage.threads.transitionSandbox(acquire)
|
|
319
|
+
for (const nextName of ["name-1", "../invalid", ""]) {
|
|
320
|
+
await expectAgentError(
|
|
321
|
+
storage.threads.transitionSandbox({ ...replace, nextName }),
|
|
322
|
+
"invalid_state"
|
|
323
|
+
)
|
|
324
|
+
}
|
|
325
|
+
await expectAgentError(
|
|
326
|
+
storage.threads.transitionSandbox({ ...replace, executionToken: "stale" }),
|
|
327
|
+
"execution_lost"
|
|
328
|
+
)
|
|
329
|
+
const replacement = await storage.threads.transitionSandbox(replace)
|
|
330
|
+
const resetAt = replacement.resetAt
|
|
331
|
+
expect(replacement).toMatchObject({
|
|
332
|
+
name: "name-2",
|
|
333
|
+
status: "busy",
|
|
334
|
+
initialized: false,
|
|
335
|
+
owner: { runId: run.id, executionToken: "first" },
|
|
336
|
+
sourceFingerprint: acquire.sourceFingerprint,
|
|
337
|
+
resetAt: expect.any(String),
|
|
338
|
+
})
|
|
339
|
+
await expectAgentError(storage.threads.transitionSandbox(replace), "invalid_state")
|
|
340
|
+
await expectAgentError(
|
|
341
|
+
storage.threads.transitionSandbox({
|
|
342
|
+
...acquire,
|
|
343
|
+
action: "settle",
|
|
344
|
+
status: "ready",
|
|
345
|
+
initialized: true,
|
|
346
|
+
}),
|
|
347
|
+
"invalid_state"
|
|
348
|
+
)
|
|
349
|
+
await storage.threads.transitionSandbox({
|
|
350
|
+
...acquire,
|
|
351
|
+
name: "name-2",
|
|
352
|
+
action: "settle",
|
|
353
|
+
status: "ready",
|
|
354
|
+
initialized: true,
|
|
355
|
+
})
|
|
356
|
+
const resumed = await storage.threads.transitionSandbox({
|
|
357
|
+
...acquire,
|
|
358
|
+
name: "name-2",
|
|
359
|
+
})
|
|
360
|
+
expect(resumed.resetAt).toBe(resetAt)
|
|
361
|
+
expect((await storage.threads.getById({ projectId, id: "thr_1" }))?.sandboxState).toEqual(
|
|
362
|
+
resumed
|
|
363
|
+
)
|
|
364
|
+
})
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
test("fences workspace ownership across reclamation and explicit recreation", async () => {
|
|
368
|
+
// Regression proof: remove the busy-state or owner-token checks in transitionAgentThreadSandbox.
|
|
369
|
+
await withStorage(async (storage, fixture) => {
|
|
370
|
+
await storage.threads.create(threadInput({ sandboxParams: {} }))
|
|
371
|
+
const input = runInput({ execution: execution("first", new Date("2099-01-01")) })
|
|
372
|
+
await createTestAgentExecution(fixture, {
|
|
373
|
+
projectId,
|
|
374
|
+
runId: input.id,
|
|
375
|
+
executionId: input.executionId,
|
|
376
|
+
authority: "inherited",
|
|
377
|
+
})
|
|
378
|
+
await storage.runs.create(input)
|
|
379
|
+
await storage.runs.start(input)
|
|
380
|
+
const acquire = {
|
|
381
|
+
projectId,
|
|
382
|
+
id: "thr_1",
|
|
383
|
+
action: "acquire" as const,
|
|
384
|
+
runId: input.id,
|
|
385
|
+
executionToken: "first",
|
|
386
|
+
name: "name-1",
|
|
387
|
+
sourceFingerprint: "a".repeat(64),
|
|
388
|
+
}
|
|
389
|
+
const attempts = await Promise.allSettled([
|
|
390
|
+
storage.threads.transitionSandbox(acquire),
|
|
391
|
+
storage.threads.transitionSandbox(acquire),
|
|
392
|
+
])
|
|
393
|
+
expect(attempts.filter((attempt) => attempt.status === "fulfilled")).toHaveLength(1)
|
|
394
|
+
expect(
|
|
395
|
+
(await storage.threads.getById({ projectId, id: "thr_1" }))?.sandboxState
|
|
396
|
+
).toMatchObject({ status: "busy", initialized: false })
|
|
397
|
+
await expectAgentError(storage.threads.transitionSandbox(acquire), "invalid_state")
|
|
398
|
+
await storage.runs.reclaim({
|
|
399
|
+
projectId,
|
|
400
|
+
id: input.id,
|
|
401
|
+
execution: execution("second", new Date("2099-01-01")),
|
|
402
|
+
})
|
|
403
|
+
await expectAgentError(
|
|
404
|
+
storage.threads.transitionSandbox({
|
|
405
|
+
...acquire,
|
|
406
|
+
executionToken: "second",
|
|
407
|
+
}),
|
|
408
|
+
"invalid_state"
|
|
409
|
+
)
|
|
410
|
+
await expectAgentError(
|
|
411
|
+
storage.threads.transitionSandbox({
|
|
412
|
+
...acquire,
|
|
413
|
+
action: "settle",
|
|
414
|
+
status: "ready",
|
|
415
|
+
initialized: true,
|
|
416
|
+
}),
|
|
417
|
+
"execution_lost"
|
|
418
|
+
)
|
|
419
|
+
const recreate = {
|
|
420
|
+
projectId,
|
|
421
|
+
id: "thr_1",
|
|
422
|
+
action: "recreate" as const,
|
|
423
|
+
expectedSandboxName: "name-1",
|
|
424
|
+
name: "name-2",
|
|
425
|
+
}
|
|
426
|
+
await expectAgentError(storage.threads.transitionSandbox(recreate), "invalid_state")
|
|
427
|
+
await storage.runs.finish({
|
|
428
|
+
projectId,
|
|
429
|
+
id: input.id,
|
|
430
|
+
executionToken: "second",
|
|
431
|
+
status: "failed",
|
|
432
|
+
})
|
|
433
|
+
expect(await storage.threads.transitionSandbox(recreate)).toEqual({
|
|
434
|
+
name: "name-2",
|
|
435
|
+
status: "new",
|
|
436
|
+
initialized: false,
|
|
437
|
+
resetAt: expect.any(String),
|
|
438
|
+
})
|
|
439
|
+
await expectAgentError(storage.threads.transitionSandbox(recreate), "invalid_state")
|
|
440
|
+
})
|
|
441
|
+
})
|
|
442
|
+
|
|
443
|
+
test("resumes only confirmed workspace state with the pinned source", async () => {
|
|
444
|
+
await withStorage(async (storage, fixture) => {
|
|
445
|
+
await storage.threads.create(threadInput({ sandboxParams: {} }))
|
|
446
|
+
const input = runInput({ execution: execution("owner", new Date("2099-01-01")) })
|
|
447
|
+
await createTestAgentExecution(fixture, {
|
|
448
|
+
projectId,
|
|
449
|
+
runId: input.id,
|
|
450
|
+
executionId: input.executionId,
|
|
451
|
+
authority: "inherited",
|
|
452
|
+
})
|
|
453
|
+
await storage.runs.create(input)
|
|
454
|
+
await storage.runs.start(input)
|
|
455
|
+
const acquire = {
|
|
456
|
+
projectId,
|
|
457
|
+
id: "thr_1",
|
|
458
|
+
action: "acquire" as const,
|
|
459
|
+
runId: input.id,
|
|
460
|
+
executionToken: "owner",
|
|
461
|
+
name: "name",
|
|
462
|
+
sourceFingerprint: "b".repeat(64),
|
|
463
|
+
}
|
|
464
|
+
await storage.threads.transitionSandbox(acquire)
|
|
465
|
+
await storage.threads.transitionSandbox({
|
|
466
|
+
...acquire,
|
|
467
|
+
action: "settle",
|
|
468
|
+
status: "ready",
|
|
469
|
+
initialized: true,
|
|
470
|
+
})
|
|
471
|
+
await expectAgentError(
|
|
472
|
+
storage.threads.transitionSandbox({
|
|
473
|
+
...acquire,
|
|
474
|
+
sourceFingerprint: "c".repeat(64),
|
|
475
|
+
}),
|
|
476
|
+
"invalid_state"
|
|
477
|
+
)
|
|
478
|
+
expect(await storage.threads.transitionSandbox(acquire)).toMatchObject({
|
|
479
|
+
status: "busy",
|
|
480
|
+
initialized: true,
|
|
481
|
+
})
|
|
482
|
+
})
|
|
483
|
+
})
|
|
484
|
+
|
|
485
|
+
test("snapshots workspace bindings without accepting runtime state or credentials", async () => {
|
|
486
|
+
// Regression proof: remove snapshotAgentThreadSandboxParams from a provider's thread create.
|
|
487
|
+
await withStorage(async (storage) => {
|
|
488
|
+
const sandboxParams = { clientId: "acme", nested: { branch: "main" } }
|
|
489
|
+
const record = await storage.threads.create(threadInput({ sandboxParams }))
|
|
490
|
+
sandboxParams.nested.branch = "changed"
|
|
491
|
+
const read = await storage.threads.getById({ projectId, id: record.id })
|
|
492
|
+
expect(read?.sandboxParams).toEqual({ clientId: "acme", nested: { branch: "main" } })
|
|
493
|
+
const mutable = record.sandboxParams?.nested
|
|
494
|
+
if (mutable && typeof mutable === "object" && !Array.isArray(mutable))
|
|
495
|
+
mutable.branch = "tampered"
|
|
496
|
+
expect((await storage.threads.list({ projectId })).threads[0]?.sandboxParams).toEqual(
|
|
497
|
+
read?.sandboxParams
|
|
498
|
+
)
|
|
499
|
+
await expectAgentError(
|
|
500
|
+
storage.threads.create(
|
|
501
|
+
threadInput({
|
|
502
|
+
id: "unsafe",
|
|
503
|
+
// @ts-expect-error storage requires a JSON object
|
|
504
|
+
sandboxParams: [],
|
|
505
|
+
})
|
|
506
|
+
),
|
|
507
|
+
"invalid_input"
|
|
508
|
+
)
|
|
509
|
+
await expectAgentError(
|
|
510
|
+
storage.threads.create(
|
|
511
|
+
threadInput({
|
|
512
|
+
id: "non-json",
|
|
513
|
+
// @ts-expect-error storage accepts normalized JSON, not typed Dates
|
|
514
|
+
sandboxParams: { at: new Date() },
|
|
515
|
+
})
|
|
516
|
+
),
|
|
517
|
+
"invalid_input"
|
|
518
|
+
)
|
|
519
|
+
})
|
|
520
|
+
})
|
|
521
|
+
|
|
522
|
+
test("keeps delimiter-containing project and sandbox thread ids distinct", async () => {
|
|
523
|
+
// Regression proof: change the memory store key back to projectId + ":" + id.
|
|
524
|
+
await withStorage(async (storage) => {
|
|
525
|
+
await storage.threads.create(
|
|
526
|
+
threadInput({ projectId: "a:b", id: "c", sandboxParams: { repo: "one" } })
|
|
527
|
+
)
|
|
528
|
+
await storage.threads.create(
|
|
529
|
+
threadInput({ projectId: "a", id: "b:c", sandboxParams: { repo: "two" } })
|
|
530
|
+
)
|
|
531
|
+
expect(
|
|
532
|
+
(await storage.threads.getById({ projectId: "a:b", id: "c" }))?.sandboxParams?.repo
|
|
533
|
+
).toBe("one")
|
|
534
|
+
expect(
|
|
535
|
+
(await storage.threads.getById({ projectId: "a", id: "b:c" }))?.sandboxParams?.repo
|
|
536
|
+
).toBe("two")
|
|
537
|
+
})
|
|
538
|
+
})
|
|
293
539
|
// ── threads ───────────────────────────────────────────────────────────────────────────────
|
|
294
540
|
|
|
295
541
|
test("creates threads, isolates projects, and rejects duplicate ids", async () => {
|
|
@@ -236,8 +236,22 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
|
|
|
236
236
|
inputTokens: 15,
|
|
237
237
|
outputTokens: 12,
|
|
238
238
|
totalTokens: 27,
|
|
239
|
+
uncachedInputTokens: 12,
|
|
240
|
+
cacheReadInputTokens: 0,
|
|
239
241
|
reportingStatus: "complete",
|
|
240
242
|
},
|
|
243
|
+
usageCoverage: {
|
|
244
|
+
completeCallCount: 3,
|
|
245
|
+
fieldCallCounts: {
|
|
246
|
+
inputTokens: 3,
|
|
247
|
+
outputTokens: 3,
|
|
248
|
+
uncachedInputTokens: 1,
|
|
249
|
+
cacheReadInputTokens: 1,
|
|
250
|
+
cacheWriteInputTokens: 0,
|
|
251
|
+
textOutputTokens: 0,
|
|
252
|
+
reasoningOutputTokens: 0,
|
|
253
|
+
},
|
|
254
|
+
},
|
|
241
255
|
costs: {
|
|
242
256
|
amounts: [{ currency: "USD", amountNanos: "95000" }],
|
|
243
257
|
ratedCallCount: 1,
|
|
@@ -290,6 +304,85 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
|
|
|
290
304
|
}
|
|
291
305
|
})
|
|
292
306
|
|
|
307
|
+
test("retains known tokens and coverage across incomplete periods", async () => {
|
|
308
|
+
// Removal proof: require presentCallCount === modelCallCount in finishAggregateUsage.
|
|
309
|
+
// Both the in-memory and SQL-backed contract runs then lose the Sep 16/18 totals.
|
|
310
|
+
const storage = await fixture()
|
|
311
|
+
try {
|
|
312
|
+
// Currency fragments must merge coverage and usage exactly once per call.
|
|
313
|
+
for (const [index, currency] of ["USD", "EUR"].entries()) {
|
|
314
|
+
await storage.recordModelCallCost(
|
|
315
|
+
ratedCost(`partial_16_${index}`, {
|
|
316
|
+
components: [],
|
|
317
|
+
money: { currency, amountNanos: "1" },
|
|
318
|
+
priceSource: { ...priceSource(`partial_${index}`), sourceId: "provider-reported" },
|
|
319
|
+
})
|
|
320
|
+
)
|
|
321
|
+
}
|
|
322
|
+
const overview = await storage.queryProjectOverview({
|
|
323
|
+
projectId,
|
|
324
|
+
from: new Date("2026-09-16"),
|
|
325
|
+
to: new Date("2026-09-19"),
|
|
326
|
+
bucket: "day",
|
|
327
|
+
})
|
|
328
|
+
expect(
|
|
329
|
+
overview.series.map((period) => ({
|
|
330
|
+
calls: period.modelCallCount,
|
|
331
|
+
total: period.usage.totalTokens,
|
|
332
|
+
complete: period.usageCoverage.completeCallCount,
|
|
333
|
+
}))
|
|
334
|
+
).toEqual([
|
|
335
|
+
{ calls: 87, total: 4_013_782, complete: 84 },
|
|
336
|
+
{ calls: 0, total: undefined, complete: 0 },
|
|
337
|
+
{ calls: 29, total: 334_815, complete: 28 },
|
|
338
|
+
])
|
|
339
|
+
for (const aggregate of [overview.totals, ...overview.models, ...overview.workflows]) {
|
|
340
|
+
expect(aggregate.usage).toEqual({
|
|
341
|
+
inputTokens: 4_348_597,
|
|
342
|
+
outputTokens: 0,
|
|
343
|
+
totalTokens: 4_348_597,
|
|
344
|
+
reportingStatus: "partial",
|
|
345
|
+
})
|
|
346
|
+
expect(aggregate.usageCoverage).toMatchObject({
|
|
347
|
+
completeCallCount: 112,
|
|
348
|
+
fieldCallCounts: { inputTokens: 112, outputTokens: 112, cacheReadInputTokens: 0 },
|
|
349
|
+
})
|
|
350
|
+
}
|
|
351
|
+
expect(overview.totals.costs.amounts).toEqual([
|
|
352
|
+
{ currency: "EUR", amountNanos: "1" },
|
|
353
|
+
{ currency: "USD", amountNanos: "1" },
|
|
354
|
+
])
|
|
355
|
+
const edges = await storage.queryProjectOverview({
|
|
356
|
+
projectId,
|
|
357
|
+
from: new Date("2026-09-19"),
|
|
358
|
+
to: new Date("2026-09-22"),
|
|
359
|
+
bucket: "day",
|
|
360
|
+
providerId: "gateway",
|
|
361
|
+
modelId: "partial/model",
|
|
362
|
+
})
|
|
363
|
+
expect(edges.series[0]).toMatchObject({
|
|
364
|
+
usage: { inputTokens: 3, outputTokens: 4, totalTokens: 7, reportingStatus: "partial" },
|
|
365
|
+
usageCoverage: {
|
|
366
|
+
completeCallCount: 0,
|
|
367
|
+
fieldCallCounts: { inputTokens: 1, outputTokens: 1 },
|
|
368
|
+
},
|
|
369
|
+
})
|
|
370
|
+
expect(edges.series[1]).toMatchObject({
|
|
371
|
+
modelCallCount: 1,
|
|
372
|
+
usage: { reportingStatus: "unavailable" },
|
|
373
|
+
usageCoverage: { completeCallCount: 0 },
|
|
374
|
+
})
|
|
375
|
+
expect(edges.series[1]?.usage.totalTokens).toBeUndefined()
|
|
376
|
+
expect(edges.series[2]).toMatchObject({
|
|
377
|
+
usage: { inputTokens: 0, totalTokens: 0, reportingStatus: "partial" },
|
|
378
|
+
usageCoverage: { completeCallCount: 0 },
|
|
379
|
+
})
|
|
380
|
+
expect(edges.series[2]?.usage.outputTokens).toBeUndefined()
|
|
381
|
+
} finally {
|
|
382
|
+
await options.cleanup?.(storage)
|
|
383
|
+
}
|
|
384
|
+
})
|
|
385
|
+
|
|
293
386
|
test("rejects missing usage and mismatched billed quantities", async () => {
|
|
294
387
|
const storage = await fixture()
|
|
295
388
|
try {
|
|
@@ -405,4 +498,45 @@ export async function seedAiCostStorageContractUsage(
|
|
|
405
498
|
occurredAt: new Date("2026-08-03T12:00:00.000Z"),
|
|
406
499
|
recordedAt: new Date("2026-08-03T12:00:00.100Z"),
|
|
407
500
|
})
|
|
501
|
+
|
|
502
|
+
for (const [day, calls, complete, tokens] of [
|
|
503
|
+
[16, 87, 84, 4_013_782],
|
|
504
|
+
[18, 29, 28, 334_815],
|
|
505
|
+
] as const) {
|
|
506
|
+
for (let index = 0; index < calls; index++) {
|
|
507
|
+
await usage.recordModelCall({
|
|
508
|
+
id: `partial_${day}_${index}`,
|
|
509
|
+
projectId,
|
|
510
|
+
executionId: otherExecutionId,
|
|
511
|
+
attempt: 1,
|
|
512
|
+
callId: `partial_${day}_${index}`,
|
|
513
|
+
responseId: `response_partial_${day}_${index}`,
|
|
514
|
+
requesterGroupIds: [],
|
|
515
|
+
providerId: "gateway",
|
|
516
|
+
requestedModelId: "partial/model",
|
|
517
|
+
usage: index < complete ? { inputTokens: index === 0 ? tokens : 0, outputTokens: 0 } : {},
|
|
518
|
+
occurredAt: new Date(`2026-09-${day}T12:00:00Z`),
|
|
519
|
+
})
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
for (const [index, day, counts] of [
|
|
523
|
+
[0, 19, { inputTokens: 3 }],
|
|
524
|
+
[1, 19, { outputTokens: 4 }],
|
|
525
|
+
[2, 20, {}],
|
|
526
|
+
[3, 21, { inputTokens: 0 }],
|
|
527
|
+
] as const) {
|
|
528
|
+
await usage.recordModelCall({
|
|
529
|
+
id: `edge_${index}`,
|
|
530
|
+
projectId,
|
|
531
|
+
executionId: otherExecutionId,
|
|
532
|
+
attempt: 1,
|
|
533
|
+
callId: `edge_${index}`,
|
|
534
|
+
responseId: `response_edge_${index}`,
|
|
535
|
+
requesterGroupIds: [],
|
|
536
|
+
providerId: "gateway",
|
|
537
|
+
requestedModelId: "partial/model",
|
|
538
|
+
usage: counts,
|
|
539
|
+
occurredAt: new Date(`2026-09-${day}T12:00:00Z`),
|
|
540
|
+
})
|
|
541
|
+
}
|
|
408
542
|
}
|
|
@@ -486,25 +486,25 @@ export function runConnectorConnectionStorageContractSuite<
|
|
|
486
486
|
})
|
|
487
487
|
})
|
|
488
488
|
|
|
489
|
-
test("
|
|
489
|
+
test("allows account selection after its legacy deadline", async () => {
|
|
490
490
|
await withStorage(async (storage, root) => {
|
|
491
491
|
const authorization = await createAuthorization(storage, "authorization-a", "account-a")
|
|
492
|
-
await options.advanceTime(root, 60_000)
|
|
492
|
+
await options.advanceTime(root, 365 * 24 * 60 * 60_000)
|
|
493
493
|
|
|
494
|
-
await expect(
|
|
495
|
-
|
|
496
|
-
)
|
|
494
|
+
await expect(
|
|
495
|
+
connect(storage, authorization, "connection-a", "account-a")
|
|
496
|
+
).resolves.toMatchObject({ connection: { status: "connected" } })
|
|
497
497
|
await expect(
|
|
498
498
|
storage.getAuthorization(authorizationKey(authorization.id))
|
|
499
|
-
).resolves.toMatchObject({ status: "
|
|
499
|
+
).resolves.toMatchObject({ status: "active" })
|
|
500
500
|
})
|
|
501
501
|
})
|
|
502
502
|
|
|
503
|
-
test("
|
|
503
|
+
test("keeps account-selection runs selectable after their legacy deadline", async () => {
|
|
504
504
|
await withStorage(async (storage, root) => {
|
|
505
505
|
const authorization = await createAuthorization(storage, "authorization-a", "account-a")
|
|
506
506
|
await createSelectionRun(storage, authorization)
|
|
507
|
-
await options.advanceTime(root, 60_000)
|
|
507
|
+
await options.advanceTime(root, 365 * 24 * 60 * 60_000)
|
|
508
508
|
|
|
509
509
|
await expect(
|
|
510
510
|
storage.putConnectionFromRun({
|
|
@@ -515,13 +515,13 @@ export function runConnectorConnectionStorageContractSuite<
|
|
|
515
515
|
account: { id: "account-a", label: "Account A" },
|
|
516
516
|
replace: false,
|
|
517
517
|
})
|
|
518
|
-
).
|
|
518
|
+
).resolves.toMatchObject({ run: { status: "succeeded" } })
|
|
519
519
|
await expect(
|
|
520
520
|
storage.getConnectionRun({ projectId, connectorId, runId: "run-a" })
|
|
521
|
-
).resolves.toMatchObject({ status: "
|
|
521
|
+
).resolves.toMatchObject({ status: "succeeded" })
|
|
522
522
|
await expect(
|
|
523
523
|
storage.getAuthorization(authorizationKey(authorization.id))
|
|
524
|
-
).resolves.toMatchObject({ status: "
|
|
524
|
+
).resolves.toMatchObject({ status: "active" })
|
|
525
525
|
})
|
|
526
526
|
})
|
|
527
527
|
|
|
@@ -285,6 +285,35 @@ export function runLakeStorageContractSuite<TStorage extends LakeStorage>(
|
|
|
285
285
|
})
|
|
286
286
|
|
|
287
287
|
describe("writes and reads", () => {
|
|
288
|
+
test("cancels reads before starting and between rows", async () => {
|
|
289
|
+
// Red check: remove readRows' signal checks in the provider under test.
|
|
290
|
+
await withStorage(async (storage) => {
|
|
291
|
+
await storage.createDataset(writeDataset)
|
|
292
|
+
const write = await storage.beginWrite({ dataset: writeDataset, mode: "snapshot" })
|
|
293
|
+
await write.writeRows([
|
|
294
|
+
{ orderId: "1", customerName: "first" },
|
|
295
|
+
{ orderId: "2", customerName: "second" },
|
|
296
|
+
])
|
|
297
|
+
await write.commit()
|
|
298
|
+
const controller = new AbortController()
|
|
299
|
+
const rows = storage
|
|
300
|
+
.readRows({ datasetId: writeDataset.id, signal: controller.signal })
|
|
301
|
+
[Symbol.asyncIterator]()
|
|
302
|
+
try {
|
|
303
|
+
expect((await rows.next()).done).toBe(false)
|
|
304
|
+
controller.abort(new Error("cancel dataset read"))
|
|
305
|
+
await expect(rows.next()).rejects.toThrow("cancel dataset read")
|
|
306
|
+
await expect(
|
|
307
|
+
collectRows(
|
|
308
|
+
storage.readRows({ datasetId: writeDataset.id, signal: controller.signal })
|
|
309
|
+
)
|
|
310
|
+
).rejects.toThrow("cancel dataset read")
|
|
311
|
+
} finally {
|
|
312
|
+
await rows.return?.()
|
|
313
|
+
}
|
|
314
|
+
})
|
|
315
|
+
})
|
|
316
|
+
|
|
288
317
|
test("keeps immutable-version row order and offsets stable", async () => {
|
|
289
318
|
await withStorage(async (storage) => {
|
|
290
319
|
await storage.createDataset(writeDataset)
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
normalizeObjectQuery,
|
|
11
11
|
type ObjectQuery,
|
|
12
12
|
ObjectQueryPlanningError,
|
|
13
|
+
planObjectQuery,
|
|
13
14
|
validateObjectQuery,
|
|
14
15
|
} from "../objects/query"
|
|
15
16
|
import { defineObjectType, link, OntologyRegistry, prop, stringEnum } from "../ontology"
|
|
@@ -85,16 +86,11 @@ const Room = defineObjectType({
|
|
|
85
86
|
{ type: "map", keySchema: "string", valueSchema: "string" },
|
|
86
87
|
{ query: { searchable: true, filterable: true } }
|
|
87
88
|
),
|
|
88
|
-
prop(
|
|
89
|
-
"embedding",
|
|
90
|
-
{ type: "array", items: "double" },
|
|
91
|
-
{ query: { searchable: true, vector: true } }
|
|
92
|
-
),
|
|
89
|
+
prop("embedding", { type: "array", items: "double" }, { query: { searchable: true } }),
|
|
93
90
|
],
|
|
94
91
|
links: [link("hasDevice", Device)],
|
|
95
92
|
search: {
|
|
96
93
|
defaultText: ["name", "description"],
|
|
97
|
-
vector: { property: "embedding", source: ["name", "description"] },
|
|
98
94
|
},
|
|
99
95
|
})
|
|
100
96
|
|
|
@@ -1174,34 +1170,54 @@ export function runObjectQueryProviderContractSuite<TStorage extends Storage>(
|
|
|
1174
1170
|
})
|
|
1175
1171
|
})
|
|
1176
1172
|
|
|
1177
|
-
test("
|
|
1178
|
-
await withStorage(async ({ objects: storage
|
|
1179
|
-
|
|
1173
|
+
test("plans or rejects vector search according to provider capabilities", async () => {
|
|
1174
|
+
await withStorage(async ({ objects: storage }) => {
|
|
1175
|
+
// Keep generic fixture writes usable by providers without vector persistence.
|
|
1176
|
+
const ontology = new OntologyRegistry({
|
|
1177
|
+
sources: [
|
|
1178
|
+
Device,
|
|
1179
|
+
defineObjectType({
|
|
1180
|
+
...Room,
|
|
1181
|
+
search: {
|
|
1182
|
+
vectors: {
|
|
1183
|
+
content: {
|
|
1184
|
+
source: ["name", "description"],
|
|
1185
|
+
model: {
|
|
1186
|
+
providerId: "test",
|
|
1187
|
+
modelId: "embedding",
|
|
1188
|
+
definition: {
|
|
1189
|
+
kind: "embedding",
|
|
1190
|
+
providerId: "test",
|
|
1191
|
+
modelId: "embedding",
|
|
1192
|
+
dimensions: 2,
|
|
1193
|
+
},
|
|
1194
|
+
},
|
|
1195
|
+
},
|
|
1196
|
+
},
|
|
1197
|
+
},
|
|
1198
|
+
}),
|
|
1199
|
+
],
|
|
1200
|
+
})
|
|
1180
1201
|
const query: ObjectQuery = {
|
|
1181
1202
|
kind: "vector",
|
|
1182
|
-
|
|
1203
|
+
profile: "content",
|
|
1183
1204
|
vector: [1, 0],
|
|
1184
1205
|
k: 2,
|
|
1185
1206
|
input: { kind: "start", objectTypeId: Room.id },
|
|
1186
1207
|
}
|
|
1187
1208
|
|
|
1209
|
+
// Native vector execution is covered by the dedicated vector-search suite.
|
|
1210
|
+
const validated = validateObjectQuery(query, { ontology })
|
|
1211
|
+
const plan = planObjectQuery(validated.query, {
|
|
1212
|
+
capabilities: storage.queryCapabilities(),
|
|
1213
|
+
hasQueryObjects: typeof storage.queryObjects === "function",
|
|
1214
|
+
})
|
|
1188
1215
|
if (storage.queryCapabilities().nodes?.vector === true) {
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
)
|
|
1193
|
-
expect(result.plan.mode).toBe("pushdown")
|
|
1194
|
-
expect(ids(result)).toEqual(["room-alpha", "room-beta"])
|
|
1195
|
-
return
|
|
1216
|
+
expect(plan.mode).toBe("pushdown")
|
|
1217
|
+
} else {
|
|
1218
|
+
expect(plan.mode).toBe("rejected")
|
|
1219
|
+
expect(plan.issues.map((issue) => issue.code)).toContain("query_node_not_supported")
|
|
1196
1220
|
}
|
|
1197
|
-
|
|
1198
|
-
await expectPlanningIssue(
|
|
1199
|
-
executeObjectQuery(
|
|
1200
|
-
{ projectId, query },
|
|
1201
|
-
{ ontology: objectQueryContractOntology, storage }
|
|
1202
|
-
),
|
|
1203
|
-
"query_node_not_supported"
|
|
1204
|
-
)
|
|
1205
1221
|
})
|
|
1206
1222
|
})
|
|
1207
1223
|
|
|
@@ -70,11 +70,7 @@ const Proposal = defineObjectType({
|
|
|
70
70
|
}),
|
|
71
71
|
prop("rank", "double", { query: { searchable: true, filterable: true, sortable: true } }),
|
|
72
72
|
prop("category", "string", { query: { searchable: true, filterable: true, facet: true } }),
|
|
73
|
-
prop(
|
|
74
|
-
"embedding",
|
|
75
|
-
{ type: "array", items: "double" },
|
|
76
|
-
{ query: { searchable: true, vector: true } }
|
|
77
|
-
),
|
|
73
|
+
prop("embedding", { type: "array", items: "double" }, { query: { searchable: true } }),
|
|
78
74
|
prop("secret", "string", { query: { searchable: true, filterable: true, facet: true } }),
|
|
79
75
|
],
|
|
80
76
|
links: [
|
|
@@ -677,7 +677,10 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
|
|
|
677
677
|
})
|
|
678
678
|
})
|
|
679
679
|
|
|
680
|
-
test(
|
|
680
|
+
test.each([
|
|
681
|
+
"root",
|
|
682
|
+
"transaction",
|
|
683
|
+
] as const)("keeps %s batch outbox settlement atomic when callers catch a stale lease", async (boundary) => {
|
|
681
684
|
await withStorage(async (storage) => {
|
|
682
685
|
await commitExactObject(storage, "lease-atomic-a")
|
|
683
686
|
await commitExactObject(storage, "lease-atomic-b")
|
|
@@ -699,7 +702,7 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
|
|
|
699
702
|
const untouched = claimed.find((row) => row.envelope.id !== reclaimed!.envelope.id)!
|
|
700
703
|
|
|
701
704
|
let conflict: unknown
|
|
702
|
-
|
|
705
|
+
const settle = async (tx: OntologyContractStorage) => {
|
|
703
706
|
try {
|
|
704
707
|
await tx.ontology.outbox.markPublished({
|
|
705
708
|
projectId: "contract-project",
|
|
@@ -710,7 +713,9 @@ export function runOntologyStorageContractSuite<TStorage extends OntologyStorage
|
|
|
710
713
|
} catch (error) {
|
|
711
714
|
conflict = error
|
|
712
715
|
}
|
|
713
|
-
}
|
|
716
|
+
}
|
|
717
|
+
if (boundary === "transaction") await storage.transaction(settle)
|
|
718
|
+
else await settle(storage)
|
|
714
719
|
expect(conflict).toMatchObject({ kind: "outbox-lease" })
|
|
715
720
|
|
|
716
721
|
await storage.ontology.outbox.markPublished({
|
|
@@ -54,6 +54,37 @@ export function runQueueContractSuite(label: string, options: QueueContractSuite
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
describe(label, () => {
|
|
57
|
+
test("vector indexing has independent delivery capacity and idempotent generation ids", async () => {
|
|
58
|
+
await withQueues(async (queues) => {
|
|
59
|
+
const jobs = [
|
|
60
|
+
{
|
|
61
|
+
id: "generation-1",
|
|
62
|
+
type: "vector.index.requested" as const,
|
|
63
|
+
payload: { indexingId: "generation-1" },
|
|
64
|
+
},
|
|
65
|
+
]
|
|
66
|
+
await queues.vectorIndexing.enqueue({ projectId: "project-a", jobs })
|
|
67
|
+
await queues.vectorIndexing.enqueue({ projectId: "project-a", jobs })
|
|
68
|
+
expect(
|
|
69
|
+
await queues.projections.claim({ projectId: "project-a", workerId: "projection" })
|
|
70
|
+
).toHaveLength(0)
|
|
71
|
+
const claimed = await queues.vectorIndexing.claim({
|
|
72
|
+
projectId: "project-a",
|
|
73
|
+
workerId: "indexing",
|
|
74
|
+
limit: 2,
|
|
75
|
+
})
|
|
76
|
+
expect(claimed).toHaveLength(1)
|
|
77
|
+
expect(claimed[0]!.job.payload).toEqual({ indexingId: "generation-1" })
|
|
78
|
+
await queues.vectorIndexing.complete({
|
|
79
|
+
projectId: "project-a",
|
|
80
|
+
jobId: claimed[0]!.job.id,
|
|
81
|
+
leaseId: claimed[0]!.leaseId,
|
|
82
|
+
})
|
|
83
|
+
expect(
|
|
84
|
+
await queues.vectorIndexing.claim({ projectId: "project-a", workerId: "indexing" })
|
|
85
|
+
).toHaveLength(0)
|
|
86
|
+
})
|
|
87
|
+
})
|
|
57
88
|
describe("enqueue", () => {
|
|
58
89
|
test("returns envelopes with generated id, createdAt, availableAt, attempt=0", async () => {
|
|
59
90
|
await withQueues(async (queues) => {
|