@cursor/bdk 0.2.17 → 0.2.20
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/AGENTS.md +16 -6
- package/dist/bin/agent-serve.js +7 -0
- package/dist/channels/runs/index.d.ts +4 -0
- package/dist/channels/runs/index.d.ts.map +1 -0
- package/dist/channels/runs/index.js +2 -0
- package/dist/channels/runs/runs-channel.d.ts +5 -0
- package/dist/channels/runs/runs-channel.d.ts.map +1 -0
- package/dist/channels/runs/runs-channel.js +34 -0
- package/dist/channels/runs/types.d.ts +34 -0
- package/dist/channels/runs/types.d.ts.map +1 -0
- package/dist/channels/runs/types.js +1 -0
- package/dist/channels/slack/slack-channel.d.ts +3 -2
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +9 -2
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.CUNuFTSm.js → app.BzgJFr_T.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.gGwBYU3d.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.Dez74k0W.js → VPLocalSearchBox.Bn5QyUDM.js} +1 -1
- package/dist/docs/assets/chunks/{arc.CJ3FhK7H.js → arc.D734Gm5d.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CfUdbHsa.js → architectureDiagram-Q4EWVU46.NX1jj-YX.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.D93LawU9.js → baseUniq.nd8dxdeO.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.Zvsd6UHP.js → blockDiagram-DXYQGD6D.DG8faTim.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.CGX5xZ9d.js → c4Diagram-AHTNJAMY.zD31AJ3b.js} +1 -1
- package/dist/docs/assets/chunks/channel.DQLJQMi3.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CCIf0QCo.js → chunk-4BX2VUAB.BHQj6Rko.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.D_N1RPyi.js → chunk-4TB4RGXK.Cs38Yh16.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.B1oecjzx.js → chunk-55IACEB6.CFUR21JO.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BzUNVPGX.js → chunk-EDXVE4YY.C80-Sneg.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DheI8WSO.js → chunk-FMBD7UC4.CdT1MGza.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Bg4iL0sM.js → chunk-OYMX7WX6.BctEzab0.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.CSQjDhAD.js → chunk-QZHKN3VN.DTneeX3k.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.BDdxnPU4.js → chunk-YZCP3GAM.Cz47F_-o.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.j55aerUT.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.j55aerUT.js +1 -0
- package/dist/docs/assets/chunks/clone.XimRS84I.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.AT0weO8r.js → cose-bilkent-S5V4N54A.BPYgB-_O.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CJ30TxV0.js → dagre-KV5264BT.Cu6hECod.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.KtE--1fW.js → diagram-5BDNPKRD.BMgp95Tz.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BFGygSUQ.js → diagram-G4DWMVQ6.towWdhDi.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BLU-79eb.js → diagram-MMDJMWI5.D9IfOvE9.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.CdjfJdVG.js → diagram-TYMM5635.NTX57RPu.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.Dj1Iwypl.js → erDiagram-SMLLAGMA.DIQLqDqu.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BXqj_Su2.js → flowDiagram-DWJPFMVM.DhqpItRe.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CNfgGSst.js → ganttDiagram-T4ZO3ILL.B998R3Ps.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.2tgvFDBr.js → gitGraphDiagram-UUTBAWPF.B45nTn8-.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CWHZMxx6.js → graph.DPseWzzM.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.DhLIK8m1.js → infoDiagram-42DDH7IO._GhhBBai.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.BIN11n1G.js → ishikawaDiagram-UXIWVN3A.CTUMcaMM.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BARmNJ0n.js → journeyDiagram-VCZTEJTY.DkJBUddC.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BrTJYFyF.js → kanban-definition-6JOO6SKY.B5Q3uwhy.js} +1 -1
- package/dist/docs/assets/chunks/{layout.CPZIIywK.js → layout.CDY13IKh.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DTpmzI5S.js → linear.BPd1ql9p.js} +1 -1
- package/dist/docs/assets/chunks/{min.BBLQmXwZ.js → min.dlGuqIBP.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.5qkWJvdl.js → mindmap-definition-QFDTVHPH.Cp7zCtmb.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.-4wufv_f.js → pieDiagram-DEJITSTG.CRH034nu.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.C0jrp1-8.js → quadrantDiagram-34T5L4WZ.BspgZ-pX.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DUDpANfe.js → requirementDiagram-MS252O5E.CQZqZ0nZ.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.74Lvg6Gu.js → sankeyDiagram-XADWPNL6.DllwFU3k.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.BHDIH286.js → sequenceDiagram-FGHM5R23.B5fTXycf.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.Dr-HIuLb.js → stateDiagram-FHFEXIEX.12GQjmbD.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.Ctv5WEMu.js +1 -0
- package/dist/docs/assets/chunks/{theme.H8zSBhlM.js → theme.BgocqONV.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.GtyCaSiL.js → timeline-definition-GMOUNBTQ.DXKUL5rH.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.DLId0rxH.js → vennDiagram-DHZGUBPP.BrsjYCjp.js} +1 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.DZDndEXQ.js +162 -0
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CI6mGYNG.js → wardleyDiagram-NUSXRM2D.C4oM69gv.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CG1n865F.js → xychartDiagram-5P7HB3ND.qzHH9efW.js} +1 -1
- package/dist/docs/assets/{deployment.md.ajc3VM0m.js → deployment.md.D0uprX2p.js} +3 -3
- package/dist/docs/assets/{deployment.md.ajc3VM0m.lean.js → deployment.md.D0uprX2p.lean.js} +1 -1
- package/dist/docs/assets/{guides_agent-to-agent.md.Cps5NiCV.js → guides_agent-to-agent.md.CwL5cwuE.js} +6 -5
- package/dist/docs/assets/{guides_agent-to-agent.md.Cps5NiCV.lean.js → guides_agent-to-agent.md.CwL5cwuE.lean.js} +1 -1
- package/dist/docs/assets/guides_export-grokbot.md.qo5bxi4h.js +55 -0
- package/dist/docs/assets/guides_export-grokbot.md.qo5bxi4h.lean.js +1 -0
- package/dist/docs/assets/{guides_opentelemetry.md.jcPNrQbH.js → guides_opentelemetry.md.BHPm32OR.js} +3 -3
- package/dist/docs/assets/{guides_opentelemetry.md.jcPNrQbH.lean.js → guides_opentelemetry.md.BHPm32OR.lean.js} +1 -1
- package/dist/docs/assets/{index.md.CHAFTf6m.js → index.md.CAnsLl8D.js} +2 -2
- package/dist/docs/assets/{index.md.CHAFTf6m.lean.js → index.md.CAnsLl8D.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.Bt3sAfat.js → reference_cli.md.Bkrsce22.js} +7 -4
- package/dist/docs/assets/{reference_cli.md.Bt3sAfat.lean.js → reference_cli.md.Bkrsce22.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.CxbLpaaP.js → reference_connections.md.BJE2Zllp.js} +4 -4
- package/dist/docs/assets/{reference_connections.md.CxbLpaaP.lean.js → reference_connections.md.BJE2Zllp.lean.js} +1 -1
- package/dist/docs/assets/{reference_hooks.md.DbJC8mcZ.js → reference_hooks.md.CP3FENFJ.js} +1 -1
- package/dist/docs/assets/reference_memory.md.BwyJXYZe.js +4 -0
- package/dist/docs/assets/reference_memory.md.BwyJXYZe.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.Ckddg6KX.js → reference_skills.md.C2GWh7g8.js} +3 -3
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +17 -0
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +41 -40
- package/dist/docs/guides/agent-to-agent.md +34 -21
- package/dist/docs/guides/bitbucket.html +35 -35
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/export-grokbot.html +114 -0
- package/dist/docs/guides/export-grokbot.md +239 -0
- package/dist/docs/guides/github.html +35 -35
- package/dist/docs/guides/gitlab.html +35 -35
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +36 -36
- package/dist/docs/guides/opentelemetry.html +37 -37
- package/dist/docs/guides/opentelemetry.md +19 -0
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +37 -37
- package/dist/docs/index.md +3 -0
- package/dist/docs/llms-full.txt +493 -29
- package/dist/docs/llms.txt +2 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +41 -38
- package/dist/docs/reference/cli.md +39 -1
- package/dist/docs/reference/connections.html +38 -38
- package/dist/docs/reference/connections.md +16 -6
- package/dist/docs/reference/evals.html +36 -36
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +38 -38
- package/dist/docs/reference/hooks.md +2 -1
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/memory.html +63 -0
- package/dist/docs/reference/memory.md +114 -0
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +35 -35
- package/dist/evals.d.ts +1 -1
- package/dist/evals.js +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -2
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts +8 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/launch-agent.js +10 -1
- package/dist/internal/cli-ax.d.ts +7 -7
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +36 -15
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +0 -14
- package/dist/internal/cloud-turn-usage.d.ts +34 -0
- package/dist/internal/cloud-turn-usage.d.ts.map +1 -0
- package/dist/internal/cloud-turn-usage.js +94 -0
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +6 -0
- package/dist/internal/continuation-identity.d.ts +6 -3
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +43 -0
- package/dist/internal/estimate-cost.d.ts +55 -0
- package/dist/internal/estimate-cost.d.ts.map +1 -0
- package/dist/internal/{turn-cost.js → estimate-cost.js} +18 -26
- package/dist/internal/event-log.d.ts +2 -2
- package/dist/internal/event-log.js +2 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +21 -2
- package/dist/internal/http-control-plane-session.d.ts +5 -2
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +38 -2
- package/dist/internal/init-scaffold.d.ts.map +1 -1
- package/dist/internal/init-scaffold.js +3 -4
- package/dist/internal/model-config.d.ts +7 -0
- package/dist/internal/model-config.d.ts.map +1 -0
- package/dist/internal/model-config.js +67 -0
- package/dist/internal/otel/collector.d.ts +3 -3
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +8 -21
- package/dist/internal/otel/computer-use-attrs.d.ts +13 -0
- package/dist/internal/otel/computer-use-attrs.d.ts.map +1 -0
- package/dist/internal/otel/computer-use-attrs.js +29 -0
- package/dist/internal/peer-connections.d.ts +17 -8
- package/dist/internal/peer-connections.d.ts.map +1 -1
- package/dist/internal/peer-connections.js +41 -10
- package/dist/internal/request-error-status.d.ts.map +1 -1
- package/dist/internal/request-error-status.js +4 -1
- package/dist/internal/resolved-connections.d.ts +4 -1
- package/dist/internal/resolved-connections.d.ts.map +1 -1
- package/dist/internal/resolved-connections.js +9 -4
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +16 -14
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +2 -1
- package/dist/internal/session-cost.d.ts +21 -22
- package/dist/internal/session-cost.d.ts.map +1 -1
- package/dist/internal/session-cost.js +38 -46
- package/dist/internal/session-engine.d.ts +25 -41
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +130 -122
- package/dist/internal/sessions-client.d.ts +13 -1
- package/dist/internal/sessions-client.d.ts.map +1 -1
- package/dist/internal/sessions-client.js +24 -0
- package/dist/internal/storage-coordinator.d.ts +9 -9
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +116 -36
- package/dist/internal/testing/factory-resource-fixtures.d.ts +16 -0
- package/dist/internal/testing/factory-resource-fixtures.d.ts.map +1 -1
- package/dist/internal/testing/factory-resource-fixtures.js +14 -0
- package/dist/internal/trajectory.d.ts +5 -6
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +1 -13
- package/dist/memory.d.ts +5 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +1 -1
- package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
- package/dist/playground/assets/index-C77_FdOx.css +1 -0
- package/dist/playground/assets/index-CvzI2lhj.js +71 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +57 -22
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +3 -0
- package/docs/deployment.md +17 -0
- package/docs/guides/agent-to-agent.md +34 -21
- package/docs/guides/export-grokbot.md +244 -0
- package/docs/guides/opentelemetry.md +19 -0
- package/docs/reference/cli.md +39 -1
- package/docs/reference/connections.md +16 -6
- package/docs/reference/hooks.md +2 -1
- package/docs/reference/memory.md +119 -0
- package/package.json +13 -5
- package/templates/agentic-owners/bot/lib/owners/matching.ts +57 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.3c56VHUt.js +0 -1
- package/dist/docs/assets/chunks/channel.S8-FFjmE.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.BB98tFjZ.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.BB98tFjZ.js +0 -1
- package/dist/docs/assets/chunks/clone.B98w8OEv.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DW_lwpZY.js +0 -1
- package/dist/docs/assets/chunks/wardley-RL74JXVD.CSlECTHi.js +0 -162
- package/dist/internal/cloud-turn-cost.d.ts +0 -42
- package/dist/internal/cloud-turn-cost.d.ts.map +0 -1
- package/dist/internal/cloud-turn-cost.js +0 -120
- package/dist/internal/turn-cost.d.ts +0 -41
- package/dist/internal/turn-cost.d.ts.map +0 -1
- package/dist/playground/assets/cursor-icons-16-4RnoYH3n.woff2 +0 -0
- package/dist/playground/assets/index-7fVUOA5l.css +0 -1
- package/dist/playground/assets/index-U3TRnwAP.js +0 -71
- /package/dist/docs/assets/{reference_hooks.md.DbJC8mcZ.lean.js → reference_hooks.md.CP3FENFJ.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.Ckddg6KX.lean.js → reference_skills.md.C2GWh7g8.lean.js} +0 -0
|
@@ -52,8 +52,9 @@ export declare class StorageCoordinator implements FrameworkSessionStore, Author
|
|
|
52
52
|
/** Per-session pending state (events + coalesced record). */
|
|
53
53
|
private readonly buffers;
|
|
54
54
|
/**
|
|
55
|
-
* Last continuation key
|
|
56
|
-
*
|
|
55
|
+
* Last continuation key this process has seen for a session. A hit
|
|
56
|
+
* avoids a durable read; a miss reads the stored session record so a
|
|
57
|
+
* fresh process still deletes the previous pointer.
|
|
57
58
|
*/
|
|
58
59
|
private readonly continuationIndex;
|
|
59
60
|
/**
|
|
@@ -103,14 +104,13 @@ export declare class StorageCoordinator implements FrameworkSessionStore, Author
|
|
|
103
104
|
*/
|
|
104
105
|
private putsOp;
|
|
105
106
|
/**
|
|
106
|
-
* Index maintenance for `continuation/{channelId}/{token}` → sessionId
|
|
107
|
-
*
|
|
107
|
+
* Index maintenance for `continuation/{channelId}/{token}` → sessionId.
|
|
108
|
+
* Put the current token and delete the previous one. The in-process
|
|
109
|
+
* index is a fast path; a fresh process reads the durable session
|
|
110
|
+
* record (before this flush overwrites it) and deletes that key too.
|
|
111
|
+
* Leading ops must run before the session-record put.
|
|
108
112
|
*/
|
|
109
|
-
private
|
|
110
|
-
/** KV upsert op on the sink's `put`. */
|
|
111
|
-
private putOp;
|
|
112
|
-
/** KV delete op on the sink's `delete` (skipped when the hook is absent). */
|
|
113
|
-
private deleteOp;
|
|
113
|
+
private planContinuation;
|
|
114
114
|
/** Whether the sink can serve the startup bulk restore (`list`). */
|
|
115
115
|
get canBulkRestore(): boolean;
|
|
116
116
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-coordinator.d.ts","sourceRoot":"","sources":["../../src/internal/storage-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE1F,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAMjE,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAEvE;AA2BD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"storage-coordinator.d.ts","sourceRoot":"","sources":["../../src/internal/storage-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,17 @@ export const MAX_VOLATILE_RECORD_SKIPS = 20;
|
|
|
71
71
|
function resumeProjectionJson(record) {
|
|
72
72
|
return JSON.stringify({ ...record, turnCount: 0, updatedAt: "" });
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Stamp written with a continuation pointer. Newer than the durable
|
|
76
|
+
* record's `updatedAt` means the record write lagged the pointer.
|
|
77
|
+
*/
|
|
78
|
+
function continuationPointerUpdatedAt(pointer) {
|
|
79
|
+
if (typeof pointer !== "object" || pointer === null || Array.isArray(pointer)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const stamp = pointer.recordUpdatedAt;
|
|
83
|
+
return typeof stamp === "string" && stamp.length > 0 ? stamp : undefined;
|
|
84
|
+
}
|
|
74
85
|
/** Session records out of raw sink entries; rows without a usable id are dropped. */
|
|
75
86
|
function sessionRecordsOf(entries) {
|
|
76
87
|
return entries
|
|
@@ -82,8 +93,9 @@ export class StorageCoordinator {
|
|
|
82
93
|
/** Per-session pending state (events + coalesced record). */
|
|
83
94
|
this.buffers = new Map();
|
|
84
95
|
/**
|
|
85
|
-
* Last continuation key
|
|
86
|
-
*
|
|
96
|
+
* Last continuation key this process has seen for a session. A hit
|
|
97
|
+
* avoids a durable read; a miss reads the stored session record so a
|
|
98
|
+
* fresh process still deletes the previous pointer.
|
|
87
99
|
*/
|
|
88
100
|
this.continuationIndex = new Map();
|
|
89
101
|
/**
|
|
@@ -231,11 +243,15 @@ export class StorageCoordinator {
|
|
|
231
243
|
recordAck = { sessionId, json: recordJson, projection };
|
|
232
244
|
}
|
|
233
245
|
}
|
|
246
|
+
const continuation = record === undefined ? undefined : this.planContinuation(record);
|
|
247
|
+
if (continuation !== undefined) {
|
|
248
|
+
ops.push(...continuation.leading);
|
|
249
|
+
}
|
|
234
250
|
if (puts.length > 0) {
|
|
235
251
|
ops.push(this.putsOp(puts, recordAck));
|
|
236
252
|
}
|
|
237
|
-
if (
|
|
238
|
-
ops.push(...
|
|
253
|
+
if (continuation !== undefined) {
|
|
254
|
+
ops.push(...continuation.trailing);
|
|
239
255
|
}
|
|
240
256
|
if (ops.length > 0) {
|
|
241
257
|
this.enqueue(ops, reason);
|
|
@@ -309,39 +325,76 @@ export class StorageCoordinator {
|
|
|
309
325
|
};
|
|
310
326
|
}
|
|
311
327
|
/**
|
|
312
|
-
* Index maintenance for `continuation/{channelId}/{token}` → sessionId
|
|
313
|
-
*
|
|
328
|
+
* Index maintenance for `continuation/{channelId}/{token}` → sessionId.
|
|
329
|
+
* Put the current token and delete the previous one. The in-process
|
|
330
|
+
* index is a fast path; a fresh process reads the durable session
|
|
331
|
+
* record (before this flush overwrites it) and deletes that key too.
|
|
332
|
+
* Leading ops must run before the session-record put.
|
|
314
333
|
*/
|
|
315
|
-
|
|
316
|
-
const previous = this.continuationIndex.get(record.sessionId);
|
|
334
|
+
planContinuation(record) {
|
|
317
335
|
const next = record.continuationKey;
|
|
318
|
-
|
|
319
|
-
|
|
336
|
+
const indexKnows = this.continuationIndex.has(record.sessionId);
|
|
337
|
+
const known = indexKnows ? this.continuationIndex.get(record.sessionId) : undefined;
|
|
338
|
+
if (indexKnows && known === next) {
|
|
339
|
+
return undefined;
|
|
320
340
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
ops.push(this.deleteOp(this.keys.continuation(this.agentName, record.channelId, previous)));
|
|
341
|
+
const staleKeys = [];
|
|
342
|
+
if (indexKnows && typeof known === "string" && known !== next) {
|
|
343
|
+
staleKeys.push(this.keys.continuation(this.agentName, record.channelId, known));
|
|
325
344
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
345
|
+
this.continuationIndex.set(record.sessionId, next);
|
|
346
|
+
const leading = [];
|
|
347
|
+
const get = this.definition.get;
|
|
348
|
+
if (!indexKnows && get !== undefined) {
|
|
349
|
+
leading.push({
|
|
350
|
+
label: `continuation-previous(${record.sessionId})`,
|
|
351
|
+
run: async (ctx) => {
|
|
352
|
+
const stored = (await get(this.keys.session(this.agentName, record.sessionId), ctx));
|
|
353
|
+
const previous = stored?.continuationKey;
|
|
354
|
+
if (typeof previous !== "string" || previous.length === 0 || previous === next) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const channelId = stored != null && typeof stored.channelId === "string" && stored.channelId.length > 0
|
|
358
|
+
? stored.channelId
|
|
359
|
+
: record.channelId;
|
|
360
|
+
staleKeys.push(this.keys.continuation(this.agentName, channelId, previous));
|
|
361
|
+
},
|
|
362
|
+
});
|
|
330
363
|
}
|
|
331
|
-
return ops;
|
|
332
|
-
}
|
|
333
|
-
/** KV upsert op on the sink's `put`. */
|
|
334
|
-
putOp(key, value) {
|
|
335
|
-
return {
|
|
336
|
-
label: `put(${key})`,
|
|
337
|
-
run: (ctx) => this.definition.put(key, value, ctx),
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
/** KV delete op on the sink's `delete` (skipped when the hook is absent). */
|
|
341
|
-
deleteOp(key) {
|
|
342
364
|
return {
|
|
343
|
-
|
|
344
|
-
|
|
365
|
+
leading,
|
|
366
|
+
trailing: [
|
|
367
|
+
{
|
|
368
|
+
label: `continuation(${record.sessionId})`,
|
|
369
|
+
run: async (ctx) => {
|
|
370
|
+
// A delete failure must not skip the new pointer. These used to
|
|
371
|
+
// be separate queue ops, so a thrown delete still reached the put.
|
|
372
|
+
for (const key of staleKeys) {
|
|
373
|
+
try {
|
|
374
|
+
await this.definition.delete?.(key, ctx);
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
this.logger(`[bdk] storage delete(${key}) failed: ${describeError(error)}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (next == null) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
try {
|
|
384
|
+
await this.definition.put(this.keys.continuation(this.agentName, record.channelId, next), {
|
|
385
|
+
sessionId: record.sessionId,
|
|
386
|
+
recordUpdatedAt: record.updatedAt,
|
|
387
|
+
}, ctx);
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
// Plan time already advanced the in-process index. Drop it so
|
|
391
|
+
// a later flush retries this pointer instead of treating it as current.
|
|
392
|
+
this.continuationIndex.delete(record.sessionId);
|
|
393
|
+
throw error;
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
],
|
|
345
398
|
};
|
|
346
399
|
}
|
|
347
400
|
// ==========================================================================
|
|
@@ -472,11 +525,38 @@ export class StorageCoordinator {
|
|
|
472
525
|
this.logger(`[bdk] storage continuation entry points at missing session ${sessionId}; treating as a miss`);
|
|
473
526
|
return undefined;
|
|
474
527
|
}
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
if (record.channelId !== channelId
|
|
479
|
-
throw new Error(`storage returned a session that does not match the requested continuation (channel ${channelId})`);
|
|
528
|
+
// A different channel is a broken store. Same channel with a different
|
|
529
|
+
// key is a leftover pointer when the durable record is newer, and the
|
|
530
|
+
// live token when that record write lagged the pointer.
|
|
531
|
+
if (record.channelId !== channelId) {
|
|
532
|
+
throw new Error(`storage returned a session that does not match the requested continuation (channel ${channelId}, requestedContinuationKey=${continuationKey}, recordChannelId=${record.channelId}, recordContinuationKey=${String(record.continuationKey)})`);
|
|
533
|
+
}
|
|
534
|
+
if (record.continuationKey !== continuationKey) {
|
|
535
|
+
const pointerUpdatedAt = continuationPointerUpdatedAt(pointer);
|
|
536
|
+
const recordUpdatedAt = typeof record.updatedAt === "string" ? record.updatedAt : undefined;
|
|
537
|
+
// The pointer was written for a newer record than the one that landed.
|
|
538
|
+
// Deleting it would drop the live token; the record is the one that lagged.
|
|
539
|
+
if (pointerUpdatedAt !== undefined &&
|
|
540
|
+
recordUpdatedAt !== undefined &&
|
|
541
|
+
pointerUpdatedAt > recordUpdatedAt) {
|
|
542
|
+
this.logger(`[bdk] storage continuation record lags the pointer for channel ${channelId}; keeping the pointer`);
|
|
543
|
+
// The caller persists this record. Leaving the old token on it makes
|
|
544
|
+
// the next flush advance `updatedAt` past the pointer stamp, and the
|
|
545
|
+
// following lookup of the live key then deletes that pointer.
|
|
546
|
+
return {
|
|
547
|
+
...record,
|
|
548
|
+
continuationKey,
|
|
549
|
+
updatedAt: pointerUpdatedAt,
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
this.logger(`[bdk] storage continuation pointer is stale for channel ${channelId}; treating as a miss`);
|
|
553
|
+
try {
|
|
554
|
+
await this.definition.delete?.(this.keys.continuation(this.agentName, channelId, continuationKey), ctx);
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
this.logger(`[bdk] storage delete of stale continuation pointer failed: ${describeError(error)}`);
|
|
558
|
+
}
|
|
559
|
+
return undefined;
|
|
480
560
|
}
|
|
481
561
|
return record;
|
|
482
562
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const FACTORY_CHECKPOINT_NAME: string;
|
|
7
7
|
export declare const FACTORY_ISSUE_NAME: string;
|
|
8
|
+
export declare const FACTORY_RUN_NAME: string;
|
|
8
9
|
export interface FactoryCheckpointResourceFixture {
|
|
9
10
|
name: string;
|
|
10
11
|
deployment: string;
|
|
@@ -27,6 +28,13 @@ export interface FactoryIssueResourceFixture {
|
|
|
27
28
|
path: string;
|
|
28
29
|
etag: string;
|
|
29
30
|
}
|
|
31
|
+
export interface FactoryRunResourceFixture {
|
|
32
|
+
name: string;
|
|
33
|
+
environment: string;
|
|
34
|
+
services: string[];
|
|
35
|
+
deployVersion: string;
|
|
36
|
+
createTime: string;
|
|
37
|
+
}
|
|
30
38
|
export interface CheckpointCreatedPayloadFixture {
|
|
31
39
|
eventId: string;
|
|
32
40
|
eventType: "checkpoint.created";
|
|
@@ -41,8 +49,16 @@ export interface IssueCreatedPayloadFixture {
|
|
|
41
49
|
occurredAtMs: number;
|
|
42
50
|
issue: FactoryIssueResourceFixture;
|
|
43
51
|
}
|
|
52
|
+
export interface RunCreatedPayloadFixture {
|
|
53
|
+
eventId: string;
|
|
54
|
+
eventType: "run.created";
|
|
55
|
+
teamId: string;
|
|
56
|
+
occurredAtMs: number;
|
|
57
|
+
run: FactoryRunResourceFixture;
|
|
58
|
+
}
|
|
44
59
|
export declare const FACTORY_CHECKPOINT_RESOURCE: FactoryCheckpointResourceFixture;
|
|
45
60
|
export declare const FACTORY_ISSUE_RESOURCE: FactoryIssueResourceFixture;
|
|
46
61
|
export declare const CHECKPOINT_CREATED_PAYLOAD: CheckpointCreatedPayloadFixture;
|
|
47
62
|
export declare const ISSUE_CREATED_PAYLOAD: IssueCreatedPayloadFixture;
|
|
63
|
+
export declare const RUN_CREATED_PAYLOAD: RunCreatedPayloadFixture;
|
|
48
64
|
//# sourceMappingURL=factory-resource-fixtures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory-resource-fixtures.d.ts","sourceRoot":"","sources":["../../../src/internal/testing/factory-resource-fixtures.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,uBAAuB,EAAE,MAA+C,CAAC;AACtF,eAAO,MAAM,kBAAkB,EAAE,MAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory-resource-fixtures.d.ts","sourceRoot":"","sources":["../../../src/internal/testing/factory-resource-fixtures.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,uBAAuB,EAAE,MAA+C,CAAC;AACtF,eAAO,MAAM,kBAAkB,EAAE,MAAuB,CAAC;AACzD,eAAO,MAAM,gBAAgB,EAAE,MAAyC,CAAC;AAEzE,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,gCAAgC,CAAC;CAC9C;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,2BAA2B,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,yBAAyB,CAAC;CAChC;AAED,eAAO,MAAM,2BAA2B,EAAE,gCASzC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,2BASpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,+BAMxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,0BAMnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,wBAYjC,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export const FACTORY_CHECKPOINT_NAME = "changeMonitors/cm-1/checkpoints/cp-1";
|
|
7
7
|
export const FACTORY_ISSUE_NAME = "issues/iss-1";
|
|
8
|
+
export const FACTORY_RUN_NAME = "changeMonitors/cm-1/runs/run-1";
|
|
8
9
|
export const FACTORY_CHECKPOINT_RESOURCE = {
|
|
9
10
|
name: FACTORY_CHECKPOINT_NAME,
|
|
10
11
|
deployment: "deployments/11111111-1111-4111-8111-111111111111",
|
|
@@ -39,3 +40,16 @@ export const ISSUE_CREATED_PAYLOAD = {
|
|
|
39
40
|
occurredAtMs: 1,
|
|
40
41
|
issue: FACTORY_ISSUE_RESOURCE,
|
|
41
42
|
};
|
|
43
|
+
export const RUN_CREATED_PAYLOAD = {
|
|
44
|
+
eventId: "evt-mr-1",
|
|
45
|
+
eventType: "run.created",
|
|
46
|
+
teamId: "team-1",
|
|
47
|
+
occurredAtMs: 1,
|
|
48
|
+
run: {
|
|
49
|
+
name: FACTORY_RUN_NAME,
|
|
50
|
+
environment: "environments/production",
|
|
51
|
+
services: ["services/portal-website"],
|
|
52
|
+
deployVersion: "3e165785dd2cfecb24b032176d758933a343726e",
|
|
53
|
+
createTime: "2026-09-08T21:00:00Z",
|
|
54
|
+
},
|
|
55
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* messages, assistant text, tool calls with args/results, and
|
|
6
6
|
* success/failure — not a firehose of streaming deltas.
|
|
7
7
|
*/
|
|
8
|
-
import type { SessionEvent,
|
|
8
|
+
import type { SessionEvent, TurnUsage } from "../types.js";
|
|
9
9
|
export interface TrajectoryToolCall {
|
|
10
10
|
callId: string;
|
|
11
11
|
toolName: string;
|
|
@@ -32,8 +32,6 @@ export interface TrajectoryTurn {
|
|
|
32
32
|
toolCalls: TrajectoryToolCall[];
|
|
33
33
|
subagents: TrajectorySubagent[];
|
|
34
34
|
usage?: TurnUsage;
|
|
35
|
-
/** Estimated dollar cost of this turn (from the `turn.completed` event). */
|
|
36
|
-
cost?: TurnCost;
|
|
37
35
|
result?: string;
|
|
38
36
|
failed: boolean;
|
|
39
37
|
error?: string;
|
|
@@ -47,7 +45,10 @@ export interface Trajectory {
|
|
|
47
45
|
finalText: string;
|
|
48
46
|
turnsFailed: number;
|
|
49
47
|
toolCallCount: number;
|
|
50
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* The session's cost from `GET /v1/session/:id/cost`, priced once after the
|
|
50
|
+
* last turn. Never derived from events; absent when nobody priced it.
|
|
51
|
+
*/
|
|
51
52
|
totalCostUsd?: number;
|
|
52
53
|
turns: TrajectoryTurn[];
|
|
53
54
|
}
|
|
@@ -56,8 +57,6 @@ export interface Trajectory {
|
|
|
56
57
|
* folded into final assistant / reasoning text per turn.
|
|
57
58
|
*/
|
|
58
59
|
export declare function buildTrajectory(events: SessionEvent[]): Trajectory;
|
|
59
|
-
/** Micro-dollar precision so summed floats stay readable in JSON. */
|
|
60
|
-
export declare function roundCostUsd(usd: number): number;
|
|
61
60
|
/** Compact dollar display for estimated costs (`$0.0132`, `$1.25`). */
|
|
62
61
|
export declare function formatCostUsd(usd: number): string;
|
|
63
62
|
/** Parse an `events.ndjson` file (or any NDJSON blob of SessionEvents). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/internal/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/internal/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACtC,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CA+NlE;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAc9D;AAED,sDAAsD;AACtD,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGpF;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAoDnE"}
|
|
@@ -188,9 +188,6 @@ export function buildTrajectory(events) {
|
|
|
188
188
|
if (event.data.usage !== undefined) {
|
|
189
189
|
turn.usage = event.data.usage;
|
|
190
190
|
}
|
|
191
|
-
if (event.data.cost !== undefined) {
|
|
192
|
-
turn.cost = event.data.cost;
|
|
193
|
-
}
|
|
194
191
|
if (event.data.result !== undefined) {
|
|
195
192
|
turn.result = event.data.result;
|
|
196
193
|
if (turn.assistantText === "") {
|
|
@@ -223,10 +220,6 @@ export function buildTrajectory(events) {
|
|
|
223
220
|
const turnsFailed = turns.filter((t) => t.failed).length;
|
|
224
221
|
const toolCallCount = turns.reduce((n, t) => n + t.toolCalls.length + t.subagents.reduce((m, s) => m + s.toolCalls.length, 0), 0);
|
|
225
222
|
const lastGood = [...turns].reverse().find((t) => t.assistantText !== "");
|
|
226
|
-
const costedTurns = turns.filter((t) => t.cost !== undefined);
|
|
227
|
-
const totalCostUsd = costedTurns.length === 0
|
|
228
|
-
? undefined
|
|
229
|
-
: roundCostUsd(costedTurns.reduce((sum, t) => sum + (t.cost?.totalUsd ?? 0), 0));
|
|
230
223
|
return {
|
|
231
224
|
sessionId,
|
|
232
225
|
...(sdkAgentId === undefined ? {} : { sdkAgentId }),
|
|
@@ -236,14 +229,9 @@ export function buildTrajectory(events) {
|
|
|
236
229
|
finalText: lastGood?.assistantText ?? "",
|
|
237
230
|
turnsFailed,
|
|
238
231
|
toolCallCount,
|
|
239
|
-
...(totalCostUsd === undefined ? {} : { totalCostUsd }),
|
|
240
232
|
turns,
|
|
241
233
|
};
|
|
242
234
|
}
|
|
243
|
-
/** Micro-dollar precision so summed floats stay readable in JSON. */
|
|
244
|
-
export function roundCostUsd(usd) {
|
|
245
|
-
return Math.round(usd * 1e6) / 1e6;
|
|
246
|
-
}
|
|
247
235
|
/** Compact dollar display for estimated costs (`$0.0132`, `$1.25`). */
|
|
248
236
|
export function formatCostUsd(usd) {
|
|
249
237
|
if (!Number.isFinite(usd)) {
|
|
@@ -324,7 +312,7 @@ export function formatTrajectoryText(trajectory) {
|
|
|
324
312
|
lines.push(` error: ${turn.error}`);
|
|
325
313
|
}
|
|
326
314
|
if (turn.usage !== undefined) {
|
|
327
|
-
lines.push(` usage: in ${turn.usage.inputTokens} out ${turn.usage.outputTokens}
|
|
315
|
+
lines.push(` usage: in ${turn.usage.inputTokens} out ${turn.usage.outputTokens}`);
|
|
328
316
|
}
|
|
329
317
|
}
|
|
330
318
|
return `${lines.join("\n")}\n`;
|
package/dist/memory.d.ts
CHANGED
|
@@ -90,14 +90,17 @@ export interface AgentStoreMemoryBackendOptions {
|
|
|
90
90
|
*/
|
|
91
91
|
export declare function agentStoreMemoryBackend(options?: AgentStoreMemoryBackendOptions): MemoryBackend;
|
|
92
92
|
export interface MemoryHookOptions {
|
|
93
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Where records go. Defaults to {@link agentStoreMemoryBackend} on
|
|
95
|
+
* Cursor-managed hosting and {@link fileMemoryBackend} elsewhere.
|
|
96
|
+
*/
|
|
94
97
|
backend?: MemoryBackend;
|
|
95
98
|
/** Truncation cap for stored userMessage / result text. Default 2000. */
|
|
96
99
|
maxTextLength?: number;
|
|
97
100
|
}
|
|
98
101
|
/**
|
|
99
102
|
* Observe-only hook that journals every turn. Author it as
|
|
100
|
-
* `
|
|
103
|
+
* `bot/hooks/memory.ts`:
|
|
101
104
|
*
|
|
102
105
|
* ```ts
|
|
103
106
|
* import { memoryHook } from "@cursor/bdk/memory";
|
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE,sEAAsE;AACtE,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,UAAU,CACR,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;;OAKG;IACH,cAAc,CAAC,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,aAAa,CA6BvF;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,uCAAuC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,aAAa,CA6Jf;AAgBD,MAAM,WAAW,iBAAiB;IAChC
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE,sEAAsE;AACtE,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,gDAAgD;AAChD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,UAAU,CACR,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;;OAKG;IACH,cAAc,CAAC,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,aAAa,CA6BvF;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,uCAAuC;IACvC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,8BAAmC,GAC3C,aAAa,CA6Jf;AAgBD,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAgG1E"}
|
package/dist/memory.js
CHANGED
|
Binary file
|