@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,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 `-`