@cursor/bdk 0.2.9 → 0.2.10

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.
Files changed (570) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.js +803 -812
  3. package/dist/channels/bitbucket/api.js +305 -321
  4. package/dist/channels/bitbucket/binding.js +97 -61
  5. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  6. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  7. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  11. package/dist/channels/bitbucket/checks.js +9 -21
  12. package/dist/channels/bitbucket/cursor-account.js +1 -1
  13. package/dist/channels/bitbucket/defaults.js +14 -4
  14. package/dist/channels/bitbucket/events.js +1 -2
  15. package/dist/channels/bitbucket/index.d.ts +6 -2
  16. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  17. package/dist/channels/bitbucket/index.js +6 -2
  18. package/dist/channels/bitbucket/replay.js +80 -56
  19. package/dist/channels/bitbucket/state.js +16 -7
  20. package/dist/channels/bitbucket/types.d.ts +11 -2
  21. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  22. package/dist/channels/checks.js +18 -28
  23. package/dist/channels/deployments/deployments-channel.js +26 -34
  24. package/dist/channels/github/api.js +216 -210
  25. package/dist/channels/github/auth.d.ts +5 -1
  26. package/dist/channels/github/auth.d.ts.map +1 -1
  27. package/dist/channels/github/auth.js +157 -174
  28. package/dist/channels/github/binding.js +48 -39
  29. package/dist/channels/github/checks.js +9 -14
  30. package/dist/channels/github/cursor-account.js +6 -11
  31. package/dist/channels/github/defaults.js +105 -130
  32. package/dist/channels/github/forward.js +13 -17
  33. package/dist/channels/github/github-channel.d.ts +43 -2
  34. package/dist/channels/github/github-channel.d.ts.map +1 -1
  35. package/dist/channels/github/github-channel.js +1228 -958
  36. package/dist/channels/github/progress.js +145 -146
  37. package/dist/channels/github/replay.js +30 -39
  38. package/dist/channels/github/state.js +40 -16
  39. package/dist/channels/github/types.d.ts +30 -6
  40. package/dist/channels/github/types.d.ts.map +1 -1
  41. package/dist/channels/gitlab/api.js +100 -114
  42. package/dist/channels/gitlab/binding.js +52 -33
  43. package/dist/channels/gitlab/checks.js +28 -29
  44. package/dist/channels/gitlab/cursor-account.js +1 -1
  45. package/dist/channels/gitlab/defaults.js +9 -3
  46. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  47. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  48. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  49. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  50. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  51. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  52. package/dist/channels/gitlab/index.d.ts +6 -2
  53. package/dist/channels/gitlab/index.d.ts.map +1 -1
  54. package/dist/channels/gitlab/index.js +6 -2
  55. package/dist/channels/gitlab/replay.js +50 -27
  56. package/dist/channels/gitlab/state.js +14 -6
  57. package/dist/channels/gitlab/types.d.ts +13 -2
  58. package/dist/channels/gitlab/types.d.ts.map +1 -1
  59. package/dist/channels/origin/api.js +100 -116
  60. package/dist/channels/origin/binding.js +15 -16
  61. package/dist/channels/origin/checks.js +30 -28
  62. package/dist/channels/origin/defaults.js +50 -65
  63. package/dist/channels/origin/origin-channel.js +266 -272
  64. package/dist/channels/origin/origin-webhook.js +70 -88
  65. package/dist/channels/origin/reactions.js +9 -21
  66. package/dist/channels/origin/state.js +13 -5
  67. package/dist/channels/slack/agentic-delivery.js +426 -478
  68. package/dist/channels/slack/agentic-posted.js +9 -10
  69. package/dist/channels/slack/agentic-signals.js +2 -3
  70. package/dist/channels/slack/api.js +417 -427
  71. package/dist/channels/slack/approvals.js +1 -1
  72. package/dist/channels/slack/assistant.js +37 -47
  73. package/dist/channels/slack/attachments.js +188 -206
  74. package/dist/channels/slack/auth.js +8 -6
  75. package/dist/channels/slack/bot-mentions.js +31 -45
  76. package/dist/channels/slack/channel-watch.js +42 -48
  77. package/dist/channels/slack/cli-project.js +112 -137
  78. package/dist/channels/slack/code-fences.js +3 -5
  79. package/dist/channels/slack/constants.js +2 -2
  80. package/dist/channels/slack/credentials.js +23 -38
  81. package/dist/channels/slack/defaults.js +292 -331
  82. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  83. package/dist/channels/slack/dispatch.js +533 -460
  84. package/dist/channels/slack/doctor.js +200 -214
  85. package/dist/channels/slack/eval-directive.js +79 -96
  86. package/dist/channels/slack/event-id-dedupe.js +1 -1
  87. package/dist/channels/slack/external-policy.js +26 -39
  88. package/dist/channels/slack/footer.js +28 -41
  89. package/dist/channels/slack/inbound.d.ts +1 -0
  90. package/dist/channels/slack/inbound.d.ts.map +1 -1
  91. package/dist/channels/slack/inbound.js +50 -31
  92. package/dist/channels/slack/init.d.ts +1 -5
  93. package/dist/channels/slack/init.d.ts.map +1 -1
  94. package/dist/channels/slack/init.js +42 -59
  95. package/dist/channels/slack/interactive.d.ts +9 -3
  96. package/dist/channels/slack/interactive.d.ts.map +1 -1
  97. package/dist/channels/slack/interactive.js +160 -162
  98. package/dist/channels/slack/links.js +1 -2
  99. package/dist/channels/slack/live-delivery.js +172 -190
  100. package/dist/channels/slack/manifest.d.ts.map +1 -1
  101. package/dist/channels/slack/manifest.js +44 -23
  102. package/dist/channels/slack/message-body.js +2 -2
  103. package/dist/channels/slack/nudge-carrier.js +30 -42
  104. package/dist/channels/slack/nudge-store.js +164 -191
  105. package/dist/channels/slack/paint-start.js +66 -81
  106. package/dist/channels/slack/placeholder.js +123 -152
  107. package/dist/channels/slack/pr-ref.js +1 -1
  108. package/dist/channels/slack/progress-delivery.js +65 -78
  109. package/dist/channels/slack/reasoning-card.js +36 -49
  110. package/dist/channels/slack/recording-sink.js +12 -24
  111. package/dist/channels/slack/reply-options.js +7 -12
  112. package/dist/channels/slack/self-identity.js +27 -35
  113. package/dist/channels/slack/sender-name.d.ts +12 -3
  114. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  115. package/dist/channels/slack/sender-name.js +57 -61
  116. package/dist/channels/slack/setup.js +2 -4
  117. package/dist/channels/slack/slack-channel.d.ts +6 -4
  118. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  119. package/dist/channels/slack/slack-channel.js +441 -308
  120. package/dist/channels/slack/socket-mode.js +38 -52
  121. package/dist/channels/slack/thread-context.js +143 -160
  122. package/dist/channels/slack/tool-approval-events.js +149 -166
  123. package/dist/channels/slack/tool-cards.js +6 -11
  124. package/dist/channels/slack/tool-chip.js +1 -2
  125. package/dist/channels/slack/types.d.ts +15 -17
  126. package/dist/channels/slack/types.d.ts.map +1 -1
  127. package/dist/channels/slack/upload.js +84 -97
  128. package/dist/channels/slack/user-info.js +27 -41
  129. package/dist/channels.js +9 -20
  130. package/dist/dashboard-session-url.js +3 -4
  131. package/dist/docs/404.html +2 -2
  132. package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
  133. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  134. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  135. package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  136. package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
  137. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  138. package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
  139. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  140. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  141. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  142. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  143. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  144. package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  150. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  151. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  152. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  153. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  154. package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  155. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  156. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  159. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  160. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  161. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  162. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  163. package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
  164. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  165. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  166. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  167. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  168. package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
  169. package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
  170. package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
  171. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  172. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  173. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  174. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  175. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  176. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  177. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  178. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  179. package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
  180. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  181. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  182. package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
  183. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  184. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  185. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  186. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  187. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  188. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  189. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  191. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  192. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  193. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  194. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  195. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  196. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  197. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  198. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  199. package/dist/docs/building-with-agents.html +37 -37
  200. package/dist/docs/building-with-agents.md +2 -0
  201. package/dist/docs/deployment.html +38 -38
  202. package/dist/docs/deployment.md +7 -0
  203. package/dist/docs/evals.html +36 -36
  204. package/dist/docs/guides/agent-to-agent.html +35 -35
  205. package/dist/docs/guides/bitbucket.html +38 -38
  206. package/dist/docs/guides/bitbucket.md +9 -1
  207. package/dist/docs/guides/cloud-agents.html +35 -35
  208. package/dist/docs/guides/convert-automation.html +35 -35
  209. package/dist/docs/guides/github.html +39 -39
  210. package/dist/docs/guides/github.md +20 -4
  211. package/dist/docs/guides/gitlab.html +38 -38
  212. package/dist/docs/guides/gitlab.md +9 -1
  213. package/dist/docs/guides/grokbot-agents.html +35 -35
  214. package/dist/docs/guides/hooks.html +35 -35
  215. package/dist/docs/guides/improve.html +35 -35
  216. package/dist/docs/guides/jev.html +35 -35
  217. package/dist/docs/guides/mcp-oauth.html +35 -35
  218. package/dist/docs/guides/migrate.html +66 -0
  219. package/dist/docs/guides/migrate.md +122 -0
  220. package/dist/docs/guides/opentelemetry.html +35 -35
  221. package/dist/docs/guides/slack.html +35 -35
  222. package/dist/docs/guides/webhooks.html +35 -35
  223. package/dist/docs/hashmap.json +1 -1
  224. package/dist/docs/hillclimbing.html +35 -35
  225. package/dist/docs/index.html +35 -35
  226. package/dist/docs/llms-full.txt +214 -6
  227. package/dist/docs/llms.txt +1 -0
  228. package/dist/docs/quickstart.html +35 -35
  229. package/dist/docs/reference/agent-config.html +35 -35
  230. package/dist/docs/reference/artifacts.html +35 -35
  231. package/dist/docs/reference/channels.html +35 -35
  232. package/dist/docs/reference/cli.html +39 -38
  233. package/dist/docs/reference/cli.md +39 -0
  234. package/dist/docs/reference/connections.html +35 -35
  235. package/dist/docs/reference/evals.html +35 -35
  236. package/dist/docs/reference/extensions.html +35 -35
  237. package/dist/docs/reference/hooks.html +35 -35
  238. package/dist/docs/reference/http-api.html +35 -35
  239. package/dist/docs/reference/instructions.html +35 -35
  240. package/dist/docs/reference/playground.html +35 -35
  241. package/dist/docs/reference/project-layout.html +35 -35
  242. package/dist/docs/reference/prompt.html +35 -35
  243. package/dist/docs/reference/schedules.html +35 -35
  244. package/dist/docs/reference/sessions.html +35 -35
  245. package/dist/docs/reference/skills.html +38 -38
  246. package/dist/docs/reference/subagents.html +35 -35
  247. package/dist/docs/reference/tools.html +35 -35
  248. package/dist/docs/templates/agentic-owners.html +35 -35
  249. package/dist/docs/templates/grokbot-agents.html +35 -35
  250. package/dist/docs/templates/security-reviewer.html +35 -35
  251. package/dist/docs/templates/thermo-quality-review.html +35 -35
  252. package/dist/docs/templates/thermo-review.html +35 -35
  253. package/dist/docs/templates/triage.html +35 -35
  254. package/dist/docs/troubleshooting.html +36 -36
  255. package/dist/docs/troubleshooting.md +1 -0
  256. package/dist/evals/assertions.js +20 -34
  257. package/dist/evals/expect.js +3 -6
  258. package/dist/evals/judge.js +5 -8
  259. package/dist/evals/loaders.js +45 -62
  260. package/dist/evals/matchers.js +2 -3
  261. package/dist/evals/reporters.js +43 -67
  262. package/dist/evals/results.js +1 -1
  263. package/dist/evals/run-facts.js +5 -6
  264. package/dist/evals.js +27 -15
  265. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  266. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  267. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  268. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  269. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  270. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  271. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  272. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  273. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  274. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  275. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  276. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  277. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  278. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  279. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  280. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  281. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  282. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  283. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  284. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  285. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  286. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  287. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  288. package/dist/extensions/jev/extension.js +3 -3
  289. package/dist/extensions/jev/lib/evaluate.js +43 -60
  290. package/dist/extensions/jev/tools/evaluate.js +6 -17
  291. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  292. package/dist/extensions.js +3 -5
  293. package/dist/files-backends/cursor-hosted.js +504 -523
  294. package/dist/files-backends/local-fs.js +72 -134
  295. package/dist/files.js +3 -3
  296. package/dist/filesystem.js +562 -861
  297. package/dist/index.js +16 -35
  298. package/dist/internal/advertise-tools.js +74 -86
  299. package/dist/internal/artifacts-store.js +298 -361
  300. package/dist/internal/as-of.js +2 -4
  301. package/dist/internal/authored-alias-hooks.js +6 -4
  302. package/dist/internal/authored-loaders.js +37 -52
  303. package/dist/internal/bounded-int.js +1 -2
  304. package/dist/internal/bounded.js +13 -24
  305. package/dist/internal/brand.js +1 -1
  306. package/dist/internal/browser-origin-guard.js +4 -4
  307. package/dist/internal/builtin-tools/artifacts.js +15 -27
  308. package/dist/internal/builtin-tools/index.js +2 -3
  309. package/dist/internal/builtin-tools/reminders.js +33 -52
  310. package/dist/internal/channel-architecture.d.ts +21 -0
  311. package/dist/internal/channel-architecture.d.ts.map +1 -0
  312. package/dist/internal/channel-architecture.js +41 -0
  313. package/dist/internal/channel-dispatch.js +3 -4
  314. package/dist/internal/channel-route-dispatch.js +40 -51
  315. package/dist/internal/channel-state.js +1 -1
  316. package/dist/internal/chat-client.js +319 -340
  317. package/dist/internal/cli-ax.js +1262 -1294
  318. package/dist/internal/cli-bitbucket.js +244 -272
  319. package/dist/internal/cli-convert-automation.js +137 -151
  320. package/dist/internal/cli-cursor.js +126 -147
  321. package/dist/internal/cli-deploy.d.ts.map +1 -1
  322. package/dist/internal/cli-deploy.js +1457 -1507
  323. package/dist/internal/cli-docs.js +130 -147
  324. package/dist/internal/cli-github.js +437 -476
  325. package/dist/internal/cli-gitlab.js +259 -288
  326. package/dist/internal/cli-images.js +266 -334
  327. package/dist/internal/cli-manifest.js +25 -37
  328. package/dist/internal/cli-mcp-oauth.js +228 -247
  329. package/dist/internal/cli-mcp.js +358 -383
  330. package/dist/internal/cli-migrate.js +73 -90
  331. package/dist/internal/cli-skills.js +35 -47
  332. package/dist/internal/cli-slack-manual.d.ts +0 -1
  333. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  334. package/dist/internal/cli-slack-manual.js +175 -204
  335. package/dist/internal/cli-slack.d.ts +1 -1
  336. package/dist/internal/cli-slack.d.ts.map +1 -1
  337. package/dist/internal/cli-slack.js +416 -456
  338. package/dist/internal/cloud-merge.js +7 -3
  339. package/dist/internal/cloud-turn-cost.js +8 -1
  340. package/dist/internal/connection-env.js +5 -6
  341. package/dist/internal/continuation-channel.js +10 -7
  342. package/dist/internal/continuation-identity.js +85 -67
  343. package/dist/internal/conversation-mirror.js +112 -131
  344. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  345. package/dist/internal/cron.js +3 -3
  346. package/dist/internal/cursor/account-mcp.js +147 -146
  347. package/dist/internal/cursor/backend-client.js +290 -320
  348. package/dist/internal/cursor/bound-secret-file.js +3 -3
  349. package/dist/internal/cursor/credentials.js +127 -142
  350. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  351. package/dist/internal/cursor/github-credentials.js +91 -108
  352. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  353. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  354. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  355. package/dist/internal/cursor/session-token.js +36 -48
  356. package/dist/internal/cursor/store-api-client.js +77 -92
  357. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  358. package/dist/internal/cursor-agent-template.js +1 -1
  359. package/dist/internal/cursor-deployment-relay.js +33 -54
  360. package/dist/internal/cursor-event-relay.js +65 -59
  361. package/dist/internal/cursor-relay-core.js +258 -286
  362. package/dist/internal/deferred-channel-session.js +3 -12
  363. package/dist/internal/deploy-client.js +410 -475
  364. package/dist/internal/deploy-manifest.d.ts +17 -0
  365. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  366. package/dist/internal/deploy-manifest.js +71 -21
  367. package/dist/internal/deploy-source.js +31 -43
  368. package/dist/internal/discovery/agent-config.js +45 -59
  369. package/dist/internal/discovery/agent.js +276 -280
  370. package/dist/internal/discovery/channels.js +67 -80
  371. package/dist/internal/discovery/connections.js +286 -296
  372. package/dist/internal/discovery/context.js +2 -13
  373. package/dist/internal/discovery/cursor-plugin.js +223 -259
  374. package/dist/internal/discovery/extension-overlay.js +104 -131
  375. package/dist/internal/discovery/extensions.js +276 -281
  376. package/dist/internal/discovery/fs.js +56 -79
  377. package/dist/internal/discovery/hooks.js +39 -50
  378. package/dist/internal/discovery/info.js +17 -19
  379. package/dist/internal/discovery/instructions.js +58 -71
  380. package/dist/internal/discovery/modules.js +45 -58
  381. package/dist/internal/discovery/project.d.ts.map +1 -1
  382. package/dist/internal/discovery/project.js +192 -215
  383. package/dist/internal/discovery/reminders.js +41 -52
  384. package/dist/internal/discovery/runtime.js +1 -1
  385. package/dist/internal/discovery/schedules.js +71 -82
  386. package/dist/internal/discovery/seed-files.js +21 -32
  387. package/dist/internal/discovery/services.js +74 -96
  388. package/dist/internal/discovery/skills.js +77 -94
  389. package/dist/internal/discovery/subagent.js +79 -95
  390. package/dist/internal/discovery/tools.js +12 -23
  391. package/dist/internal/distribution.js +2 -2
  392. package/dist/internal/docs-site.js +30 -45
  393. package/dist/internal/duration.js +1 -1
  394. package/dist/internal/env-file.js +48 -64
  395. package/dist/internal/eval-judge-model.js +17 -28
  396. package/dist/internal/eval-run-store.js +265 -254
  397. package/dist/internal/eval-runner.d.ts +8 -0
  398. package/dist/internal/eval-runner.d.ts.map +1 -1
  399. package/dist/internal/eval-runner.js +406 -408
  400. package/dist/internal/eval-transport.d.ts +24 -0
  401. package/dist/internal/eval-transport.d.ts.map +1 -0
  402. package/dist/internal/eval-transport.js +22 -0
  403. package/dist/internal/evals-client.js +242 -246
  404. package/dist/internal/event-log.js +72 -120
  405. package/dist/internal/event-mapper.js +30 -31
  406. package/dist/internal/factory-resource-channel.js +16 -30
  407. package/dist/internal/filesystem/errors.js +6 -6
  408. package/dist/internal/filesystem/format.js +10 -13
  409. package/dist/internal/filesystem/merge.js +52 -94
  410. package/dist/internal/filesystem/nearest.js +15 -27
  411. package/dist/internal/filesystem/scratch.js +65 -85
  412. package/dist/internal/filesystem/tools.js +221 -241
  413. package/dist/internal/filesystem/walk.js +76 -143
  414. package/dist/internal/framework-file-storage.js +118 -139
  415. package/dist/internal/framework-storage-selection.js +21 -13
  416. package/dist/internal/frontmatter.js +4 -6
  417. package/dist/internal/github-fanout.js +50 -64
  418. package/dist/internal/guest-network.js +96 -109
  419. package/dist/internal/handleAgentServeTrigger.js +121 -126
  420. package/dist/internal/host-files.js +73 -88
  421. package/dist/internal/host-kv.js +21 -36
  422. package/dist/internal/host-otel.js +22 -19
  423. package/dist/internal/host-platforms.js +49 -63
  424. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  425. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  426. package/dist/internal/hosted-catch-protocol.js +1 -0
  427. package/dist/internal/hosted-catch.d.ts +5 -3
  428. package/dist/internal/hosted-catch.d.ts.map +1 -1
  429. package/dist/internal/hosted-catch.js +84 -93
  430. package/dist/internal/hosted-delivery-protocol.js +32 -8
  431. package/dist/internal/hosted-delivery.d.ts +13 -1
  432. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  433. package/dist/internal/hosted-delivery.js +614 -584
  434. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  435. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  436. package/dist/internal/hosted-eval-cases.js +162 -0
  437. package/dist/internal/hosted-execution-diag.js +38 -30
  438. package/dist/internal/hosted-execution-flush.js +75 -66
  439. package/dist/internal/hosted-execution-latency.js +16 -8
  440. package/dist/internal/hosted-managed-automation.js +2 -2
  441. package/dist/internal/hosting.js +2 -3
  442. package/dist/internal/http-channel-define.js +4 -1
  443. package/dist/internal/http-channel.js +101 -112
  444. package/dist/internal/http-control-plane-session.d.ts +18 -1
  445. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  446. package/dist/internal/http-control-plane-session.js +66 -32
  447. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  448. package/dist/internal/init-interview.js +73 -93
  449. package/dist/internal/init-project.js +182 -214
  450. package/dist/internal/init-scaffold.js +10 -21
  451. package/dist/internal/inline-stdio-mcp.js +80 -86
  452. package/dist/internal/install-cursor-skills.js +231 -273
  453. package/dist/internal/legacy-command-guard.js +18 -31
  454. package/dist/internal/listen-port.js +34 -45
  455. package/dist/internal/local-control-plane.js +293 -307
  456. package/dist/internal/local-env.js +1 -1
  457. package/dist/internal/local-ingress.js +15 -9
  458. package/dist/internal/log-ring.js +1 -2
  459. package/dist/internal/logs-client.js +207 -227
  460. package/dist/internal/map-pool.js +24 -38
  461. package/dist/internal/mcp-endpoint.js +204 -180
  462. package/dist/internal/mcp-host.js +165 -168
  463. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  464. package/dist/internal/mcp-oauth-persist.js +15 -29
  465. package/dist/internal/mcp-oauth.js +209 -266
  466. package/dist/internal/named-webhook-secret.d.ts +39 -0
  467. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  468. package/dist/internal/named-webhook-secret.js +47 -0
  469. package/dist/internal/open-browser.js +2 -3
  470. package/dist/internal/otel/collector.js +104 -68
  471. package/dist/internal/otel/config.js +24 -37
  472. package/dist/internal/otel/http.js +5 -7
  473. package/dist/internal/otel/mcp.js +3 -12
  474. package/dist/internal/otel/runtime.js +69 -83
  475. package/dist/internal/package-inline-stdio.js +57 -65
  476. package/dist/internal/peer-connections.js +9 -5
  477. package/dist/internal/platform-schedule-sync.js +39 -54
  478. package/dist/internal/platform-timers.js +176 -210
  479. package/dist/internal/playground/static.js +1 -2
  480. package/dist/internal/playground/toolchain.js +37 -53
  481. package/dist/internal/playground-proxy.js +230 -270
  482. package/dist/internal/process-memory-telemetry.js +33 -51
  483. package/dist/internal/prompt-context.js +3 -6
  484. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  485. package/dist/internal/reminder-runner.js +770 -785
  486. package/dist/internal/reminder-schedule.js +1 -1
  487. package/dist/internal/reminder-store.js +57 -78
  488. package/dist/internal/request-error-status.js +1 -3
  489. package/dist/internal/request-headers.js +2 -2
  490. package/dist/internal/resolve-prod-target.js +119 -135
  491. package/dist/internal/resolved-connections.js +16 -6
  492. package/dist/internal/run-client.js +221 -229
  493. package/dist/internal/runtime-dispatch-runner.js +18 -43
  494. package/dist/internal/schedule-runner.js +49 -58
  495. package/dist/internal/scm/pr-url.js +7 -6
  496. package/dist/internal/sdk-runner.js +388 -363
  497. package/dist/internal/serve-restart.js +26 -39
  498. package/dist/internal/server.d.ts.map +1 -1
  499. package/dist/internal/server.js +1283 -1244
  500. package/dist/internal/session-cost.js +7 -9
  501. package/dist/internal/session-engine.d.ts +3 -1
  502. package/dist/internal/session-engine.d.ts.map +1 -1
  503. package/dist/internal/session-engine.js +2801 -2777
  504. package/dist/internal/session-links.js +12 -16
  505. package/dist/internal/session-run-log.js +134 -82
  506. package/dist/internal/session-store.js +133 -164
  507. package/dist/internal/sessions-client.js +97 -118
  508. package/dist/internal/skill-catalog.js +18 -23
  509. package/dist/internal/skills-sync.js +16 -30
  510. package/dist/internal/slack-provision-client.js +90 -116
  511. package/dist/internal/start-log-store.js +48 -67
  512. package/dist/internal/steering.js +1 -2
  513. package/dist/internal/storage-coordinator.js +160 -196
  514. package/dist/internal/store-mirror.js +16 -30
  515. package/dist/internal/stream-progress.js +6 -8
  516. package/dist/internal/terminal-style.js +3 -4
  517. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  518. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  519. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  520. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  521. package/dist/internal/tool-catalog.js +11 -5
  522. package/dist/internal/tool-result.js +1 -1
  523. package/dist/internal/trajectory.js +19 -22
  524. package/dist/internal/turn-cost.js +52 -62
  525. package/dist/internal/turn-governor.js +5 -8
  526. package/dist/internal/turn-lease-store.js +85 -105
  527. package/dist/internal/turn-outbox.js +28 -43
  528. package/dist/internal/update-check.js +231 -259
  529. package/dist/internal/v2-hosting.js +1 -2
  530. package/dist/internal/workspace-sync.js +25 -41
  531. package/dist/internal/workspace.js +111 -139
  532. package/dist/kv/memory-kv.js +27 -51
  533. package/dist/memory.js +106 -148
  534. package/dist/otel.js +5 -8
  535. package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
  536. package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
  537. package/dist/playground/index.html +2 -2
  538. package/dist/prompt.js +2 -4
  539. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  540. package/dist/storage-backends/cursor-hosted.js +105 -145
  541. package/dist/storage-backends/file-kv.js +100 -128
  542. package/dist/storage-protocol.js +3 -5
  543. package/dist/storage.js +17 -26
  544. package/dist/types.d.ts +68 -0
  545. package/dist/types.d.ts.map +1 -1
  546. package/dist/types.js +20 -18
  547. package/docs/building-with-agents.md +2 -0
  548. package/docs/deployment.md +7 -0
  549. package/docs/guides/bitbucket.md +9 -1
  550. package/docs/guides/github.md +20 -4
  551. package/docs/guides/gitlab.md +9 -1
  552. package/docs/guides/migrate.md +127 -0
  553. package/docs/reference/cli.md +39 -0
  554. package/docs/troubleshooting.md +1 -0
  555. package/package.json +1 -1
  556. package/skills/debug/SKILL.md +1 -0
  557. package/skills/github/SKILL.md +23 -0
  558. package/skills/migrate-v2/SKILL.md +51 -10
  559. package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
  560. package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
  561. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
  562. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
  563. package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
  564. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
  565. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  566. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  567. package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
  568. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  569. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
  570. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -25,15 +25,6 @@
25
25
  * stdout is reserved for the MCP wire in serve mode; all logging goes to
26
26
  * stderr.
27
27
  */
28
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
- return new (P || (P = Promise))(function (resolve, reject) {
31
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
- step((generator = generator.apply(thisArg, _arguments || [])).next());
35
- });
36
- };
37
28
  import { mkdir, readFile, writeFile } from "node:fs/promises";
38
29
  import { homedir } from "node:os";
39
30
  import { dirname, join } from "node:path";
@@ -52,7 +43,7 @@ const ACCESS_EXPIRY_LEEWAY_MS = 5 * 60 * 1000;
52
43
  * ~55s, so a healthy turn always responds well inside this; past it the
53
44
  * engine is unreachable or hung.
54
45
  */
55
- const REQUEST_TIMEOUT_MS = 120000;
46
+ const REQUEST_TIMEOUT_MS = 120_000;
56
47
  /** Attempts per message (initial + retries after refresh/backoff). */
57
48
  const FORWARD_ATTEMPTS = 3;
58
49
  /**
@@ -62,123 +53,117 @@ const FORWARD_ATTEMPTS = 3;
62
53
  * A plain 500 is ambiguous and is surfaced to the client instead.
63
54
  */
64
55
  const RETRYABLE_STATUSES = new Set([401, 403, 404, 417, 502, 503, 504]);
65
- export function cmdMcp(subcommand, options) {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- var _a;
68
- const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
69
- if (subcommand === undefined) {
70
- return cmdMcpServe(options);
71
- }
72
- if (subcommand === "install") {
73
- return cmdMcpInstall(options);
74
- }
75
- if (subcommand === "oauth") {
76
- const connection = options.oauthConnection;
77
- if (connection === undefined || connection.trim() === "") {
78
- err(`Usage: ${CLI} mcp oauth <connection> [--dir .] [--store] [--slug <slug>] [--team <id>]\n` +
79
- `Authorize defineConnection({ url, oauth: true }) (host PKCE).\n` +
80
- `--store upserts MCP_OAUTH_<NAME>_* secrets on the hosted deployment.\n`);
81
- return 1;
82
- }
83
- const { cmdMcpOauth } = yield import("./cli-mcp-oauth.js");
84
- return cmdMcpOauth({
85
- dir: options.dir,
86
- connection,
87
- store: options.store,
88
- slug: options.slug,
89
- team: options.team,
90
- apiKey: options.apiKey,
91
- });
56
+ export async function cmdMcp(subcommand, options) {
57
+ const err = options.err ?? defaultErr;
58
+ if (subcommand === undefined) {
59
+ return cmdMcpServe(options);
60
+ }
61
+ if (subcommand === "install") {
62
+ return cmdMcpInstall(options);
63
+ }
64
+ if (subcommand === "oauth") {
65
+ const connection = options.oauthConnection;
66
+ if (connection === undefined || connection.trim() === "") {
67
+ err(`Usage: ${CLI} mcp oauth <connection> [--dir .] [--store] [--slug <slug>] [--team <id>]\n` +
68
+ `Authorize defineConnection({ url, oauth: true }) (host PKCE).\n` +
69
+ `--store upserts MCP_OAUTH_<NAME>_* secrets on the hosted deployment.\n`);
70
+ return 1;
92
71
  }
93
- err(`Unknown mcp subcommand "${subcommand}".\n` +
94
- `Usage: ${CLI} mcp [install|oauth <connection>] --prod [--slug <slug>] | --url <baseUrl>\n`);
95
- return 1;
96
- });
72
+ const { cmdMcpOauth } = await import("./cli-mcp-oauth.js");
73
+ return cmdMcpOauth({
74
+ dir: options.dir,
75
+ connection,
76
+ store: options.store,
77
+ slug: options.slug,
78
+ team: options.team,
79
+ apiKey: options.apiKey,
80
+ });
81
+ }
82
+ err(`Unknown mcp subcommand "${subcommand}".\n` +
83
+ `Usage: ${CLI} mcp [install|oauth <connection>] --prod [--slug <slug>] | --url <baseUrl>\n`);
84
+ return 1;
97
85
  }
98
86
  // ============================================================================
99
87
  // serve mode: stdio ↔ /v1/mcp
100
88
  // ============================================================================
101
- export function cmdMcpServe(options) {
102
- return __awaiter(this, void 0, void 0, function* () {
103
- var _a, _b, _c, _d, _e;
104
- const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
105
- const source = buildTargetSource(options, err);
106
- if (typeof source === "string") {
107
- err(`${source}\n`);
108
- return 1;
109
- }
110
- // Resolve eagerly: a bad slug / signed-out host / stopped deployment fails
111
- // fast in the client's MCP server logs instead of on the first tool call.
112
- let initial;
113
- try {
114
- initial = yield source.get();
115
- }
116
- catch (error) {
117
- err(`${describeError(error)}\n`);
118
- return 1;
119
- }
120
- err(`${LOG_PREFIX} mcp: proxying stdio <-> ${initial.mcpUrl}\n`);
121
- const stdin = (_b = options.stdin) !== null && _b !== void 0 ? _b : process.stdin;
122
- const stdout = (_c = options.stdout) !== null && _c !== void 0 ? _c : process.stdout;
123
- const fetchImpl = (_d = options.fetchImpl) !== null && _d !== void 0 ? _d : fetch;
124
- const sleep = (_e = options.sleep) !== null && _e !== void 0 ? _e : defaultSleep;
125
- const pending = new Set();
126
- const handleLine = (line) => __awaiter(this, void 0, void 0, function* () {
127
- const outcome = yield forwardMessage({ source, fetchImpl, sleep, line });
128
- if (outcome.kind === "empty") {
89
+ export async function cmdMcpServe(options) {
90
+ const err = options.err ?? defaultErr;
91
+ const source = buildTargetSource(options, err);
92
+ if (typeof source === "string") {
93
+ err(`${source}\n`);
94
+ return 1;
95
+ }
96
+ // Resolve eagerly: a bad slug / signed-out host / stopped deployment fails
97
+ // fast in the client's MCP server logs instead of on the first tool call.
98
+ let initial;
99
+ try {
100
+ initial = await source.get();
101
+ }
102
+ catch (error) {
103
+ err(`${describeError(error)}\n`);
104
+ return 1;
105
+ }
106
+ err(`${LOG_PREFIX} mcp: proxying stdio <-> ${initial.mcpUrl}\n`);
107
+ const stdin = options.stdin ?? process.stdin;
108
+ const stdout = options.stdout ?? process.stdout;
109
+ const fetchImpl = options.fetchImpl ?? fetch;
110
+ const sleep = options.sleep ?? defaultSleep;
111
+ const pending = new Set();
112
+ const handleLine = async (line) => {
113
+ const outcome = await forwardMessage({ source, fetchImpl, sleep, line });
114
+ if (outcome.kind === "empty") {
115
+ return;
116
+ }
117
+ if (outcome.kind === "json") {
118
+ writeWireBody(stdout, outcome.body, line, err);
119
+ return;
120
+ }
121
+ emitFailure(stdout, line, outcome.message, err);
122
+ };
123
+ await new Promise(done => {
124
+ let buffer = "";
125
+ const enqueueLine = (raw) => {
126
+ const line = raw.trim();
127
+ if (line === "") {
129
128
  return;
130
129
  }
131
- if (outcome.kind === "json") {
132
- writeWireBody(stdout, outcome.body, line, err);
130
+ const task = handleLine(line)
131
+ .catch((error) => {
132
+ err(`${LOG_PREFIX} mcp: ${describeError(error)}\n`);
133
+ })
134
+ .finally(() => {
135
+ pending.delete(task);
136
+ });
137
+ pending.add(task);
138
+ };
139
+ const onChunk = (chunk) => {
140
+ buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
141
+ let newline = buffer.indexOf("\n");
142
+ while (newline !== -1) {
143
+ const line = buffer.slice(0, newline);
144
+ buffer = buffer.slice(newline + 1);
145
+ newline = buffer.indexOf("\n");
146
+ enqueueLine(line);
147
+ }
148
+ };
149
+ let finished = false;
150
+ const finish = () => {
151
+ if (finished) {
133
152
  return;
134
153
  }
135
- emitFailure(stdout, line, outcome.message, err);
136
- });
137
- yield new Promise(done => {
138
- let buffer = "";
139
- const enqueueLine = (raw) => {
140
- const line = raw.trim();
141
- if (line === "") {
142
- return;
143
- }
144
- const task = handleLine(line)
145
- .catch((error) => {
146
- err(`${LOG_PREFIX} mcp: ${describeError(error)}\n`);
147
- })
148
- .finally(() => {
149
- pending.delete(task);
150
- });
151
- pending.add(task);
152
- };
153
- const onChunk = (chunk) => {
154
- buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
155
- let newline = buffer.indexOf("\n");
156
- while (newline !== -1) {
157
- const line = buffer.slice(0, newline);
158
- buffer = buffer.slice(newline + 1);
159
- newline = buffer.indexOf("\n");
160
- enqueueLine(line);
161
- }
162
- };
163
- let finished = false;
164
- const finish = () => {
165
- if (finished) {
166
- return;
167
- }
168
- finished = true;
169
- enqueueLine(buffer);
170
- buffer = "";
171
- done();
172
- };
173
- stdin.on("data", onChunk);
174
- stdin.once("end", finish);
175
- stdin.once("close", finish);
176
- stdin.once("error", finish);
177
- });
178
- // Drain in-flight turns so piped one-shot usage still sees its replies.
179
- yield Promise.allSettled([...pending]);
180
- return 0;
154
+ finished = true;
155
+ enqueueLine(buffer);
156
+ buffer = "";
157
+ done();
158
+ };
159
+ stdin.on("data", onChunk);
160
+ stdin.once("end", finish);
161
+ stdin.once("close", finish);
162
+ stdin.once("error", finish);
181
163
  });
164
+ // Drain in-flight turns so piped one-shot usage still sees its replies.
165
+ await Promise.allSettled([...pending]);
166
+ return 0;
182
167
  }
183
168
  /** Returns a usage error string when the target flags are invalid. */
184
169
  function buildTargetSource(options, err) {
@@ -210,13 +195,12 @@ function createStaticTargetSource(baseUrl, bearerToken) {
210
195
  };
211
196
  }
212
197
  function createProdTargetSource(options, err) {
213
- var _a, _b;
214
- const resolveImpl = (_a = options.resolveProdTargetImpl) !== null && _a !== void 0 ? _a : resolveProdTarget;
215
- const now = (_b = options.now) !== null && _b !== void 0 ? _b : Date.now;
198
+ const resolveImpl = options.resolveProdTargetImpl ?? resolveProdTarget;
199
+ const now = options.now ?? Date.now;
216
200
  let cached;
217
201
  let inFlight;
218
- const resolveFresh = () => __awaiter(this, void 0, void 0, function* () {
219
- const prod = yield resolveImpl({
202
+ const resolveFresh = async () => {
203
+ const prod = await resolveImpl({
220
204
  dir: options.dir,
221
205
  cwd: options.cwd,
222
206
  slug: options.slug,
@@ -234,7 +218,7 @@ function createProdTargetSource(options, err) {
234
218
  target.expiresAtMs = expiresAtMs;
235
219
  }
236
220
  return target;
237
- });
221
+ };
238
222
  return {
239
223
  canRefresh: true,
240
224
  invalidate() {
@@ -262,68 +246,69 @@ function createProdTargetSource(options, err) {
262
246
  },
263
247
  };
264
248
  }
265
- function forwardMessage(args) {
266
- return __awaiter(this, void 0, void 0, function* () {
267
- const { source, fetchImpl, sleep, line } = args;
268
- let lastFailure = "request failed";
269
- for (let attempt = 0; attempt < FORWARD_ATTEMPTS; attempt++) {
270
- if (attempt > 0) {
271
- yield sleep(500 * attempt);
272
- }
273
- let target;
274
- try {
275
- target = yield source.get();
276
- }
277
- catch (error) {
278
- lastFailure = describeError(error);
279
- continue;
280
- }
281
- let response;
282
- try {
283
- response = yield fetchImpl(target.mcpUrl, {
284
- method: "POST",
285
- headers: Object.assign(Object.assign({}, target.headers), { "content-type": "application/json",
286
- // The streamable-HTTP server transport 406s unless the client
287
- // accepts both, even in JSON response mode.
288
- accept: "application/json, text/event-stream" }),
289
- body: line,
290
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
291
- });
292
- }
293
- catch (error) {
294
- source.invalidate();
295
- if (isTimeoutError(error)) {
296
- // The turn may have started; retrying could double-send it.
297
- return {
298
- kind: "failed",
299
- message: `no response within ${REQUEST_TIMEOUT_MS / 1000}s (the agent may still be processing; check its sessions)`,
300
- };
301
- }
302
- lastFailure = `request failed: ${describeError(error)}`;
303
- continue;
249
+ async function forwardMessage(args) {
250
+ const { source, fetchImpl, sleep, line } = args;
251
+ let lastFailure = "request failed";
252
+ for (let attempt = 0; attempt < FORWARD_ATTEMPTS; attempt++) {
253
+ if (attempt > 0) {
254
+ await sleep(500 * attempt);
255
+ }
256
+ let target;
257
+ try {
258
+ target = await source.get();
259
+ }
260
+ catch (error) {
261
+ lastFailure = describeError(error);
262
+ continue;
263
+ }
264
+ let response;
265
+ try {
266
+ response = await fetchImpl(target.mcpUrl, {
267
+ method: "POST",
268
+ headers: {
269
+ ...target.headers,
270
+ "content-type": "application/json",
271
+ // The streamable-HTTP server transport 406s unless the client
272
+ // accepts both, even in JSON response mode.
273
+ accept: "application/json, text/event-stream",
274
+ },
275
+ body: line,
276
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
277
+ });
278
+ }
279
+ catch (error) {
280
+ source.invalidate();
281
+ if (isTimeoutError(error)) {
282
+ // The turn may have started; retrying could double-send it.
283
+ return {
284
+ kind: "failed",
285
+ message: `no response within ${REQUEST_TIMEOUT_MS / 1000}s (the agent may still be processing; check its sessions)`,
286
+ };
304
287
  }
305
- if (response.status === 202) {
306
- // Notification/response-only message: nothing to relay.
307
- yield response.text().catch(() => "");
288
+ lastFailure = `request failed: ${describeError(error)}`;
289
+ continue;
290
+ }
291
+ if (response.status === 202) {
292
+ // Notification/response-only message: nothing to relay.
293
+ await response.text().catch(() => "");
294
+ return { kind: "empty" };
295
+ }
296
+ const text = await response.text().catch(() => "");
297
+ if (response.ok) {
298
+ if (text.trim() === "") {
308
299
  return { kind: "empty" };
309
300
  }
310
- const text = yield response.text().catch(() => "");
311
- if (response.ok) {
312
- if (text.trim() === "") {
313
- return { kind: "empty" };
314
- }
315
- return { kind: "json", body: text };
316
- }
317
- lastFailure = `upstream HTTP ${response.status}${text.trim() === "" ? "" : `: ${truncateForLog(text)}`}`;
318
- if (RETRYABLE_STATUSES.has(response.status)) {
319
- // Auth/expiry/hibernation shaped: re-mint credentials and retry.
320
- source.invalidate();
321
- continue;
322
- }
323
- return { kind: "failed", message: lastFailure };
301
+ return { kind: "json", body: text };
302
+ }
303
+ lastFailure = `upstream HTTP ${response.status}${text.trim() === "" ? "" : `: ${truncateForLog(text)}`}`;
304
+ if (RETRYABLE_STATUSES.has(response.status)) {
305
+ // Auth/expiry/hibernation shaped: re-mint credentials and retry.
306
+ source.invalidate();
307
+ continue;
324
308
  }
325
309
  return { kind: "failed", message: lastFailure };
326
- });
310
+ }
311
+ return { kind: "failed", message: lastFailure };
327
312
  }
328
313
  /**
329
314
  * Relay an upstream JSON body onto the stdio wire. The body is re-serialized
@@ -335,7 +320,7 @@ function writeWireBody(stdout, body, inboundLine, err) {
335
320
  try {
336
321
  parsed = JSON.parse(body);
337
322
  }
338
- catch (_a) {
323
+ catch {
339
324
  emitFailure(stdout, inboundLine, `upstream returned a non-JSON payload: ${truncateForLog(body)}`, err);
340
325
  return;
341
326
  }
@@ -365,7 +350,7 @@ function requestIdsOf(line) {
365
350
  try {
366
351
  parsed = JSON.parse(line);
367
352
  }
368
- catch (_a) {
353
+ catch {
369
354
  return [];
370
355
  }
371
356
  const messages = Array.isArray(parsed) ? parsed : [parsed];
@@ -380,108 +365,105 @@ function requestIdsOf(line) {
380
365
  }
381
366
  return ids;
382
367
  }
383
- export function cmdMcpInstall(options) {
384
- return __awaiter(this, void 0, void 0, function* () {
385
- var _a, _b, _c, _d;
386
- const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
387
- const stdout = (_b = options.stdout) !== null && _b !== void 0 ? _b : process.stdout;
388
- if (options.prod === true && options.url !== undefined) {
389
- err("--prod and --url are mutually exclusive\n");
368
+ export async function cmdMcpInstall(options) {
369
+ const err = options.err ?? defaultErr;
370
+ const stdout = options.stdout ?? process.stdout;
371
+ if (options.prod === true && options.url !== undefined) {
372
+ err("--prod and --url are mutually exclusive\n");
373
+ return 1;
374
+ }
375
+ if (options.remote === true) {
376
+ if (options.prod !== true) {
377
+ err("--remote requires --prod (the hosted deployment MCP gateway)\n");
390
378
  return 1;
391
379
  }
392
- if (options.remote === true) {
393
- if (options.prod !== true) {
394
- err("--remote requires --prod (the hosted deployment MCP gateway)\n");
395
- return 1;
396
- }
397
- return cmdMcpInstallRemote(options);
398
- }
399
- let name;
400
- let entry;
401
- if (options.prod === true) {
402
- let slug;
403
- try {
404
- slug = resolveProdSlug({
405
- dir: options.dir,
406
- cwd: options.cwd,
407
- slug: options.slug,
408
- });
409
- }
410
- catch (error) {
411
- err(`${describeError(error)}\n`);
412
- return 1;
413
- }
414
- // Verify the deployment resolves before writing config that cannot work.
415
- const resolveImpl = (_c = options.resolveProdTargetImpl) !== null && _c !== void 0 ? _c : resolveProdTarget;
416
- try {
417
- yield resolveImpl({
418
- dir: options.dir,
419
- cwd: options.cwd,
420
- slug,
421
- team: options.team,
422
- apiKey: options.apiKey,
423
- fetchImpl: options.fetchImpl,
424
- err,
425
- });
426
- }
427
- catch (error) {
428
- err(`${describeError(error)}\n`);
429
- if (error instanceof ProdTargetError && error.notFound) {
430
- err(`Deploy it first: ${CLI} deploy --slug ${slug}\n`);
431
- }
432
- return 1;
433
- }
434
- name = resolveServerName(options.name, slug);
435
- const args = ["mcp", "--prod", "--slug", slug];
436
- if (options.team !== undefined && options.team !== "") {
437
- args.push("--team", options.team);
438
- }
439
- entry = { command: CLI, args };
440
- }
441
- else if (options.url !== undefined) {
442
- const base = normalizeBaseUrl(options.url);
443
- if (typeof base !== "string") {
444
- err(`${base.error}\n`);
445
- return 1;
446
- }
447
- const derived = (_d = options.name) !== null && _d !== void 0 ? _d : deriveNameFromUrl(base);
448
- if (derived === undefined) {
449
- err(`Could not derive a server name from ${base}; pass --name <serverName>.\n`);
450
- return 1;
451
- }
452
- name = resolveServerName(derived, derived);
453
- const args = ["mcp", "--url", base];
454
- if (options.bearerToken !== undefined && options.bearerToken !== "") {
455
- args.push("--bearer-token", options.bearerToken);
456
- err("note: --bearer-token is written to mcp.json in plain text; prefer --prod for hosted agents\n");
457
- }
458
- entry = { command: CLI, args };
380
+ return cmdMcpInstallRemote(options);
381
+ }
382
+ let name;
383
+ let entry;
384
+ if (options.prod === true) {
385
+ let slug;
386
+ try {
387
+ slug = resolveProdSlug({
388
+ dir: options.dir,
389
+ cwd: options.cwd,
390
+ slug: options.slug,
391
+ });
459
392
  }
460
- else {
461
- err(`${CLI} mcp install requires --prod (hosted deployment) or --url <baseUrl>\n`);
393
+ catch (error) {
394
+ err(`${describeError(error)}\n`);
462
395
  return 1;
463
396
  }
464
- if (options.print === true) {
465
- stdout.write(`${JSON.stringify({ mcpServers: { [name]: entry } }, null, 2)}\n`);
466
- return 0;
467
- }
468
- const path = cursorMcpJsonPath();
397
+ // Verify the deployment resolves before writing config that cannot work.
398
+ const resolveImpl = options.resolveProdTargetImpl ?? resolveProdTarget;
469
399
  try {
470
- yield upsertMcpJsonEntry(path, name, entry);
400
+ await resolveImpl({
401
+ dir: options.dir,
402
+ cwd: options.cwd,
403
+ slug,
404
+ team: options.team,
405
+ apiKey: options.apiKey,
406
+ fetchImpl: options.fetchImpl,
407
+ err,
408
+ });
471
409
  }
472
410
  catch (error) {
473
411
  err(`${describeError(error)}\n`);
412
+ if (error instanceof ProdTargetError && error.notFound) {
413
+ err(`Deploy it first: ${CLI} deploy --slug ${slug}\n`);
414
+ }
474
415
  return 1;
475
416
  }
476
- if (options.json === true) {
477
- stdout.write(`${JSON.stringify({ ok: true, path, name, entry })}\n`);
478
- return 0;
417
+ name = resolveServerName(options.name, slug);
418
+ const args = ["mcp", "--prod", "--slug", slug];
419
+ if (options.team !== undefined && options.team !== "") {
420
+ args.push("--team", options.team);
479
421
  }
480
- stdout.write(`Installed MCP server "${name}" in ${path}\n` +
481
- ` ${entry.command} ${entry.args.join(" ")}\n` +
482
- "Cursor watches this file; the server appears without a restart.\n");
422
+ entry = { command: CLI, args };
423
+ }
424
+ else if (options.url !== undefined) {
425
+ const base = normalizeBaseUrl(options.url);
426
+ if (typeof base !== "string") {
427
+ err(`${base.error}\n`);
428
+ return 1;
429
+ }
430
+ const derived = options.name ?? deriveNameFromUrl(base);
431
+ if (derived === undefined) {
432
+ err(`Could not derive a server name from ${base}; pass --name <serverName>.\n`);
433
+ return 1;
434
+ }
435
+ name = resolveServerName(derived, derived);
436
+ const args = ["mcp", "--url", base];
437
+ if (options.bearerToken !== undefined && options.bearerToken !== "") {
438
+ args.push("--bearer-token", options.bearerToken);
439
+ err("note: --bearer-token is written to mcp.json in plain text; prefer --prod for hosted agents\n");
440
+ }
441
+ entry = { command: CLI, args };
442
+ }
443
+ else {
444
+ err(`${CLI} mcp install requires --prod (hosted deployment) or --url <baseUrl>\n`);
445
+ return 1;
446
+ }
447
+ if (options.print === true) {
448
+ stdout.write(`${JSON.stringify({ mcpServers: { [name]: entry } }, null, 2)}\n`);
483
449
  return 0;
484
- });
450
+ }
451
+ const path = cursorMcpJsonPath();
452
+ try {
453
+ await upsertMcpJsonEntry(path, name, entry);
454
+ }
455
+ catch (error) {
456
+ err(`${describeError(error)}\n`);
457
+ return 1;
458
+ }
459
+ if (options.json === true) {
460
+ stdout.write(`${JSON.stringify({ ok: true, path, name, entry })}\n`);
461
+ return 0;
462
+ }
463
+ stdout.write(`Installed MCP server "${name}" in ${path}\n` +
464
+ ` ${entry.command} ${entry.args.join(" ")}\n` +
465
+ "Cursor watches this file; the server appears without a restart.\n");
466
+ return 0;
485
467
  }
486
468
  /**
487
469
  * `mcp install --prod --remote` — write a REMOTE HTTP entry pointing at the
@@ -496,135 +478,128 @@ export function cmdMcpInstall(options) {
496
478
  * (Glass) can instead use the session gateway surface with no header at all
497
479
  * once first-party session attachment ships (see PR follow-ups).
498
480
  */
499
- function cmdMcpInstallRemote(options) {
500
- return __awaiter(this, void 0, void 0, function* () {
501
- var _a, _b, _c;
502
- const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
503
- const stdout = (_b = options.stdout) !== null && _b !== void 0 ? _b : process.stdout;
504
- let slug;
505
- try {
506
- slug = resolveProdSlug({
507
- dir: options.dir,
508
- cwd: options.cwd,
509
- slug: options.slug,
510
- });
511
- }
512
- catch (error) {
513
- err(`${describeError(error)}\n`);
514
- return 1;
515
- }
516
- const resolveAuthImpl = (_c = options.resolveDeployAuthImpl) !== null && _c !== void 0 ? _c : resolveDeployAuth;
517
- const auth = yield resolveAuthImpl({
518
- team: options.team,
519
- apiKey: options.apiKey,
520
- fetchImpl: options.fetchImpl,
521
- err,
481
+ async function cmdMcpInstallRemote(options) {
482
+ const err = options.err ?? defaultErr;
483
+ const stdout = options.stdout ?? process.stdout;
484
+ let slug;
485
+ try {
486
+ slug = resolveProdSlug({
487
+ dir: options.dir,
488
+ cwd: options.cwd,
489
+ slug: options.slug,
522
490
  });
523
- if (typeof auth === "number") {
524
- return auth;
525
- }
526
- try {
527
- yield rejectV2ForLegacyCommand({
528
- client: auth.client,
529
- teamId: auth.teamId,
530
- slug,
531
- });
491
+ }
492
+ catch (error) {
493
+ err(`${describeError(error)}\n`);
494
+ return 1;
495
+ }
496
+ const resolveAuthImpl = options.resolveDeployAuthImpl ?? resolveDeployAuth;
497
+ const auth = await resolveAuthImpl({
498
+ team: options.team,
499
+ apiKey: options.apiKey,
500
+ fetchImpl: options.fetchImpl,
501
+ err,
502
+ });
503
+ if (typeof auth === "number") {
504
+ return auth;
505
+ }
506
+ try {
507
+ await rejectV2ForLegacyCommand({
508
+ client: auth.client,
509
+ teamId: auth.teamId,
510
+ slug,
511
+ });
512
+ }
513
+ catch (error) {
514
+ err(`${describeError(error)}\n`);
515
+ return 1;
516
+ }
517
+ // Verify the deployment resolves before writing config that cannot work.
518
+ // A 403 here is team membership or cloud-agent entitlement, not an
519
+ // admin-tier read. Still write the entry: calling the gateway only
520
+ // needs the API key.
521
+ try {
522
+ await auth.client.getDeployment({ teamId: auth.teamId, slug });
523
+ }
524
+ catch (error) {
525
+ if (error instanceof DeployApiError && error.status === 403) {
526
+ err(`Could not verify deployment "${slug}" (not authorized for this team); writing the entry anyway.\n`);
532
527
  }
533
- catch (error) {
528
+ else {
534
529
  err(`${describeError(error)}\n`);
535
- return 1;
536
- }
537
- // Verify the deployment resolves before writing config that cannot work.
538
- // A 403 here is team membership or cloud-agent entitlement, not an
539
- // admin-tier read. Still write the entry: calling the gateway only
540
- // needs the API key.
541
- try {
542
- yield auth.client.getDeployment({ teamId: auth.teamId, slug });
543
- }
544
- catch (error) {
545
- if (error instanceof DeployApiError && error.status === 403) {
546
- err(`Could not verify deployment "${slug}" (not authorized for this team); writing the entry anyway.\n`);
547
- }
548
- else {
549
- err(`${describeError(error)}\n`);
550
- if (error instanceof DeployApiError && error.status === 404) {
551
- err(`Deploy it first: ${CLI} deploy --slug ${slug}\n`);
552
- }
553
- return 1;
530
+ if (error instanceof DeployApiError && error.status === 404) {
531
+ err(`Deploy it first: ${CLI} deploy --slug ${slug}\n`);
554
532
  }
555
- }
556
- const name = resolveServerName(options.name, slug);
557
- const url = auth.client.mcpGatewayUrl(auth.teamId, slug);
558
- const entry = {
559
- url,
560
- headers: { Authorization: `Bearer ${auth.apiKey}` },
561
- };
562
- if (options.print === true) {
563
- stdout.write(`${JSON.stringify({ mcpServers: { [name]: entry } }, null, 2)}\n`);
564
- return 0;
565
- }
566
- const path = cursorMcpJsonPath();
567
- try {
568
- yield upsertMcpJsonEntry(path, name, entry);
569
- }
570
- catch (error) {
571
- err(`${describeError(error)}\n`);
572
533
  return 1;
573
534
  }
574
- err("note: the API key is written to mcp.json in plain text; it is a durable " +
575
- "credential for a remote MCP host that cannot spawn the stdio proxy.\n");
576
- if (options.json === true) {
577
- stdout.write(`${JSON.stringify({ ok: true, path, name, entry })}\n`);
578
- return 0;
579
- }
580
- stdout.write(`Installed remote MCP server "${name}" in ${path}\n` +
581
- ` ${url}\n` +
582
- "Cursor watches this file; the server appears without a restart.\n");
535
+ }
536
+ const name = resolveServerName(options.name, slug);
537
+ const url = auth.client.mcpGatewayUrl(auth.teamId, slug);
538
+ const entry = {
539
+ url,
540
+ headers: { Authorization: `Bearer ${auth.apiKey}` },
541
+ };
542
+ if (options.print === true) {
543
+ stdout.write(`${JSON.stringify({ mcpServers: { [name]: entry } }, null, 2)}\n`);
583
544
  return 0;
584
- });
545
+ }
546
+ const path = cursorMcpJsonPath();
547
+ try {
548
+ await upsertMcpJsonEntry(path, name, entry);
549
+ }
550
+ catch (error) {
551
+ err(`${describeError(error)}\n`);
552
+ return 1;
553
+ }
554
+ err("note: the API key is written to mcp.json in plain text; it is a durable " +
555
+ "credential for a remote MCP host that cannot spawn the stdio proxy.\n");
556
+ if (options.json === true) {
557
+ stdout.write(`${JSON.stringify({ ok: true, path, name, entry })}\n`);
558
+ return 0;
559
+ }
560
+ stdout.write(`Installed remote MCP server "${name}" in ${path}\n` +
561
+ ` ${url}\n` +
562
+ "Cursor watches this file; the server appears without a restart.\n");
563
+ return 0;
585
564
  }
586
565
  /** `~/.cursor/mcp.json` — the user-level Cursor MCP config. */
587
- export function cursorMcpJsonPath(home) {
588
- var _a;
589
- if (home === void 0) { home = (_a = process.env.HOME) !== null && _a !== void 0 ? _a : homedir(); }
566
+ export function cursorMcpJsonPath(home = process.env.HOME ?? homedir()) {
590
567
  const resolved = home.trim() === "" ? homedir() : home;
591
568
  return join(resolved, ".cursor", "mcp.json");
592
569
  }
593
- function upsertMcpJsonEntry(path, name, entry) {
594
- return __awaiter(this, void 0, void 0, function* () {
595
- let root = {};
596
- let raw;
570
+ async function upsertMcpJsonEntry(path, name, entry) {
571
+ let root = {};
572
+ let raw;
573
+ try {
574
+ raw = await readFile(path, "utf8");
575
+ }
576
+ catch {
577
+ raw = undefined;
578
+ }
579
+ if (raw !== undefined && raw.trim() !== "") {
580
+ let parsed;
597
581
  try {
598
- raw = yield readFile(path, "utf8");
582
+ parsed = JSON.parse(raw);
599
583
  }
600
- catch (_a) {
601
- raw = undefined;
584
+ catch (error) {
585
+ throw new Error(`${path} is not valid JSON (${describeError(error)}); fix it and re-run.`);
602
586
  }
603
- if (raw !== undefined && raw.trim() !== "") {
604
- let parsed;
605
- try {
606
- parsed = JSON.parse(raw);
607
- }
608
- catch (error) {
609
- throw new Error(`${path} is not valid JSON (${describeError(error)}); fix it and re-run.`);
610
- }
611
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
612
- throw new Error(`${path} must contain a JSON object; fix it and re-run.`);
613
- }
614
- root = parsed;
587
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
588
+ throw new Error(`${path} must contain a JSON object; fix it and re-run.`);
615
589
  }
616
- const existing = root.mcpServers;
617
- const servers = existing !== null && typeof existing === "object" && !Array.isArray(existing)
618
- ? existing
619
- : {};
620
- servers[name] = entry;
621
- root.mcpServers = servers;
622
- yield mkdir(dirname(path), { recursive: true });
623
- yield writeFile(path, `${JSON.stringify(root, null, 2)}\n`, "utf8");
624
- });
590
+ root = parsed;
591
+ }
592
+ const existing = root.mcpServers;
593
+ const servers = existing !== null && typeof existing === "object" && !Array.isArray(existing)
594
+ ? existing
595
+ : {};
596
+ servers[name] = entry;
597
+ root.mcpServers = servers;
598
+ await mkdir(dirname(path), { recursive: true });
599
+ await writeFile(path, `${JSON.stringify(root, null, 2)}\n`, "utf8");
625
600
  }
626
601
  function resolveServerName(name, fallback) {
627
- const trimmed = name === null || name === void 0 ? void 0 : name.trim();
602
+ const trimmed = name?.trim();
628
603
  if (trimmed !== undefined && trimmed !== "") {
629
604
  return trimmed;
630
605
  }
@@ -657,7 +632,7 @@ function normalizeBaseUrl(raw) {
657
632
  try {
658
633
  parsed = new URL(raw);
659
634
  }
660
- catch (_a) {
635
+ catch {
661
636
  return { error: `invalid --url: ${raw}` };
662
637
  }
663
638
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {