@sixb/core 0.1.2 → 0.1.4
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 +19 -17
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/worker.js +4 -4
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +11 -1
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/context-compaction.d.ts +40 -0
- package/dist/agents/context-compaction.d.ts.map +1 -0
- package/dist/agents/context.js +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +3 -0
- 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 +10 -6
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +51 -35
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/streams.d.ts +17 -1
- package/dist/agents/streams.d.ts.map +1 -1
- package/dist/agents/streams.js +5 -3
- package/dist/agents/streams.js.map +1 -1
- package/dist/agents/thread-context-projection.d.ts +19 -0
- package/dist/agents/thread-context-projection.d.ts.map +1 -0
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/tool-result.d.ts +6 -0
- package/dist/agents/tool-result.d.ts.map +1 -0
- package/dist/agents/types.d.ts +46 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +2 -2
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.js +11 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/index.js +6 -2
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/index.js +33 -31
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-ys1nse2v.js → chunk-1wk20wn3.js} +438 -246
- package/dist/{chunk-ys1nse2v.js.map → chunk-1wk20wn3.js.map} +11 -11
- package/dist/{chunk-sa4340y1.js → chunk-1yz3x65y.js} +7 -7
- package/dist/{chunk-gqdd7508.js → chunk-4rh2m6zg.js} +1 -1
- package/dist/{chunk-fmx1sz2h.js → chunk-72q2y8hn.js} +3 -3
- package/dist/{chunk-fmx1sz2h.js.map → chunk-72q2y8hn.js.map} +4 -4
- package/dist/{chunk-nnyp53zt.js → chunk-7gw7mepb.js} +259 -9
- package/dist/chunk-7gw7mepb.js.map +14 -0
- package/dist/{chunk-nten49ta.js → chunk-819wnjz8.js} +11 -5
- package/dist/chunk-819wnjz8.js.map +12 -0
- package/dist/chunk-96swp2wd.js +47 -0
- package/dist/chunk-96swp2wd.js.map +10 -0
- package/dist/{chunk-4x43bkbp.js → chunk-a09jx26t.js} +1 -1
- package/dist/{chunk-st4xgxey.js → chunk-afjpa2hs.js} +205 -48
- package/dist/chunk-afjpa2hs.js.map +45 -0
- package/dist/{chunk-0mbx247x.js → chunk-c43qr6s0.js} +427 -99
- package/dist/chunk-c43qr6s0.js.map +46 -0
- package/dist/{chunk-zg9yryhz.js → chunk-cbkm2vam.js} +3 -3
- package/dist/{chunk-57zpb99z.js → chunk-dm72y8wt.js} +26 -3
- package/dist/chunk-dm72y8wt.js.map +10 -0
- package/dist/chunk-drjqm1aa.js +913 -0
- package/dist/chunk-drjqm1aa.js.map +15 -0
- package/dist/chunk-dysw7nsm.js.map +1 -1
- package/dist/{chunk-8ryen3p3.js → chunk-f6erf2vv.js} +1 -1
- package/dist/{chunk-34bqh420.js → chunk-f83ka50g.js} +188 -44
- package/dist/chunk-f83ka50g.js.map +23 -0
- package/dist/{chunk-bct7hmfc.js → chunk-g13869yf.js} +3 -3
- package/dist/{chunk-0k4avqr2.js → chunk-hbeh8j9w.js} +2 -2
- package/dist/{chunk-qvybnnpe.js → chunk-nzw7sm3b.js} +2 -2
- package/dist/{chunk-k9pts48t.js → chunk-pn8n8sba.js} +16 -15
- package/dist/{chunk-k9pts48t.js.map → chunk-pn8n8sba.js.map} +3 -3
- package/dist/{chunk-63te770v.js → chunk-qewtks41.js} +8 -8
- package/dist/{chunk-63te770v.js.map → chunk-qewtks41.js.map} +2 -2
- package/dist/{chunk-85j5ybfj.js → chunk-rdeagz6b.js} +2 -2
- package/dist/{chunk-85j5ybfj.js.map → chunk-rdeagz6b.js.map} +3 -3
- package/dist/chunk-rhrbz7d4.js +36 -0
- package/dist/chunk-rhrbz7d4.js.map +10 -0
- package/dist/{chunk-bh6k3nc6.js → chunk-rs1wbvy6.js} +1 -1
- package/dist/{chunk-88ppkr54.js → chunk-rte5sm3z.js} +26 -2
- package/dist/chunk-rte5sm3z.js.map +12 -0
- package/dist/{chunk-n8herkry.js → chunk-s31d0qmq.js} +57 -20
- package/dist/{chunk-n8herkry.js.map → chunk-s31d0qmq.js.map} +8 -7
- package/dist/{chunk-7pc8b818.js → chunk-sxwk41qa.js} +1 -1
- package/dist/{chunk-663csy96.js → chunk-t0jjkep3.js} +2 -1
- package/dist/chunk-t0jjkep3.js.map +10 -0
- package/dist/{chunk-c6qd89g5.js → chunk-tek1qwgm.js} +6 -6
- package/dist/{chunk-c6qd89g5.js.map → chunk-tek1qwgm.js.map} +1 -1
- package/dist/{chunk-jaj13078.js → chunk-tkdscva6.js} +3 -33
- package/dist/{chunk-jaj13078.js.map → chunk-tkdscva6.js.map} +3 -4
- package/dist/{chunk-5egfka8j.js → chunk-tycbzedm.js} +2 -2
- package/dist/{chunk-g9t3kdtx.js → chunk-x2yw73hy.js} +1 -1
- package/dist/{chunk-57r1cpxx.js → chunk-xc7hq65b.js} +3 -2
- package/dist/{chunk-57r1cpxx.js.map → chunk-xc7hq65b.js.map} +3 -3
- package/dist/chunk-xdf9yswn.js +133 -0
- package/dist/chunk-xdf9yswn.js.map +11 -0
- package/dist/execution/agent.js +29 -27
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/primitive.js +29 -27
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +30 -28
- package/dist/execution/request.js.map +2 -2
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -58
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/types.d.ts +2 -1
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/materialization/model.d.ts +4 -0
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/edits/apply.d.ts +6 -1
- package/dist/materializer/edits/apply.d.ts.map +1 -1
- package/dist/materializer/edits/working-state.d.ts +2 -0
- package/dist/materializer/edits/working-state.d.ts.map +1 -1
- package/dist/materializer/effective/resolve.d.ts +3 -1
- package/dist/materializer/effective/resolve.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +19 -17
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/index.d.ts +40 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +6 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +21 -19
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/endpoints.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +1 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/explain.d.ts +1 -0
- package/dist/objects/query/explain.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +3 -1
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +30 -5
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +14 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/links.d.ts +25 -0
- package/dist/objects/query/links.d.ts.map +1 -0
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/planner.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/pipelines/index.js +16 -15
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/builders.d.ts +52 -10
- package/dist/projections/builders.d.ts.map +1 -1
- package/dist/projections/index.d.ts +2 -1
- package/dist/projections/index.d.ts.map +1 -1
- package/dist/projections/internal.d.ts +4 -1
- package/dist/projections/internal.d.ts.map +1 -1
- package/dist/projections/internal.js +22 -17
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts +1 -0
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/projections/timestamp.d.ts +3 -0
- package/dist/projections/timestamp.d.ts.map +1 -0
- package/dist/projections/types.d.ts +21 -9
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/projections/validation.d.ts +6 -5
- package/dist/projections/validation.d.ts.map +1 -1
- package/dist/query.d.ts +2 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/types.d.ts +7 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/ai-cost.d.ts +8 -0
- package/dist/runtime/ai-cost.d.ts.map +1 -0
- package/dist/runtime/create.d.ts +3 -0
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -0
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +2 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +22 -4
- 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 +31 -0
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +22 -7
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +75 -4
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +61 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -0
- package/dist/storage/ai-cost/codec.d.ts +14 -0
- package/dist/storage/ai-cost/codec.d.ts.map +1 -0
- package/dist/storage/ai-cost/errors.d.ts +7 -0
- package/dist/storage/ai-cost/errors.d.ts.map +1 -0
- package/dist/storage/ai-cost/in-memory.d.ts +32 -0
- package/dist/storage/ai-cost/in-memory.d.ts.map +1 -0
- package/dist/storage/ai-cost/index.d.ts +6 -0
- package/dist/storage/ai-cost/index.d.ts.map +1 -0
- package/dist/storage/ai-cost/provider.d.ts +7 -0
- package/dist/storage/ai-cost/provider.d.ts.map +1 -0
- package/dist/storage/ai-cost/provider.js +132 -0
- package/dist/storage/ai-cost/provider.js.map +10 -0
- package/dist/storage/ai-cost/types.d.ts +154 -0
- package/dist/storage/ai-cost/types.d.ts.map +1 -0
- package/dist/storage/ai-cost/validation.d.ts +7 -0
- package/dist/storage/ai-cost/validation.d.ts.map +1 -0
- package/dist/storage/ai-usage/in-memory.d.ts +2 -1
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/index.d.ts +1 -1
- package/dist/storage/ai-usage/index.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +6 -0
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +5 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +6 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +33 -21
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/in-memory.d.ts +6 -3
- package/dist/storage/objects/in-memory.d.ts.map +1 -1
- package/dist/storage/objects/index.d.ts +3 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +16 -0
- package/dist/storage/objects/keys.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +33 -6
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +3 -0
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +10 -5
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +16 -15
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts +3 -2
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts +12 -0
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -0
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/effective-storage-contract.d.ts +1 -1
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2525 -1480
- package/dist/testing/index.js.map +10 -9
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-query-contract.d.ts +1 -1
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +14 -13
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +12 -2
- package/dist/workers/index.js.map +3 -3
- package/dist/workers/queue-worker.d.ts +2 -0
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workflows/execution.d.ts +3 -0
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/index.js +30 -28
- package/dist/workflows/index.js.map +1 -1
- package/package.json +7 -1
- package/src/agents/adapters.ts +64 -23
- package/src/agents/builders.ts +3 -3
- package/src/agents/context-compaction.ts +261 -0
- package/src/agents/errors.ts +2 -2
- package/src/agents/execution.ts +14 -2
- package/src/agents/ids.ts +5 -0
- package/src/agents/index.ts +32 -6
- package/src/agents/request.ts +5 -0
- package/src/agents/streams.ts +56 -0
- package/src/agents/thread-context-projection.ts +93 -0
- package/src/agents/tool-definition.ts +17 -2
- package/src/agents/tool-result.ts +61 -0
- package/src/agents/types.ts +57 -1
- package/src/agents/validation.ts +36 -6
- package/src/http/api-routes.ts +7 -7
- package/src/index.ts +27 -0
- package/src/lake-storage/types.ts +2 -1
- package/src/materialization/model.ts +4 -0
- package/src/materializer/edits/apply.ts +55 -2
- package/src/materializer/edits/operations.ts +8 -1
- package/src/materializer/edits/working-state.ts +7 -0
- package/src/materializer/effective/resolve.ts +78 -9
- package/src/materializer/execution/work-records.ts +3 -1
- package/src/materializer/projections/entry-validator.ts +23 -1
- package/src/materializer/projections/replacement-plan.ts +2 -0
- package/src/materializer/shared/normalize.ts +16 -0
- package/src/materializer/telemetry/append.ts +33 -16
- package/src/models/index.ts +71 -0
- package/src/objects/execution.ts +20 -0
- package/src/objects/link/endpoints.ts +2 -1
- package/src/objects/query/executor.ts +42 -11
- package/src/objects/query/explain.ts +11 -0
- package/src/objects/query/index.ts +6 -0
- package/src/objects/query/ir.ts +16 -0
- package/src/objects/query/links.ts +308 -0
- package/src/objects/query/normalize.ts +40 -1
- package/src/objects/query/planner.ts +5 -0
- package/src/objects/query/validate.ts +58 -2
- package/src/projections/builders.ts +320 -50
- package/src/projections/index.ts +7 -0
- package/src/projections/internal.ts +4 -1
- package/src/projections/ownership.ts +5 -5
- package/src/projections/registry.ts +16 -3
- package/src/projections/revision.ts +35 -5
- package/src/projections/run-dispatch.ts +10 -1
- package/src/projections/timestamp.ts +66 -0
- package/src/projections/types.ts +20 -9
- package/src/projections/validation.ts +85 -19
- package/src/query.ts +2 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/types.ts +8 -0
- package/src/runtime/ai-cost.ts +15 -0
- package/src/runtime/create.ts +4 -0
- package/src/runtime/definitions.ts +3 -0
- package/src/runtime/host.ts +2 -0
- package/src/runtime/resolve-definitions.ts +28 -0
- package/src/storage/agents/in-memory.ts +186 -4
- package/src/storage/agents/index.ts +5 -0
- package/src/storage/agents/provider.ts +225 -0
- package/src/storage/agents/types.ts +82 -3
- package/src/storage/ai-cost/analytics.ts +602 -0
- package/src/storage/ai-cost/codec.ts +136 -0
- package/src/storage/ai-cost/errors.ts +12 -0
- package/src/storage/ai-cost/in-memory.ts +164 -0
- package/src/storage/ai-cost/index.ts +35 -0
- package/src/storage/ai-cost/provider.ts +20 -0
- package/src/storage/ai-cost/types.ts +193 -0
- package/src/storage/ai-cost/validation.ts +337 -0
- package/src/storage/ai-usage/in-memory.ts +23 -0
- package/src/storage/ai-usage/index.ts +1 -0
- package/src/storage/ai-usage/types.ts +10 -0
- package/src/storage/in-memory/index.ts +50 -0
- package/src/storage/index.ts +48 -0
- package/src/storage/objects/in-memory.ts +103 -16
- package/src/storage/objects/index.ts +9 -0
- package/src/storage/objects/keys.ts +36 -0
- package/src/storage/objects/types.ts +34 -6
- package/src/storage/ontology/in-memory/materializations.ts +1 -0
- package/src/storage/ontology/materializations.ts +3 -0
- package/src/storage/ontology/provider-header-validation.ts +2 -2
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +2 -0
- package/src/testing/agent-storage-contract.ts +353 -2
- package/src/testing/ai-cost-storage-contract.ts +320 -0
- package/src/testing/ai-usage-storage-contract.ts +35 -0
- package/src/testing/effective-storage-contract.ts +194 -4
- package/src/testing/index.ts +5 -0
- package/src/testing/lake-storage-contract.ts +56 -0
- package/src/testing/materializer-storage-contract.ts +120 -2
- package/src/testing/object-query-contract.ts +208 -1
- package/src/workers/queue-worker.ts +14 -1
- package/src/workflows/execution.ts +31 -10
- package/dist/agents/prompt.d.ts +0 -15
- package/dist/agents/prompt.d.ts.map +0 -1
- package/dist/chunk-0mbx247x.js.map +0 -43
- package/dist/chunk-34bqh420.js.map +0 -23
- package/dist/chunk-57zpb99z.js.map +0 -10
- package/dist/chunk-663csy96.js.map +0 -10
- package/dist/chunk-6wetht33.js +0 -89
- package/dist/chunk-6wetht33.js.map +0 -10
- package/dist/chunk-88ppkr54.js.map +0 -12
- package/dist/chunk-nnyp53zt.js.map +0 -13
- package/dist/chunk-nten49ta.js.map +0 -12
- package/dist/chunk-st4xgxey.js.map +0 -45
- package/dist/chunk-vp1vc6ee.js +0 -35
- package/dist/chunk-vp1vc6ee.js.map +0 -11
- package/src/agents/prompt.ts +0 -57
- /package/dist/{chunk-sa4340y1.js.map → chunk-1yz3x65y.js.map} +0 -0
- /package/dist/{chunk-gqdd7508.js.map → chunk-4rh2m6zg.js.map} +0 -0
- /package/dist/{chunk-4x43bkbp.js.map → chunk-a09jx26t.js.map} +0 -0
- /package/dist/{chunk-zg9yryhz.js.map → chunk-cbkm2vam.js.map} +0 -0
- /package/dist/{chunk-8ryen3p3.js.map → chunk-f6erf2vv.js.map} +0 -0
- /package/dist/{chunk-bct7hmfc.js.map → chunk-g13869yf.js.map} +0 -0
- /package/dist/{chunk-0k4avqr2.js.map → chunk-hbeh8j9w.js.map} +0 -0
- /package/dist/{chunk-qvybnnpe.js.map → chunk-nzw7sm3b.js.map} +0 -0
- /package/dist/{chunk-bh6k3nc6.js.map → chunk-rs1wbvy6.js.map} +0 -0
- /package/dist/{chunk-7pc8b818.js.map → chunk-sxwk41qa.js.map} +0 -0
- /package/dist/{chunk-5egfka8j.js.map → chunk-tycbzedm.js.map} +0 -0
- /package/dist/{chunk-g9t3kdtx.js.map → chunk-x2yw73hy.js.map} +0 -0
|
@@ -8,15 +8,17 @@ import {
|
|
|
8
8
|
type AgentStorage,
|
|
9
9
|
AgentStorageError,
|
|
10
10
|
type AgentStorageErrorCode,
|
|
11
|
+
type CreateAgentContextCheckpointInput,
|
|
11
12
|
type CreateAgentRunInput,
|
|
12
13
|
type CreateAgentThreadInput,
|
|
13
14
|
type StartAgentRunInput,
|
|
14
15
|
} from "../storage/agents"
|
|
15
16
|
import type { AuthStorage } from "../storage/auth"
|
|
16
17
|
import type { ExecutionStorage } from "../storage/executions"
|
|
18
|
+
import type { Storage } from "../storage/types"
|
|
17
19
|
import { createTestAgentExecution } from "./agent-execution"
|
|
18
20
|
|
|
19
|
-
export interface AgentStorageContractStorage {
|
|
21
|
+
export interface AgentStorageContractStorage extends Pick<Storage, "transaction"> {
|
|
20
22
|
readonly agents: AgentStorage
|
|
21
23
|
readonly auth: AuthStorage
|
|
22
24
|
readonly executions: ExecutionStorage
|
|
@@ -102,6 +104,30 @@ function runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {
|
|
|
102
104
|
}
|
|
103
105
|
}
|
|
104
106
|
|
|
107
|
+
function checkpointInput(
|
|
108
|
+
overrides: Partial<CreateAgentContextCheckpointInput> = {}
|
|
109
|
+
): CreateAgentContextCheckpointInput {
|
|
110
|
+
return {
|
|
111
|
+
id: "checkpoint_1",
|
|
112
|
+
projectId,
|
|
113
|
+
threadId: "thr_1",
|
|
114
|
+
createdByRunId: "run_2",
|
|
115
|
+
expectedPreviousCheckpointId: null,
|
|
116
|
+
expectedHeadSeq: 3,
|
|
117
|
+
executionToken: "exec_2",
|
|
118
|
+
reason: "threshold",
|
|
119
|
+
summary: "The user asked for one and the agent answered two.",
|
|
120
|
+
summaryFormatVersion: 1,
|
|
121
|
+
summarizedThroughSeq: 2,
|
|
122
|
+
observedHeadSeq: 3,
|
|
123
|
+
estimatedInputTokensBefore: 1_000,
|
|
124
|
+
estimatedInputTokensAfter: 300,
|
|
125
|
+
summaryModelId: "test-model",
|
|
126
|
+
createdAt: at("2026-06-23T10:03:00.000Z"),
|
|
127
|
+
...overrides,
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
105
131
|
async function createAndStartRun(
|
|
106
132
|
storage: AgentStorage,
|
|
107
133
|
fixture: AgentStorageContractStorage,
|
|
@@ -131,12 +157,55 @@ async function createRun(
|
|
|
131
157
|
return storage.runs.create(input)
|
|
132
158
|
}
|
|
133
159
|
|
|
160
|
+
async function prepareCheckpointCandidate(
|
|
161
|
+
storage: AgentStorage,
|
|
162
|
+
fixture: AgentStorageContractStorage
|
|
163
|
+
): Promise<void> {
|
|
164
|
+
await storage.threads.create(threadInput())
|
|
165
|
+
await storage.messages.append({
|
|
166
|
+
id: "m1",
|
|
167
|
+
projectId,
|
|
168
|
+
threadId: "thr_1",
|
|
169
|
+
runId: null,
|
|
170
|
+
role: "user",
|
|
171
|
+
parts: [{ type: "text", text: "one" }],
|
|
172
|
+
})
|
|
173
|
+
await createAndStartRun(storage, fixture, runInput({ id: "run_1" }))
|
|
174
|
+
await storage.messages.append({
|
|
175
|
+
id: "m2",
|
|
176
|
+
projectId,
|
|
177
|
+
threadId: "thr_1",
|
|
178
|
+
runId: "run_1",
|
|
179
|
+
role: "assistant",
|
|
180
|
+
parts: [{ type: "text", text: "two" }],
|
|
181
|
+
})
|
|
182
|
+
await storage.runs.finish({
|
|
183
|
+
id: "run_1",
|
|
184
|
+
projectId,
|
|
185
|
+
executionToken: "exec_1",
|
|
186
|
+
status: "succeeded",
|
|
187
|
+
})
|
|
188
|
+
await storage.messages.append({
|
|
189
|
+
id: "m3",
|
|
190
|
+
projectId,
|
|
191
|
+
threadId: "thr_1",
|
|
192
|
+
runId: null,
|
|
193
|
+
role: "user",
|
|
194
|
+
parts: [{ type: "text", text: "three" }],
|
|
195
|
+
})
|
|
196
|
+
await createAndStartRun(
|
|
197
|
+
storage,
|
|
198
|
+
fixture,
|
|
199
|
+
runInput({ id: "run_2", triggerMessageId: "m3", execution: execution("exec_2") })
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
134
203
|
/**
|
|
135
204
|
* Runs the shared `AgentStorage` contract against any storage implementation.
|
|
136
205
|
*
|
|
137
206
|
* This is the storage-independent specification for Sixb agent persistence: thread lifecycle and
|
|
138
207
|
* project isolation, single-flight run reservation, execution reclaim, run finalization with
|
|
139
|
-
* execution metadata,
|
|
208
|
+
* execution metadata, message append with thread-stats bookkeeping, and fenced context checkpoints.
|
|
140
209
|
*/
|
|
141
210
|
export function runAgentStorageContractSuite<TStorage extends AgentStorageContractStorage>(
|
|
142
211
|
label: string,
|
|
@@ -810,6 +879,62 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
810
879
|
})
|
|
811
880
|
})
|
|
812
881
|
|
|
882
|
+
test("deletes messages produced by a run and repairs thread stats", async () => {
|
|
883
|
+
await withStorage(async (storage, fixture) => {
|
|
884
|
+
await storage.threads.create(threadInput())
|
|
885
|
+
await storage.messages.append({
|
|
886
|
+
id: "msg_user_1",
|
|
887
|
+
projectId,
|
|
888
|
+
threadId: "thr_1",
|
|
889
|
+
runId: null,
|
|
890
|
+
role: "user",
|
|
891
|
+
parts: [{ type: "text", text: "Try this" }],
|
|
892
|
+
createdAt: at("2026-06-23T10:00:30.000Z"),
|
|
893
|
+
})
|
|
894
|
+
await createAndStartRun(storage, fixture, runInput({ id: "run_1" }))
|
|
895
|
+
await storage.messages.append({
|
|
896
|
+
id: "msg_asst_1",
|
|
897
|
+
projectId,
|
|
898
|
+
threadId: "thr_1",
|
|
899
|
+
runId: "run_1",
|
|
900
|
+
role: "assistant",
|
|
901
|
+
parts: [
|
|
902
|
+
{ type: "text", text: "Partial answer" },
|
|
903
|
+
{
|
|
904
|
+
type: "tool-call",
|
|
905
|
+
toolCallId: "call_1",
|
|
906
|
+
toolName: "search",
|
|
907
|
+
input: { query: "sixb" },
|
|
908
|
+
state: "output-available",
|
|
909
|
+
output: { matches: 1 },
|
|
910
|
+
},
|
|
911
|
+
],
|
|
912
|
+
createdAt: at("2026-06-23T10:01:00.000Z"),
|
|
913
|
+
})
|
|
914
|
+
|
|
915
|
+
await expect(
|
|
916
|
+
storage.messages.deleteByRunId({ projectId, threadId: "thr_1", runId: "run_1" })
|
|
917
|
+
).resolves.toBe(1)
|
|
918
|
+
await expect(storage.messages.getById({ projectId, id: "msg_asst_1" })).resolves.toBeNull()
|
|
919
|
+
|
|
920
|
+
const messages = await storage.messages.list({ projectId, threadId: "thr_1" })
|
|
921
|
+
expect(messages.messages.map((message) => message.id)).toEqual(["msg_user_1"])
|
|
922
|
+
expect(messages.total).toBe(1)
|
|
923
|
+
await expect(storage.threads.getById({ projectId, id: "thr_1" })).resolves.toMatchObject({
|
|
924
|
+
messageCount: 1,
|
|
925
|
+
lastMessageAt: at("2026-06-23T10:00:30.000Z"),
|
|
926
|
+
})
|
|
927
|
+
|
|
928
|
+
await expect(
|
|
929
|
+
storage.messages.deleteByRunId({ projectId, threadId: "thr_1", runId: "run_1" })
|
|
930
|
+
).resolves.toBe(0)
|
|
931
|
+
await expect(storage.threads.getById({ projectId, id: "thr_1" })).resolves.toMatchObject({
|
|
932
|
+
messageCount: 1,
|
|
933
|
+
lastMessageAt: at("2026-06-23T10:00:30.000Z"),
|
|
934
|
+
})
|
|
935
|
+
})
|
|
936
|
+
})
|
|
937
|
+
|
|
813
938
|
test("lists messages with role filter, ordering, and pagination", async () => {
|
|
814
939
|
await withStorage(async (storage, fixture) => {
|
|
815
940
|
await storage.threads.create(threadInput())
|
|
@@ -857,6 +982,15 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
857
982
|
})
|
|
858
983
|
expect(users.messages.map((message) => message.id)).toEqual(["m1", "m3"])
|
|
859
984
|
|
|
985
|
+
const retainedTail = await storage.messages.list({
|
|
986
|
+
projectId,
|
|
987
|
+
threadId: "thr_1",
|
|
988
|
+
afterSeq: 1,
|
|
989
|
+
order: "asc",
|
|
990
|
+
})
|
|
991
|
+
expect(retainedTail.messages.map((message) => message.id)).toEqual(["m2", "m3"])
|
|
992
|
+
expect(retainedTail.total).toBe(2)
|
|
993
|
+
|
|
860
994
|
const firstPage = await storage.messages.list({
|
|
861
995
|
projectId,
|
|
862
996
|
threadId: "thr_1",
|
|
@@ -915,5 +1049,222 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
|
|
|
915
1049
|
)
|
|
916
1050
|
})
|
|
917
1051
|
})
|
|
1052
|
+
|
|
1053
|
+
// ── context checkpoints ─────────────────────────────────────────────────────────────────
|
|
1054
|
+
|
|
1055
|
+
test("creates an idempotent checkpoint without mutating the transcript", async () => {
|
|
1056
|
+
await withStorage(async (storage, fixture) => {
|
|
1057
|
+
await prepareCheckpointCandidate(storage, fixture)
|
|
1058
|
+
await storage.threads.create(threadInput({ id: "thr_2" }))
|
|
1059
|
+
|
|
1060
|
+
const threadBefore = await storage.threads.getById({ projectId, id: "thr_1" })
|
|
1061
|
+
const [created, replayed] = await Promise.all([
|
|
1062
|
+
storage.checkpoints.create(checkpointInput()),
|
|
1063
|
+
storage.checkpoints.create(checkpointInput()),
|
|
1064
|
+
])
|
|
1065
|
+
|
|
1066
|
+
expect(replayed).toEqual(created)
|
|
1067
|
+
expect(created).toMatchObject({
|
|
1068
|
+
id: "checkpoint_1",
|
|
1069
|
+
createdByRunId: "run_2",
|
|
1070
|
+
summarizedThroughSeq: 2,
|
|
1071
|
+
observedHeadSeq: 3,
|
|
1072
|
+
})
|
|
1073
|
+
expect(await storage.checkpoints.getLatest({ projectId, threadId: "thr_1" })).toEqual(
|
|
1074
|
+
created
|
|
1075
|
+
)
|
|
1076
|
+
expect(
|
|
1077
|
+
await storage.checkpoints.getLatest({ projectId: otherProjectId, threadId: "thr_1" })
|
|
1078
|
+
).toBeNull()
|
|
1079
|
+
expect(await storage.checkpoints.getLatest({ projectId, threadId: "thr_2" })).toBeNull()
|
|
1080
|
+
await expect(
|
|
1081
|
+
storage.checkpoints.getByRunIds({
|
|
1082
|
+
projectId,
|
|
1083
|
+
runIds: ["run_2", "missing", "run_2"],
|
|
1084
|
+
})
|
|
1085
|
+
).resolves.toEqual([created])
|
|
1086
|
+
await expect(
|
|
1087
|
+
storage.checkpoints.getByRunIds({
|
|
1088
|
+
projectId: otherProjectId,
|
|
1089
|
+
runIds: ["run_2"],
|
|
1090
|
+
})
|
|
1091
|
+
).resolves.toEqual([])
|
|
1092
|
+
|
|
1093
|
+
const retained = await storage.messages.list({
|
|
1094
|
+
projectId,
|
|
1095
|
+
threadId: "thr_1",
|
|
1096
|
+
afterSeq: created.summarizedThroughSeq,
|
|
1097
|
+
order: "asc",
|
|
1098
|
+
})
|
|
1099
|
+
expect(retained.messages.map((message) => message.id)).toEqual(["m3"])
|
|
1100
|
+
|
|
1101
|
+
const complete = await storage.messages.list({
|
|
1102
|
+
projectId,
|
|
1103
|
+
threadId: "thr_1",
|
|
1104
|
+
order: "asc",
|
|
1105
|
+
})
|
|
1106
|
+
expect(complete.messages.map((message) => message.id)).toEqual(["m1", "m2", "m3"])
|
|
1107
|
+
expect(await storage.threads.getById({ projectId, id: "thr_1" })).toEqual(threadBefore)
|
|
1108
|
+
})
|
|
1109
|
+
})
|
|
1110
|
+
|
|
1111
|
+
test("rejects checkpoints from an inactive run or a different thread", async () => {
|
|
1112
|
+
await withStorage(async (storage, fixture) => {
|
|
1113
|
+
await prepareCheckpointCandidate(storage, fixture)
|
|
1114
|
+
await storage.threads.create(threadInput({ id: "thr_2" }))
|
|
1115
|
+
|
|
1116
|
+
await expectAgentError(
|
|
1117
|
+
storage.checkpoints.create(checkpointInput({ threadId: "thr_2" })),
|
|
1118
|
+
"invalid_input"
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
await storage.runs.finish({
|
|
1122
|
+
id: "run_2",
|
|
1123
|
+
projectId,
|
|
1124
|
+
executionToken: "exec_2",
|
|
1125
|
+
status: "failed",
|
|
1126
|
+
})
|
|
1127
|
+
await expectAgentError(storage.checkpoints.create(checkpointInput()), "invalid_state")
|
|
1128
|
+
expect(await storage.checkpoints.getLatest({ projectId, threadId: "thr_1" })).toBeNull()
|
|
1129
|
+
})
|
|
1130
|
+
})
|
|
1131
|
+
|
|
1132
|
+
test("rolls back a checkpoint with its containing storage transaction", async () => {
|
|
1133
|
+
await withStorage(async (storage, fixture) => {
|
|
1134
|
+
await prepareCheckpointCandidate(storage, fixture)
|
|
1135
|
+
const rollback = new Error("rollback checkpoint")
|
|
1136
|
+
|
|
1137
|
+
await expect(
|
|
1138
|
+
fixture.transaction(async (tx) => {
|
|
1139
|
+
if (!tx.agents) throw new Error("Expected agent storage in transaction.")
|
|
1140
|
+
const created = await tx.agents.checkpoints.create(checkpointInput())
|
|
1141
|
+
expect(await tx.agents.checkpoints.getLatest({ projectId, threadId: "thr_1" })).toEqual(
|
|
1142
|
+
created
|
|
1143
|
+
)
|
|
1144
|
+
throw rollback
|
|
1145
|
+
})
|
|
1146
|
+
).rejects.toBe(rollback)
|
|
1147
|
+
|
|
1148
|
+
expect(await storage.checkpoints.getLatest({ projectId, threadId: "thr_1" })).toBeNull()
|
|
1149
|
+
})
|
|
1150
|
+
})
|
|
1151
|
+
|
|
1152
|
+
test("fences checkpoint creation by execution, message head, and prior checkpoint", async () => {
|
|
1153
|
+
await withStorage(async (storage, fixture) => {
|
|
1154
|
+
await prepareCheckpointCandidate(storage, fixture)
|
|
1155
|
+
|
|
1156
|
+
await expectAgentError(
|
|
1157
|
+
storage.checkpoints.create(checkpointInput({ executionToken: "stale" })),
|
|
1158
|
+
"execution_lost"
|
|
1159
|
+
)
|
|
1160
|
+
await expectAgentError(
|
|
1161
|
+
storage.checkpoints.create(
|
|
1162
|
+
checkpointInput({ expectedHeadSeq: 2, observedHeadSeq: 2, summarizedThroughSeq: 1 })
|
|
1163
|
+
),
|
|
1164
|
+
"invalid_state"
|
|
1165
|
+
)
|
|
1166
|
+
await expectAgentError(
|
|
1167
|
+
storage.checkpoints.create(
|
|
1168
|
+
checkpointInput({ expectedPreviousCheckpointId: "checkpoint_missing" })
|
|
1169
|
+
),
|
|
1170
|
+
"invalid_state"
|
|
1171
|
+
)
|
|
1172
|
+
await expectAgentError(
|
|
1173
|
+
storage.checkpoints.create(checkpointInput({ summarizedThroughSeq: 1 })),
|
|
1174
|
+
"invalid_input"
|
|
1175
|
+
)
|
|
1176
|
+
|
|
1177
|
+
await storage.runs.reclaim({
|
|
1178
|
+
id: "run_2",
|
|
1179
|
+
projectId,
|
|
1180
|
+
execution: execution("exec_2_reclaimed"),
|
|
1181
|
+
})
|
|
1182
|
+
await expectAgentError(storage.checkpoints.create(checkpointInput()), "execution_lost")
|
|
1183
|
+
|
|
1184
|
+
const reclaimedInput = checkpointInput({ executionToken: "exec_2_reclaimed" })
|
|
1185
|
+
await storage.checkpoints.create(reclaimedInput)
|
|
1186
|
+
await expectAgentError(
|
|
1187
|
+
storage.checkpoints.create({ ...reclaimedInput, summary: "different" }),
|
|
1188
|
+
"invalid_state"
|
|
1189
|
+
)
|
|
1190
|
+
await expectAgentError(storage.checkpoints.create(checkpointInput()), "execution_lost")
|
|
1191
|
+
await storage.messages.append({
|
|
1192
|
+
id: "m4",
|
|
1193
|
+
projectId,
|
|
1194
|
+
threadId: "thr_1",
|
|
1195
|
+
runId: "run_2",
|
|
1196
|
+
role: "assistant",
|
|
1197
|
+
parts: [{ type: "text", text: "four" }],
|
|
1198
|
+
})
|
|
1199
|
+
await expectAgentError(storage.checkpoints.create(reclaimedInput), "invalid_state")
|
|
1200
|
+
})
|
|
1201
|
+
})
|
|
1202
|
+
|
|
1203
|
+
test("chains checkpoints only when the retained boundary advances", async () => {
|
|
1204
|
+
await withStorage(async (storage, fixture) => {
|
|
1205
|
+
await prepareCheckpointCandidate(storage, fixture)
|
|
1206
|
+
await storage.checkpoints.create(checkpointInput())
|
|
1207
|
+
await storage.messages.append({
|
|
1208
|
+
id: "m4",
|
|
1209
|
+
projectId,
|
|
1210
|
+
threadId: "thr_1",
|
|
1211
|
+
runId: "run_2",
|
|
1212
|
+
role: "assistant",
|
|
1213
|
+
parts: [{ type: "text", text: "four" }],
|
|
1214
|
+
})
|
|
1215
|
+
await storage.runs.finish({
|
|
1216
|
+
id: "run_2",
|
|
1217
|
+
projectId,
|
|
1218
|
+
executionToken: "exec_2",
|
|
1219
|
+
status: "succeeded",
|
|
1220
|
+
})
|
|
1221
|
+
await storage.messages.append({
|
|
1222
|
+
id: "m5",
|
|
1223
|
+
projectId,
|
|
1224
|
+
threadId: "thr_1",
|
|
1225
|
+
runId: null,
|
|
1226
|
+
role: "user",
|
|
1227
|
+
parts: [{ type: "text", text: "five" }],
|
|
1228
|
+
})
|
|
1229
|
+
await createAndStartRun(
|
|
1230
|
+
storage,
|
|
1231
|
+
fixture,
|
|
1232
|
+
runInput({ id: "run_3", triggerMessageId: "m5", execution: execution("exec_3") })
|
|
1233
|
+
)
|
|
1234
|
+
|
|
1235
|
+
await expectAgentError(
|
|
1236
|
+
storage.checkpoints.create(
|
|
1237
|
+
checkpointInput({
|
|
1238
|
+
id: "checkpoint_2",
|
|
1239
|
+
createdByRunId: "run_3",
|
|
1240
|
+
expectedPreviousCheckpointId: "checkpoint_1",
|
|
1241
|
+
expectedHeadSeq: 5,
|
|
1242
|
+
executionToken: "exec_3",
|
|
1243
|
+
summarizedThroughSeq: 2,
|
|
1244
|
+
observedHeadSeq: 5,
|
|
1245
|
+
})
|
|
1246
|
+
),
|
|
1247
|
+
"invalid_input"
|
|
1248
|
+
)
|
|
1249
|
+
|
|
1250
|
+
const second = await storage.checkpoints.create(
|
|
1251
|
+
checkpointInput({
|
|
1252
|
+
id: "checkpoint_2",
|
|
1253
|
+
createdByRunId: "run_3",
|
|
1254
|
+
expectedPreviousCheckpointId: "checkpoint_1",
|
|
1255
|
+
expectedHeadSeq: 5,
|
|
1256
|
+
executionToken: "exec_3",
|
|
1257
|
+
summary: "The prior summary was extended through the fourth message.",
|
|
1258
|
+
summarizedThroughSeq: 4,
|
|
1259
|
+
observedHeadSeq: 5,
|
|
1260
|
+
createdAt: at("2026-06-23T10:05:00.000Z"),
|
|
1261
|
+
})
|
|
1262
|
+
)
|
|
1263
|
+
expect(second.previousCheckpointId).toBe("checkpoint_1")
|
|
1264
|
+
expect(await storage.checkpoints.getLatest({ projectId, threadId: "thr_1" })).toEqual(
|
|
1265
|
+
second
|
|
1266
|
+
)
|
|
1267
|
+
})
|
|
1268
|
+
})
|
|
918
1269
|
})
|
|
919
1270
|
}
|