@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,22 +1,11 @@
1
1
  /**
2
2
  * Shared discovery state: the loader options, the per-project context every loader receives, and the diagnostic helpers.
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 { relative } from "node:path";
14
5
  import { pathToFileURL } from "node:url";
15
6
  import { toPosix } from "./fs.js";
16
- export function defaultImportModule(absolutePath) {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- return (yield import(pathToFileURL(absolutePath).href));
19
- });
7
+ export async function defaultImportModule(absolutePath) {
8
+ return (await import(pathToFileURL(absolutePath).href));
20
9
  }
21
10
  export function displayPath(ctx, absolutePath) {
22
11
  const rel = relative(ctx.rootDir, absolutePath);
@@ -1,15 +1,6 @@
1
1
  /**
2
2
  * A Cursor plugin directory read as an extension tree: skills, commands, agents, and MCP servers under the plugin's own names.
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 { readFile } from "node:fs/promises";
14
5
  import { basename, dirname, extname, isAbsolute, join } from "node:path";
15
6
  import { z } from "zod";
@@ -51,7 +42,7 @@ const manifestSchema = z.object({
51
42
  ])
52
43
  .optional()
53
44
  .transform(value => {
54
- const items = value === undefined || Array.isArray(value) ? (value !== null && value !== void 0 ? value : []) : [value];
45
+ const items = value === undefined || Array.isArray(value) ? (value ?? []) : [value];
55
46
  return {
56
47
  paths: items.filter(item => typeof item === "string"),
57
48
  inline: items.filter(item => typeof item !== "string"),
@@ -80,248 +71,230 @@ const mcpServerSchema = z.object({
80
71
  /** Cursor disables unlisted tools; an empty list would disable them all. */
81
72
  enabledTools: z.array(z.string()).nonempty().optional(),
82
73
  });
83
- export function readCursorPlugin(ctx, root, mountPath, variables, overlaid) {
84
- return __awaiter(this, void 0, void 0, function* () {
85
- const manifest = yield readManifest(ctx, root, mountPath);
86
- if (manifest === undefined) {
87
- return undefined;
88
- }
89
- const plugin = {
90
- ctx,
91
- root,
92
- manifestPath: manifest.path,
93
- variables,
94
- };
95
- const skills = yield loadPluginSkills(plugin, manifest.data.skills);
96
- for (const command of yield loadPluginCommands(plugin, manifest.data.commands)) {
97
- if (skills.some(skill => skill.name === command.name)) {
98
- ctx.diagnostics.push({
99
- severity: "warning",
100
- path: displayPath(ctx, root),
101
- message: `Plugin command "${command.name}" has the same name as a skill; the skill wins. Ignoring the command.`,
102
- });
103
- continue;
104
- }
105
- skills.push(command);
106
- }
107
- yield warnUnmountedSlots(plugin, manifest.data);
108
- return Object.assign(Object.assign({ description: manifest.data.description, skills }, (yield loadPluginConnections(plugin, manifest.data.mcpServers, overlaid))), { agents: yield loadPluginAgents(plugin, manifest.data.agents) });
109
- });
110
- }
111
- function readManifest(ctx, root, mountPath) {
112
- return __awaiter(this, void 0, void 0, function* () {
113
- for (const rel of MANIFEST_PATHS) {
114
- const path = join(root, rel);
115
- if (!(yield isFile(path))) {
116
- continue;
117
- }
118
- const data = yield readJson(ctx, path);
119
- if (data === undefined) {
120
- return undefined;
121
- }
122
- const parsed = manifestSchema.safeParse(data);
123
- if (parsed.success) {
124
- return { data: parsed.data, path };
125
- }
74
+ export async function readCursorPlugin(ctx, root, mountPath, variables, overlaid) {
75
+ const manifest = await readManifest(ctx, root, mountPath);
76
+ if (manifest === undefined) {
77
+ return undefined;
78
+ }
79
+ const plugin = {
80
+ ctx,
81
+ root,
82
+ manifestPath: manifest.path,
83
+ variables,
84
+ };
85
+ const skills = await loadPluginSkills(plugin, manifest.data.skills);
86
+ for (const command of await loadPluginCommands(plugin, manifest.data.commands)) {
87
+ if (skills.some(skill => skill.name === command.name)) {
126
88
  ctx.diagnostics.push({
127
- severity: "error",
128
- path: displayPath(ctx, path),
129
- message: `The plugin manifest is malformed: ${firstIssue(parsed.error)}.`,
89
+ severity: "warning",
90
+ path: displayPath(ctx, root),
91
+ message: `Plugin command "${command.name}" has the same name as a skill; the skill wins. Ignoring the command.`,
130
92
  });
93
+ continue;
94
+ }
95
+ skills.push(command);
96
+ }
97
+ await warnUnmountedSlots(plugin, manifest.data);
98
+ return {
99
+ description: manifest.data.description,
100
+ skills,
101
+ ...(await loadPluginConnections(plugin, manifest.data.mcpServers, overlaid)),
102
+ agents: await loadPluginAgents(plugin, manifest.data.agents),
103
+ };
104
+ }
105
+ async function readManifest(ctx, root, mountPath) {
106
+ for (const rel of MANIFEST_PATHS) {
107
+ const path = join(root, rel);
108
+ if (!(await isFile(path))) {
109
+ continue;
110
+ }
111
+ const data = await readJson(ctx, path);
112
+ if (data === undefined) {
131
113
  return undefined;
132
114
  }
115
+ const parsed = manifestSchema.safeParse(data);
116
+ if (parsed.success) {
117
+ return { data: parsed.data, path };
118
+ }
133
119
  ctx.diagnostics.push({
134
120
  severity: "error",
135
- path: displayPath(ctx, mountPath),
136
- message: `${displayPath(ctx, root)} is not a Cursor plugin: it has no ${MANIFEST_PATHS.join(", ")}.`,
121
+ path: displayPath(ctx, path),
122
+ message: `The plugin manifest is malformed: ${firstIssue(parsed.error)}.`,
137
123
  });
138
124
  return undefined;
125
+ }
126
+ ctx.diagnostics.push({
127
+ severity: "error",
128
+ path: displayPath(ctx, mountPath),
129
+ message: `${displayPath(ctx, root)} is not a Cursor plugin: it has no ${MANIFEST_PATHS.join(", ")}.`,
139
130
  });
131
+ return undefined;
140
132
  }
141
133
  /** Slots Cursor applies through the IDE that have no agent-sdk mapping yet. */
142
- function warnUnmountedSlots(plugin, manifest) {
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const unmounted = [];
145
- if (manifest.rules !== undefined || (yield isDirectory(join(plugin.root, "rules")))) {
146
- unmounted.push("rules");
147
- }
148
- if (manifest.hooks !== undefined || (yield isFile(join(plugin.root, "hooks", "hooks.json")))) {
149
- unmounted.push("hooks");
150
- }
151
- if (unmounted.length === 0) {
152
- return;
153
- }
154
- plugin.ctx.diagnostics.push({
155
- severity: "warning",
156
- path: displayPath(plugin.ctx, plugin.root),
157
- message: `Cursor plugin ${unmounted.join(" and ")} are not mounted yet; skills, commands, agents, and MCP servers are. Ignoring.`,
158
- });
134
+ async function warnUnmountedSlots(plugin, manifest) {
135
+ const unmounted = [];
136
+ if (manifest.rules !== undefined || (await isDirectory(join(plugin.root, "rules")))) {
137
+ unmounted.push("rules");
138
+ }
139
+ if (manifest.hooks !== undefined || (await isFile(join(plugin.root, "hooks", "hooks.json")))) {
140
+ unmounted.push("hooks");
141
+ }
142
+ if (unmounted.length === 0) {
143
+ return;
144
+ }
145
+ plugin.ctx.diagnostics.push({
146
+ severity: "warning",
147
+ path: displayPath(plugin.ctx, plugin.root),
148
+ message: `Cursor plugin ${unmounted.join(" and ")} are not mounted yet; skills, commands, agents, and MCP servers are. Ignoring.`,
159
149
  });
160
150
  }
161
- function loadPluginSkills(plugin, declared) {
162
- return __awaiter(this, void 0, void 0, function* () {
163
- const dirs = [];
164
- if (declared === undefined) {
165
- if (yield isFile(join(plugin.root, "SKILL.md"))) {
166
- dirs.push(plugin.root);
167
- }
168
- dirs.push(...(yield skillDirsIn(join(plugin.root, "skills"))));
151
+ async function loadPluginSkills(plugin, declared) {
152
+ const dirs = [];
153
+ if (declared === undefined) {
154
+ if (await isFile(join(plugin.root, "SKILL.md"))) {
155
+ dirs.push(plugin.root);
169
156
  }
170
- for (const path of declaredPaths(plugin, declared !== null && declared !== void 0 ? declared : [])) {
171
- if (basename(path) === "SKILL.md" && (yield isFile(path))) {
172
- dirs.push(dirname(path));
173
- }
174
- else if (yield isFile(join(path, "SKILL.md"))) {
175
- dirs.push(path);
176
- }
177
- else {
178
- dirs.push(...(yield skillDirsIn(path)));
179
- }
157
+ dirs.push(...(await skillDirsIn(join(plugin.root, "skills"))));
158
+ }
159
+ for (const path of declaredPaths(plugin, declared ?? [])) {
160
+ if (basename(path) === "SKILL.md" && (await isFile(path))) {
161
+ dirs.push(dirname(path));
180
162
  }
181
- const skills = [];
182
- for (const dir of dirs) {
183
- const skill = yield readSkillDir(plugin, dir);
184
- if (skill !== undefined && !skills.some(s => s.name === skill.name)) {
185
- skills.push(skill);
186
- }
163
+ else if (await isFile(join(path, "SKILL.md"))) {
164
+ dirs.push(path);
187
165
  }
188
- return skills;
189
- });
166
+ else {
167
+ dirs.push(...(await skillDirsIn(path)));
168
+ }
169
+ }
170
+ const skills = [];
171
+ for (const dir of dirs) {
172
+ const skill = await readSkillDir(plugin, dir);
173
+ if (skill !== undefined && !skills.some(s => s.name === skill.name)) {
174
+ skills.push(skill);
175
+ }
176
+ }
177
+ return skills;
190
178
  }
191
179
  /** Immediate subdirectories holding a SKILL.md. */
192
- function skillDirsIn(dir) {
193
- return __awaiter(this, void 0, void 0, function* () {
194
- if (!(yield isDirectory(dir))) {
195
- return [];
196
- }
197
- const dirs = [];
198
- for (const entry of yield sortedEntries(dir)) {
199
- const path = join(dir, entry.name);
200
- if (entry.isDirectory() && (yield isFile(join(path, "SKILL.md")))) {
201
- dirs.push(path);
202
- }
180
+ async function skillDirsIn(dir) {
181
+ if (!(await isDirectory(dir))) {
182
+ return [];
183
+ }
184
+ const dirs = [];
185
+ for (const entry of await sortedEntries(dir)) {
186
+ const path = join(dir, entry.name);
187
+ if (entry.isDirectory() && (await isFile(join(path, "SKILL.md")))) {
188
+ dirs.push(path);
203
189
  }
204
- return dirs;
205
- });
190
+ }
191
+ return dirs;
192
+ }
193
+ async function readSkillDir(plugin, dir) {
194
+ const skillMdPath = join(dir, "SKILL.md");
195
+ const { data, body } = await readMarkdown(plugin, skillMdPath);
196
+ const name = componentName(plugin, data.name ?? basename(dir), skillMdPath);
197
+ if (name === undefined) {
198
+ return undefined;
199
+ }
200
+ return {
201
+ name,
202
+ description: skillDescription(name, data.description, body),
203
+ markdown: body.trim(),
204
+ files: await skillFiles(dir),
205
+ };
206
206
  }
207
- function readSkillDir(plugin, dir) {
208
- return __awaiter(this, void 0, void 0, function* () {
209
- var _a;
210
- const skillMdPath = join(dir, "SKILL.md");
211
- const { data, body } = yield readMarkdown(plugin, skillMdPath);
212
- const name = componentName(plugin, (_a = data.name) !== null && _a !== void 0 ? _a : basename(dir), skillMdPath);
207
+ async function loadPluginCommands(plugin, declared) {
208
+ const skills = [];
209
+ for (const path of await componentFiles(plugin, declared, "commands", COMMAND_EXTENSIONS)) {
210
+ const { data, body } = await readMarkdown(plugin, path);
211
+ const name = componentName(plugin, data.name ?? fileStem(path), path);
213
212
  if (name === undefined) {
214
- return undefined;
213
+ continue;
215
214
  }
216
- return {
215
+ skills.push({
217
216
  name,
218
217
  description: skillDescription(name, data.description, body),
219
218
  markdown: body.trim(),
220
- files: yield skillFiles(dir),
221
- };
222
- });
219
+ files: {},
220
+ });
221
+ }
222
+ return skills;
223
223
  }
224
- function loadPluginCommands(plugin, declared) {
225
- return __awaiter(this, void 0, void 0, function* () {
226
- var _a;
227
- const skills = [];
228
- for (const path of yield componentFiles(plugin, declared, "commands", COMMAND_EXTENSIONS)) {
229
- const { data, body } = yield readMarkdown(plugin, path);
230
- const name = componentName(plugin, (_a = data.name) !== null && _a !== void 0 ? _a : fileStem(path), path);
231
- if (name === undefined) {
232
- continue;
233
- }
234
- skills.push({
235
- name,
236
- description: skillDescription(name, data.description, body),
237
- markdown: body.trim(),
238
- files: {},
239
- });
224
+ async function loadPluginAgents(plugin, declared) {
225
+ const agents = [];
226
+ for (const path of await componentFiles(plugin, declared, "agents", MARKDOWN_EXTENSIONS)) {
227
+ const { data, body } = await readMarkdown(plugin, path);
228
+ const name = componentName(plugin, data.name ?? fileStem(path), path);
229
+ if (name === undefined || agents.some(agent => agent.name === name)) {
230
+ continue;
240
231
  }
241
- return skills;
242
- });
243
- }
244
- function loadPluginAgents(plugin, declared) {
245
- return __awaiter(this, void 0, void 0, function* () {
246
- var _a;
247
- const agents = [];
248
- for (const path of yield componentFiles(plugin, declared, "agents", MARKDOWN_EXTENSIONS)) {
249
- const { data, body } = yield readMarkdown(plugin, path);
250
- const name = componentName(plugin, (_a = data.name) !== null && _a !== void 0 ? _a : fileStem(path), path);
251
- if (name === undefined || agents.some(agent => agent.name === name)) {
252
- continue;
253
- }
254
- if (isBlank(body)) {
255
- plugin.ctx.diagnostics.push({
256
- severity: "warning",
257
- path: displayPath(plugin.ctx, path),
258
- message: "Plugin agent has no prompt body; ignoring.",
259
- });
260
- continue;
261
- }
262
- agents.push({
263
- name,
264
- description: data.description,
265
- model: data.model === "inherit" ? undefined : data.model,
266
- prompt: body.trim(),
232
+ if (isBlank(body)) {
233
+ plugin.ctx.diagnostics.push({
234
+ severity: "warning",
235
+ path: displayPath(plugin.ctx, path),
236
+ message: "Plugin agent has no prompt body; ignoring.",
267
237
  });
238
+ continue;
268
239
  }
269
- return agents;
270
- });
240
+ agents.push({
241
+ name,
242
+ description: data.description,
243
+ model: data.model === "inherit" ? undefined : data.model,
244
+ prompt: body.trim(),
245
+ });
246
+ }
247
+ return agents;
271
248
  }
272
249
  /**
273
250
  * The plugin's MCP servers as connections. A server the mount overlays is
274
251
  * reported by name and never compiled, so its placeholders need no values.
275
252
  */
276
- function loadPluginConnections(plugin, declared, overlaid) {
277
- return __awaiter(this, void 0, void 0, function* () {
278
- const servers = new Map();
279
- for (const file of MCP_CONFIG_FILES) {
280
- const path = join(plugin.root, file);
281
- if (!(yield isFile(path))) {
282
- continue;
283
- }
284
- for (const [name, raw] of Object.entries(yield readMcpFile(plugin, path))) {
285
- if (!servers.has(name)) {
286
- servers.set(name, { raw, path });
287
- }
288
- }
253
+ async function loadPluginConnections(plugin, declared, overlaid) {
254
+ const servers = new Map();
255
+ for (const file of MCP_CONFIG_FILES) {
256
+ const path = join(plugin.root, file);
257
+ if (!(await isFile(path))) {
258
+ continue;
289
259
  }
290
- // The manifest's own `mcpServers` wins on a name both declare.
291
- for (const path of declaredPaths(plugin, declared.paths)) {
292
- for (const [name, raw] of Object.entries(yield readMcpFile(plugin, path))) {
260
+ for (const [name, raw] of Object.entries(await readMcpFile(plugin, path))) {
261
+ if (!servers.has(name)) {
293
262
  servers.set(name, { raw, path });
294
263
  }
295
264
  }
296
- for (const inline of declared.inline) {
297
- for (const [name, raw] of Object.entries(mcpServersOf(inline))) {
298
- servers.set(name, { raw, path: plugin.manifestPath });
299
- }
265
+ }
266
+ // The manifest's own `mcpServers` wins on a name both declare.
267
+ for (const path of declaredPaths(plugin, declared.paths)) {
268
+ for (const [name, raw] of Object.entries(await readMcpFile(plugin, path))) {
269
+ servers.set(name, { raw, path });
300
270
  }
301
- const connections = [];
302
- const overlaidServers = [];
303
- for (const [rawName, { raw, path }] of servers) {
304
- const name = componentName(plugin, rawName, path);
305
- if (name === undefined) {
306
- continue;
307
- }
308
- if (overlaid.has(name)) {
309
- overlaidServers.push(name);
310
- continue;
311
- }
312
- const connection = serverConnection(plugin, name, raw, path);
313
- if (connection !== undefined) {
314
- connections.push(connection);
315
- }
271
+ }
272
+ for (const inline of declared.inline) {
273
+ for (const [name, raw] of Object.entries(mcpServersOf(inline))) {
274
+ servers.set(name, { raw, path: plugin.manifestPath });
316
275
  }
317
- return { connections, overlaidServers };
318
- });
276
+ }
277
+ const connections = [];
278
+ const overlaidServers = [];
279
+ for (const [rawName, { raw, path }] of servers) {
280
+ const name = componentName(plugin, rawName, path);
281
+ if (name === undefined) {
282
+ continue;
283
+ }
284
+ if (overlaid.has(name)) {
285
+ overlaidServers.push(name);
286
+ continue;
287
+ }
288
+ const connection = serverConnection(plugin, name, raw, path);
289
+ if (connection !== undefined) {
290
+ connections.push(connection);
291
+ }
292
+ }
293
+ return { connections, overlaidServers };
319
294
  }
320
- function readMcpFile(plugin, path) {
321
- return __awaiter(this, void 0, void 0, function* () {
322
- const data = yield readJson(plugin.ctx, path);
323
- return isRecord(data) ? mcpServersOf(data) : {};
324
- });
295
+ async function readMcpFile(plugin, path) {
296
+ const data = await readJson(plugin.ctx, path);
297
+ return isRecord(data) ? mcpServersOf(data) : {};
325
298
  }
326
299
  /** `{ mcpServers: { ... } }`, or a bare map of server-like entries. */
327
300
  function mcpServersOf(data) {
@@ -339,11 +312,10 @@ function mcpServersOf(data) {
339
312
  function serverConnection(plugin, name, raw, path) {
340
313
  const unresolved = new Set();
341
314
  const expanded = expandPlaceholders(raw, key => {
342
- var _a;
343
315
  if (PLUGIN_ROOT_VARIABLES.has(key)) {
344
316
  return plugin.root;
345
317
  }
346
- return (_a = lookupVariable(plugin.variables, key)) !== null && _a !== void 0 ? _a : process.env[key];
318
+ return lookupVariable(plugin.variables, key) ?? process.env[key];
347
319
  }, unresolved);
348
320
  if (unresolved.size > 0) {
349
321
  plugin.ctx.diagnostics.push({
@@ -413,9 +385,8 @@ function serverTransport(plugin, name, server, path) {
413
385
  function expandPlaceholders(value, lookup, unresolved) {
414
386
  if (typeof value === "string") {
415
387
  return value.replace(PLACEHOLDER, (match, envKey, key, fallback) => {
416
- var _a, _b;
417
- const name = (_a = envKey !== null && envKey !== void 0 ? envKey : key) !== null && _a !== void 0 ? _a : "";
418
- const resolved = (_b = lookup(name)) !== null && _b !== void 0 ? _b : fallback;
388
+ const name = envKey ?? key ?? "";
389
+ const resolved = lookup(name) ?? fallback;
419
390
  if (resolved === undefined) {
420
391
  unresolved.add(name);
421
392
  return match;
@@ -441,31 +412,28 @@ function expandPlaceholders(value, lookup, unresolved) {
441
412
  * declared variable is `DD_SITE`.
442
413
  */
443
414
  function lookupVariable(variables, key) {
444
- var _a;
445
415
  if (variables[key] !== undefined) {
446
416
  return variables[key];
447
417
  }
448
418
  const lower = key.toLowerCase();
449
- return (_a = Object.entries(variables).find(([name]) => name.toLowerCase() === lower)) === null || _a === void 0 ? void 0 : _a[1];
419
+ return Object.entries(variables).find(([name]) => name.toLowerCase() === lower)?.[1];
450
420
  }
451
421
  /**
452
422
  * Files a component slot resolves to: the manifest's declaration (files and
453
423
  * directories, walked) or the conventional folder.
454
424
  */
455
- function componentFiles(plugin, declared, folder, extensions) {
456
- return __awaiter(this, void 0, void 0, function* () {
457
- const roots = declared === undefined ? [join(plugin.root, folder)] : declaredPaths(plugin, declared);
458
- const files = [];
459
- for (const path of roots) {
460
- if (yield isDirectory(path)) {
461
- files.push(...(yield walkFiles(path)));
462
- }
463
- else if (yield isFile(path)) {
464
- files.push(path);
465
- }
425
+ async function componentFiles(plugin, declared, folder, extensions) {
426
+ const roots = declared === undefined ? [join(plugin.root, folder)] : declaredPaths(plugin, declared);
427
+ const files = [];
428
+ for (const path of roots) {
429
+ if (await isDirectory(path)) {
430
+ files.push(...(await walkFiles(path)));
466
431
  }
467
- return files.filter(file => extensions.has(extname(file)));
468
- });
432
+ else if (await isFile(path)) {
433
+ files.push(path);
434
+ }
435
+ }
436
+ return files.filter(file => extensions.has(extname(file)));
469
437
  }
470
438
  /** Manifest paths resolve against the plugin root; escaping ones are refused, as in Cursor. */
471
439
  function declaredPaths(plugin, declared) {
@@ -484,36 +452,32 @@ function declaredPaths(plugin, declared) {
484
452
  }
485
453
  return paths;
486
454
  }
487
- function readJson(ctx, path) {
488
- return __awaiter(this, void 0, void 0, function* () {
489
- try {
490
- return JSON.parse(yield readFile(path, "utf8"));
491
- }
492
- catch (error) {
493
- ctx.diagnostics.push({
494
- severity: "error",
495
- path: displayPath(ctx, path),
496
- message: `Failed to parse ${basename(path)}: ${errorMessage(error)}`,
497
- });
498
- return undefined;
499
- }
500
- });
455
+ async function readJson(ctx, path) {
456
+ try {
457
+ return JSON.parse(await readFile(path, "utf8"));
458
+ }
459
+ catch (error) {
460
+ ctx.diagnostics.push({
461
+ severity: "error",
462
+ path: displayPath(ctx, path),
463
+ message: `Failed to parse ${basename(path)}: ${errorMessage(error)}`,
464
+ });
465
+ return undefined;
466
+ }
501
467
  }
502
468
  /** Frontmatter the reader understands; a malformed block warns and reads as empty. */
503
- function readMarkdown(plugin, path) {
504
- return __awaiter(this, void 0, void 0, function* () {
505
- const { data, body, error } = parseYamlFrontmatter(yield readFile(path, "utf8"));
506
- const parsed = frontmatterSchema.safeParse(data);
507
- const problem = error !== null && error !== void 0 ? error : (parsed.success ? undefined : firstIssue(parsed.error));
508
- if (problem !== undefined) {
509
- plugin.ctx.diagnostics.push({
510
- severity: "warning",
511
- path: displayPath(plugin.ctx, path),
512
- message: `Frontmatter is malformed (${problem}); using the file name and body.`,
513
- });
514
- }
515
- return { data: parsed.success ? parsed.data : {}, body };
516
- });
469
+ async function readMarkdown(plugin, path) {
470
+ const { data, body, error } = parseYamlFrontmatter(await readFile(path, "utf8"));
471
+ const parsed = frontmatterSchema.safeParse(data);
472
+ const problem = error ?? (parsed.success ? undefined : firstIssue(parsed.error));
473
+ if (problem !== undefined) {
474
+ plugin.ctx.diagnostics.push({
475
+ severity: "warning",
476
+ path: displayPath(plugin.ctx, path),
477
+ message: `Frontmatter is malformed (${problem}); using the file name and body.`,
478
+ });
479
+ }
480
+ return { data: parsed.success ? parsed.data : {}, body };
517
481
  }
518
482
  /**
519
483
  * Cursor lowercases and hyphenates component names; `_` and `.` fold to `-`