@cursor/bdk 0.2.9 → 0.2.11
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/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- 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 +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- 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/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +413 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
- package/dist/playground/assets/index-Clz6uHj9.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
|
@@ -13,15 +13,6 @@
|
|
|
13
13
|
* (so `servers` filters apply there too); without one they omit the bridge
|
|
14
14
|
* and fall back to the account's natively hydrated connectors.
|
|
15
15
|
*/
|
|
16
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
16
|
import { randomBytes } from "node:crypto";
|
|
26
17
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
27
18
|
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -35,12 +26,12 @@ import { isLoopbackAddress } from "../net.js";
|
|
|
35
26
|
import { sanitizeMcpToolName, suffixMcpToolName } from "../sanitize-mcp-tool-name.js";
|
|
36
27
|
import { colorEnabledFor, formatTerminalBox, stdoutPalette, terminalHyperlink, } from "../terminal-style.js";
|
|
37
28
|
/** Catalog freshness window; a miss inside it re-uses the cached listing. */
|
|
38
|
-
const CATALOG_TTL_MS =
|
|
29
|
+
const CATALOG_TTL_MS = 60_000;
|
|
39
30
|
/**
|
|
40
31
|
* Unknown-tool lookups force a refresh, but never more often than this —
|
|
41
32
|
* a model hallucinating tool names cannot turn into a backend hot loop.
|
|
42
33
|
*/
|
|
43
|
-
const FORCE_REFRESH_MIN_INTERVAL_MS =
|
|
34
|
+
const FORCE_REFRESH_MIN_INTERVAL_MS = 5_000;
|
|
44
35
|
/** Dashboard Integrations & MCP — reconnect team / account connectors. */
|
|
45
36
|
export const CURSOR_ACCOUNT_MCP_DASHBOARD_URL = "https://cursor.com/dashboard/integrations";
|
|
46
37
|
/** Cursor app Settings → MCP (Connect / Authenticate on the named row). */
|
|
@@ -51,20 +42,22 @@ export const CURSOR_ACCOUNT_MCP_SETTINGS_DEEPLINK = "cursor://anysphere.cursor-d
|
|
|
51
42
|
* the account (see {@link CursorAccountMcpBridge.logPreflight}).
|
|
52
43
|
*/
|
|
53
44
|
export function collectCursorAccountConnections(mounts) {
|
|
54
|
-
var _a;
|
|
55
45
|
const bySlug = new Map();
|
|
56
46
|
for (const { slug, project } of mounts) {
|
|
57
47
|
const refs = [];
|
|
58
48
|
for (const connection of [
|
|
59
49
|
...project.agent.connections,
|
|
60
|
-
...(
|
|
50
|
+
...(project.agent.hostConnections ?? []),
|
|
61
51
|
]) {
|
|
62
52
|
if (!isCursorAccountTransport(connection.transport)) {
|
|
63
53
|
continue;
|
|
64
54
|
}
|
|
65
|
-
refs.push(
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
refs.push({
|
|
56
|
+
name: connection.name,
|
|
57
|
+
...(connection.transport.servers === undefined
|
|
58
|
+
? {}
|
|
59
|
+
: { servers: [...connection.transport.servers] }),
|
|
60
|
+
});
|
|
68
61
|
}
|
|
69
62
|
if (refs.length > 0) {
|
|
70
63
|
bySlug.set(slug, refs);
|
|
@@ -86,21 +79,26 @@ export function resolveCursorAccountConnections(args) {
|
|
|
86
79
|
const serverBase = trimTrailingSlash(args.serverUrl);
|
|
87
80
|
const publicBase = args.publicUrl === undefined ? undefined : trimTrailingSlash(args.publicUrl);
|
|
88
81
|
const headers = { authorization: `Bearer ${args.bridgeSecret}` };
|
|
89
|
-
return args.refs.map(ref => (
|
|
90
|
-
|
|
91
|
-
: {
|
|
92
|
-
|
|
93
|
-
|
|
82
|
+
return args.refs.map(ref => ({
|
|
83
|
+
name: ref.name,
|
|
84
|
+
localUrl: `${serverBase}${args.basePath}${cursorAccountMcpPath(ref.name)}`,
|
|
85
|
+
...(publicBase === undefined
|
|
86
|
+
? {}
|
|
87
|
+
: {
|
|
88
|
+
cloudUrl: `${publicBase}${args.basePath}${cursorAccountMcpPath(ref.name)}`,
|
|
89
|
+
}),
|
|
90
|
+
headers,
|
|
91
|
+
...(ref.servers === undefined ? {} : { accountServersFilter: ref.servers }),
|
|
92
|
+
}));
|
|
94
93
|
}
|
|
95
94
|
export class CursorAccountMcpBridge {
|
|
96
95
|
constructor(args) {
|
|
97
|
-
var _a, _b;
|
|
98
96
|
/** Per-boot shared secret; resolved connections carry it as a bearer. */
|
|
99
97
|
this.secret = randomBytes(32).toString("hex");
|
|
100
98
|
this.catalogs = new Map();
|
|
101
99
|
this.client = args.client;
|
|
102
|
-
this.logger =
|
|
103
|
-
this.palette =
|
|
100
|
+
this.logger = args.logger ?? (() => { });
|
|
101
|
+
this.palette = args.palette ?? stdoutPalette();
|
|
104
102
|
this.secretPolicy = bearerAuth(this.secret);
|
|
105
103
|
this.allowRemoteCallers = args.allowRemoteCallers === true;
|
|
106
104
|
}
|
|
@@ -110,12 +108,12 @@ export class CursorAccountMcpBridge {
|
|
|
110
108
|
* `publicUrl` (cloud turns arrive through that ingress with the secret).
|
|
111
109
|
*/
|
|
112
110
|
authPolicy() {
|
|
113
|
-
return (request, info) =>
|
|
111
|
+
return async (request, info) => {
|
|
114
112
|
const loopback = info.requestIp !== null && isLoopbackAddress(info.requestIp);
|
|
115
113
|
if (!loopback && !this.allowRemoteCallers) {
|
|
116
114
|
return null;
|
|
117
115
|
}
|
|
118
|
-
if ((
|
|
116
|
+
if ((await this.secretPolicy(request, info)) === null) {
|
|
119
117
|
return null;
|
|
120
118
|
}
|
|
121
119
|
return {
|
|
@@ -123,15 +121,14 @@ export class CursorAccountMcpBridge {
|
|
|
123
121
|
principalId: "cursor-account-bridge",
|
|
124
122
|
principalType: "runtime",
|
|
125
123
|
};
|
|
126
|
-
}
|
|
124
|
+
};
|
|
127
125
|
}
|
|
128
126
|
/**
|
|
129
127
|
* Handle one streamable-HTTP MCP request for the connection described by
|
|
130
128
|
* `ref` (stateless: fresh server per POST, like the per-agent endpoint).
|
|
131
129
|
*/
|
|
132
130
|
handle(request, ref, decorate) {
|
|
133
|
-
|
|
134
|
-
const sessionId = (_a = new URL(request.url).searchParams.get("agentkitSessionId")) !== null && _a !== void 0 ? _a : "";
|
|
131
|
+
const sessionId = new URL(request.url).searchParams.get("agentkitSessionId") ?? "";
|
|
135
132
|
return handleStatelessMcpRequest({
|
|
136
133
|
request,
|
|
137
134
|
buildServer: () => this.buildServer(ref, sessionId, decorate),
|
|
@@ -148,89 +145,92 @@ export class CursorAccountMcpBridge {
|
|
|
148
145
|
* Returns a promise that settles when every ref's log lines are written —
|
|
149
146
|
* callers may ignore it; tests can await it.
|
|
150
147
|
*/
|
|
151
|
-
probeAuthUrl(ref) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
identifiers,
|
|
159
|
-
});
|
|
160
|
-
for (const url of urls.values()) {
|
|
161
|
-
if (url !== "") {
|
|
162
|
-
return url;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return undefined;
|
|
148
|
+
async probeAuthUrl(ref) {
|
|
149
|
+
const identifiers = ref.servers !== undefined && ref.servers.length > 0
|
|
150
|
+
? [...ref.servers]
|
|
151
|
+
: (await this.client.getAvailableMcpServers()).map(server => server.serverIdentifier ?? server.name);
|
|
152
|
+
const urls = await probeConnectorAuthUrls({
|
|
153
|
+
client: this.client,
|
|
154
|
+
identifiers,
|
|
166
155
|
});
|
|
156
|
+
for (const url of urls.values()) {
|
|
157
|
+
if (url !== "") {
|
|
158
|
+
return url;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
167
162
|
}
|
|
168
163
|
logPreflight(refs) {
|
|
169
164
|
return Promise.all(refs.map(ref => this.runPreflight(ref))).then(() => undefined);
|
|
170
165
|
}
|
|
171
|
-
runPreflight(ref) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const summary = catalog.servers
|
|
209
|
-
.map(server => formatServerStatusSummary(server, errorDetails.get(server.serverIdentifier)))
|
|
210
|
-
.join(", ");
|
|
211
|
-
this.logger(`${LOG_PREFIX} Cursor account MCP connection "${ref.name}": ${summary}`);
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
this.logger(`${LOG_PREFIX} Cursor account MCP connection "${ref.name}" preflight failed: ${describeError(error)}`);
|
|
166
|
+
async runPreflight(ref) {
|
|
167
|
+
try {
|
|
168
|
+
const catalog = await this.getCatalog(ref);
|
|
169
|
+
const errorDetails = new Map();
|
|
170
|
+
const needsAuthNames = catalog.servers
|
|
171
|
+
.filter(server => server.status === "needsAuth")
|
|
172
|
+
.map(server => server.serverIdentifier);
|
|
173
|
+
const [authUrls] = await Promise.all([
|
|
174
|
+
probeConnectorAuthUrls({
|
|
175
|
+
client: this.client,
|
|
176
|
+
identifiers: needsAuthNames,
|
|
177
|
+
}),
|
|
178
|
+
Promise.all(catalog.servers
|
|
179
|
+
.filter(server => server.status === "error")
|
|
180
|
+
.map(async (server) => {
|
|
181
|
+
const detail = await diagnoseConnectorError(this.client, server.serverIdentifier);
|
|
182
|
+
if (detail !== undefined) {
|
|
183
|
+
errorDetails.set(server.serverIdentifier, detail);
|
|
184
|
+
}
|
|
185
|
+
})),
|
|
186
|
+
]);
|
|
187
|
+
const unhealthy = catalog.servers.some(server => server.status === "needsAuth" || server.status === "error");
|
|
188
|
+
if (catalog.servers.length === 0 || unhealthy) {
|
|
189
|
+
this.logger(formatCursorAccountMcpWarningBox({
|
|
190
|
+
connectionName: ref.name,
|
|
191
|
+
servers: catalog.servers.map(server => ({
|
|
192
|
+
serverIdentifier: server.serverIdentifier,
|
|
193
|
+
status: server.status,
|
|
194
|
+
toolCount: server.tools.length,
|
|
195
|
+
errorDetail: errorDetails.get(server.serverIdentifier),
|
|
196
|
+
authUrl: authUrls.get(server.serverIdentifier),
|
|
197
|
+
})),
|
|
198
|
+
palette: this.palette,
|
|
199
|
+
}));
|
|
200
|
+
return;
|
|
215
201
|
}
|
|
216
|
-
|
|
202
|
+
const summary = catalog.servers
|
|
203
|
+
.map(server => formatServerStatusSummary(server, errorDetails.get(server.serverIdentifier)))
|
|
204
|
+
.join(", ");
|
|
205
|
+
this.logger(`${LOG_PREFIX} Cursor account MCP connection "${ref.name}": ${summary}`);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
this.logger(`${LOG_PREFIX} Cursor account MCP connection "${ref.name}" preflight failed: ${describeError(error)}`);
|
|
209
|
+
}
|
|
217
210
|
}
|
|
218
211
|
buildServer(ref, sessionId, decorate) {
|
|
219
212
|
const server = new Server({ name: `cursor-account:${ref.name}`, version: "0.1.0" }, {
|
|
220
213
|
capabilities: { tools: {} },
|
|
221
214
|
instructions: "Tools from the Cursor account's MCP connectors. Every call executes on the Cursor backend with the account's stored credentials.",
|
|
222
215
|
});
|
|
223
|
-
server.setRequestHandler(ListToolsRequestSchema, () =>
|
|
224
|
-
const catalog =
|
|
216
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
217
|
+
const catalog = await this.getCatalog(ref);
|
|
225
218
|
return {
|
|
226
|
-
tools: catalog.tools.map(tool => (
|
|
219
|
+
tools: catalog.tools.map(tool => ({
|
|
220
|
+
name: tool.exposedName,
|
|
221
|
+
description: tool.description,
|
|
222
|
+
inputSchema: tool.inputSchema,
|
|
223
|
+
...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),
|
|
224
|
+
// Already bounded to the MCP-spec fields at the backend-client
|
|
225
|
+
// parse; absent stays absent so classifiers fail closed.
|
|
226
|
+
...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),
|
|
227
|
+
})),
|
|
227
228
|
};
|
|
228
|
-
})
|
|
229
|
-
server.setRequestHandler(CallToolRequestSchema, (request) =>
|
|
230
|
-
|
|
231
|
-
const tool = yield this.findTool(ref, request.params.name);
|
|
229
|
+
});
|
|
230
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
231
|
+
const tool = await this.findTool(ref, request.params.name);
|
|
232
232
|
if (tool === undefined) {
|
|
233
|
-
const catalog =
|
|
233
|
+
const catalog = await this.getCatalog(ref);
|
|
234
234
|
const unhealthy = catalog.servers.filter(server => server.status !== "connected");
|
|
235
235
|
const statusHint = unhealthy.length === 0
|
|
236
236
|
? ""
|
|
@@ -248,10 +248,10 @@ export class CursorAccountMcpBridge {
|
|
|
248
248
|
};
|
|
249
249
|
}
|
|
250
250
|
try {
|
|
251
|
-
const executed =
|
|
251
|
+
const executed = await this.client.executeAccountMcpTool({
|
|
252
252
|
serverIdentifier: tool.serverIdentifier,
|
|
253
253
|
toolName: tool.backendName,
|
|
254
|
-
args:
|
|
254
|
+
args: request.params.arguments ?? {},
|
|
255
255
|
});
|
|
256
256
|
const decorated = decorate === undefined ? executed : decorate(sessionId, executed);
|
|
257
257
|
return {
|
|
@@ -271,20 +271,18 @@ export class CursorAccountMcpBridge {
|
|
|
271
271
|
isError: true,
|
|
272
272
|
};
|
|
273
273
|
}
|
|
274
|
-
})
|
|
274
|
+
});
|
|
275
275
|
return server;
|
|
276
276
|
}
|
|
277
277
|
/** Resolve a tool by exposed name, refreshing once when it is unknown. */
|
|
278
|
-
findTool(ref, exposedName) {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
return fresh.byExposedName.get(exposedName);
|
|
287
|
-
});
|
|
278
|
+
async findTool(ref, exposedName) {
|
|
279
|
+
const catalog = await this.getCatalog(ref);
|
|
280
|
+
const hit = catalog.byExposedName.get(exposedName);
|
|
281
|
+
if (hit !== undefined) {
|
|
282
|
+
return hit;
|
|
283
|
+
}
|
|
284
|
+
const fresh = await this.getCatalog(ref, { forceRefresh: true });
|
|
285
|
+
return fresh.byExposedName.get(exposedName);
|
|
288
286
|
}
|
|
289
287
|
/**
|
|
290
288
|
* Fetch (or join) the catalog for `ref`'s server filter. Staleness and
|
|
@@ -292,7 +290,6 @@ export class CursorAccountMcpBridge {
|
|
|
292
290
|
* promise; fresh entries use {@link CatalogEntry.freshAtMs} for TTL.
|
|
293
291
|
*/
|
|
294
292
|
getCatalog(ref, options) {
|
|
295
|
-
var _a;
|
|
296
293
|
const key = ref.servers === undefined ? "*" : [...ref.servers].sort().join("\n");
|
|
297
294
|
const entry = this.catalogs.get(key);
|
|
298
295
|
if (entry !== undefined) {
|
|
@@ -300,14 +297,14 @@ export class CursorAccountMcpBridge {
|
|
|
300
297
|
return entry.promise;
|
|
301
298
|
}
|
|
302
299
|
const age = Date.now() - entry.freshAtMs;
|
|
303
|
-
const maxAge =
|
|
300
|
+
const maxAge = options?.forceRefresh === true ? FORCE_REFRESH_MIN_INTERVAL_MS : CATALOG_TTL_MS;
|
|
304
301
|
if (age < maxAge) {
|
|
305
302
|
return entry.promise;
|
|
306
303
|
}
|
|
307
304
|
}
|
|
308
305
|
const fresh = {
|
|
309
306
|
promise: this.client
|
|
310
|
-
.listAccountMcpTools(
|
|
307
|
+
.listAccountMcpTools(ref.servers ?? [])
|
|
311
308
|
.then(servers => {
|
|
312
309
|
const catalog = buildCatalog(servers);
|
|
313
310
|
fresh.freshAtMs = Date.now();
|
|
@@ -368,7 +365,15 @@ function buildCatalog(servers) {
|
|
|
368
365
|
suffixIndex++;
|
|
369
366
|
exposedName = suffixMcpToolName(base, suffixIndex);
|
|
370
367
|
}
|
|
371
|
-
const entry =
|
|
368
|
+
const entry = {
|
|
369
|
+
exposedName,
|
|
370
|
+
backendName: tool.name,
|
|
371
|
+
serverIdentifier,
|
|
372
|
+
description: tool.description,
|
|
373
|
+
inputSchema: tool.inputSchema,
|
|
374
|
+
...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),
|
|
375
|
+
...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),
|
|
376
|
+
};
|
|
372
377
|
tools.push(entry);
|
|
373
378
|
byExposedName.set(entry.exposedName, entry);
|
|
374
379
|
});
|
|
@@ -404,8 +409,7 @@ function formatWarningStatusRow(server, nameWidth, hyperlinks) {
|
|
|
404
409
|
}
|
|
405
410
|
}
|
|
406
411
|
function connectUrl(authUrl) {
|
|
407
|
-
|
|
408
|
-
const minted = (_a = authUrl === null || authUrl === void 0 ? void 0 : authUrl.trim()) !== null && _a !== void 0 ? _a : "";
|
|
412
|
+
const minted = authUrl?.trim() ?? "";
|
|
409
413
|
if (minted.startsWith("https://") && !minted.includes("\u001b") && !minted.includes("\u0007")) {
|
|
410
414
|
return minted;
|
|
411
415
|
}
|
|
@@ -416,10 +420,9 @@ function connectUrl(authUrl) {
|
|
|
416
420
|
* One box replaces the old stacked `[bdk]` log lines.
|
|
417
421
|
*/
|
|
418
422
|
export function formatCursorAccountMcpWarningBox(args) {
|
|
419
|
-
|
|
420
|
-
const
|
|
421
|
-
const
|
|
422
|
-
const copy = warningCopy(Object.assign(Object.assign({}, args), { hyperlinks }));
|
|
423
|
+
const palette = args.palette ?? stdoutPalette();
|
|
424
|
+
const hyperlinks = args.hyperlinks ?? colorEnabledFor();
|
|
425
|
+
const copy = warningCopy({ ...args, hyperlinks });
|
|
423
426
|
return `\n${formatTerminalBox([copy.title, "", ...copy.intro, ...copy.actions], {
|
|
424
427
|
color: palette.yellow,
|
|
425
428
|
padding: 2,
|
|
@@ -480,31 +483,29 @@ export function formatServerStatusSummary(server, errorDetail) {
|
|
|
480
483
|
* returns the status enum today, so probe ExecuteSandMcpTool (ping) and surface
|
|
481
484
|
* the backend failure text (e.g. `HTTP MCP tool execution failed: fetch failed`).
|
|
482
485
|
*/
|
|
483
|
-
export function diagnoseConnectorError(client, serverIdentifier) {
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
return text.length > 0 ? text : "backend reported an error with no detail";
|
|
500
|
-
}
|
|
501
|
-
// Listing said error but ping succeeded — surface that inconsistency.
|
|
502
|
-
return text.length > 0
|
|
503
|
-
? `listing reported error but probe succeeded: ${text}`
|
|
504
|
-
: "listing reported error but probe succeeded";
|
|
505
|
-
}
|
|
506
|
-
catch (error) {
|
|
507
|
-
return describeError(error);
|
|
486
|
+
export async function diagnoseConnectorError(client, serverIdentifier) {
|
|
487
|
+
try {
|
|
488
|
+
const result = await client.executeAccountMcpTool({
|
|
489
|
+
serverIdentifier,
|
|
490
|
+
// Conventional health tool; even a tool-not-found path usually still
|
|
491
|
+
// surfaces the same transport failure when the connector is down.
|
|
492
|
+
toolName: `${serverIdentifier}-ping`,
|
|
493
|
+
args: {},
|
|
494
|
+
});
|
|
495
|
+
const text = result.content
|
|
496
|
+
.filter((part) => part.type === "text")
|
|
497
|
+
.map(part => part.text.trim())
|
|
498
|
+
.filter(part => part.length > 0)
|
|
499
|
+
.join(" ");
|
|
500
|
+
if (result.isError) {
|
|
501
|
+
return text.length > 0 ? text : "backend reported an error with no detail";
|
|
508
502
|
}
|
|
509
|
-
|
|
503
|
+
// Listing said error but ping succeeded — surface that inconsistency.
|
|
504
|
+
return text.length > 0
|
|
505
|
+
? `listing reported error but probe succeeded: ${text}`
|
|
506
|
+
: "listing reported error but probe succeeded";
|
|
507
|
+
}
|
|
508
|
+
catch (error) {
|
|
509
|
+
return describeError(error);
|
|
510
|
+
}
|
|
510
511
|
}
|