@cursor/bdk 0.2.3 → 0.2.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/bin/agent-serve.js +9 -1
- package/dist/channels/slack/attachments.d.ts +2 -1
- package/dist/channels/slack/attachments.d.ts.map +1 -1
- package/dist/channels/slack/attachments.js +19 -9
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +26 -24
- package/dist/channels/slack/thread-context.d.ts +21 -11
- package/dist/channels/slack/thread-context.d.ts.map +1 -1
- package/dist/channels/slack/thread-context.js +75 -27
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BOIHhrKi.js → app.4kQ8Db_q.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.CvuAJ0My.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.D49zVZqM.js → VPLocalSearchBox.DY1RwB8Q.js} +1 -1
- package/dist/docs/assets/chunks/{arc.hmjb-sc4.js → arc.CxE_fSPK.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.CxEI1KqM.js → architectureDiagram-Q4EWVU46.CPX426ui.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.DHHvBWoV.js → baseUniq.CB52JrKG.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DnXW-3bu.js → blockDiagram-DXYQGD6D.J0cNaQCL.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.e-47O2jM.js → c4Diagram-AHTNJAMY.DJn3vEGT.js} +1 -1
- package/dist/docs/assets/chunks/channel.BoNycAoN.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.3ry4pYXB.js → chunk-4BX2VUAB.Dao618F6.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DGIZFRx6.js → chunk-4TB4RGXK.QW8Rhjai.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DKBnqg9U.js → chunk-55IACEB6.DfRLLKF_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BIU8Ue5k.js → chunk-EDXVE4YY.CIV2ApKQ.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DP-TFhjI.js → chunk-FMBD7UC4.BEheSuxp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Ux0OYj5v.js → chunk-OYMX7WX6.CUN88ENB.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BzHMwYox.js → chunk-QZHKN3VN.CgqCs8b_.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.D4OGAsSP.js → chunk-YZCP3GAM.iCH0nnTJ.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C4x07Gkj.js +1 -0
- package/dist/docs/assets/chunks/clone.Db22cH_-.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Jq_7BUNx.js → cose-bilkent-S5V4N54A.BLcUxhWE.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.Di-skR2x.js → dagre-KV5264BT.Ep7LofOm.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DeREHIdH.js → diagram-5BDNPKRD.Bzf4GSQ4.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.C7Kcqxro.js → diagram-G4DWMVQ6.DD6Jh-eM.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BK3eohyo.js → diagram-MMDJMWI5.oOIl8bWd.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.C6TyymXT.js → diagram-TYMM5635.DHs85Ade.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DYGG-gGx.js → erDiagram-SMLLAGMA.BIb5ghCk.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.C9nBcSV4.js → flowDiagram-DWJPFMVM.DV4paY9k.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.wAg_ymsp.js → ganttDiagram-T4ZO3ILL.AyEKA6_v.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.B87j9Oeg.js → gitGraphDiagram-UUTBAWPF.BltiCDFo.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CuFMj31w.js → graph.DzuEYGdC.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.P_mLGumP.js → infoDiagram-42DDH7IO.BV2l981J.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DyuL_MsT.js → ishikawaDiagram-UXIWVN3A.BA4Izf-m.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CtP09IoJ.js → journeyDiagram-VCZTEJTY.DjaFbFS3.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BoeSYPZo.js → kanban-definition-6JOO6SKY.CfTFieDs.js} +1 -1
- package/dist/docs/assets/chunks/{layout.B0lMMtNo.js → layout.DzfWqTBV.js} +1 -1
- package/dist/docs/assets/chunks/{linear.HxRBiAFX.js → linear.BO6mpulV.js} +1 -1
- package/dist/docs/assets/chunks/{min.BGlFFHwS.js → min.BGgTadgT.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.JyLBD9M8.js → mindmap-definition-QFDTVHPH.DPuIXVWY.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DnSmNZF8.js → pieDiagram-DEJITSTG.BOnl3bBg.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CUCnbfCa.js → quadrantDiagram-34T5L4WZ.DNB6Ckdc.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.py0IVUn5.js → requirementDiagram-MS252O5E.D5-Qo7vb.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.Bkc-HWYp.js → sankeyDiagram-XADWPNL6.8t65cesf.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Dqn8Mlv2.js → sequenceDiagram-FGHM5R23.CaG07BdS.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.JikkoQUU.js → stateDiagram-FHFEXIEX.TKOweTB6.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CuqmyQc4.js +1 -0
- package/dist/docs/assets/chunks/{theme.b6HQ6zG_.js → theme.Dx-JhpTB.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.BvpSXiBj.js → timeline-definition-GMOUNBTQ.fE53zQ2s.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CU7MVnZx.js → vennDiagram-DHZGUBPP.DJsZZaJg.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BKwC4ctG.js → wardley-RL74JXVD.844kyrjl.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.BfaF6Uhe.js → wardleyDiagram-NUSXRM2D.CMZ-Ru_t.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.Bg5dcpj4.js → xychartDiagram-5P7HB3ND.XXrhBc7a.js} +1 -1
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.js → deployment.md.UhnJIMr-.js} +2 -2
- package/dist/docs/assets/{deployment.md.BJ8i7Q6p.lean.js → deployment.md.UhnJIMr-.lean.js} +1 -1
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.js → guides_jev.md.CRcgmjDb.js} +2 -2
- package/dist/docs/assets/{guides_jev.md.BNDm14Gy.lean.js → guides_jev.md.CRcgmjDb.lean.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.DzGI777n.js → reference_agent-config.md.Cj5uBKp4.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.js → reference_extensions.md.pa2tN-e4.js} +4 -3
- package/dist/docs/assets/{reference_extensions.md.CPPrkWlJ.lean.js → reference_extensions.md.pa2tN-e4.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +35 -35
- package/dist/docs/deployment.html +37 -37
- package/dist/docs/deployment.md +4 -1
- package/dist/docs/evals.html +35 -35
- package/dist/docs/guides/agent-to-agent.html +35 -35
- 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/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 +37 -37
- package/dist/docs/guides/jev.md +7 -0
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/opentelemetry.html +35 -35
- 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 +35 -35
- package/dist/docs/llms-full.txt +25 -2
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +37 -37
- package/dist/docs/reference/agent-config.md +1 -1
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +35 -35
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +39 -38
- package/dist/docs/reference/extensions.md +13 -0
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- 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 +35 -35
- 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/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/extensions/jev/extension.d.ts +3 -0
- package/dist/extensions/jev/extension.d.ts.map +1 -1
- package/dist/extensions/jev/extension.js +10 -1
- package/dist/extensions/jev/lib/evaluate.d.ts +4 -0
- package/dist/extensions/jev/lib/evaluate.d.ts.map +1 -1
- package/dist/extensions/jev/lib/evaluate.js +6 -2
- package/dist/extensions.d.ts +4 -2
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +5 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +19 -5
- package/dist/internal/discovery/agent-config.d.ts +6 -5
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +29 -28
- package/dist/internal/discovery/agent.js +1 -1
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +12 -0
- package/dist/internal/hosting.d.ts +8 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +24 -0
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +4 -1
- package/docs/guides/jev.md +7 -0
- package/docs/reference/agent-config.md +1 -1
- package/docs/reference/extensions.md +13 -0
- package/package.json +1 -9
- package/dist/docs/assets/chunks/@localSearchIndexroot.D5L-b34G.js +0 -1
- package/dist/docs/assets/chunks/channel.BbOGaJQP.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.Db58HCb1.js +0 -1
- package/dist/docs/assets/chunks/clone.Co4MBflG.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.CMsKhrW0.js +0 -1
- package/src/artifacts.ts +0 -68
- package/src/bin/agent-serve.ts +0 -1854
- package/src/channels/bitbucket/api.ts +0 -891
- package/src/channels/bitbucket/binding.ts +0 -417
- package/src/channels/bitbucket/bitbucket-channel.ts +0 -162
- package/src/channels/bitbucket/bitbucket-webhook.ts +0 -519
- package/src/channels/bitbucket/checks.ts +0 -146
- package/src/channels/bitbucket/cursor-account.ts +0 -106
- package/src/channels/bitbucket/defaults.ts +0 -100
- package/src/channels/bitbucket/events.ts +0 -74
- package/src/channels/bitbucket/index.ts +0 -51
- package/src/channels/bitbucket/replay.ts +0 -421
- package/src/channels/bitbucket/state.ts +0 -59
- package/src/channels/bitbucket/types.ts +0 -261
- package/src/channels/change-monitors/change-monitors-channel.ts +0 -63
- package/src/channels/change-monitors/index.ts +0 -8
- package/src/channels/change-monitors/types.ts +0 -42
- package/src/channels/checks.ts +0 -185
- package/src/channels/deployments/deployments-channel.ts +0 -224
- package/src/channels/deployments/index.ts +0 -25
- package/src/channels/deployments/types.ts +0 -92
- package/src/channels/github/api.ts +0 -526
- package/src/channels/github/auth.ts +0 -293
- package/src/channels/github/binding.ts +0 -233
- package/src/channels/github/checks.ts +0 -145
- package/src/channels/github/cursor-account.ts +0 -303
- package/src/channels/github/defaults.ts +0 -168
- package/src/channels/github/events.ts +0 -67
- package/src/channels/github/forward.ts +0 -359
- package/src/channels/github/github-channel.ts +0 -2334
- package/src/channels/github/index.ts +0 -54
- package/src/channels/github/progress.ts +0 -365
- package/src/channels/github/replay.ts +0 -372
- package/src/channels/github/state.ts +0 -124
- package/src/channels/github/types.ts +0 -590
- package/src/channels/gitlab/api.ts +0 -329
- package/src/channels/gitlab/binding.ts +0 -231
- package/src/channels/gitlab/checks.ts +0 -228
- package/src/channels/gitlab/cursor-account.ts +0 -105
- package/src/channels/gitlab/defaults.ts +0 -80
- package/src/channels/gitlab/events.ts +0 -37
- package/src/channels/gitlab/gitlab-channel.ts +0 -160
- package/src/channels/gitlab/gitlab-webhook.ts +0 -509
- package/src/channels/gitlab/index.ts +0 -44
- package/src/channels/gitlab/replay.ts +0 -328
- package/src/channels/gitlab/state.ts +0 -55
- package/src/channels/gitlab/types.ts +0 -247
- package/src/channels/issues/index.ts +0 -9
- package/src/channels/issues/issues-channel.ts +0 -45
- package/src/channels/issues/types.ts +0 -38
- package/src/channels/origin/api.ts +0 -507
- package/src/channels/origin/binding.ts +0 -114
- package/src/channels/origin/checks.ts +0 -250
- package/src/channels/origin/cursor-account.ts +0 -58
- package/src/channels/origin/defaults.ts +0 -140
- package/src/channels/origin/events.ts +0 -35
- package/src/channels/origin/index.ts +0 -35
- package/src/channels/origin/origin-channel.ts +0 -815
- package/src/channels/origin/origin-webhook.ts +0 -296
- package/src/channels/origin/reactions.ts +0 -72
- package/src/channels/origin/state.ts +0 -54
- package/src/channels/origin/types.ts +0 -295
- package/src/channels/slack/agentic-delivery.ts +0 -634
- package/src/channels/slack/agentic-posted.ts +0 -135
- package/src/channels/slack/agentic-signals.ts +0 -231
- package/src/channels/slack/api.ts +0 -761
- package/src/channels/slack/approvals.ts +0 -279
- package/src/channels/slack/assistant.ts +0 -76
- package/src/channels/slack/attachments.ts +0 -596
- package/src/channels/slack/auth.ts +0 -127
- package/src/channels/slack/blocks.ts +0 -131
- package/src/channels/slack/bot-mentions.ts +0 -318
- package/src/channels/slack/channel-watch.ts +0 -314
- package/src/channels/slack/cli-project.ts +0 -249
- package/src/channels/slack/code-fences.ts +0 -171
- package/src/channels/slack/constants.ts +0 -38
- package/src/channels/slack/credentials.ts +0 -88
- package/src/channels/slack/defaults.ts +0 -714
- package/src/channels/slack/dispatch.ts +0 -1060
- package/src/channels/slack/doctor.ts +0 -338
- package/src/channels/slack/eval-directive.ts +0 -306
- package/src/channels/slack/event-id-dedupe.ts +0 -30
- package/src/channels/slack/external-policy.ts +0 -75
- package/src/channels/slack/footer.ts +0 -106
- package/src/channels/slack/inbound.ts +0 -416
- package/src/channels/slack/index.ts +0 -53
- package/src/channels/slack/init.ts +0 -169
- package/src/channels/slack/interactive.ts +0 -406
- package/src/channels/slack/links.ts +0 -23
- package/src/channels/slack/live-delivery.ts +0 -489
- package/src/channels/slack/log.ts +0 -70
- package/src/channels/slack/manifest.ts +0 -240
- package/src/channels/slack/message-body.ts +0 -82
- package/src/channels/slack/nudge-carrier.ts +0 -224
- package/src/channels/slack/nudge-store.ts +0 -334
- package/src/channels/slack/paint-start.ts +0 -93
- package/src/channels/slack/placeholder.ts +0 -358
- package/src/channels/slack/pr-ref.ts +0 -74
- package/src/channels/slack/progress-delivery.ts +0 -138
- package/src/channels/slack/reasoning-card.ts +0 -125
- package/src/channels/slack/reasoning-chip.ts +0 -41
- package/src/channels/slack/recording-sink.ts +0 -167
- package/src/channels/slack/redact.ts +0 -6
- package/src/channels/slack/reply-options.ts +0 -279
- package/src/channels/slack/setup.ts +0 -125
- package/src/channels/slack/slack-channel.ts +0 -744
- package/src/channels/slack/socket-mode.ts +0 -140
- package/src/channels/slack/stop.ts +0 -25
- package/src/channels/slack/stream.ts +0 -66
- package/src/channels/slack/thread-context.ts +0 -485
- package/src/channels/slack/tool-approval-events.ts +0 -233
- package/src/channels/slack/tool-cards.ts +0 -198
- package/src/channels/slack/tool-chip.ts +0 -34
- package/src/channels/slack/types.ts +0 -787
- package/src/channels/slack/upload.ts +0 -137
- package/src/channels.ts +0 -543
- package/src/connections.ts +0 -153
- package/src/dashboard-session-url.ts +0 -30
- package/src/evals/assertions.ts +0 -688
- package/src/evals/expect.ts +0 -250
- package/src/evals/judge.ts +0 -329
- package/src/evals/loaders.ts +0 -111
- package/src/evals/matchers.ts +0 -223
- package/src/evals/reporters.ts +0 -257
- package/src/evals/results.ts +0 -130
- package/src/evals/run-facts.ts +0 -306
- package/src/evals.ts +0 -709
- package/src/extensions/cursor-cloud-agents/extension.ts +0 -131
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +0 -386
- package/src/extensions/cursor-cloud-agents/lib/channels.ts +0 -11
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +0 -98
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +0 -5
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +0 -80
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +0 -19
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +0 -37
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +0 -21
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +0 -47
- package/src/extensions/cursor-cloud-agents/tools/get.ts +0 -18
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +0 -62
- package/src/extensions/cursor-cloud-agents/tools/list.ts +0 -31
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +0 -36
- package/src/extensions/cursor-grokbot-agents/extension.ts +0 -132
- package/src/extensions/cursor-grokbot-agents/lib/agents.ts +0 -42
- package/src/extensions/cursor-grokbot-agents/lib/backend.ts +0 -208
- package/src/extensions/cursor-grokbot-agents/lib/contacts.ts +0 -74
- package/src/extensions/cursor-grokbot-agents/lib/conversation.ts +0 -260
- package/src/extensions/cursor-grokbot-agents/lib/inputs.ts +0 -21
- package/src/extensions/cursor-grokbot-agents/lib/lock.ts +0 -26
- package/src/extensions/cursor-grokbot-agents/skills/consult.md +0 -40
- package/src/extensions/cursor-grokbot-agents/tools/ask.ts +0 -32
- package/src/extensions/cursor-grokbot-agents/tools/check.ts +0 -25
- package/src/extensions/cursor-grokbot-agents/tools/interrupt.ts +0 -17
- package/src/extensions/cursor-grokbot-agents/tools/list.ts +0 -26
- package/src/extensions/improve/extension.ts +0 -69
- package/src/extensions/improve/skills/yourself.ts +0 -50
- package/src/extensions/jev/extension.ts +0 -95
- package/src/extensions/jev/lib/evaluate.ts +0 -266
- package/src/extensions/jev/skills/gated-write.md +0 -25
- package/src/extensions/jev/skills/questions.md +0 -33
- package/src/extensions/jev/tools/evaluate.ts +0 -82
- package/src/extensions/slack-communication/evals/harness.ts +0 -705
- package/src/extensions/slack-communication/evals/slack-communication.eval.ts +0 -830
- package/src/extensions/slack-communication/evals/slack-placeholder.eval.ts +0 -172
- package/src/extensions/slack-communication/extension.ts +0 -44
- package/src/extensions/slack-communication/skills/slack-voice.ts +0 -56
- package/src/extensions/slack-communication/tools/delete-message.ts +0 -33
- package/src/extensions/slack-communication/tools/edit-message.ts +0 -42
- package/src/extensions/slack-communication/tools/post-card.ts +0 -28
- package/src/extensions/slack-communication/tools/post-file.ts +0 -82
- package/src/extensions/slack-communication/tools/post-update.ts +0 -40
- package/src/extensions/slack-communication/tools/react.ts +0 -30
- package/src/extensions/slack-communication/tools/set-status.ts +0 -21
- package/src/extensions.ts +0 -179
- package/src/files-backends/agent-store-presigned-url.ts +0 -11
- package/src/files-backends/cursor-hosted.ts +0 -1212
- package/src/files-backends/local-fs.ts +0 -163
- package/src/files.ts +0 -293
- package/src/filesystem.ts +0 -2005
- package/src/hooks.ts +0 -30
- package/src/index.ts +0 -259
- package/src/internal/advertise-tools.ts +0 -370
- package/src/internal/approval-gate.ts +0 -103
- package/src/internal/artifacts-store.ts +0 -836
- package/src/internal/as-of.ts +0 -257
- package/src/internal/auth.ts +0 -46
- package/src/internal/authored-alias-hooks.ts +0 -138
- package/src/internal/authored-loaders.ts +0 -188
- package/src/internal/bounded-int.ts +0 -24
- package/src/internal/bounded.ts +0 -25
- package/src/internal/brand.ts +0 -28
- package/src/internal/browser-origin-guard.ts +0 -67
- package/src/internal/builtin-tools/artifacts.ts +0 -62
- package/src/internal/builtin-tools/index.ts +0 -53
- package/src/internal/builtin-tools/reminders.ts +0 -145
- package/src/internal/channel-dispatch.ts +0 -129
- package/src/internal/channel-route-dispatch.ts +0 -58
- package/src/internal/channel-state.ts +0 -83
- package/src/internal/chat-client.ts +0 -594
- package/src/internal/cli-ax.ts +0 -2318
- package/src/internal/cli-bitbucket.ts +0 -438
- package/src/internal/cli-convert-automation.ts +0 -335
- package/src/internal/cli-cursor.ts +0 -282
- package/src/internal/cli-deploy.ts +0 -2519
- package/src/internal/cli-docs.ts +0 -192
- package/src/internal/cli-github.ts +0 -806
- package/src/internal/cli-gitlab.ts +0 -452
- package/src/internal/cli-images.ts +0 -672
- package/src/internal/cli-manifest.ts +0 -56
- package/src/internal/cli-mcp-oauth.ts +0 -396
- package/src/internal/cli-mcp.ts +0 -808
- package/src/internal/cli-skills.ts +0 -98
- package/src/internal/cli-slack-manual.ts +0 -418
- package/src/internal/cli-slack.ts +0 -874
- package/src/internal/cloud-merge.ts +0 -51
- package/src/internal/cloud-turn-cost.ts +0 -159
- package/src/internal/connection-env.ts +0 -106
- package/src/internal/continuation-channel.ts +0 -233
- package/src/internal/continuation-identity.ts +0 -935
- package/src/internal/conversation-mirror.ts +0 -423
- package/src/internal/convert-automation/convert-workflow.ts +0 -1377
- package/src/internal/convert-automation/slug.ts +0 -29
- package/src/internal/convert-automation/types.ts +0 -212
- package/src/internal/cron.ts +0 -76
- package/src/internal/cursor/account-mcp.ts +0 -692
- package/src/internal/cursor/backend-client.ts +0 -984
- package/src/internal/cursor/bound-secret-file.ts +0 -101
- package/src/internal/cursor/credentials.ts +0 -560
- package/src/internal/cursor/cursor-api-transport.ts +0 -65
- package/src/internal/cursor/github-credentials.ts +0 -228
- package/src/internal/cursor/hosted-bound-secrets.ts +0 -71
- package/src/internal/cursor/hosted-deployment-secrets.ts +0 -100
- package/src/internal/cursor/hosted-store-secrets.ts +0 -152
- package/src/internal/cursor/session-token.ts +0 -111
- package/src/internal/cursor/store-api-client.ts +0 -323
- package/src/internal/cursor-account-mcp-auth.ts +0 -303
- package/src/internal/cursor-agent-template.ts +0 -50
- package/src/internal/cursor-deployment-relay.ts +0 -315
- package/src/internal/cursor-event-relay.ts +0 -675
- package/src/internal/cursor-relay-core.ts +0 -563
- package/src/internal/deferred-channel-session.ts +0 -61
- package/src/internal/deploy-client.ts +0 -1574
- package/src/internal/deploy-manifest.ts +0 -361
- package/src/internal/deploy-source.ts +0 -144
- package/src/internal/describe-error.ts +0 -32
- package/src/internal/dev-mode.ts +0 -20
- package/src/internal/discovery/agent-config.ts +0 -288
- package/src/internal/discovery/agent.ts +0 -381
- package/src/internal/discovery/channels.ts +0 -100
- package/src/internal/discovery/connections.ts +0 -516
- package/src/internal/discovery/context.ts +0 -38
- package/src/internal/discovery/cursor-plugin.ts +0 -628
- package/src/internal/discovery/extension-overlay.ts +0 -247
- package/src/internal/discovery/extensions.ts +0 -490
- package/src/internal/discovery/fs.ts +0 -103
- package/src/internal/discovery/hooks.ts +0 -63
- package/src/internal/discovery/info.ts +0 -174
- package/src/internal/discovery/instructions.ts +0 -98
- package/src/internal/discovery/modules.ts +0 -107
- package/src/internal/discovery/names.ts +0 -45
- package/src/internal/discovery/project.ts +0 -319
- package/src/internal/discovery/reminders.ts +0 -65
- package/src/internal/discovery/runtime.ts +0 -158
- package/src/internal/discovery/schedules.ts +0 -120
- package/src/internal/discovery/seed-files.ts +0 -34
- package/src/internal/discovery/services.ts +0 -151
- package/src/internal/discovery/skills.ts +0 -174
- package/src/internal/discovery/subagent.ts +0 -138
- package/src/internal/discovery/tools.ts +0 -170
- package/src/internal/discovery.ts +0 -27
- package/src/internal/distribution.ts +0 -126
- package/src/internal/docs-site.ts +0 -248
- package/src/internal/duration.ts +0 -37
- package/src/internal/env-file.ts +0 -83
- package/src/internal/eval-judge-model.ts +0 -142
- package/src/internal/eval-run-store.ts +0 -585
- package/src/internal/eval-runner.ts +0 -823
- package/src/internal/evals-client.ts +0 -475
- package/src/internal/event-log.ts +0 -342
- package/src/internal/event-mapper.ts +0 -811
- package/src/internal/expected-delivery-failure.ts +0 -34
- package/src/internal/factory-resource-channel.ts +0 -103
- package/src/internal/filesystem/errors.ts +0 -207
- package/src/internal/filesystem/format.ts +0 -253
- package/src/internal/filesystem/merge.ts +0 -192
- package/src/internal/filesystem/nearest.ts +0 -112
- package/src/internal/filesystem/scratch.ts +0 -239
- package/src/internal/filesystem/sdk-schemas.ts +0 -204
- package/src/internal/filesystem/tools.ts +0 -804
- package/src/internal/filesystem/walk.ts +0 -366
- package/src/internal/fixtures/units-server.ts +0 -52
- package/src/internal/framework-file-storage.ts +0 -357
- package/src/internal/framework-storage-selection.ts +0 -156
- package/src/internal/frontmatter.ts +0 -108
- package/src/internal/github-fanout.ts +0 -144
- package/src/internal/guest-network.ts +0 -391
- package/src/internal/handleAgentServeTrigger.ts +0 -286
- package/src/internal/host-files.ts +0 -341
- package/src/internal/host-kv.ts +0 -81
- package/src/internal/host-otel.ts +0 -231
- package/src/internal/host-platforms.ts +0 -170
- package/src/internal/hosted-admission-adapter.ts +0 -47
- package/src/internal/hosted-admission-context.ts +0 -37
- package/src/internal/hosted-catch-protocol.ts +0 -112
- package/src/internal/hosted-catch.ts +0 -179
- package/src/internal/hosted-delivery-protocol.ts +0 -824
- package/src/internal/hosted-delivery.ts +0 -1410
- package/src/internal/hosted-execution-diag.ts +0 -291
- package/src/internal/hosted-execution-flush.ts +0 -136
- package/src/internal/hosted-execution-latency.ts +0 -301
- package/src/internal/hosted-managed-automation.ts +0 -116
- package/src/internal/hosting.ts +0 -114
- package/src/internal/http-channel-define.ts +0 -25
- package/src/internal/http-channel.ts +0 -669
- package/src/internal/http-control-plane-session.ts +0 -110
- package/src/internal/ids.ts +0 -39
- package/src/internal/incoming-headers-to-fetch.ts +0 -45
- package/src/internal/init-interview.ts +0 -360
- package/src/internal/init-project.ts +0 -711
- package/src/internal/init-scaffold.ts +0 -182
- package/src/internal/inline-stdio-define-stub.ts +0 -4
- package/src/internal/inline-stdio-mcp.ts +0 -230
- package/src/internal/install-cursor-skills.ts +0 -604
- package/src/internal/is-record.ts +0 -3
- package/src/internal/json-schema.ts +0 -95
- package/src/internal/legacy-command-guard.ts +0 -66
- package/src/internal/listen-port.ts +0 -85
- package/src/internal/local-control-plane.ts +0 -442
- package/src/internal/local-env.ts +0 -59
- package/src/internal/local-ingress.ts +0 -90
- package/src/internal/log-ring.ts +0 -59
- package/src/internal/logs-client.ts +0 -477
- package/src/internal/map-pool.ts +0 -39
- package/src/internal/mcp-endpoint.ts +0 -747
- package/src/internal/mcp-host.ts +0 -509
- package/src/internal/mcp-oauth-on-demand.ts +0 -337
- package/src/internal/mcp-oauth-persist.ts +0 -118
- package/src/internal/mcp-oauth.ts +0 -549
- package/src/internal/net.ts +0 -29
- package/src/internal/open-browser.ts +0 -41
- package/src/internal/otel/attrs.ts +0 -16
- package/src/internal/otel/collector.ts +0 -937
- package/src/internal/otel/config.ts +0 -287
- package/src/internal/otel/http.ts +0 -122
- package/src/internal/otel/mcp.ts +0 -56
- package/src/internal/otel/propagation.ts +0 -17
- package/src/internal/otel/runtime.ts +0 -441
- package/src/internal/package-inline-stdio.ts +0 -114
- package/src/internal/peer-connections.ts +0 -96
- package/src/internal/platform-schedule-sync.ts +0 -75
- package/src/internal/platform-timers.ts +0 -365
- package/src/internal/playground/static.ts +0 -278
- package/src/internal/playground/toolchain.ts +0 -270
- package/src/internal/playground-proxy.ts +0 -564
- package/src/internal/process-memory-telemetry.ts +0 -334
- package/src/internal/project-layout.ts +0 -31
- package/src/internal/prompt-context.ts +0 -116
- package/src/internal/reminder-control-plane-protocol.ts +0 -482
- package/src/internal/reminder-runner.ts +0 -1559
- package/src/internal/reminder-schedule.ts +0 -104
- package/src/internal/reminder-store.ts +0 -176
- package/src/internal/request-error-status.ts +0 -95
- package/src/internal/request-headers.ts +0 -21
- package/src/internal/resolve-prod-target.ts +0 -334
- package/src/internal/resolved-connections.ts +0 -190
- package/src/internal/router.ts +0 -143
- package/src/internal/run-client.ts +0 -354
- package/src/internal/runtime-dispatch-runner.ts +0 -50
- package/src/internal/sanitize-mcp-tool-name.ts +0 -31
- package/src/internal/schedule-runner.ts +0 -154
- package/src/internal/scm/pr-url.ts +0 -245
- package/src/internal/sdk-runner.ts +0 -959
- package/src/internal/serve-restart.ts +0 -113
- package/src/internal/server.ts +0 -3147
- package/src/internal/session-cost.ts +0 -208
- package/src/internal/session-engine.ts +0 -5622
- package/src/internal/session-links.ts +0 -84
- package/src/internal/session-run-log.ts +0 -535
- package/src/internal/session-store.ts +0 -307
- package/src/internal/session-urls.ts +0 -32
- package/src/internal/sessions-client.ts +0 -239
- package/src/internal/skill-catalog.ts +0 -66
- package/src/internal/skills-sync.ts +0 -55
- package/src/internal/slack-provision-client.ts +0 -544
- package/src/internal/slack-thread-key.ts +0 -11
- package/src/internal/sleep.ts +0 -3
- package/src/internal/start-log-store.ts +0 -164
- package/src/internal/steering.ts +0 -17
- package/src/internal/storage-coordinator.ts +0 -800
- package/src/internal/storage-roles.ts +0 -86
- package/src/internal/storage.ts +0 -1
- package/src/internal/store-api-protocol.ts +0 -205
- package/src/internal/store-mirror.ts +0 -73
- package/src/internal/stream-progress.ts +0 -294
- package/src/internal/terminal-style.ts +0 -133
- package/src/internal/testing/factory-resource-fixtures.ts +0 -84
- package/src/internal/testing/scm-continuation-fixtures.ts +0 -285
- package/src/internal/tool-catalog.ts +0 -104
- package/src/internal/tool-policy.ts +0 -222
- package/src/internal/tool-result.ts +0 -50
- package/src/internal/trajectory.ts +0 -418
- package/src/internal/turn-cost.ts +0 -136
- package/src/internal/turn-governor.ts +0 -145
- package/src/internal/turn-lease-store.ts +0 -144
- package/src/internal/turn-outbox.ts +0 -77
- package/src/internal/update-check.ts +0 -517
- package/src/internal/v2-hosting.ts +0 -52
- package/src/internal/workspace-sync.ts +0 -114
- package/src/internal/workspace.ts +0 -505
- package/src/kv/memory-kv.ts +0 -94
- package/src/kv.ts +0 -18
- package/src/memory.ts +0 -487
- package/src/otel-public.ts +0 -24
- package/src/otel.ts +0 -320
- package/src/prompt.ts +0 -80
- package/src/reminders.ts +0 -65
- package/src/schedules.ts +0 -31
- package/src/skills.ts +0 -27
- package/src/storage-backends/cursor-hosted-v2.ts +0 -204
- package/src/storage-backends/cursor-hosted.ts +0 -388
- package/src/storage-backends/file-kv.ts +0 -276
- package/src/storage-protocol.ts +0 -261
- package/src/storage.ts +0 -408
- package/src/tools.ts +0 -166
- package/src/types.ts +0 -3776
- /package/dist/docs/assets/{reference_agent-config.md.DzGI777n.lean.js → reference_agent-config.md.Cj5uBKp4.lean.js} +0 -0
package/src/memory.ts
DELETED
|
@@ -1,487 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session memory — a journal of what every session of this agent did, so
|
|
3
|
-
* later sessions can recall and build on past work.
|
|
4
|
-
*
|
|
5
|
-
* The write side is {@link memoryHook}, authored as a thin re-export at
|
|
6
|
-
* `agent/hooks/memory.ts` (scaffolded by `agent-sdk init`): after each turn
|
|
7
|
-
* it appends one record (timestamp, session, user message, final result,
|
|
8
|
-
* usage) to `<stateRoot>/memory/journal.jsonl`.
|
|
9
|
-
*
|
|
10
|
-
* There is no read-side API. The framework symlinks `<stateRoot>/memory`
|
|
11
|
-
* into every session workspace as `memory/`, so agents read the journal
|
|
12
|
-
* with their normal file tools (`instructions.md` points them at it). That
|
|
13
|
-
* filesystem visibility is why memory does not route through
|
|
14
|
-
* `defineStorage` sinks, which are opaque to the model. A custom
|
|
15
|
-
* {@link MemoryBackend} (database, vector store, …) supplies its own read
|
|
16
|
-
* path — typically a server tool under `agent/tools/`, which can resolve
|
|
17
|
-
* state via `ctx.stateRoot`.
|
|
18
|
-
*
|
|
19
|
-
* On Cursor-managed hosting the default is {@link agentStoreMemoryBackend}:
|
|
20
|
-
* the journal lives on the deployment's Agent Store (survives deploys,
|
|
21
|
-
* visible on cloud VMs under the store mount), written exclusively through
|
|
22
|
-
* the `memory.append` domain call — the server owns the journal pattern —
|
|
23
|
-
* and mirrored to `<stateRoot>/memory/journal.jsonl` (hydrated per session
|
|
24
|
-
* via `memory.read`, appended locally per turn) so the workspace symlink
|
|
25
|
-
* read path keeps working for local-runtime turns. The
|
|
26
|
-
* `factory-api-v1` pin file exists only on hosted pods — plain local dev
|
|
27
|
-
* runs {@link fileMemoryBackend} and never sees the hosted lane.
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
import { randomUUID } from "node:crypto";
|
|
31
|
-
import { appendFile, mkdir, rename, stat, writeFile } from "node:fs/promises";
|
|
32
|
-
import { join } from "node:path";
|
|
33
|
-
import { agentStoreKeys } from "./files.js";
|
|
34
|
-
import {
|
|
35
|
-
type CursorHostedFilesOptions,
|
|
36
|
-
isCursorHostedFilesAvailable,
|
|
37
|
-
} from "./files-backends/cursor-hosted.js";
|
|
38
|
-
import { defineHook } from "./hooks.js";
|
|
39
|
-
import {
|
|
40
|
-
createStoreApiClient,
|
|
41
|
-
isStoreApiLaneEnabled,
|
|
42
|
-
type StoreApiClient,
|
|
43
|
-
} from "./internal/cursor/store-api-client.js";
|
|
44
|
-
import type { HookContext, HookDefinition, TurnUsage } from "./types.js";
|
|
45
|
-
|
|
46
|
-
/** Name of the shared memory directory under the agent state root. */
|
|
47
|
-
export const MEMORY_DIR_NAME = "memory";
|
|
48
|
-
|
|
49
|
-
/** One journal line: what a single turn did. */
|
|
50
|
-
export type TurnMemoryRecord = {
|
|
51
|
-
/** ISO timestamp of when the turn finished. */
|
|
52
|
-
at: string;
|
|
53
|
-
sessionId: string;
|
|
54
|
-
channelId: string;
|
|
55
|
-
status: "completed" | "failed";
|
|
56
|
-
/** Session title, when the channel set one. */
|
|
57
|
-
title?: string;
|
|
58
|
-
/** Cursor SDK agent id (cloud: `bc-…`; local: the session id). */
|
|
59
|
-
sdkAgentId?: string;
|
|
60
|
-
/** The user message that started the turn (truncated). */
|
|
61
|
-
userMessage?: string;
|
|
62
|
-
/** Final assistant text of the turn, or the failure message (truncated). */
|
|
63
|
-
result?: string;
|
|
64
|
-
usage?: TurnUsage;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
/** Where turn records go. Receives the agent's state root and name per append. */
|
|
68
|
-
export interface MemoryBackend {
|
|
69
|
-
appendTurn(
|
|
70
|
-
record: TurnMemoryRecord,
|
|
71
|
-
ctx: { stateRoot: string; agentName: string },
|
|
72
|
-
): Promise<void>;
|
|
73
|
-
/**
|
|
74
|
-
* Optional session-start hook: bring the backend's local read path up to
|
|
75
|
-
* date before the session's first turn reads it. A freshness upgrade, not
|
|
76
|
-
* a correctness gate — implementations soft-fail and keep whatever read
|
|
77
|
-
* state already exists.
|
|
78
|
-
*/
|
|
79
|
-
prepareSession?(ctx: { stateRoot: string; agentName: string }): Promise<void>;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface FileMemoryBackendOptions {
|
|
83
|
-
/**
|
|
84
|
-
* Rotate `journal.jsonl` to a timestamped sibling once it exceeds this
|
|
85
|
-
* size, keeping the file agents grep small. Default 5 MiB.
|
|
86
|
-
*/
|
|
87
|
-
maxJournalBytes?: number;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Local default backend: append-only JSONL at `<stateRoot>/memory/journal.jsonl`
|
|
92
|
-
* — the directory the framework symlinks into session workspaces. Rotated
|
|
93
|
-
* segments stay alongside as `journal-<epoch-ms>.jsonl`.
|
|
94
|
-
*/
|
|
95
|
-
export function fileMemoryBackend(options: FileMemoryBackendOptions = {}): MemoryBackend {
|
|
96
|
-
const maxJournalBytes = options.maxJournalBytes ?? 5 * 1024 * 1024;
|
|
97
|
-
// Event dispatch is serialized per session but concurrent across
|
|
98
|
-
// sessions, so appends to the shared journal are chained per path. A
|
|
99
|
-
// failed append must not poison the chain for later turns.
|
|
100
|
-
const appendChains = new Map<string, Promise<void>>();
|
|
101
|
-
// Same-millisecond rotations must not reuse a segment name — POSIX
|
|
102
|
-
// rename would silently replace the earlier archive.
|
|
103
|
-
let rotationSeq = 0;
|
|
104
|
-
return {
|
|
105
|
-
async appendTurn(record, ctx) {
|
|
106
|
-
const dir = join(ctx.stateRoot, MEMORY_DIR_NAME);
|
|
107
|
-
const path = join(dir, "journal.jsonl");
|
|
108
|
-
const prior = appendChains.get(path) ?? Promise.resolve();
|
|
109
|
-
const next = prior
|
|
110
|
-
.catch(() => {})
|
|
111
|
-
.then(async () => {
|
|
112
|
-
await mkdir(dir, { recursive: true });
|
|
113
|
-
const size = (await stat(path).catch(() => undefined))?.size ?? 0;
|
|
114
|
-
if (size >= maxJournalBytes) {
|
|
115
|
-
rotationSeq += 1;
|
|
116
|
-
await rename(path, join(dir, `journal-${Date.now()}-${rotationSeq}.jsonl`));
|
|
117
|
-
}
|
|
118
|
-
await appendFile(path, `${JSON.stringify(record)}\n`, "utf8");
|
|
119
|
-
});
|
|
120
|
-
appendChains.set(path, next);
|
|
121
|
-
await next;
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export interface AgentStoreMemoryBackendOptions {
|
|
127
|
-
/**
|
|
128
|
-
* Local mirror rotation threshold, same meaning as
|
|
129
|
-
* {@link FileMemoryBackendOptions}. The durable journal's rotation is the
|
|
130
|
-
* server's (`memory.append` controller), not this.
|
|
131
|
-
*/
|
|
132
|
-
maxJournalBytes?: number;
|
|
133
|
-
/**
|
|
134
|
-
* Cursor-hosted transport overrides (tests): base URL, credential, store
|
|
135
|
-
* source id, protocol pin, fetch. Feeds the default
|
|
136
|
-
* {@link storeApiClient} and the lane-availability check.
|
|
137
|
-
*/
|
|
138
|
-
hosted?: CursorHostedFilesOptions;
|
|
139
|
-
/**
|
|
140
|
-
* Domain-lane client override (tests). Defaults to
|
|
141
|
-
* {@link createStoreApiClient} over {@link hosted} — the module that owns
|
|
142
|
-
* the `memory.append` / `memory.read` transport, typed errors, and
|
|
143
|
-
* bounded backoff.
|
|
144
|
-
*/
|
|
145
|
-
storeApiClient?: StoreApiClient;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Journal on the deployment's Agent Store — durable across deploys, visible
|
|
150
|
-
* on cloud VMs under the store mount, written exclusively through the
|
|
151
|
-
* `memory.append` domain call: the server owns the journal's storage
|
|
152
|
-
* pattern (Redis-buffered flush, rotation), so a pathological pattern is
|
|
153
|
-
* fixable in a backend deploy instead of a July release plus a rebake.
|
|
154
|
-
*
|
|
155
|
-
* There is no client-composed fallback. The read-modify-write CAS lane that
|
|
156
|
-
* predated the domain call (and caused the 2026-09-18 Agent Store read
|
|
157
|
-
* storm) was removed in 0.2.1 together with v2 hosting binding the
|
|
158
|
-
* `factory-api-v1` pin unconditionally and refusing artifacts frozen on an
|
|
159
|
-
* older July. A hosted pod without the pin is therefore a misconfiguration
|
|
160
|
-
* (a server predating the pin change, or a local env naming a hosted store
|
|
161
|
-
* without one): records are dropped loudly, never written client-side.
|
|
162
|
-
*/
|
|
163
|
-
export function agentStoreMemoryBackend(
|
|
164
|
-
options: AgentStoreMemoryBackendOptions = {},
|
|
165
|
-
): MemoryBackend {
|
|
166
|
-
const hosted = options.hosted ?? {};
|
|
167
|
-
const maxJournalBytes = options.maxJournalBytes ?? 5 * 1024 * 1024;
|
|
168
|
-
// Mirror work is chained per journal key (same shape as
|
|
169
|
-
// fileMemoryBackend): hydration and appends on one agent's mirror never
|
|
170
|
-
// interleave, and a failed step must not poison the chain for later turns.
|
|
171
|
-
const appendChains = new Map<string, Promise<void>>();
|
|
172
|
-
|
|
173
|
-
// Transport, envelope, typed errors, and bounded backoff all live in the
|
|
174
|
-
// client; this module only decides which lane an append takes.
|
|
175
|
-
const storeApiClient = options.storeApiClient ?? createStoreApiClient(hosted);
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* The domain lane still owes local-runtime sessions their read path:
|
|
179
|
-
* cloud-runtime turns read the journal through the store mount, but
|
|
180
|
-
* local-runtime turns on hosted pods (the default `runtime: "local"`)
|
|
181
|
-
* read `<stateRoot>/memory/journal.jsonl` via the workspace symlink, and
|
|
182
|
-
* on hosting the only writer of that file is this backend. So the lane
|
|
183
|
-
* keeps the mirror live without reintroducing the CAS read pattern:
|
|
184
|
-
* hydrate it once from the store when the file is absent (a fresh pod
|
|
185
|
-
* after a deploy), then append each successfully posted record locally,
|
|
186
|
-
* rotating at {@link maxJournalBytes} like {@link fileMemoryBackend}.
|
|
187
|
-
* Server-buffered records not yet flushed when a pod hydrates are the
|
|
188
|
-
* lane's documented staleness window (~30 s / 64 KiB), and other pods'
|
|
189
|
-
* appends surface on the next hydration — advisory memory, same envelope
|
|
190
|
-
* as the server side.
|
|
191
|
-
*/
|
|
192
|
-
const hydratedMirrors = new Set<string>();
|
|
193
|
-
let mirrorRotationSeq = 0;
|
|
194
|
-
const maintainLocalMirror = async (
|
|
195
|
-
record: TurnMemoryRecord,
|
|
196
|
-
ctx: { stateRoot: string; agentName: string },
|
|
197
|
-
): Promise<void> => {
|
|
198
|
-
const dir = join(ctx.stateRoot, MEMORY_DIR_NAME);
|
|
199
|
-
const path = join(dir, "journal.jsonl");
|
|
200
|
-
if (!hydratedMirrors.has(path)) {
|
|
201
|
-
// Appends are chained per journal key, so this guard never races
|
|
202
|
-
// itself for one agent. Backstop for a session that appended before
|
|
203
|
-
// any prepareSession hydration ran (e.g. a custom hook ordering).
|
|
204
|
-
hydratedMirrors.add(path);
|
|
205
|
-
const existing = await stat(path).catch(() => undefined);
|
|
206
|
-
if (existing === undefined) {
|
|
207
|
-
const content = await storeApiClient.memoryReadContent({
|
|
208
|
-
agent: ctx.agentName,
|
|
209
|
-
});
|
|
210
|
-
if (content !== undefined) {
|
|
211
|
-
await mirrorJournalLocally(ctx.stateRoot, content);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
await mkdir(dir, { recursive: true });
|
|
216
|
-
const size = (await stat(path).catch(() => undefined))?.size ?? 0;
|
|
217
|
-
if (size >= maxJournalBytes) {
|
|
218
|
-
mirrorRotationSeq += 1;
|
|
219
|
-
await rename(path, join(dir, `journal-${Date.now()}-${mirrorRotationSeq}.jsonl`));
|
|
220
|
-
}
|
|
221
|
-
await appendFile(path, `${JSON.stringify(record)}\n`, "utf8");
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* One `memory.append` domain call; the server appends to the server-owned
|
|
226
|
-
* journal. On success the record is also appended to the local mirror so
|
|
227
|
-
* the workspace symlink read path stays live (see
|
|
228
|
-
* {@link maintainLocalMirror}).
|
|
229
|
-
*
|
|
230
|
-
* Failure policy: log and give up for this record. Memory is advisory and
|
|
231
|
-
* the hook runner treats an append failure as non-fatal to the turn;
|
|
232
|
-
* falling back to the CAS path per-record would reintroduce the write
|
|
233
|
-
* storm under exactly the server brownout that makes this call fail. A
|
|
234
|
-
* failed POST also skips the mirror — the mirror must never show a record
|
|
235
|
-
* the durable journal will not have.
|
|
236
|
-
*/
|
|
237
|
-
const appendViaStoreApi = async (
|
|
238
|
-
record: TurnMemoryRecord,
|
|
239
|
-
ctx: { stateRoot: string; agentName: string },
|
|
240
|
-
): Promise<void> => {
|
|
241
|
-
try {
|
|
242
|
-
await storeApiClient.memoryAppend({ agent: ctx.agentName, record });
|
|
243
|
-
} catch (error) {
|
|
244
|
-
console.warn(
|
|
245
|
-
`[agent-serve] memory.append dropped one record for "${ctx.agentName}": ${
|
|
246
|
-
error instanceof Error ? error.message : String(error)
|
|
247
|
-
}`,
|
|
248
|
-
);
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
try {
|
|
252
|
-
await maintainLocalMirror(record, ctx);
|
|
253
|
-
} catch (error) {
|
|
254
|
-
console.warn(
|
|
255
|
-
`[agent-serve] memory mirror update failed for "${ctx.agentName}" (journal record is durable): ${
|
|
256
|
-
error instanceof Error ? error.message : String(error)
|
|
257
|
-
}`,
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Session-start hydration: one `memory.read` (flush-on-read server-side,
|
|
264
|
-
* so the pending buffer — including a burst another pod appended — lands
|
|
265
|
-
* first) and the mirror is rewritten to global state; the session then
|
|
266
|
-
* reads everything appended before it started. Soft-fail: a failed
|
|
267
|
-
* hydration keeps the existing mirror.
|
|
268
|
-
*/
|
|
269
|
-
const hydrateMirror = async (ctx: { stateRoot: string; agentName: string }): Promise<void> => {
|
|
270
|
-
const path = join(ctx.stateRoot, MEMORY_DIR_NAME, "journal.jsonl");
|
|
271
|
-
try {
|
|
272
|
-
const content = await storeApiClient.memoryReadContent({
|
|
273
|
-
agent: ctx.agentName,
|
|
274
|
-
});
|
|
275
|
-
if (content !== undefined) {
|
|
276
|
-
// Never regress the read path: every mirrored record was
|
|
277
|
-
// server-acked before it was written locally, so a download SHORTER
|
|
278
|
-
// than the mirror means the server's flush-on-read was degraded (a
|
|
279
|
-
// busy lock, a Redis outage — the acked tail is still buffered) or
|
|
280
|
-
// the journal rotated. Keeping the richer mirror loses nothing;
|
|
281
|
-
// rewriting would hide records the agent has already seen.
|
|
282
|
-
const mirroredBytes = (await stat(path).catch(() => undefined))?.size ?? 0;
|
|
283
|
-
if (content.byteLength >= mirroredBytes) {
|
|
284
|
-
await mirrorJournalLocally(ctx.stateRoot, content);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
// Either way the read answered: skip the append path's absent-file
|
|
288
|
-
// hydration for the rest of this process.
|
|
289
|
-
hydratedMirrors.add(path);
|
|
290
|
-
} catch (error) {
|
|
291
|
-
console.warn(
|
|
292
|
-
`[agent-serve] memory hydration failed for "${ctx.agentName}" (keeping the existing mirror): ${
|
|
293
|
-
error instanceof Error ? error.message : String(error)
|
|
294
|
-
}`,
|
|
295
|
-
);
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Hosted pods carry the pin and a provisioned store by construction (v2
|
|
301
|
-
* hosting binds `factory-api-v1` unconditionally and refuses pre-0.2.1
|
|
302
|
-
* artifacts). Reaching this without them means a misconfigured
|
|
303
|
-
* environment; there is no client-side write to fall back to.
|
|
304
|
-
*/
|
|
305
|
-
const refuseMisconfiguredLane = (agentName: string, verb: string): void => {
|
|
306
|
-
console.error(
|
|
307
|
-
`[agent-serve] memory ${verb} for "${agentName}" dropped: the store API lane is unavailable (missing/foreign AGENT_SERVE_STORE_PROTOCOL pin or no provisioned store). This July has no client-side journal fallback; fix the hosting pin.`,
|
|
308
|
-
);
|
|
309
|
-
};
|
|
310
|
-
|
|
311
|
-
return {
|
|
312
|
-
async prepareSession(ctx) {
|
|
313
|
-
// Chained on the same per-journal key as appends, so hydration never
|
|
314
|
-
// interleaves with an append's mirror write.
|
|
315
|
-
const key = agentStoreKeys.memoryJournal(ctx.agentName);
|
|
316
|
-
const prior = appendChains.get(key) ?? Promise.resolve();
|
|
317
|
-
const next = prior
|
|
318
|
-
.catch(() => {})
|
|
319
|
-
.then(async () => {
|
|
320
|
-
if (!isStoreApiLaneEnabled(hosted)) {
|
|
321
|
-
refuseMisconfiguredLane(ctx.agentName, "hydration");
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
await hydrateMirror(ctx);
|
|
325
|
-
});
|
|
326
|
-
appendChains.set(key, next);
|
|
327
|
-
await next;
|
|
328
|
-
},
|
|
329
|
-
|
|
330
|
-
async appendTurn(record, ctx) {
|
|
331
|
-
// Soft-fail by construction (appendViaStoreApi never throws), but
|
|
332
|
-
// still chained per journal key: the local mirror's hydrate-then-
|
|
333
|
-
// append must not interleave with itself. Lane availability is
|
|
334
|
-
// re-resolved lazily per append, so a pin bound after serve start
|
|
335
|
-
// takes effect without a restart.
|
|
336
|
-
const key = agentStoreKeys.memoryJournal(ctx.agentName);
|
|
337
|
-
const prior = appendChains.get(key) ?? Promise.resolve();
|
|
338
|
-
const next = prior
|
|
339
|
-
.catch(() => {})
|
|
340
|
-
.then(async () => {
|
|
341
|
-
if (!isStoreApiLaneEnabled(hosted)) {
|
|
342
|
-
refuseMisconfiguredLane(ctx.agentName, "append");
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
await appendViaStoreApi(record, ctx);
|
|
346
|
-
});
|
|
347
|
-
appendChains.set(key, next);
|
|
348
|
-
await next;
|
|
349
|
-
},
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/** Atomic full rewrite of the local mirror; also hydrates a fresh pod after a deploy. */
|
|
354
|
-
async function mirrorJournalLocally(stateRoot: string, contents: Uint8Array): Promise<void> {
|
|
355
|
-
const dir = join(stateRoot, MEMORY_DIR_NAME);
|
|
356
|
-
await mkdir(dir, { recursive: true });
|
|
357
|
-
const tmp = join(dir, `.tmp-${randomUUID()}`);
|
|
358
|
-
await writeFile(tmp, contents);
|
|
359
|
-
await rename(tmp, join(dir, "journal.jsonl"));
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/** Hosted deployments journal to the Agent Store; local dev to plain files. */
|
|
363
|
-
function defaultMemoryBackend(): MemoryBackend {
|
|
364
|
-
return isCursorHostedFilesAvailable() ? agentStoreMemoryBackend() : fileMemoryBackend();
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
export interface MemoryHookOptions {
|
|
368
|
-
/** Where records go. Defaults to {@link fileMemoryBackend}. */
|
|
369
|
-
backend?: MemoryBackend;
|
|
370
|
-
/** Truncation cap for stored userMessage / result text. Default 2000. */
|
|
371
|
-
maxTextLength?: number;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
function truncate(text: string, max: number): string {
|
|
375
|
-
return text.length <= max ? text : `${text.slice(0, max)}…`;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* Observe-only hook that journals every turn. Author it as
|
|
380
|
-
* `agent/hooks/memory.ts`:
|
|
381
|
-
*
|
|
382
|
-
* ```ts
|
|
383
|
-
* import { memoryHook } from "@cursor/bdk/memory";
|
|
384
|
-
* export default memoryHook();
|
|
385
|
-
* ```
|
|
386
|
-
*
|
|
387
|
-
* The journal is shared across every session — and every user — of the
|
|
388
|
-
* agent. Pass your own {@link MemoryHookOptions.backend} to change where
|
|
389
|
-
* memories live; delete the hook file to opt out entirely.
|
|
390
|
-
*/
|
|
391
|
-
export function memoryHook(options: MemoryHookOptions = {}): HookDefinition {
|
|
392
|
-
const backend = options.backend ?? defaultMemoryBackend();
|
|
393
|
-
const maxTextLength = options.maxTextLength ?? 2000;
|
|
394
|
-
// Inbound message per turn (truncated at receipt so large pastes are not
|
|
395
|
-
// retained), keyed `<sessionId>/<turnId>` — `message.received` and the
|
|
396
|
-
// turn-end events share a turnId. Entries drop at turn end and any
|
|
397
|
-
// stragglers (turns that never reached a terminal event) at session end.
|
|
398
|
-
const pendingMessages = new Map<string, string>();
|
|
399
|
-
const pendingKey = (ctx: HookContext, turnId: string | undefined): string =>
|
|
400
|
-
`${ctx.session.id}/${turnId ?? "?"}`;
|
|
401
|
-
|
|
402
|
-
const record = async (
|
|
403
|
-
ctx: HookContext,
|
|
404
|
-
turnId: string | undefined,
|
|
405
|
-
status: TurnMemoryRecord["status"],
|
|
406
|
-
result: string | undefined,
|
|
407
|
-
usage: TurnUsage | undefined,
|
|
408
|
-
): Promise<void> => {
|
|
409
|
-
const key = pendingKey(ctx, turnId);
|
|
410
|
-
const userMessage = pendingMessages.get(key);
|
|
411
|
-
pendingMessages.delete(key);
|
|
412
|
-
const entry: TurnMemoryRecord = {
|
|
413
|
-
at: new Date().toISOString(),
|
|
414
|
-
sessionId: ctx.session.id,
|
|
415
|
-
channelId: ctx.channel.id,
|
|
416
|
-
status,
|
|
417
|
-
};
|
|
418
|
-
if (ctx.session.title !== undefined) {
|
|
419
|
-
entry.title = ctx.session.title;
|
|
420
|
-
}
|
|
421
|
-
if (ctx.session.sdkAgentId !== undefined) {
|
|
422
|
-
entry.sdkAgentId = ctx.session.sdkAgentId;
|
|
423
|
-
}
|
|
424
|
-
if (userMessage !== undefined) {
|
|
425
|
-
entry.userMessage = userMessage;
|
|
426
|
-
}
|
|
427
|
-
if (result !== undefined) {
|
|
428
|
-
entry.result = truncate(result, maxTextLength);
|
|
429
|
-
}
|
|
430
|
-
if (usage !== undefined) {
|
|
431
|
-
entry.usage = usage;
|
|
432
|
-
}
|
|
433
|
-
await backend.appendTurn(entry, {
|
|
434
|
-
stateRoot: ctx.stateRoot,
|
|
435
|
-
agentName: ctx.agent.name,
|
|
436
|
-
});
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
const sweepSession = (ctx: HookContext): void => {
|
|
440
|
-
for (const key of pendingMessages.keys()) {
|
|
441
|
-
if (key.startsWith(`${ctx.session.id}/`)) {
|
|
442
|
-
pendingMessages.delete(key);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
};
|
|
446
|
-
|
|
447
|
-
return defineHook({
|
|
448
|
-
events: {
|
|
449
|
-
async "session.started"(_event, ctx) {
|
|
450
|
-
// Bring the mirror (the workspace symlink read path) up to date
|
|
451
|
-
// before the session's first turn reads it. Backends without a
|
|
452
|
-
// prepareSession (plain files) have nothing to freshen. Soft-fail:
|
|
453
|
-
// hydration is a freshness upgrade, never a turn blocker.
|
|
454
|
-
try {
|
|
455
|
-
await backend.prepareSession?.({
|
|
456
|
-
stateRoot: ctx.stateRoot,
|
|
457
|
-
agentName: ctx.agent.name,
|
|
458
|
-
});
|
|
459
|
-
} catch (error) {
|
|
460
|
-
console.warn(
|
|
461
|
-
`[agent-serve] memory hydration at session start failed: ${
|
|
462
|
-
error instanceof Error ? error.message : String(error)
|
|
463
|
-
}`,
|
|
464
|
-
);
|
|
465
|
-
}
|
|
466
|
-
},
|
|
467
|
-
async "message.received"(event, ctx) {
|
|
468
|
-
pendingMessages.set(
|
|
469
|
-
pendingKey(ctx, event.turnId),
|
|
470
|
-
truncate(event.data.text, maxTextLength),
|
|
471
|
-
);
|
|
472
|
-
},
|
|
473
|
-
async "turn.completed"(event, ctx) {
|
|
474
|
-
await record(ctx, event.turnId, "completed", event.data.result, event.data.usage);
|
|
475
|
-
},
|
|
476
|
-
async "turn.failed"(event, ctx) {
|
|
477
|
-
await record(ctx, event.turnId, "failed", event.data.message, undefined);
|
|
478
|
-
},
|
|
479
|
-
async "session.completed"(_event, ctx) {
|
|
480
|
-
sweepSession(ctx);
|
|
481
|
-
},
|
|
482
|
-
async "session.failed"(_event, ctx) {
|
|
483
|
-
sweepSession(ctx);
|
|
484
|
-
},
|
|
485
|
-
},
|
|
486
|
-
});
|
|
487
|
-
}
|
package/src/otel-public.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public `@cursor/bdk/otel` surface: types and W3C `traceparent`
|
|
3
|
-
* helpers. `defineOtel` is `@cursor/bdk/internal/otel`.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export type {
|
|
7
|
-
OtelConfig,
|
|
8
|
-
OtelConfigFactory,
|
|
9
|
-
OtelDefinition,
|
|
10
|
-
OtelExporterConfig,
|
|
11
|
-
OtelLogOptions,
|
|
12
|
-
OtelMetricOptions,
|
|
13
|
-
OtelSignal,
|
|
14
|
-
OtelTraceOptions,
|
|
15
|
-
} from "./otel.js";
|
|
16
|
-
export {
|
|
17
|
-
activeTraceparent,
|
|
18
|
-
BACKEND_TRACEPARENT_HEADER,
|
|
19
|
-
formatTraceparent,
|
|
20
|
-
injectActiveTraceContext,
|
|
21
|
-
installOutboundFetchInstrumentation,
|
|
22
|
-
instrumentedFetch,
|
|
23
|
-
TRACEPARENT_HEADER,
|
|
24
|
-
} from "./otel.js";
|