@cursor/bdk 0.2.8 → 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 (581) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.d.ts +1 -0
  3. package/dist/bin/agent-serve.d.ts.map +1 -1
  4. package/dist/bin/agent-serve.js +820 -807
  5. package/dist/channels/bitbucket/api.js +305 -321
  6. package/dist/channels/bitbucket/binding.js +97 -61
  7. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  8. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  11. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  13. package/dist/channels/bitbucket/checks.js +9 -21
  14. package/dist/channels/bitbucket/cursor-account.js +1 -1
  15. package/dist/channels/bitbucket/defaults.js +14 -4
  16. package/dist/channels/bitbucket/events.js +1 -2
  17. package/dist/channels/bitbucket/index.d.ts +6 -2
  18. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  19. package/dist/channels/bitbucket/index.js +6 -2
  20. package/dist/channels/bitbucket/replay.js +80 -56
  21. package/dist/channels/bitbucket/state.js +16 -7
  22. package/dist/channels/bitbucket/types.d.ts +11 -2
  23. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  24. package/dist/channels/checks.js +18 -28
  25. package/dist/channels/deployments/deployments-channel.js +26 -34
  26. package/dist/channels/github/api.js +216 -210
  27. package/dist/channels/github/auth.d.ts +5 -1
  28. package/dist/channels/github/auth.d.ts.map +1 -1
  29. package/dist/channels/github/auth.js +157 -174
  30. package/dist/channels/github/binding.js +48 -39
  31. package/dist/channels/github/checks.js +9 -14
  32. package/dist/channels/github/cursor-account.js +6 -11
  33. package/dist/channels/github/defaults.js +105 -130
  34. package/dist/channels/github/forward.js +13 -17
  35. package/dist/channels/github/github-channel.d.ts +43 -2
  36. package/dist/channels/github/github-channel.d.ts.map +1 -1
  37. package/dist/channels/github/github-channel.js +1228 -958
  38. package/dist/channels/github/progress.js +145 -146
  39. package/dist/channels/github/replay.js +30 -39
  40. package/dist/channels/github/state.js +40 -16
  41. package/dist/channels/github/types.d.ts +30 -6
  42. package/dist/channels/github/types.d.ts.map +1 -1
  43. package/dist/channels/gitlab/api.js +100 -114
  44. package/dist/channels/gitlab/binding.js +52 -33
  45. package/dist/channels/gitlab/checks.js +28 -29
  46. package/dist/channels/gitlab/cursor-account.js +1 -1
  47. package/dist/channels/gitlab/defaults.js +9 -3
  48. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  49. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  50. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  51. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  52. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  53. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  54. package/dist/channels/gitlab/index.d.ts +6 -2
  55. package/dist/channels/gitlab/index.d.ts.map +1 -1
  56. package/dist/channels/gitlab/index.js +6 -2
  57. package/dist/channels/gitlab/replay.js +50 -27
  58. package/dist/channels/gitlab/state.js +14 -6
  59. package/dist/channels/gitlab/types.d.ts +13 -2
  60. package/dist/channels/gitlab/types.d.ts.map +1 -1
  61. package/dist/channels/origin/api.js +100 -116
  62. package/dist/channels/origin/binding.js +15 -16
  63. package/dist/channels/origin/checks.js +30 -28
  64. package/dist/channels/origin/defaults.js +50 -65
  65. package/dist/channels/origin/origin-channel.js +266 -272
  66. package/dist/channels/origin/origin-webhook.js +70 -88
  67. package/dist/channels/origin/reactions.js +9 -21
  68. package/dist/channels/origin/state.js +13 -5
  69. package/dist/channels/slack/agentic-delivery.js +426 -478
  70. package/dist/channels/slack/agentic-posted.js +9 -10
  71. package/dist/channels/slack/agentic-signals.js +2 -3
  72. package/dist/channels/slack/api.js +417 -427
  73. package/dist/channels/slack/approvals.js +1 -1
  74. package/dist/channels/slack/assistant.js +37 -47
  75. package/dist/channels/slack/attachments.js +188 -206
  76. package/dist/channels/slack/auth.js +8 -6
  77. package/dist/channels/slack/bot-mentions.js +31 -45
  78. package/dist/channels/slack/channel-watch.js +42 -48
  79. package/dist/channels/slack/cli-project.js +112 -137
  80. package/dist/channels/slack/code-fences.js +3 -5
  81. package/dist/channels/slack/constants.js +2 -2
  82. package/dist/channels/slack/credentials.js +23 -38
  83. package/dist/channels/slack/defaults.js +292 -331
  84. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  85. package/dist/channels/slack/dispatch.js +533 -460
  86. package/dist/channels/slack/doctor.js +200 -214
  87. package/dist/channels/slack/eval-directive.js +79 -96
  88. package/dist/channels/slack/event-id-dedupe.js +1 -1
  89. package/dist/channels/slack/external-policy.js +26 -39
  90. package/dist/channels/slack/footer.js +28 -41
  91. package/dist/channels/slack/inbound.d.ts +1 -0
  92. package/dist/channels/slack/inbound.d.ts.map +1 -1
  93. package/dist/channels/slack/inbound.js +50 -31
  94. package/dist/channels/slack/init.d.ts +1 -5
  95. package/dist/channels/slack/init.d.ts.map +1 -1
  96. package/dist/channels/slack/init.js +42 -59
  97. package/dist/channels/slack/interactive.d.ts +9 -3
  98. package/dist/channels/slack/interactive.d.ts.map +1 -1
  99. package/dist/channels/slack/interactive.js +160 -162
  100. package/dist/channels/slack/links.js +1 -2
  101. package/dist/channels/slack/live-delivery.js +172 -190
  102. package/dist/channels/slack/manifest.d.ts.map +1 -1
  103. package/dist/channels/slack/manifest.js +44 -23
  104. package/dist/channels/slack/message-body.js +2 -2
  105. package/dist/channels/slack/nudge-carrier.js +30 -42
  106. package/dist/channels/slack/nudge-store.js +164 -191
  107. package/dist/channels/slack/paint-start.js +66 -81
  108. package/dist/channels/slack/placeholder.js +123 -152
  109. package/dist/channels/slack/pr-ref.js +1 -1
  110. package/dist/channels/slack/progress-delivery.js +65 -78
  111. package/dist/channels/slack/reasoning-card.js +36 -49
  112. package/dist/channels/slack/recording-sink.js +12 -24
  113. package/dist/channels/slack/reply-options.js +7 -12
  114. package/dist/channels/slack/self-identity.js +27 -35
  115. package/dist/channels/slack/sender-name.d.ts +12 -3
  116. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  117. package/dist/channels/slack/sender-name.js +57 -61
  118. package/dist/channels/slack/setup.js +2 -4
  119. package/dist/channels/slack/slack-channel.d.ts +6 -4
  120. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  121. package/dist/channels/slack/slack-channel.js +441 -308
  122. package/dist/channels/slack/socket-mode.js +38 -52
  123. package/dist/channels/slack/thread-context.js +143 -160
  124. package/dist/channels/slack/tool-approval-events.js +149 -166
  125. package/dist/channels/slack/tool-cards.js +6 -11
  126. package/dist/channels/slack/tool-chip.js +1 -2
  127. package/dist/channels/slack/types.d.ts +15 -17
  128. package/dist/channels/slack/types.d.ts.map +1 -1
  129. package/dist/channels/slack/upload.js +84 -97
  130. package/dist/channels/slack/user-info.js +27 -41
  131. package/dist/channels.js +9 -20
  132. package/dist/dashboard-session-url.js +3 -4
  133. package/dist/docs/404.html +2 -2
  134. package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
  135. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  136. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  137. package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  138. package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
  139. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  140. package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
  141. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  142. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  143. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  144. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  150. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  151. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  152. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  153. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  154. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  155. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  156. package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  159. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  160. package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  161. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  162. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  163. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  164. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  165. package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
  166. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  167. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  168. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  169. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  170. package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
  171. package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
  172. package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
  173. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  174. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  175. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  176. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  177. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  178. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  179. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  180. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  181. package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
  182. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  183. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  184. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
  185. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  186. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  187. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  188. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  189. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  191. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  192. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  193. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  194. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  195. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  196. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  197. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  198. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  199. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  200. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  201. package/dist/docs/building-with-agents.html +37 -37
  202. package/dist/docs/building-with-agents.md +2 -0
  203. package/dist/docs/deployment.html +38 -38
  204. package/dist/docs/deployment.md +7 -0
  205. package/dist/docs/evals.html +36 -36
  206. package/dist/docs/guides/agent-to-agent.html +35 -35
  207. package/dist/docs/guides/bitbucket.html +38 -38
  208. package/dist/docs/guides/bitbucket.md +9 -1
  209. package/dist/docs/guides/cloud-agents.html +35 -35
  210. package/dist/docs/guides/convert-automation.html +35 -35
  211. package/dist/docs/guides/github.html +39 -39
  212. package/dist/docs/guides/github.md +20 -4
  213. package/dist/docs/guides/gitlab.html +38 -38
  214. package/dist/docs/guides/gitlab.md +9 -1
  215. package/dist/docs/guides/grokbot-agents.html +35 -35
  216. package/dist/docs/guides/hooks.html +35 -35
  217. package/dist/docs/guides/improve.html +35 -35
  218. package/dist/docs/guides/jev.html +35 -35
  219. package/dist/docs/guides/mcp-oauth.html +35 -35
  220. package/dist/docs/guides/migrate.html +66 -0
  221. package/dist/docs/guides/migrate.md +122 -0
  222. package/dist/docs/guides/opentelemetry.html +35 -35
  223. package/dist/docs/guides/slack.html +35 -35
  224. package/dist/docs/guides/webhooks.html +35 -35
  225. package/dist/docs/hashmap.json +1 -1
  226. package/dist/docs/hillclimbing.html +35 -35
  227. package/dist/docs/index.html +35 -35
  228. package/dist/docs/llms-full.txt +214 -6
  229. package/dist/docs/llms.txt +1 -0
  230. package/dist/docs/quickstart.html +35 -35
  231. package/dist/docs/reference/agent-config.html +35 -35
  232. package/dist/docs/reference/artifacts.html +35 -35
  233. package/dist/docs/reference/channels.html +35 -35
  234. package/dist/docs/reference/cli.html +39 -38
  235. package/dist/docs/reference/cli.md +39 -0
  236. package/dist/docs/reference/connections.html +35 -35
  237. package/dist/docs/reference/evals.html +35 -35
  238. package/dist/docs/reference/extensions.html +35 -35
  239. package/dist/docs/reference/hooks.html +35 -35
  240. package/dist/docs/reference/http-api.html +35 -35
  241. package/dist/docs/reference/instructions.html +35 -35
  242. package/dist/docs/reference/playground.html +35 -35
  243. package/dist/docs/reference/project-layout.html +35 -35
  244. package/dist/docs/reference/prompt.html +35 -35
  245. package/dist/docs/reference/schedules.html +35 -35
  246. package/dist/docs/reference/sessions.html +35 -35
  247. package/dist/docs/reference/skills.html +38 -38
  248. package/dist/docs/reference/subagents.html +35 -35
  249. package/dist/docs/reference/tools.html +35 -35
  250. package/dist/docs/templates/agentic-owners.html +35 -35
  251. package/dist/docs/templates/grokbot-agents.html +35 -35
  252. package/dist/docs/templates/security-reviewer.html +35 -35
  253. package/dist/docs/templates/thermo-quality-review.html +35 -35
  254. package/dist/docs/templates/thermo-review.html +35 -35
  255. package/dist/docs/templates/triage.html +35 -35
  256. package/dist/docs/troubleshooting.html +36 -36
  257. package/dist/docs/troubleshooting.md +1 -0
  258. package/dist/evals/assertions.js +20 -34
  259. package/dist/evals/expect.js +3 -6
  260. package/dist/evals/judge.js +5 -8
  261. package/dist/evals/loaders.js +45 -62
  262. package/dist/evals/matchers.js +2 -3
  263. package/dist/evals/reporters.js +43 -67
  264. package/dist/evals/results.js +1 -1
  265. package/dist/evals/run-facts.js +5 -6
  266. package/dist/evals.js +27 -15
  267. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  268. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
  269. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  270. package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
  271. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  272. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  273. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  274. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  275. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  276. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  277. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  278. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  279. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  280. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
  281. package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
  282. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  283. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  284. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  285. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  286. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  287. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  288. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  289. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  290. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  291. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  292. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  293. package/dist/extensions/jev/extension.js +3 -3
  294. package/dist/extensions/jev/lib/evaluate.js +43 -60
  295. package/dist/extensions/jev/tools/evaluate.js +6 -17
  296. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  297. package/dist/extensions.js +3 -5
  298. package/dist/files-backends/cursor-hosted.js +504 -523
  299. package/dist/files-backends/local-fs.js +72 -134
  300. package/dist/files.js +3 -3
  301. package/dist/filesystem.js +562 -861
  302. package/dist/index.js +16 -35
  303. package/dist/internal/advertise-tools.js +74 -86
  304. package/dist/internal/artifacts-store.js +298 -361
  305. package/dist/internal/as-of.js +2 -4
  306. package/dist/internal/authored-alias-hooks.js +6 -4
  307. package/dist/internal/authored-loaders.js +37 -52
  308. package/dist/internal/bounded-int.js +1 -2
  309. package/dist/internal/bounded.js +13 -24
  310. package/dist/internal/brand.js +1 -1
  311. package/dist/internal/browser-origin-guard.js +4 -4
  312. package/dist/internal/builtin-tools/artifacts.js +15 -27
  313. package/dist/internal/builtin-tools/index.js +2 -3
  314. package/dist/internal/builtin-tools/reminders.js +33 -52
  315. package/dist/internal/channel-architecture.d.ts +21 -0
  316. package/dist/internal/channel-architecture.d.ts.map +1 -0
  317. package/dist/internal/channel-architecture.js +41 -0
  318. package/dist/internal/channel-dispatch.js +3 -4
  319. package/dist/internal/channel-route-dispatch.js +40 -51
  320. package/dist/internal/channel-state.js +1 -1
  321. package/dist/internal/chat-client.js +319 -340
  322. package/dist/internal/cli-ax.js +1262 -1294
  323. package/dist/internal/cli-bitbucket.js +244 -272
  324. package/dist/internal/cli-convert-automation.js +137 -151
  325. package/dist/internal/cli-cursor.js +126 -147
  326. package/dist/internal/cli-deploy.d.ts.map +1 -1
  327. package/dist/internal/cli-deploy.js +1457 -1507
  328. package/dist/internal/cli-docs.js +130 -147
  329. package/dist/internal/cli-github.js +437 -476
  330. package/dist/internal/cli-gitlab.js +259 -288
  331. package/dist/internal/cli-images.js +266 -334
  332. package/dist/internal/cli-manifest.js +25 -37
  333. package/dist/internal/cli-mcp-oauth.js +228 -247
  334. package/dist/internal/cli-mcp.js +358 -383
  335. package/dist/internal/cli-migrate.d.ts +18 -0
  336. package/dist/internal/cli-migrate.d.ts.map +1 -0
  337. package/dist/internal/cli-migrate.js +136 -0
  338. package/dist/internal/cli-skills.js +35 -47
  339. package/dist/internal/cli-slack-manual.d.ts +0 -1
  340. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  341. package/dist/internal/cli-slack-manual.js +175 -204
  342. package/dist/internal/cli-slack.d.ts +1 -1
  343. package/dist/internal/cli-slack.d.ts.map +1 -1
  344. package/dist/internal/cli-slack.js +416 -456
  345. package/dist/internal/cloud-merge.js +7 -3
  346. package/dist/internal/cloud-turn-cost.js +8 -1
  347. package/dist/internal/connection-env.js +5 -6
  348. package/dist/internal/continuation-channel.js +10 -7
  349. package/dist/internal/continuation-identity.js +85 -67
  350. package/dist/internal/conversation-mirror.js +112 -131
  351. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  352. package/dist/internal/cron.js +3 -3
  353. package/dist/internal/cursor/account-mcp.js +147 -146
  354. package/dist/internal/cursor/backend-client.js +290 -320
  355. package/dist/internal/cursor/bound-secret-file.js +3 -3
  356. package/dist/internal/cursor/credentials.d.ts +1 -0
  357. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  358. package/dist/internal/cursor/credentials.js +130 -142
  359. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  360. package/dist/internal/cursor/github-credentials.js +91 -108
  361. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  362. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  363. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  364. package/dist/internal/cursor/session-token.js +36 -48
  365. package/dist/internal/cursor/store-api-client.js +77 -92
  366. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  367. package/dist/internal/cursor-agent-template.js +1 -1
  368. package/dist/internal/cursor-deployment-relay.js +33 -54
  369. package/dist/internal/cursor-event-relay.js +65 -59
  370. package/dist/internal/cursor-relay-core.js +258 -286
  371. package/dist/internal/deferred-channel-session.js +3 -12
  372. package/dist/internal/deploy-client.js +410 -475
  373. package/dist/internal/deploy-manifest.d.ts +17 -0
  374. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  375. package/dist/internal/deploy-manifest.js +71 -21
  376. package/dist/internal/deploy-source.js +31 -43
  377. package/dist/internal/discovery/agent-config.js +45 -59
  378. package/dist/internal/discovery/agent.js +276 -280
  379. package/dist/internal/discovery/channels.js +67 -80
  380. package/dist/internal/discovery/connections.js +286 -296
  381. package/dist/internal/discovery/context.js +2 -13
  382. package/dist/internal/discovery/cursor-plugin.js +223 -259
  383. package/dist/internal/discovery/extension-overlay.js +104 -131
  384. package/dist/internal/discovery/extensions.js +276 -281
  385. package/dist/internal/discovery/fs.js +56 -79
  386. package/dist/internal/discovery/hooks.js +39 -50
  387. package/dist/internal/discovery/info.js +17 -19
  388. package/dist/internal/discovery/instructions.js +58 -71
  389. package/dist/internal/discovery/modules.js +45 -58
  390. package/dist/internal/discovery/project.d.ts.map +1 -1
  391. package/dist/internal/discovery/project.js +192 -215
  392. package/dist/internal/discovery/reminders.js +41 -52
  393. package/dist/internal/discovery/runtime.js +1 -1
  394. package/dist/internal/discovery/schedules.js +71 -82
  395. package/dist/internal/discovery/seed-files.js +21 -32
  396. package/dist/internal/discovery/services.js +74 -96
  397. package/dist/internal/discovery/skills.js +77 -94
  398. package/dist/internal/discovery/subagent.js +79 -95
  399. package/dist/internal/discovery/tools.js +12 -23
  400. package/dist/internal/distribution.js +2 -2
  401. package/dist/internal/docs-site.js +30 -45
  402. package/dist/internal/duration.js +1 -1
  403. package/dist/internal/env-file.js +48 -64
  404. package/dist/internal/eval-judge-model.js +17 -28
  405. package/dist/internal/eval-run-store.js +265 -254
  406. package/dist/internal/eval-runner.d.ts +8 -0
  407. package/dist/internal/eval-runner.d.ts.map +1 -1
  408. package/dist/internal/eval-runner.js +406 -408
  409. package/dist/internal/eval-transport.d.ts +24 -0
  410. package/dist/internal/eval-transport.d.ts.map +1 -0
  411. package/dist/internal/eval-transport.js +22 -0
  412. package/dist/internal/evals-client.js +242 -246
  413. package/dist/internal/event-log.js +72 -120
  414. package/dist/internal/event-mapper.js +30 -31
  415. package/dist/internal/factory-resource-channel.js +16 -30
  416. package/dist/internal/filesystem/errors.js +6 -6
  417. package/dist/internal/filesystem/format.js +10 -13
  418. package/dist/internal/filesystem/merge.js +52 -94
  419. package/dist/internal/filesystem/nearest.js +15 -27
  420. package/dist/internal/filesystem/scratch.js +65 -85
  421. package/dist/internal/filesystem/tools.js +221 -241
  422. package/dist/internal/filesystem/walk.js +76 -143
  423. package/dist/internal/framework-file-storage.js +118 -139
  424. package/dist/internal/framework-storage-selection.js +21 -13
  425. package/dist/internal/frontmatter.js +4 -6
  426. package/dist/internal/github-fanout.js +50 -64
  427. package/dist/internal/guest-network.js +96 -109
  428. package/dist/internal/handleAgentServeTrigger.js +121 -126
  429. package/dist/internal/host-files.js +73 -88
  430. package/dist/internal/host-kv.js +21 -36
  431. package/dist/internal/host-otel.js +22 -19
  432. package/dist/internal/host-platforms.js +49 -63
  433. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  434. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  435. package/dist/internal/hosted-catch-protocol.js +1 -0
  436. package/dist/internal/hosted-catch.d.ts +5 -3
  437. package/dist/internal/hosted-catch.d.ts.map +1 -1
  438. package/dist/internal/hosted-catch.js +84 -93
  439. package/dist/internal/hosted-delivery-protocol.js +32 -8
  440. package/dist/internal/hosted-delivery.d.ts +13 -1
  441. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  442. package/dist/internal/hosted-delivery.js +614 -584
  443. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  444. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  445. package/dist/internal/hosted-eval-cases.js +162 -0
  446. package/dist/internal/hosted-execution-diag.js +38 -30
  447. package/dist/internal/hosted-execution-flush.js +75 -66
  448. package/dist/internal/hosted-execution-latency.js +16 -8
  449. package/dist/internal/hosted-managed-automation.js +2 -2
  450. package/dist/internal/hosting.js +2 -3
  451. package/dist/internal/http-channel-define.js +4 -1
  452. package/dist/internal/http-channel.js +101 -112
  453. package/dist/internal/http-control-plane-session.d.ts +18 -1
  454. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  455. package/dist/internal/http-control-plane-session.js +66 -32
  456. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  457. package/dist/internal/init-interview.js +73 -93
  458. package/dist/internal/init-project.js +182 -214
  459. package/dist/internal/init-scaffold.js +10 -21
  460. package/dist/internal/inline-stdio-mcp.js +80 -86
  461. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  462. package/dist/internal/install-cursor-skills.js +238 -274
  463. package/dist/internal/legacy-command-guard.js +18 -31
  464. package/dist/internal/listen-port.js +34 -45
  465. package/dist/internal/local-control-plane.js +293 -307
  466. package/dist/internal/local-env.js +1 -1
  467. package/dist/internal/local-ingress.js +15 -9
  468. package/dist/internal/log-ring.js +1 -2
  469. package/dist/internal/logs-client.js +207 -227
  470. package/dist/internal/map-pool.js +24 -38
  471. package/dist/internal/mcp-endpoint.js +204 -180
  472. package/dist/internal/mcp-host.js +165 -168
  473. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  474. package/dist/internal/mcp-oauth-persist.js +15 -29
  475. package/dist/internal/mcp-oauth.js +209 -266
  476. package/dist/internal/named-webhook-secret.d.ts +39 -0
  477. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  478. package/dist/internal/named-webhook-secret.js +47 -0
  479. package/dist/internal/open-browser.js +2 -3
  480. package/dist/internal/otel/collector.js +104 -68
  481. package/dist/internal/otel/config.js +24 -37
  482. package/dist/internal/otel/http.js +5 -7
  483. package/dist/internal/otel/mcp.js +3 -12
  484. package/dist/internal/otel/runtime.js +69 -83
  485. package/dist/internal/package-inline-stdio.js +57 -65
  486. package/dist/internal/peer-connections.js +9 -5
  487. package/dist/internal/platform-schedule-sync.js +39 -54
  488. package/dist/internal/platform-timers.js +176 -210
  489. package/dist/internal/playground/static.js +1 -2
  490. package/dist/internal/playground/toolchain.js +37 -53
  491. package/dist/internal/playground-proxy.js +230 -270
  492. package/dist/internal/process-memory-telemetry.js +33 -51
  493. package/dist/internal/prompt-context.js +3 -6
  494. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  495. package/dist/internal/reminder-runner.js +770 -785
  496. package/dist/internal/reminder-schedule.js +1 -1
  497. package/dist/internal/reminder-store.js +57 -78
  498. package/dist/internal/request-error-status.js +1 -3
  499. package/dist/internal/request-headers.js +2 -2
  500. package/dist/internal/resolve-prod-target.js +119 -135
  501. package/dist/internal/resolved-connections.js +16 -6
  502. package/dist/internal/run-client.js +221 -229
  503. package/dist/internal/runtime-dispatch-runner.js +18 -43
  504. package/dist/internal/schedule-runner.js +49 -58
  505. package/dist/internal/scm/pr-url.js +7 -6
  506. package/dist/internal/sdk-runner.js +388 -363
  507. package/dist/internal/serve-restart.js +26 -39
  508. package/dist/internal/server.d.ts.map +1 -1
  509. package/dist/internal/server.js +1283 -1244
  510. package/dist/internal/session-cost.js +7 -9
  511. package/dist/internal/session-engine.d.ts +3 -1
  512. package/dist/internal/session-engine.d.ts.map +1 -1
  513. package/dist/internal/session-engine.js +2801 -2777
  514. package/dist/internal/session-links.js +12 -16
  515. package/dist/internal/session-run-log.js +134 -82
  516. package/dist/internal/session-store.js +133 -164
  517. package/dist/internal/sessions-client.js +97 -118
  518. package/dist/internal/skill-catalog.js +18 -23
  519. package/dist/internal/skills-sync.js +16 -30
  520. package/dist/internal/slack-provision-client.js +90 -116
  521. package/dist/internal/start-log-store.js +48 -67
  522. package/dist/internal/steering.js +1 -2
  523. package/dist/internal/storage-coordinator.js +160 -196
  524. package/dist/internal/store-mirror.js +16 -30
  525. package/dist/internal/stream-progress.js +6 -8
  526. package/dist/internal/terminal-style.js +3 -4
  527. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  528. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  529. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  530. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  531. package/dist/internal/tool-catalog.js +11 -5
  532. package/dist/internal/tool-result.js +1 -1
  533. package/dist/internal/trajectory.js +19 -22
  534. package/dist/internal/turn-cost.js +52 -62
  535. package/dist/internal/turn-governor.js +5 -8
  536. package/dist/internal/turn-lease-store.js +85 -105
  537. package/dist/internal/turn-outbox.js +28 -43
  538. package/dist/internal/update-check.js +231 -259
  539. package/dist/internal/v2-hosting.js +1 -2
  540. package/dist/internal/workspace-sync.js +25 -41
  541. package/dist/internal/workspace.js +111 -139
  542. package/dist/kv/memory-kv.js +27 -51
  543. package/dist/memory.js +106 -148
  544. package/dist/otel.js +5 -8
  545. package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
  546. package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
  547. package/dist/playground/index.html +2 -2
  548. package/dist/prompt.js +2 -4
  549. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  550. package/dist/storage-backends/cursor-hosted.js +105 -145
  551. package/dist/storage-backends/file-kv.js +100 -128
  552. package/dist/storage-protocol.js +3 -5
  553. package/dist/storage.js +17 -26
  554. package/dist/types.d.ts +68 -0
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +20 -18
  557. package/docs/building-with-agents.md +2 -0
  558. package/docs/deployment.md +7 -0
  559. package/docs/guides/bitbucket.md +9 -1
  560. package/docs/guides/github.md +20 -4
  561. package/docs/guides/gitlab.md +9 -1
  562. package/docs/guides/migrate.md +127 -0
  563. package/docs/reference/cli.md +39 -0
  564. package/docs/troubleshooting.md +1 -0
  565. package/package.json +1 -1
  566. package/skills/debug/SKILL.md +1 -0
  567. package/skills/github/SKILL.md +23 -0
  568. package/skills/migrate-v2/SKILL.md +264 -0
  569. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
  570. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
  571. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
  572. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
  573. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
  574. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
  575. package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
  576. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  577. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  578. package/dist/playground/assets/index-DPKLl4C_.css +0 -1
  579. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  580. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
  581. /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:") {