@cursor/bdk 0.2.9 → 0.2.11

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