@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
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared `CURSOR_API_KEY` → Cursor session-token exchange primitive
|
|
3
|
-
* (`POST /auth/exchange_user_api_key`, ~1h session).
|
|
4
|
-
*
|
|
5
|
-
* Both `CursorBackendClient` (dashboard RPCs) and the Origin channel's
|
|
6
|
-
* session provider (`cursorSessionTokenProvider` in
|
|
7
|
-
* `../../channels/origin/api.ts`) mint through this module, so the URL,
|
|
8
|
-
* request shape, response parsing, JWT-expiry handling, and renewal
|
|
9
|
-
* constants cannot drift between the two. Callers own their caching and
|
|
10
|
-
* retry policies; this module owns exactly one exchange round trip.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
export const CURSOR_SESSION_EXCHANGE_PATH = "/auth/exchange_user_api_key";
|
|
14
|
-
/** Re-exchange when the cached session is within this window of expiry. */
|
|
15
|
-
export const SESSION_TOKEN_EXPIRY_LEEWAY_MS: number = 5 * 60 * 1000;
|
|
16
|
-
/** Fallback session lifetime when the JWT `exp` claim cannot be parsed. */
|
|
17
|
-
export const SESSION_TOKEN_FALLBACK_LIFETIME_MS: number = 30 * 60 * 1000;
|
|
18
|
-
const EXCHANGE_TIMEOUT_MS = 30_000;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Exchange failure. `status` is the HTTP status when the backend answered,
|
|
22
|
-
* and undefined for network/transport errors. `detail` carries the server's
|
|
23
|
-
* `error` field when present so callers can surface the reason verbatim.
|
|
24
|
-
*/
|
|
25
|
-
export class CursorSessionExchangeError extends Error {
|
|
26
|
-
constructor(
|
|
27
|
-
message: string,
|
|
28
|
-
readonly status?: number,
|
|
29
|
-
readonly detail?: string,
|
|
30
|
-
) {
|
|
31
|
-
super(message);
|
|
32
|
-
this.name = "CursorSessionExchangeError";
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Epoch-ms expiry from a JWT `exp` claim, or undefined when unparsable. */
|
|
37
|
-
export function jwtExpiryMs(token: string): number | undefined {
|
|
38
|
-
try {
|
|
39
|
-
const payload = token.split(".")[1];
|
|
40
|
-
if (payload === undefined) {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
const claims = JSON.parse(Buffer.from(payload, "base64url").toString("utf8")) as {
|
|
44
|
-
exp?: unknown;
|
|
45
|
-
};
|
|
46
|
-
return typeof claims.exp === "number" ? claims.exp * 1000 : undefined;
|
|
47
|
-
} catch {
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* One exchange round trip. Throws {@link CursorSessionExchangeError} on
|
|
54
|
-
* transport failure, a non-2xx response, or a token-free body. `expiresAtMs`
|
|
55
|
-
* comes from the session JWT's `exp` claim, falling back to
|
|
56
|
-
* {@link SESSION_TOKEN_FALLBACK_LIFETIME_MS} for opaque tokens.
|
|
57
|
-
*/
|
|
58
|
-
export async function exchangeCursorApiKeyForSession(args: {
|
|
59
|
-
/** Full exchange URL (base + {@link CURSOR_SESSION_EXCHANGE_PATH}). */
|
|
60
|
-
exchangeUrl: string;
|
|
61
|
-
apiKey: string;
|
|
62
|
-
fetchImpl?: typeof fetch;
|
|
63
|
-
nowMs?: number;
|
|
64
|
-
}): Promise<{ token: string; expiresAtMs: number }> {
|
|
65
|
-
const fetchImpl = args.fetchImpl ?? fetch;
|
|
66
|
-
let response: Response;
|
|
67
|
-
try {
|
|
68
|
-
response = await fetchImpl(args.exchangeUrl, {
|
|
69
|
-
method: "POST",
|
|
70
|
-
headers: {
|
|
71
|
-
"content-type": "application/json",
|
|
72
|
-
authorization: `Bearer ${args.apiKey}`,
|
|
73
|
-
},
|
|
74
|
-
body: "{}",
|
|
75
|
-
signal: AbortSignal.timeout(EXCHANGE_TIMEOUT_MS),
|
|
76
|
-
});
|
|
77
|
-
} catch (error) {
|
|
78
|
-
throw new CursorSessionExchangeError(
|
|
79
|
-
`Could not reach the Cursor session exchange at ${args.exchangeUrl}: ${
|
|
80
|
-
error instanceof Error ? error.message : String(error)
|
|
81
|
-
}`,
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
const body: unknown = await response.json().catch(() => undefined);
|
|
85
|
-
const record =
|
|
86
|
-
typeof body === "object" && body !== null && !Array.isArray(body)
|
|
87
|
-
? (body as Record<string, unknown>)
|
|
88
|
-
: {};
|
|
89
|
-
const detail = typeof record.error === "string" && record.error !== "" ? record.error : undefined;
|
|
90
|
-
if (!response.ok) {
|
|
91
|
-
throw new CursorSessionExchangeError(
|
|
92
|
-
`Cursor session exchange failed with HTTP ${response.status}${
|
|
93
|
-
detail === undefined ? "" : ` (${detail})`
|
|
94
|
-
}.`,
|
|
95
|
-
response.status,
|
|
96
|
-
detail,
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
const token = record.accessToken;
|
|
100
|
-
if (typeof token !== "string" || token === "") {
|
|
101
|
-
throw new CursorSessionExchangeError(
|
|
102
|
-
"Cursor session exchange returned no access token.",
|
|
103
|
-
response.status,
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
const nowMs = args.nowMs ?? Date.now();
|
|
107
|
-
return {
|
|
108
|
-
token,
|
|
109
|
-
expiresAtMs: jwtExpiryMs(token) ?? nowMs + SESSION_TOKEN_FALLBACK_LIFETIME_MS,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The store API client: July's one gateway to the factory domain-call lane,
|
|
3
|
-
* `POST /internal/agentsdk/store/api/<call>`. This module owns the whole
|
|
4
|
-
* transport — base URL and deployment credential (the same resolution the
|
|
5
|
-
* files sink uses, via `cursor-api-transport.ts`), envelope encoding,
|
|
6
|
-
* response validation, typed error mapping, and the bounded backoff policy.
|
|
7
|
-
* Feature modules (`memory.ts`, later `session-run-log.ts`, …) call typed
|
|
8
|
-
* methods like {@link StoreApiClient.memoryAppend} and never hand-roll
|
|
9
|
-
* fetch; future domain calls (`sessionRun.report`, `startLog.flush`, …) are
|
|
10
|
-
* added here as new methods on this one client.
|
|
11
|
-
*
|
|
12
|
-
* The lane is selected per pod by the task-bound store protocol pin:
|
|
13
|
-
* {@link isStoreApiLaneEnabled} is true only under the exact
|
|
14
|
-
* `factory-api-v1` pin AND with a provisioned deployment store. The
|
|
15
|
-
* availability check is not redundant: the pin file is written by the hosted
|
|
16
|
-
* task bind, but a local-dev env var could name the pin without any store to
|
|
17
|
-
* serve reads — appending into the void. Both resolve lazily per call, so a
|
|
18
|
-
* pin bound after serve start takes effect without a restart.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
import {
|
|
22
|
-
MEMORY_APPEND_MAX_RECORD_BYTES,
|
|
23
|
-
memoryAppendResponseSchema,
|
|
24
|
-
memoryReadResponseSchema,
|
|
25
|
-
STORE_API_MEMORY_APPEND_CALL,
|
|
26
|
-
STORE_API_MEMORY_READ_CALL,
|
|
27
|
-
STORE_API_PATH,
|
|
28
|
-
STORE_API_PROTOCOL_VERSION,
|
|
29
|
-
serializedRecordBytes,
|
|
30
|
-
} from "../store-api-protocol.js";
|
|
31
|
-
import {
|
|
32
|
-
type CursorApiTransportOptions,
|
|
33
|
-
resolveCursorApiBaseUrl,
|
|
34
|
-
resolveCursorApiFetch,
|
|
35
|
-
resolveCursorApiKey,
|
|
36
|
-
} from "./cursor-api-transport.js";
|
|
37
|
-
import {
|
|
38
|
-
resolveDeploymentStoreSourceIdSync,
|
|
39
|
-
resolveStoreProtocolSync,
|
|
40
|
-
storeProtocolEnablesStoreApi,
|
|
41
|
-
} from "./hosted-store-secrets.js";
|
|
42
|
-
|
|
43
|
-
export interface StoreApiClientOptions extends CursorApiTransportOptions {
|
|
44
|
-
/** Deployment store source id override (lane availability check). */
|
|
45
|
-
storeSourceId?: string;
|
|
46
|
-
/** Lazy store source id, preferred over {@link storeSourceId}. */
|
|
47
|
-
resolveStoreSourceId?: () => string | undefined;
|
|
48
|
-
/** Lazy store protocol pin (default: env, then the task-bound file). */
|
|
49
|
-
resolveStoreProtocol?: () => string | undefined;
|
|
50
|
-
/** Backoff sleep override (tests). */
|
|
51
|
-
sleep?: (ms: number) => Promise<void>;
|
|
52
|
-
/** Jitter source override (tests). Returns [0, 1). */
|
|
53
|
-
random?: () => number;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* How one domain call failed, after the client's bounded retries:
|
|
58
|
-
*
|
|
59
|
-
* - `rejected` — the server (or the client's own pre-check) refused the
|
|
60
|
-
* payload with a typed 4xx. Deterministic; never retried.
|
|
61
|
-
* - `shed` — 429 from the per-deployment limiter or kill switch. Retried
|
|
62
|
-
* only within the small Retry-After bound below; retrying harder against
|
|
63
|
-
* a shed is exactly the stampede the domain lane exists to prevent.
|
|
64
|
-
* - `unavailable` — 5xx or a network failure, retried up to the attempt
|
|
65
|
-
* bound.
|
|
66
|
-
* - `bad_response` — a 2xx whose body failed the response schema; a
|
|
67
|
-
* contract break, not a transient, so never retried.
|
|
68
|
-
*/
|
|
69
|
-
export type StoreApiFailureKind = "rejected" | "shed" | "unavailable" | "bad_response";
|
|
70
|
-
|
|
71
|
-
export class StoreApiCallError extends Error {
|
|
72
|
-
constructor(
|
|
73
|
-
readonly kind: StoreApiFailureKind,
|
|
74
|
-
message: string,
|
|
75
|
-
readonly status?: number,
|
|
76
|
-
) {
|
|
77
|
-
super(message);
|
|
78
|
-
this.name = "StoreApiCallError";
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Bounded backoff policy. Domain calls run at turn boundaries (a memory
|
|
84
|
-
* append after `turn.completed`), so the budget is a few short retries, not
|
|
85
|
-
* persistence: 3 attempts total and never more than 2s asleep between them.
|
|
86
|
-
* A 429 whose Retry-After exceeds the cap is a deliberate shed (a kill
|
|
87
|
-
* switch, a hard budget) — give up immediately instead of camping on it.
|
|
88
|
-
*/
|
|
89
|
-
const STORE_API_MAX_ATTEMPTS = 3;
|
|
90
|
-
const STORE_API_MAX_BACKOFF_MS = 2_000;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Hard deadline per fetch (the envelope POSTs and the presigned journal
|
|
94
|
-
* GET). Without one, a stalled — not failed — connection rides undici's
|
|
95
|
-
* ~300 s inactivity timers, and hydration runs at the head of the session
|
|
96
|
-
* dispatch chain where a stall delays every queued handler. 15 s matches
|
|
97
|
-
* the server's own presigned-fetch deadline and is generous for a ≤5 MiB
|
|
98
|
-
* journal.
|
|
99
|
-
*/
|
|
100
|
-
const STORE_API_FETCH_TIMEOUT_MS = 15_000;
|
|
101
|
-
|
|
102
|
-
function backoffMs(attempt: number, random: () => number): number {
|
|
103
|
-
return Math.min(200 * 2 ** attempt * (0.5 + random()), STORE_API_MAX_BACKOFF_MS);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Is the domain-call lane on for this pod? Exact pin match plus a
|
|
108
|
-
* provisioned deployment store; anything else keeps the client-side
|
|
109
|
-
* patterns, fail-safe in both directions like the flush pin itself.
|
|
110
|
-
*/
|
|
111
|
-
export function isStoreApiLaneEnabled(options: StoreApiClientOptions = {}): boolean {
|
|
112
|
-
const protocol = options.resolveStoreProtocol?.() ?? resolveStoreProtocolSync();
|
|
113
|
-
if (!storeProtocolEnablesStoreApi(protocol)) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
const sourceId = (
|
|
117
|
-
options.resolveStoreSourceId?.() ??
|
|
118
|
-
options.storeSourceId ??
|
|
119
|
-
resolveDeploymentStoreSourceIdSync()
|
|
120
|
-
)?.trim();
|
|
121
|
-
return sourceId !== undefined && sourceId !== "";
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export type StoreApiClient = {
|
|
125
|
-
/**
|
|
126
|
-
* One `memory.append` domain call: the server appends the record to a
|
|
127
|
-
* server-owned journal shard. Resolves on success; throws
|
|
128
|
-
* {@link StoreApiCallError} after the bounded retries. The caller owns the
|
|
129
|
-
* failure policy (memory drops the record — appending is advisory).
|
|
130
|
-
*/
|
|
131
|
-
memoryAppend(payload: { agent: string; record: Record<string, unknown> }): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* One `memory.read` domain call plus the presigned byte fetch: the server
|
|
134
|
-
* flushes the agent's pending append buffer (best-effort) and presigns
|
|
135
|
-
* the canonical journal; this method then downloads it. Undefined while
|
|
136
|
-
* the agent has no journal. Throws {@link StoreApiCallError} after the
|
|
137
|
-
* bounded retries — the caller owns the failure policy (hydration keeps
|
|
138
|
-
* the existing mirror).
|
|
139
|
-
*/
|
|
140
|
-
memoryReadContent(payload: { agent: string }): Promise<Uint8Array | undefined>;
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
export function createStoreApiClient(options: StoreApiClientOptions = {}): StoreApiClient {
|
|
144
|
-
const sleep =
|
|
145
|
-
options.sleep ?? ((ms: number) => new Promise<void>(resolve => setTimeout(resolve, ms)));
|
|
146
|
-
const random = options.random ?? Math.random;
|
|
147
|
-
|
|
148
|
-
/** One POST of a versioned envelope; returns the parsed 2xx body. */
|
|
149
|
-
const postOnce = async (call: string, envelope: Record<string, unknown>): Promise<Response> => {
|
|
150
|
-
const fetchImpl = resolveCursorApiFetch(options);
|
|
151
|
-
return await fetchImpl(`${resolveCursorApiBaseUrl(options)}${STORE_API_PATH}/${call}`, {
|
|
152
|
-
method: "POST",
|
|
153
|
-
headers: {
|
|
154
|
-
Authorization: `Bearer ${resolveCursorApiKey(options)}`,
|
|
155
|
-
"Content-Type": "application/json",
|
|
156
|
-
},
|
|
157
|
-
body: JSON.stringify(envelope),
|
|
158
|
-
signal: AbortSignal.timeout(STORE_API_FETCH_TIMEOUT_MS),
|
|
159
|
-
});
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
/** The response's `Retry-After` in ms, when present and numeric. */
|
|
163
|
-
const retryAfterDelayMs = (response: Response): number | undefined => {
|
|
164
|
-
const header = response.headers.get("retry-after")?.trim();
|
|
165
|
-
const seconds = header === undefined || header === "" ? Number.NaN : Number(header);
|
|
166
|
-
return Number.isFinite(seconds) ? seconds * 1_000 : undefined;
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
const describeErrorBody = async (response: Response): Promise<string> => {
|
|
170
|
-
try {
|
|
171
|
-
const parsed = (await response.json()) as { error?: unknown };
|
|
172
|
-
if (typeof parsed?.error === "string") {
|
|
173
|
-
return parsed.error;
|
|
174
|
-
}
|
|
175
|
-
} catch {
|
|
176
|
-
// Non-JSON error body; the status is the message.
|
|
177
|
-
}
|
|
178
|
-
return `HTTP ${response.status}`;
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
const callApi = async (call: string, envelope: Record<string, unknown>): Promise<unknown> => {
|
|
182
|
-
let lastFailure: StoreApiCallError | undefined;
|
|
183
|
-
// A shed's Retry-After (when within the cap) overrides the next jittered
|
|
184
|
-
// backoff; cleared before every attempt.
|
|
185
|
-
let nextDelayMs: number | undefined;
|
|
186
|
-
for (let attempt = 0; attempt < STORE_API_MAX_ATTEMPTS; attempt += 1) {
|
|
187
|
-
if (attempt > 0) {
|
|
188
|
-
await sleep(nextDelayMs ?? backoffMs(attempt, random));
|
|
189
|
-
}
|
|
190
|
-
nextDelayMs = undefined;
|
|
191
|
-
let response: Response;
|
|
192
|
-
try {
|
|
193
|
-
response = await postOnce(call, envelope);
|
|
194
|
-
} catch (error) {
|
|
195
|
-
lastFailure = new StoreApiCallError(
|
|
196
|
-
"unavailable",
|
|
197
|
-
`store api ${call} transport failure: ${
|
|
198
|
-
error instanceof Error ? error.message : String(error)
|
|
199
|
-
}`,
|
|
200
|
-
);
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
if (response.ok) {
|
|
204
|
-
try {
|
|
205
|
-
return (await response.json()) as unknown;
|
|
206
|
-
} catch {
|
|
207
|
-
throw new StoreApiCallError(
|
|
208
|
-
"bad_response",
|
|
209
|
-
`store api ${call} answered non-JSON (${response.status})`,
|
|
210
|
-
response.status,
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
if (response.status === 429) {
|
|
215
|
-
const retryDelayMs = retryAfterDelayMs(response);
|
|
216
|
-
const shed = new StoreApiCallError(
|
|
217
|
-
"shed",
|
|
218
|
-
`store api ${call} shed: ${await describeErrorBody(response)}`,
|
|
219
|
-
response.status,
|
|
220
|
-
);
|
|
221
|
-
if (retryDelayMs !== undefined && retryDelayMs > STORE_API_MAX_BACKOFF_MS) {
|
|
222
|
-
// A long Retry-After is a kill switch or hard budget: obey it by
|
|
223
|
-
// giving up now, not by camping on the route.
|
|
224
|
-
throw shed;
|
|
225
|
-
}
|
|
226
|
-
nextDelayMs = retryDelayMs;
|
|
227
|
-
lastFailure = shed;
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
if (response.status >= 500) {
|
|
231
|
-
// A degraded 503 carries `Retry-After` too (the server's buffer-down
|
|
232
|
-
// answer). Honor it clamped to the backoff cap — unlike a shed, a
|
|
233
|
-
// 5xx is transient by definition, so a long hint never means "give
|
|
234
|
-
// up", just "wait the cap".
|
|
235
|
-
const retryDelayMs = retryAfterDelayMs(response);
|
|
236
|
-
if (retryDelayMs !== undefined) {
|
|
237
|
-
nextDelayMs = Math.min(retryDelayMs, STORE_API_MAX_BACKOFF_MS);
|
|
238
|
-
}
|
|
239
|
-
lastFailure = new StoreApiCallError(
|
|
240
|
-
"unavailable",
|
|
241
|
-
`store api ${call} failed: ${await describeErrorBody(response)}`,
|
|
242
|
-
response.status,
|
|
243
|
-
);
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
// Any other 4xx is deterministic; retrying re-sends the same refusal.
|
|
247
|
-
throw new StoreApiCallError(
|
|
248
|
-
"rejected",
|
|
249
|
-
`store api ${call} rejected: ${await describeErrorBody(response)}`,
|
|
250
|
-
response.status,
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
throw lastFailure ?? new StoreApiCallError("unavailable", "no attempt ran");
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
return {
|
|
257
|
-
async memoryAppend(payload) {
|
|
258
|
-
const recordBytes = serializedRecordBytes(payload.record);
|
|
259
|
-
if (recordBytes > MEMORY_APPEND_MAX_RECORD_BYTES) {
|
|
260
|
-
// The server-side controller enforces the same cap; checking here
|
|
261
|
-
// spares a doomed request and fails with the same typed shape.
|
|
262
|
-
throw new StoreApiCallError(
|
|
263
|
-
"rejected",
|
|
264
|
-
`memory.append record is ${recordBytes} serialized bytes; the cap is ${MEMORY_APPEND_MAX_RECORD_BYTES}`,
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
const body = await callApi(STORE_API_MEMORY_APPEND_CALL, {
|
|
268
|
-
v: STORE_API_PROTOCOL_VERSION,
|
|
269
|
-
call: STORE_API_MEMORY_APPEND_CALL,
|
|
270
|
-
payload,
|
|
271
|
-
});
|
|
272
|
-
if (!memoryAppendResponseSchema.safeParse(body).success) {
|
|
273
|
-
throw new StoreApiCallError("bad_response", "unexpected memory.append response shape");
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
|
-
|
|
277
|
-
async memoryReadContent(payload) {
|
|
278
|
-
const body = await callApi(STORE_API_MEMORY_READ_CALL, {
|
|
279
|
-
v: STORE_API_PROTOCOL_VERSION,
|
|
280
|
-
call: STORE_API_MEMORY_READ_CALL,
|
|
281
|
-
payload,
|
|
282
|
-
});
|
|
283
|
-
const parsed = memoryReadResponseSchema.safeParse(body);
|
|
284
|
-
if (!parsed.success) {
|
|
285
|
-
throw new StoreApiCallError("bad_response", "unexpected memory.read response shape");
|
|
286
|
-
}
|
|
287
|
-
if (parsed.data.journal === null) {
|
|
288
|
-
return undefined;
|
|
289
|
-
}
|
|
290
|
-
// Bulk bytes ride the presigned URL, never the control plane — same
|
|
291
|
-
// split as the verb lane. Unretried: the whole call reruns at the
|
|
292
|
-
// next session start, and hydration keeps the existing mirror.
|
|
293
|
-
const fetchImpl = resolveCursorApiFetch(options);
|
|
294
|
-
let response: Response;
|
|
295
|
-
try {
|
|
296
|
-
response = await fetchImpl(parsed.data.journal.url, {
|
|
297
|
-
method: "GET",
|
|
298
|
-
redirect: "manual",
|
|
299
|
-
signal: AbortSignal.timeout(STORE_API_FETCH_TIMEOUT_MS),
|
|
300
|
-
});
|
|
301
|
-
} catch (error) {
|
|
302
|
-
throw new StoreApiCallError(
|
|
303
|
-
"unavailable",
|
|
304
|
-
`memory.read journal fetch transport failure: ${
|
|
305
|
-
error instanceof Error ? error.message : String(error)
|
|
306
|
-
}`,
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
if (response.status === 404) {
|
|
310
|
-
// The presign raced a rotation or delete; absent is absent.
|
|
311
|
-
return undefined;
|
|
312
|
-
}
|
|
313
|
-
if (!response.ok) {
|
|
314
|
-
throw new StoreApiCallError(
|
|
315
|
-
"unavailable",
|
|
316
|
-
`memory.read journal fetch failed (HTTP ${response.status})`,
|
|
317
|
-
response.status,
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
return new Uint8Array(await response.arrayBuffer());
|
|
321
|
-
},
|
|
322
|
-
};
|
|
323
|
-
}
|