@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
@@ -1,15 +1,6 @@
1
1
  /**
2
2
  * `agent/mcp-connections/*.ts` and `agent/host-connections/*.ts`: MCP servers for the model and the host.
3
3
  */
4
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
- return new (P || (P = Promise))(function (resolve, reject) {
7
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
8
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10
- step((generator = generator.apply(thisArg, _arguments || [])).next());
11
- });
12
- };
13
4
  import { join } from "node:path";
14
5
  import { cursorAccountServersHasMixedWildcard, isInlineStdioConnection, isToolEffect, normalizeConnectionEffects, normalizeConnectionTools, normalizeCursorAccountServers, } from "../../types.js";
15
6
  import { unresolvedConnectionEnvNames } from "../connection-env.js";
@@ -86,7 +77,10 @@ function connectionHasSpawnOrRemote(connection) {
86
77
  function connectionTransport(connection) {
87
78
  if ("cursorAccount" in connection && connection.cursorAccount === true) {
88
79
  const servers = normalizeCursorAccountServers(connection.servers);
89
- return Object.assign({ cursorAccount: true }, (servers === undefined ? {} : { servers }));
80
+ return {
81
+ cursorAccount: true,
82
+ ...(servers === undefined ? {} : { servers }),
83
+ };
90
84
  }
91
85
  if ("agent" in connection && !isBlank(connection.agent)) {
92
86
  return { agent: connection.agent };
@@ -100,41 +94,43 @@ function connectionTransport(connection) {
100
94
  };
101
95
  }
102
96
  if ("command" in connection && !isBlank(connection.command)) {
103
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (connection.type === undefined ? {} : { type: connection.type })), { command: connection.command }), (connection.args === undefined ? {} : { args: connection.args })), (connection.env === undefined ? {} : { env: connection.env })), (connection.cwd === undefined ? {} : { cwd: connection.cwd }));
97
+ return {
98
+ ...(connection.type === undefined ? {} : { type: connection.type }),
99
+ command: connection.command,
100
+ ...(connection.args === undefined ? {} : { args: connection.args }),
101
+ ...(connection.env === undefined ? {} : { env: connection.env }),
102
+ ...(connection.cwd === undefined ? {} : { cwd: connection.cwd }),
103
+ };
104
104
  }
105
105
  return undefined;
106
106
  }
107
- export function loadHostConnections(ctx, agentDir, modelConnections) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- const hostDir = join(agentDir, "host-connections");
110
- const loaded = yield loadConnections(ctx, hostDir, "host");
111
- const modelNames = new Set(modelConnections.map(connection => connection.name));
112
- const hostConnections = [];
113
- for (const connection of loaded) {
114
- if (modelNames.has(connection.name)) {
115
- ctx.diagnostics.push({
116
- severity: "error",
117
- path: displayPath(ctx, join(hostDir, `${connection.name}.ts`)),
118
- message: `Host connection "${connection.name}" collides with the model connection of the same name. Rename one of them.`,
119
- });
120
- continue;
121
- }
122
- if (rejectHostConnectionFeatures(ctx, join(hostDir, `${connection.name}.ts`), connection)) {
123
- continue;
124
- }
125
- hostConnections.push(connection);
107
+ export async function loadHostConnections(ctx, agentDir, modelConnections) {
108
+ const hostDir = join(agentDir, "host-connections");
109
+ const loaded = await loadConnections(ctx, hostDir, "host");
110
+ const modelNames = new Set(modelConnections.map(connection => connection.name));
111
+ const hostConnections = [];
112
+ for (const connection of loaded) {
113
+ if (modelNames.has(connection.name)) {
114
+ ctx.diagnostics.push({
115
+ severity: "error",
116
+ path: displayPath(ctx, join(hostDir, `${connection.name}.ts`)),
117
+ message: `Host connection "${connection.name}" collides with the model connection of the same name. Rename one of them.`,
118
+ });
119
+ continue;
126
120
  }
127
- return hostConnections;
128
- });
129
- }
130
- export function compileHostConnection(ctx, path, name, definition) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- const connection = yield compileConnection(ctx, path, name, definition, "host");
133
- if (connection === undefined || rejectHostConnectionFeatures(ctx, path, connection)) {
134
- return undefined;
121
+ if (rejectHostConnectionFeatures(ctx, join(hostDir, `${connection.name}.ts`), connection)) {
122
+ continue;
135
123
  }
136
- return connection;
137
- });
124
+ hostConnections.push(connection);
125
+ }
126
+ return hostConnections;
127
+ }
128
+ export async function compileHostConnection(ctx, path, name, definition) {
129
+ const connection = await compileConnection(ctx, path, name, definition, "host");
130
+ if (connection === undefined || rejectHostConnectionFeatures(ctx, path, connection)) {
131
+ return undefined;
132
+ }
133
+ return connection;
138
134
  }
139
135
  function rejectHostConnectionFeatures(ctx, path, connection) {
140
136
  if (connection.advertiseTools === true) {
@@ -155,286 +151,280 @@ function rejectHostConnectionFeatures(ctx, path, connection) {
155
151
  }
156
152
  return false;
157
153
  }
158
- export function loadConnections(ctx_1, connectionsDir_1) {
159
- return __awaiter(this, arguments, void 0, function* (ctx, connectionsDir, role = "model") {
160
- const connections = [];
161
- for (const { name, path } of yield moduleEntries(ctx, connectionsDir, "connection")) {
162
- const definition = yield importDefault(ctx, path, "connection");
163
- if (definition === undefined) {
164
- continue;
165
- }
166
- const connection = yield compileConnection(ctx, path, name, definition, role);
167
- if (connection !== undefined) {
168
- connections.push(connection);
169
- }
154
+ export async function loadConnections(ctx, connectionsDir, role = "model") {
155
+ const connections = [];
156
+ for (const { name, path } of await moduleEntries(ctx, connectionsDir, "connection")) {
157
+ const definition = await importDefault(ctx, path, "connection");
158
+ if (definition === undefined) {
159
+ continue;
170
160
  }
171
- return connections;
172
- });
161
+ const connection = await compileConnection(ctx, path, name, definition, role);
162
+ if (connection !== undefined) {
163
+ connections.push(connection);
164
+ }
165
+ }
166
+ return connections;
173
167
  }
174
168
  /** Validate one `defineConnection` and resolve its transport. */
175
- export function compileConnection(ctx, entryPath, name, connection, role) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- if (Object.hasOwn(connection, "hostOnly")) {
178
- ctx.diagnostics.push({
179
- severity: "error",
180
- path: displayPath(ctx, entryPath),
181
- message: "MCP connection `hostOnly` was removed. Model connections are always visible to the model. Put privileged servers in host-connections/ so only host tools can call them.",
182
- });
183
- return undefined;
184
- }
185
- if (isInlineStdioConnection(connection) && connectionHasSpawnOrRemote(connection)) {
186
- ctx.diagnostics.push({
187
- severity: "error",
188
- path: displayPath(ctx, entryPath),
189
- message: "MCP connection `tools` cannot be combined with `command`, `url`, `agent`, or `cursorAccount`. Author TypeScript tools, or point at an existing server, not both.",
190
- });
191
- return undefined;
192
- }
193
- if (connection.auth !== undefined && typeof connection.auth !== "function") {
194
- ctx.diagnostics.push({
195
- severity: "error",
196
- path: displayPath(ctx, entryPath),
197
- message: "MCP connection `auth` must be a function: (session) => { headers }.",
198
- });
199
- return undefined;
200
- }
201
- if (connection.auth !== undefined && !("url" in connection)) {
202
- ctx.diagnostics.push({
203
- severity: "error",
204
- path: displayPath(ctx, entryPath),
205
- message: "MCP connection `auth` (per-session headers) is only supported on http/sse connections (`url`).",
206
- });
207
- return undefined;
208
- }
209
- if (connection.advertiseTools !== undefined && typeof connection.advertiseTools !== "boolean") {
210
- ctx.diagnostics.push({
211
- severity: "error",
212
- path: displayPath(ctx, entryPath),
213
- message: "MCP connection `advertiseTools` must be a boolean.",
214
- });
215
- return undefined;
216
- }
217
- if (connection.optional !== undefined && typeof connection.optional !== "boolean") {
218
- ctx.diagnostics.push({
219
- severity: "error",
220
- path: displayPath(ctx, entryPath),
221
- message: "MCP connection `optional` must be a boolean.",
222
- });
223
- return undefined;
224
- }
225
- if (connection.optional === true && connection.advertiseTools !== true) {
226
- ctx.diagnostics.push({
227
- severity: "error",
228
- path: displayPath(ctx, entryPath),
229
- message: "MCP connection `optional` skips advertised listing failures; set `advertiseTools: true` or drop `optional`.",
230
- });
231
- return undefined;
232
- }
233
- const parsedEffects = parseConnectionEffects(connection.effects);
234
- if (!parsedEffects.ok) {
235
- ctx.diagnostics.push({
236
- severity: "error",
237
- path: displayPath(ctx, entryPath),
238
- message: 'MCP connection `effects` must be "read", "write", or a non-empty array of those.',
239
- });
240
- return undefined;
241
- }
242
- if (parsedEffects.value !== undefined && connection.advertiseTools !== true) {
243
- ctx.diagnostics.push({
244
- severity: "error",
245
- path: displayPath(ctx, entryPath),
246
- message: "MCP connection `effects` filters advertised tools; set `advertiseTools: true` or drop `effects`.",
247
- });
248
- return undefined;
249
- }
250
- const parsedTools = isInlineStdioConnection(connection)
251
- ? { ok: true, value: undefined }
252
- : parseConnectionTools(connection.tools);
253
- if (!parsedTools.ok) {
254
- ctx.diagnostics.push({
255
- severity: "error",
256
- path: displayPath(ctx, entryPath),
257
- message: "MCP connection `tools` allowlist must be a non-empty array of tool names.",
258
- });
259
- return undefined;
260
- }
261
- if (isInlineStdioConnection(connection) && connection.disallowedTools !== undefined) {
262
- ctx.diagnostics.push({
263
- severity: "error",
264
- path: displayPath(ctx, entryPath),
265
- message: "MCP connection `disallowedTools` is not supported on inline `tools` connections — author only the tools you want.",
266
- });
267
- return undefined;
268
- }
269
- const parsedDisallowed = isInlineStdioConnection(connection)
270
- ? { ok: true, value: undefined }
271
- : parseConnectionTools(connection.disallowedTools);
272
- if (!parsedDisallowed.ok) {
273
- ctx.diagnostics.push({
274
- severity: "error",
275
- path: displayPath(ctx, entryPath),
276
- message: "MCP connection `disallowedTools` must be a non-empty array of tool names.",
277
- });
278
- return undefined;
279
- }
280
- if ((parsedTools.value !== undefined || parsedDisallowed.value !== undefined) &&
281
- role === "model" &&
282
- connection.advertiseTools !== true) {
283
- ctx.diagnostics.push({
284
- severity: "error",
285
- path: displayPath(ctx, entryPath),
286
- message: "MCP connection `tools` / `disallowedTools` filter advertised tools; set `advertiseTools: true` or drop the name list. Put the connection in host-connections/ to restrict `host.mcp` only.",
287
- });
288
- return undefined;
289
- }
290
- if (connection.advertiseTools === true && isInlineStdioConnection(connection)) {
291
- ctx.diagnostics.push({
292
- severity: "error",
293
- path: displayPath(ctx, entryPath),
294
- message: "MCP connection `advertiseTools` is not supported on inline `tools` connections — author those under tools/ as server tools instead.",
295
- });
296
- return undefined;
297
- }
298
- if (connection.auth !== undefined && "url" in connection && connection.oauth === true) {
299
- ctx.diagnostics.push({
300
- severity: "error",
301
- path: displayPath(ctx, entryPath),
302
- message: "MCP connection `oauth: true` cannot be combined with `auth` (per-session headers): the host OAuth provider owns the Authorization header. Drop one of them.",
303
- });
304
- return undefined;
305
- }
306
- if (isInlineStdioConnection(connection)) {
307
- return loadInlineStdioConnection(ctx, name, entryPath, connection);
308
- }
309
- if ("url" in connection &&
310
- connection.oauth === true &&
311
- hasAuthorizationHeader(connection.headers)) {
312
- ctx.diagnostics.push({
313
- severity: "error",
314
- path: displayPath(ctx, entryPath),
315
- message: "MCP connection `oauth: true` cannot set an Authorization header. Drop the header or remove `oauth`.",
316
- });
317
- return undefined;
318
- }
319
- if ("cursorAccount" in connection &&
320
- connection.cursorAccount === true &&
321
- cursorAccountServersHasMixedWildcard(connection.servers)) {
322
- ctx.diagnostics.push({
323
- severity: "error",
324
- path: displayPath(ctx, entryPath),
325
- message: 'Cursor account MCP connection `servers` cannot mix `"*"` with connector names. Use `"*"` / `["*"]` (or omit `servers`) for every connected server, or list only concrete connector names.',
326
- });
327
- return undefined;
328
- }
329
- const transport = connectionTransport(connection);
330
- if (transport === undefined) {
169
+ export async function compileConnection(ctx, entryPath, name, connection, role) {
170
+ if (Object.hasOwn(connection, "hostOnly")) {
171
+ ctx.diagnostics.push({
172
+ severity: "error",
173
+ path: displayPath(ctx, entryPath),
174
+ message: "MCP connection `hostOnly` was removed. Model connections are always visible to the model. Put privileged servers in host-connections/ so only host tools can call them.",
175
+ });
176
+ return undefined;
177
+ }
178
+ if (isInlineStdioConnection(connection) && connectionHasSpawnOrRemote(connection)) {
179
+ ctx.diagnostics.push({
180
+ severity: "error",
181
+ path: displayPath(ctx, entryPath),
182
+ message: "MCP connection `tools` cannot be combined with `command`, `url`, `agent`, or `cursorAccount`. Author TypeScript tools, or point at an existing server, not both.",
183
+ });
184
+ return undefined;
185
+ }
186
+ if (connection.auth !== undefined && typeof connection.auth !== "function") {
187
+ ctx.diagnostics.push({
188
+ severity: "error",
189
+ path: displayPath(ctx, entryPath),
190
+ message: "MCP connection `auth` must be a function: (session) => { headers }.",
191
+ });
192
+ return undefined;
193
+ }
194
+ if (connection.auth !== undefined && !("url" in connection)) {
195
+ ctx.diagnostics.push({
196
+ severity: "error",
197
+ path: displayPath(ctx, entryPath),
198
+ message: "MCP connection `auth` (per-session headers) is only supported on http/sse connections (`url`).",
199
+ });
200
+ return undefined;
201
+ }
202
+ if (connection.advertiseTools !== undefined && typeof connection.advertiseTools !== "boolean") {
203
+ ctx.diagnostics.push({
204
+ severity: "error",
205
+ path: displayPath(ctx, entryPath),
206
+ message: "MCP connection `advertiseTools` must be a boolean.",
207
+ });
208
+ return undefined;
209
+ }
210
+ if (connection.optional !== undefined && typeof connection.optional !== "boolean") {
211
+ ctx.diagnostics.push({
212
+ severity: "error",
213
+ path: displayPath(ctx, entryPath),
214
+ message: "MCP connection `optional` must be a boolean.",
215
+ });
216
+ return undefined;
217
+ }
218
+ if (connection.optional === true && connection.advertiseTools !== true) {
219
+ ctx.diagnostics.push({
220
+ severity: "error",
221
+ path: displayPath(ctx, entryPath),
222
+ message: "MCP connection `optional` skips advertised listing failures; set `advertiseTools: true` or drop `optional`.",
223
+ });
224
+ return undefined;
225
+ }
226
+ const parsedEffects = parseConnectionEffects(connection.effects);
227
+ if (!parsedEffects.ok) {
228
+ ctx.diagnostics.push({
229
+ severity: "error",
230
+ path: displayPath(ctx, entryPath),
231
+ message: 'MCP connection `effects` must be "read", "write", or a non-empty array of those.',
232
+ });
233
+ return undefined;
234
+ }
235
+ if (parsedEffects.value !== undefined && connection.advertiseTools !== true) {
236
+ ctx.diagnostics.push({
237
+ severity: "error",
238
+ path: displayPath(ctx, entryPath),
239
+ message: "MCP connection `effects` filters advertised tools; set `advertiseTools: true` or drop `effects`.",
240
+ });
241
+ return undefined;
242
+ }
243
+ const parsedTools = isInlineStdioConnection(connection)
244
+ ? { ok: true, value: undefined }
245
+ : parseConnectionTools(connection.tools);
246
+ if (!parsedTools.ok) {
247
+ ctx.diagnostics.push({
248
+ severity: "error",
249
+ path: displayPath(ctx, entryPath),
250
+ message: "MCP connection `tools` allowlist must be a non-empty array of tool names.",
251
+ });
252
+ return undefined;
253
+ }
254
+ if (isInlineStdioConnection(connection) && connection.disallowedTools !== undefined) {
255
+ ctx.diagnostics.push({
256
+ severity: "error",
257
+ path: displayPath(ctx, entryPath),
258
+ message: "MCP connection `disallowedTools` is not supported on inline `tools` connections — author only the tools you want.",
259
+ });
260
+ return undefined;
261
+ }
262
+ const parsedDisallowed = isInlineStdioConnection(connection)
263
+ ? { ok: true, value: undefined }
264
+ : parseConnectionTools(connection.disallowedTools);
265
+ if (!parsedDisallowed.ok) {
266
+ ctx.diagnostics.push({
267
+ severity: "error",
268
+ path: displayPath(ctx, entryPath),
269
+ message: "MCP connection `disallowedTools` must be a non-empty array of tool names.",
270
+ });
271
+ return undefined;
272
+ }
273
+ if ((parsedTools.value !== undefined || parsedDisallowed.value !== undefined) &&
274
+ role === "model" &&
275
+ connection.advertiseTools !== true) {
276
+ ctx.diagnostics.push({
277
+ severity: "error",
278
+ path: displayPath(ctx, entryPath),
279
+ message: "MCP connection `tools` / `disallowedTools` filter advertised tools; set `advertiseTools: true` or drop the name list. Put the connection in host-connections/ to restrict `host.mcp` only.",
280
+ });
281
+ return undefined;
282
+ }
283
+ if (connection.advertiseTools === true && isInlineStdioConnection(connection)) {
284
+ ctx.diagnostics.push({
285
+ severity: "error",
286
+ path: displayPath(ctx, entryPath),
287
+ message: "MCP connection `advertiseTools` is not supported on inline `tools` connections — author those under tools/ as server tools instead.",
288
+ });
289
+ return undefined;
290
+ }
291
+ if (connection.auth !== undefined && "url" in connection && connection.oauth === true) {
292
+ ctx.diagnostics.push({
293
+ severity: "error",
294
+ path: displayPath(ctx, entryPath),
295
+ message: "MCP connection `oauth: true` cannot be combined with `auth` (per-session headers): the host OAuth provider owns the Authorization header. Drop one of them.",
296
+ });
297
+ return undefined;
298
+ }
299
+ if (isInlineStdioConnection(connection)) {
300
+ return loadInlineStdioConnection(ctx, name, entryPath, connection);
301
+ }
302
+ if ("url" in connection &&
303
+ connection.oauth === true &&
304
+ hasAuthorizationHeader(connection.headers)) {
305
+ ctx.diagnostics.push({
306
+ severity: "error",
307
+ path: displayPath(ctx, entryPath),
308
+ message: "MCP connection `oauth: true` cannot set an Authorization header. Drop the header or remove `oauth`.",
309
+ });
310
+ return undefined;
311
+ }
312
+ if ("cursorAccount" in connection &&
313
+ connection.cursorAccount === true &&
314
+ cursorAccountServersHasMixedWildcard(connection.servers)) {
315
+ ctx.diagnostics.push({
316
+ severity: "error",
317
+ path: displayPath(ctx, entryPath),
318
+ message: 'Cursor account MCP connection `servers` cannot mix `"*"` with connector names. Use `"*"` / `["*"]` (or omit `servers`) for every connected server, or list only concrete connector names.',
319
+ });
320
+ return undefined;
321
+ }
322
+ const transport = connectionTransport(connection);
323
+ if (transport === undefined) {
324
+ ctx.diagnostics.push({
325
+ severity: "error",
326
+ path: displayPath(ctx, entryPath),
327
+ message: "MCP connections require a `url` (http/sse), a `command` (stdio), `tools` (TypeScript packaged as stdio), an `agent` (peer agent slug on the same serve host), or `cursorAccount: true` (the Cursor account's MCP connectors).",
328
+ });
329
+ return undefined;
330
+ }
331
+ if ("cursorAccount" in transport &&
332
+ transport.servers !== undefined &&
333
+ (transport.servers.length === 0 || transport.servers.some(server => isBlank(server)))) {
334
+ ctx.diagnostics.push({
335
+ severity: "error",
336
+ path: displayPath(ctx, entryPath),
337
+ message: 'Cursor account MCP connection `servers` must be a non-empty list of connector names, `"*"` / `["*"]` for every connected server, or omitted for the same all-connectors behavior.',
338
+ });
339
+ return undefined;
340
+ }
341
+ if ("agent" in transport && !NAME_PATTERN.test(transport.agent)) {
342
+ ctx.diagnostics.push({
343
+ severity: "error",
344
+ path: displayPath(ctx, entryPath),
345
+ message: `Peer MCP connection agent "${transport.agent}" must be a mount slug matching ${NAME_PATTERN}.`,
346
+ });
347
+ return undefined;
348
+ }
349
+ // A warning, never an error: templates resolve when the connection opens,
350
+ // and a hosted deployment binds its secrets after discovery has run.
351
+ const unresolved = unresolvedConnectionEnvNames(transport);
352
+ if (unresolved.length > 0) {
353
+ ctx.diagnostics.push({
354
+ severity: "warning",
355
+ path: displayPath(ctx, entryPath),
356
+ message: `MCP connection "${name}" templates ${unresolved.map(variable => `\${${variable}}`).join(", ")}, which the environment does not set. The value resolves when the connection opens, so hosted deployments are fine; locally, set it before the turn or the credential is empty.`,
357
+ });
358
+ }
359
+ return {
360
+ name,
361
+ transport,
362
+ description: connection.description,
363
+ auth: connection.auth,
364
+ advertiseTools: connection.advertiseTools,
365
+ optional: connection.optional,
366
+ effects: parsedEffects.value,
367
+ tools: parsedTools.value,
368
+ disallowedTools: parsedDisallowed.value,
369
+ };
370
+ }
371
+ async function loadInlineStdioConnection(ctx, name, entryPath, connection) {
372
+ const tools = connection.tools;
373
+ const names = Object.keys(tools);
374
+ if (names.length === 0) {
375
+ ctx.diagnostics.push({
376
+ severity: "error",
377
+ path: displayPath(ctx, entryPath),
378
+ message: "MCP connection `tools` must declare at least one tool.",
379
+ });
380
+ return undefined;
381
+ }
382
+ for (const toolName of names) {
383
+ if (!NAME_PATTERN.test(toolName)) {
331
384
  ctx.diagnostics.push({
332
385
  severity: "error",
333
386
  path: displayPath(ctx, entryPath),
334
- message: "MCP connections require a `url` (http/sse), a `command` (stdio), `tools` (TypeScript packaged as stdio), an `agent` (peer agent slug on the same serve host), or `cursorAccount: true` (the Cursor account's MCP connectors).",
387
+ message: `MCP tool name "${toolName}" must match ${NAME_PATTERN}.`,
335
388
  });
336
389
  return undefined;
337
390
  }
338
- if ("cursorAccount" in transport &&
339
- transport.servers !== undefined &&
340
- (transport.servers.length === 0 || transport.servers.some(server => isBlank(server)))) {
391
+ const tool = tools[toolName];
392
+ if (tool === undefined || isBlank(tool.description)) {
341
393
  ctx.diagnostics.push({
342
394
  severity: "error",
343
395
  path: displayPath(ctx, entryPath),
344
- message: 'Cursor account MCP connection `servers` must be a non-empty list of connector names, `"*"` / `["*"]` for every connected server, or omitted for the same all-connectors behavior.',
396
+ message: `MCP tool "${toolName}" requires a non-empty description.`,
345
397
  });
346
398
  return undefined;
347
399
  }
348
- if ("agent" in transport && !NAME_PATTERN.test(transport.agent)) {
400
+ if (typeof tool.execute !== "function") {
349
401
  ctx.diagnostics.push({
350
402
  severity: "error",
351
403
  path: displayPath(ctx, entryPath),
352
- message: `Peer MCP connection agent "${transport.agent}" must be a mount slug matching ${NAME_PATTERN}.`,
404
+ message: `MCP tool "${toolName}" requires an execute(input) function.`,
353
405
  });
354
406
  return undefined;
355
407
  }
356
- // A warning, never an error: templates resolve when the connection opens,
357
- // and a hosted deployment binds its secrets after discovery has run.
358
- const unresolved = unresolvedConnectionEnvNames(transport);
359
- if (unresolved.length > 0) {
360
- ctx.diagnostics.push({
361
- severity: "warning",
362
- path: displayPath(ctx, entryPath),
363
- message: `MCP connection "${name}" templates ${unresolved.map(variable => `\${${variable}}`).join(", ")}, which the environment does not set. The value resolves when the connection opens, so hosted deployments are fine; locally, set it before the turn or the credential is empty.`,
364
- });
365
- }
408
+ }
409
+ try {
410
+ const transport = await packageInlineStdioConnection({
411
+ name,
412
+ entryPath,
413
+ tools,
414
+ absWorkingDir: ctx.rootDir,
415
+ });
366
416
  return {
367
417
  name,
368
418
  transport,
369
419
  description: connection.description,
370
- auth: connection.auth,
371
- advertiseTools: connection.advertiseTools,
372
- optional: connection.optional,
373
- effects: parsedEffects.value,
374
- tools: parsedTools.value,
375
- disallowedTools: parsedDisallowed.value,
376
420
  };
377
- });
378
- }
379
- function loadInlineStdioConnection(ctx, name, entryPath, connection) {
380
- return __awaiter(this, void 0, void 0, function* () {
381
- const tools = connection.tools;
382
- const names = Object.keys(tools);
383
- if (names.length === 0) {
384
- ctx.diagnostics.push({
385
- severity: "error",
386
- path: displayPath(ctx, entryPath),
387
- message: "MCP connection `tools` must declare at least one tool.",
388
- });
389
- return undefined;
390
- }
391
- for (const toolName of names) {
392
- if (!NAME_PATTERN.test(toolName)) {
393
- ctx.diagnostics.push({
394
- severity: "error",
395
- path: displayPath(ctx, entryPath),
396
- message: `MCP tool name "${toolName}" must match ${NAME_PATTERN}.`,
397
- });
398
- return undefined;
399
- }
400
- const tool = tools[toolName];
401
- if (tool === undefined || isBlank(tool.description)) {
402
- ctx.diagnostics.push({
403
- severity: "error",
404
- path: displayPath(ctx, entryPath),
405
- message: `MCP tool "${toolName}" requires a non-empty description.`,
406
- });
407
- return undefined;
408
- }
409
- if (typeof tool.execute !== "function") {
410
- ctx.diagnostics.push({
411
- severity: "error",
412
- path: displayPath(ctx, entryPath),
413
- message: `MCP tool "${toolName}" requires an execute(input) function.`,
414
- });
415
- return undefined;
416
- }
417
- }
418
- try {
419
- const transport = yield packageInlineStdioConnection({
420
- name,
421
- entryPath,
422
- tools,
423
- absWorkingDir: ctx.rootDir,
424
- });
425
- return {
426
- name,
427
- transport,
428
- description: connection.description,
429
- };
430
- }
431
- catch (error) {
432
- ctx.diagnostics.push({
433
- severity: "error",
434
- path: displayPath(ctx, entryPath),
435
- message: `Failed to package inline stdio MCP connection: ${errorMessage(error)}`,
436
- });
437
- return undefined;
438
- }
439
- });
421
+ }
422
+ catch (error) {
423
+ ctx.diagnostics.push({
424
+ severity: "error",
425
+ path: displayPath(ctx, entryPath),
426
+ message: `Failed to package inline stdio MCP connection: ${errorMessage(error)}`,
427
+ });
428
+ return undefined;
429
+ }
440
430
  }