@cursor/bdk 0.2.9 → 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 (570) 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/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  197. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  198. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  199. package/dist/docs/building-with-agents.html +37 -37
  200. package/dist/docs/building-with-agents.md +2 -0
  201. package/dist/docs/deployment.html +38 -38
  202. package/dist/docs/deployment.md +7 -0
  203. package/dist/docs/evals.html +36 -36
  204. package/dist/docs/guides/agent-to-agent.html +35 -35
  205. package/dist/docs/guides/bitbucket.html +38 -38
  206. package/dist/docs/guides/bitbucket.md +9 -1
  207. package/dist/docs/guides/cloud-agents.html +35 -35
  208. package/dist/docs/guides/convert-automation.html +35 -35
  209. package/dist/docs/guides/github.html +39 -39
  210. package/dist/docs/guides/github.md +20 -4
  211. package/dist/docs/guides/gitlab.html +38 -38
  212. package/dist/docs/guides/gitlab.md +9 -1
  213. package/dist/docs/guides/grokbot-agents.html +35 -35
  214. package/dist/docs/guides/hooks.html +35 -35
  215. package/dist/docs/guides/improve.html +35 -35
  216. package/dist/docs/guides/jev.html +35 -35
  217. package/dist/docs/guides/mcp-oauth.html +35 -35
  218. package/dist/docs/guides/migrate.html +66 -0
  219. package/dist/docs/guides/migrate.md +122 -0
  220. package/dist/docs/guides/opentelemetry.html +35 -35
  221. package/dist/docs/guides/slack.html +35 -35
  222. package/dist/docs/guides/webhooks.html +35 -35
  223. package/dist/docs/hashmap.json +1 -1
  224. package/dist/docs/hillclimbing.html +35 -35
  225. package/dist/docs/index.html +35 -35
  226. package/dist/docs/llms-full.txt +214 -6
  227. package/dist/docs/llms.txt +1 -0
  228. package/dist/docs/quickstart.html +35 -35
  229. package/dist/docs/reference/agent-config.html +35 -35
  230. package/dist/docs/reference/artifacts.html +35 -35
  231. package/dist/docs/reference/channels.html +35 -35
  232. package/dist/docs/reference/cli.html +39 -38
  233. package/dist/docs/reference/cli.md +39 -0
  234. package/dist/docs/reference/connections.html +35 -35
  235. package/dist/docs/reference/evals.html +35 -35
  236. package/dist/docs/reference/extensions.html +35 -35
  237. package/dist/docs/reference/hooks.html +35 -35
  238. package/dist/docs/reference/http-api.html +35 -35
  239. package/dist/docs/reference/instructions.html +35 -35
  240. package/dist/docs/reference/playground.html +35 -35
  241. package/dist/docs/reference/project-layout.html +35 -35
  242. package/dist/docs/reference/prompt.html +35 -35
  243. package/dist/docs/reference/schedules.html +35 -35
  244. package/dist/docs/reference/sessions.html +35 -35
  245. package/dist/docs/reference/skills.html +38 -38
  246. package/dist/docs/reference/subagents.html +35 -35
  247. package/dist/docs/reference/tools.html +35 -35
  248. package/dist/docs/templates/agentic-owners.html +35 -35
  249. package/dist/docs/templates/grokbot-agents.html +35 -35
  250. package/dist/docs/templates/security-reviewer.html +35 -35
  251. package/dist/docs/templates/thermo-quality-review.html +35 -35
  252. package/dist/docs/templates/thermo-review.html +35 -35
  253. package/dist/docs/templates/triage.html +35 -35
  254. package/dist/docs/troubleshooting.html +36 -36
  255. package/dist/docs/troubleshooting.md +1 -0
  256. package/dist/evals/assertions.js +20 -34
  257. package/dist/evals/expect.js +3 -6
  258. package/dist/evals/judge.js +5 -8
  259. package/dist/evals/loaders.js +45 -62
  260. package/dist/evals/matchers.js +2 -3
  261. package/dist/evals/reporters.js +43 -67
  262. package/dist/evals/results.js +1 -1
  263. package/dist/evals/run-facts.js +5 -6
  264. package/dist/evals.js +27 -15
  265. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  266. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  267. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  268. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  269. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  270. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  271. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  272. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  273. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  274. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  275. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  276. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  277. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  278. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  279. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  280. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  281. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  282. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  283. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  284. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  285. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  286. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  287. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  288. package/dist/extensions/jev/extension.js +3 -3
  289. package/dist/extensions/jev/lib/evaluate.js +43 -60
  290. package/dist/extensions/jev/tools/evaluate.js +6 -17
  291. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  292. package/dist/extensions.js +3 -5
  293. package/dist/files-backends/cursor-hosted.js +504 -523
  294. package/dist/files-backends/local-fs.js +72 -134
  295. package/dist/files.js +3 -3
  296. package/dist/filesystem.js +562 -861
  297. package/dist/index.js +16 -35
  298. package/dist/internal/advertise-tools.js +74 -86
  299. package/dist/internal/artifacts-store.js +298 -361
  300. package/dist/internal/as-of.js +2 -4
  301. package/dist/internal/authored-alias-hooks.js +6 -4
  302. package/dist/internal/authored-loaders.js +37 -52
  303. package/dist/internal/bounded-int.js +1 -2
  304. package/dist/internal/bounded.js +13 -24
  305. package/dist/internal/brand.js +1 -1
  306. package/dist/internal/browser-origin-guard.js +4 -4
  307. package/dist/internal/builtin-tools/artifacts.js +15 -27
  308. package/dist/internal/builtin-tools/index.js +2 -3
  309. package/dist/internal/builtin-tools/reminders.js +33 -52
  310. package/dist/internal/channel-architecture.d.ts +21 -0
  311. package/dist/internal/channel-architecture.d.ts.map +1 -0
  312. package/dist/internal/channel-architecture.js +41 -0
  313. package/dist/internal/channel-dispatch.js +3 -4
  314. package/dist/internal/channel-route-dispatch.js +40 -51
  315. package/dist/internal/channel-state.js +1 -1
  316. package/dist/internal/chat-client.js +319 -340
  317. package/dist/internal/cli-ax.js +1262 -1294
  318. package/dist/internal/cli-bitbucket.js +244 -272
  319. package/dist/internal/cli-convert-automation.js +137 -151
  320. package/dist/internal/cli-cursor.js +126 -147
  321. package/dist/internal/cli-deploy.d.ts.map +1 -1
  322. package/dist/internal/cli-deploy.js +1457 -1507
  323. package/dist/internal/cli-docs.js +130 -147
  324. package/dist/internal/cli-github.js +437 -476
  325. package/dist/internal/cli-gitlab.js +259 -288
  326. package/dist/internal/cli-images.js +266 -334
  327. package/dist/internal/cli-manifest.js +25 -37
  328. package/dist/internal/cli-mcp-oauth.js +228 -247
  329. package/dist/internal/cli-mcp.js +358 -383
  330. package/dist/internal/cli-migrate.js +73 -90
  331. package/dist/internal/cli-skills.js +35 -47
  332. package/dist/internal/cli-slack-manual.d.ts +0 -1
  333. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  334. package/dist/internal/cli-slack-manual.js +175 -204
  335. package/dist/internal/cli-slack.d.ts +1 -1
  336. package/dist/internal/cli-slack.d.ts.map +1 -1
  337. package/dist/internal/cli-slack.js +416 -456
  338. package/dist/internal/cloud-merge.js +7 -3
  339. package/dist/internal/cloud-turn-cost.js +8 -1
  340. package/dist/internal/connection-env.js +5 -6
  341. package/dist/internal/continuation-channel.js +10 -7
  342. package/dist/internal/continuation-identity.js +85 -67
  343. package/dist/internal/conversation-mirror.js +112 -131
  344. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  345. package/dist/internal/cron.js +3 -3
  346. package/dist/internal/cursor/account-mcp.js +147 -146
  347. package/dist/internal/cursor/backend-client.js +290 -320
  348. package/dist/internal/cursor/bound-secret-file.js +3 -3
  349. package/dist/internal/cursor/credentials.js +127 -142
  350. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  351. package/dist/internal/cursor/github-credentials.js +91 -108
  352. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  353. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  354. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  355. package/dist/internal/cursor/session-token.js +36 -48
  356. package/dist/internal/cursor/store-api-client.js +77 -92
  357. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  358. package/dist/internal/cursor-agent-template.js +1 -1
  359. package/dist/internal/cursor-deployment-relay.js +33 -54
  360. package/dist/internal/cursor-event-relay.js +65 -59
  361. package/dist/internal/cursor-relay-core.js +258 -286
  362. package/dist/internal/deferred-channel-session.js +3 -12
  363. package/dist/internal/deploy-client.js +410 -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-DXm_VXAQ.css +1 -0
  536. package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
  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
  570. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -13,15 +13,6 @@
13
13
  * fails the package install. The monorepo source checkout is not a consumer
14
14
  * install, so `pnpm install` in everysphere does not overwrite `~/.cursor`.
15
15
  */
16
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
- return new (P || (P = Promise))(function (resolve, reject) {
19
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
- step((generator = generator.apply(thisArg, _arguments || [])).next());
23
- });
24
- };
25
16
  import { access, chmod, cp, mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
26
17
  import { homedir } from "node:os";
27
18
  import { join } from "node:path";
@@ -36,7 +27,7 @@ export const CURSOR_SKILLS_NAMESPACE = "bdk";
36
27
  */
37
28
  const LEGACY_CURSOR_SKILLS_NAMESPACES = ["agentsdk", "agentkit"];
38
29
  /** How long the `init` offer waits for an answer before skipping the install. */
39
- export const SKILL_PROMPT_TIMEOUT_MS = 45000;
30
+ export const SKILL_PROMPT_TIMEOUT_MS = 45_000;
40
31
  /**
41
32
  * Override the resolved `~/.cursor/skills` directory (not the user home).
42
33
  * Used by the postinstall hook in tests and publish smoke.
@@ -45,11 +36,10 @@ export const CURSOR_JULY_SKILLS_HOME_ENV = "CURSOR_JULY_SKILLS_HOME";
45
36
  /** Set to `1` to skip the postinstall skill copy. */
46
37
  export const CURSOR_JULY_SKIP_SKILL_INSTALL_ENV = "CURSOR_JULY_SKIP_SKILL_INSTALL";
47
38
  export function cursorSkillsHome(home) {
48
- var _a;
49
39
  if (home !== undefined) {
50
40
  return join(home.trim() === "" ? homedir() : home, ".cursor", "skills");
51
41
  }
52
- const override = (_a = process.env[CURSOR_JULY_SKILLS_HOME_ENV]) === null || _a === void 0 ? void 0 : _a.trim();
42
+ const override = process.env[CURSOR_JULY_SKILLS_HOME_ENV]?.trim();
53
43
  if (override !== undefined && override !== "") {
54
44
  return override;
55
45
  }
@@ -79,70 +69,63 @@ export function skillInstallPath(skill, skillsHome = cursorSkillsHome()) {
79
69
  * Skills shipped next to the running package. Uses the frontmatter `name`
80
70
  * when present, otherwise `bdk-<dir>`.
81
71
  */
82
- export function listShippedPackageSkills() {
83
- return __awaiter(this, arguments, void 0, function* (packageRoot = packageRootDir()) {
84
- const skillsRoot = join(packageRoot, "skills");
85
- let entries;
86
- try {
87
- entries = yield readdir(skillsRoot, { withFileTypes: true });
72
+ export async function listShippedPackageSkills(packageRoot = packageRootDir()) {
73
+ const skillsRoot = join(packageRoot, "skills");
74
+ let entries;
75
+ try {
76
+ entries = await readdir(skillsRoot, { withFileTypes: true });
77
+ }
78
+ catch {
79
+ return [];
80
+ }
81
+ const packageVersion = await readPackageVersion(packageRoot);
82
+ const skills = [];
83
+ for (const entry of entries) {
84
+ if (!entry.isDirectory()) {
85
+ continue;
88
86
  }
89
- catch (_a) {
90
- return [];
87
+ const sourceDir = join(skillsRoot, entry.name);
88
+ const skillMd = join(sourceDir, "SKILL.md");
89
+ try {
90
+ await access(skillMd);
91
91
  }
92
- const packageVersion = yield readPackageVersion(packageRoot);
93
- const skills = [];
94
- for (const entry of entries) {
95
- if (!entry.isDirectory()) {
96
- continue;
97
- }
98
- const sourceDir = join(skillsRoot, entry.name);
99
- const skillMd = join(sourceDir, "SKILL.md");
100
- try {
101
- yield access(skillMd);
102
- }
103
- catch (_b) {
104
- continue;
105
- }
106
- const raw = yield readFile(skillMd, "utf8");
107
- const name = parseFrontmatter(raw).data.name || `${CURSOR_SKILLS_NAMESPACE}-${entry.name}`;
108
- skills.push({ name, leafDir: entry.name, sourceDir, packageVersion });
92
+ catch {
93
+ continue;
109
94
  }
110
- skills.sort((a, b) => a.leafDir.localeCompare(b.leafDir));
111
- return skills;
112
- });
95
+ const raw = await readFile(skillMd, "utf8");
96
+ const name = parseFrontmatter(raw).data.name || `${CURSOR_SKILLS_NAMESPACE}-${entry.name}`;
97
+ skills.push({ name, leafDir: entry.name, sourceDir, packageVersion });
98
+ }
99
+ skills.sort((a, b) => a.leafDir.localeCompare(b.leafDir));
100
+ return skills;
113
101
  }
114
102
  const PACKAGE_VERSION_PLACEHOLDER = "__CURSOR_JULY_VERSION__";
115
- function readPackageVersion(packageRoot) {
116
- return __awaiter(this, void 0, void 0, function* () {
117
- const raw = yield readFile(join(packageRoot, "package.json"), "utf8");
118
- const manifest = JSON.parse(raw);
119
- if (typeof manifest.version !== "string" || manifest.version.trim() === "") {
120
- throw new Error("The @cursor/bdk package must declare a version.");
121
- }
122
- return manifest.version;
123
- });
103
+ async function readPackageVersion(packageRoot) {
104
+ const raw = await readFile(join(packageRoot, "package.json"), "utf8");
105
+ const manifest = JSON.parse(raw);
106
+ if (typeof manifest.version !== "string" || manifest.version.trim() === "") {
107
+ throw new Error("The @cursor/bdk package must declare a version.");
108
+ }
109
+ return manifest.version;
124
110
  }
125
111
  /**
126
112
  * Skills that do not yet have a SKILL.md under ~/.cursor/skills/bdk/.
127
113
  * Install still overwrites every shipped skill when the user confirms — this
128
114
  * helper is for messaging (fresh install vs update).
129
115
  */
130
- export function findMissingCursorSkills(options) {
131
- return __awaiter(this, void 0, void 0, function* () {
132
- var _a;
133
- const shipped = yield listShippedPackageSkills(options === null || options === void 0 ? void 0 : options.packageRoot);
134
- const home = (_a = options === null || options === void 0 ? void 0 : options.skillsHome) !== null && _a !== void 0 ? _a : cursorSkillsHome();
135
- const missing = [];
136
- for (const skill of shipped) {
137
- try {
138
- yield access(join(skillInstallPath(skill, home), "SKILL.md"));
139
- }
140
- catch (_b) {
141
- missing.push(skill);
142
- }
116
+ export async function findMissingCursorSkills(options) {
117
+ const shipped = await listShippedPackageSkills(options?.packageRoot);
118
+ const home = options?.skillsHome ?? cursorSkillsHome();
119
+ const missing = [];
120
+ for (const skill of shipped) {
121
+ try {
122
+ await access(join(skillInstallPath(skill, home), "SKILL.md"));
143
123
  }
144
- return missing;
145
- });
124
+ catch {
125
+ missing.push(skill);
126
+ }
127
+ }
128
+ return missing;
146
129
  }
147
130
  /**
148
131
  * Copy each skill directory into `skillsHome/bdk/<leafDir>/`.
@@ -151,99 +134,87 @@ export function findMissingCursorSkills(options) {
151
134
  * loads the body into context, and removes leaf dirs no longer shipped.
152
135
  * Also deletes leftover `skillsHome/agentsdk/` and `skillsHome/agentkit/`.
153
136
  */
154
- export function installCursorSkills(skills_1) {
155
- return __awaiter(this, arguments, void 0, function* (skills, skillsHome = cursorSkillsHome()) {
156
- const namespaceDir = bdkCursorSkillsDir(skillsHome);
157
- yield mkdir(namespaceDir, { recursive: true });
158
- const removed = yield orphanLeaves(namespaceDir, skills);
159
- for (const leaf of removed) {
160
- yield rm(join(namespaceDir, leaf), { recursive: true, force: true });
161
- }
162
- const installed = [];
163
- for (const skill of skills) {
164
- const target = skillInstallPath(skill, skillsHome);
165
- yield cp(skill.sourceDir, target, { recursive: true, force: true });
166
- // cp() preserves source modes, and installs can come from read-only
167
- // stores (Bazel runfiles, pnpm's content-addressed store, nix). Make the
168
- // copies writable so the SKILL.md rewrite below and the overwrite on the
169
- // next upgrade both work.
170
- yield makeTreeWritable(target);
171
- const skillMdPath = join(target, "SKILL.md");
172
- const raw = yield readFile(skillMdPath, "utf8");
173
- const adjusted = prepareSkillMarkdownForCursorInstall(raw, skill.packageVersion);
174
- if (adjusted !== raw) {
175
- yield writeFile(skillMdPath, adjusted, "utf8");
176
- }
177
- installed.push(skill.leafDir);
137
+ export async function installCursorSkills(skills, skillsHome = cursorSkillsHome()) {
138
+ const namespaceDir = bdkCursorSkillsDir(skillsHome);
139
+ await mkdir(namespaceDir, { recursive: true });
140
+ const removed = await orphanLeaves(namespaceDir, skills);
141
+ for (const leaf of removed) {
142
+ await rm(join(namespaceDir, leaf), { recursive: true, force: true });
143
+ }
144
+ const installed = [];
145
+ for (const skill of skills) {
146
+ const target = skillInstallPath(skill, skillsHome);
147
+ await cp(skill.sourceDir, target, { recursive: true, force: true });
148
+ // cp() preserves source modes, and installs can come from read-only
149
+ // stores (Bazel runfiles, pnpm's content-addressed store, nix). Make the
150
+ // copies writable so the SKILL.md rewrite below and the overwrite on the
151
+ // next upgrade both work.
152
+ await makeTreeWritable(target);
153
+ const skillMdPath = join(target, "SKILL.md");
154
+ const raw = await readFile(skillMdPath, "utf8");
155
+ const adjusted = prepareSkillMarkdownForCursorInstall(raw, skill.packageVersion);
156
+ if (adjusted !== raw) {
157
+ await writeFile(skillMdPath, adjusted, "utf8");
178
158
  }
179
- const removedLegacyDirs = yield removeLegacyCursorSkillsNamespaces(skillsHome);
180
- return { installed, removed, removedLegacyDirs };
181
- });
159
+ installed.push(skill.leafDir);
160
+ }
161
+ const removedLegacyDirs = await removeLegacyCursorSkillsNamespaces(skillsHome);
162
+ return { installed, removed, removedLegacyDirs };
182
163
  }
183
- function makeTreeWritable(root) {
184
- return __awaiter(this, void 0, void 0, function* () {
185
- yield addOwnerWrite(root);
186
- const entries = yield readdir(root, { withFileTypes: true });
187
- for (const entry of entries) {
188
- const child = join(root, entry.name);
189
- if (entry.isDirectory()) {
190
- yield makeTreeWritable(child);
191
- }
192
- else {
193
- yield addOwnerWrite(child);
194
- }
164
+ async function makeTreeWritable(root) {
165
+ await addOwnerWrite(root);
166
+ const entries = await readdir(root, { withFileTypes: true });
167
+ for (const entry of entries) {
168
+ const child = join(root, entry.name);
169
+ if (entry.isDirectory()) {
170
+ await makeTreeWritable(child);
195
171
  }
196
- });
172
+ else {
173
+ await addOwnerWrite(child);
174
+ }
175
+ }
197
176
  }
198
177
  /** Add owner-write, preserving every other mode bit (e.g. exec on scripts). */
199
- function addOwnerWrite(path) {
200
- return __awaiter(this, void 0, void 0, function* () {
201
- const mode = (yield stat(path)).mode & 0o7777;
202
- if ((mode & 0o200) === 0) {
203
- yield chmod(path, mode | 0o200);
204
- }
205
- });
178
+ async function addOwnerWrite(path) {
179
+ const mode = (await stat(path)).mode & 0o7777;
180
+ if ((mode & 0o200) === 0) {
181
+ await chmod(path, mode | 0o200);
182
+ }
206
183
  }
207
184
  /** Installed leaf dirs the package no longer ships. Installing deletes these. */
208
- function orphanLeaves(namespaceDir, skills) {
209
- return __awaiter(this, void 0, void 0, function* () {
210
- const shipped = new Set(skills.map(skill => skill.leafDir));
211
- let entries;
212
- try {
213
- entries = yield readdir(namespaceDir, { withFileTypes: true });
214
- }
215
- catch (_a) {
216
- return [];
217
- }
218
- return entries
219
- .filter(entry => entry.isDirectory() && !shipped.has(entry.name))
220
- .map(entry => entry.name);
221
- });
185
+ async function orphanLeaves(namespaceDir, skills) {
186
+ const shipped = new Set(skills.map(skill => skill.leafDir));
187
+ let entries;
188
+ try {
189
+ entries = await readdir(namespaceDir, { withFileTypes: true });
190
+ }
191
+ catch {
192
+ return [];
193
+ }
194
+ return entries
195
+ .filter(entry => entry.isDirectory() && !shipped.has(entry.name))
196
+ .map(entry => entry.name);
222
197
  }
223
198
  /** Drop leftover earlier install folders so stale skill ids are not discovered. */
224
- function removeLegacyCursorSkillsNamespaces(skillsHome) {
225
- return __awaiter(this, void 0, void 0, function* () {
226
- const present = yield existingLegacyCursorSkillsDirs(skillsHome);
227
- for (const dir of present) {
228
- yield rm(dir, { recursive: true, force: true });
229
- }
230
- return present;
231
- });
199
+ async function removeLegacyCursorSkillsNamespaces(skillsHome) {
200
+ const present = await existingLegacyCursorSkillsDirs(skillsHome);
201
+ for (const dir of present) {
202
+ await rm(dir, { recursive: true, force: true });
203
+ }
204
+ return present;
232
205
  }
233
- function existingLegacyCursorSkillsDirs(skillsHome) {
234
- return __awaiter(this, void 0, void 0, function* () {
235
- const present = [];
236
- for (const dir of legacyCursorSkillsDirs(skillsHome)) {
237
- try {
238
- yield stat(dir);
239
- present.push(dir);
240
- }
241
- catch (_a) {
242
- continue;
243
- }
206
+ async function existingLegacyCursorSkillsDirs(skillsHome) {
207
+ const present = [];
208
+ for (const dir of legacyCursorSkillsDirs(skillsHome)) {
209
+ try {
210
+ await stat(dir);
211
+ present.push(dir);
244
212
  }
245
- return present;
246
- });
213
+ catch {
214
+ continue;
215
+ }
216
+ }
217
+ return present;
247
218
  }
248
219
  /**
249
220
  * Drop monorepo `paths` globs, set `alwaysApply: true` so Cursor injects the
@@ -251,12 +222,11 @@ function existingLegacyCursorSkillsDirs(skillsHome) {
251
222
  * fix package doc links for ~/.cursor installs.
252
223
  */
253
224
  export function prepareSkillMarkdownForCursorInstall(content, packageVersion) {
254
- var _a;
255
225
  const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content);
256
226
  if (match === null) {
257
227
  return content;
258
228
  }
259
- const frontmatter = withAlwaysApply(stripPathsFromFrontmatter((_a = match[1]) !== null && _a !== void 0 ? _a : ""));
229
+ const frontmatter = withAlwaysApply(stripPathsFromFrontmatter(match[1] ?? ""));
260
230
  const body = content.slice(match[0].length);
261
231
  const adjustedBody = body.replace(/\[`docs\/([^`]+)`\]\(\.\.\/\.\.\/docs\/[^)]+\)/g, "docs/$1 in the @cursor/bdk package");
262
232
  if (adjustedBody.includes(PACKAGE_VERSION_PLACEHOLDER) &&
@@ -269,14 +239,13 @@ export function prepareSkillMarkdownForCursorInstall(content, packageVersion) {
269
239
  return `---\n${frontmatter.trimEnd()}\n---${versionBoundBody}`;
270
240
  }
271
241
  function stripPathsFromFrontmatter(frontmatter) {
272
- var _a, _b;
273
242
  const lines = frontmatter.split(/\r?\n/);
274
243
  const out = [];
275
244
  for (let i = 0; i < lines.length; i++) {
276
- const line = (_a = lines[i]) !== null && _a !== void 0 ? _a : "";
245
+ const line = lines[i] ?? "";
277
246
  if (line.trimStart().startsWith("paths:")) {
278
247
  i++;
279
- while (i < lines.length && /^[ \t]*-/.test((_b = lines[i]) !== null && _b !== void 0 ? _b : "")) {
248
+ while (i < lines.length && /^[ \t]*-/.test(lines[i] ?? "")) {
280
249
  i++;
281
250
  }
282
251
  i--;
@@ -305,31 +274,28 @@ function withAlwaysApply(frontmatter) {
305
274
  return `${without}\nalwaysApply: true`;
306
275
  }
307
276
  /** What an install would do, for the offer and for `install-skills`. */
308
- export function planSkillInstall(options) {
309
- return __awaiter(this, void 0, void 0, function* () {
310
- var _a;
311
- const skillsHome = (_a = options === null || options === void 0 ? void 0 : options.skillsHome) !== null && _a !== void 0 ? _a : cursorSkillsHome();
312
- const directory = bdkCursorSkillsDir(skillsHome);
313
- const shipped = yield listShippedPackageSkills(options === null || options === void 0 ? void 0 : options.packageRoot);
314
- const present = yield Promise.all(shipped.map((skill) => __awaiter(this, void 0, void 0, function* () {
315
- try {
316
- yield access(join(skillInstallPath(skill, skillsHome), "SKILL.md"));
317
- return true;
318
- }
319
- catch (_a) {
320
- return false;
321
- }
322
- })));
323
- return {
324
- shipped,
325
- skillsHome,
326
- directory,
327
- leaves: shipped.map(skill => skill.leafDir),
328
- firstInstall: present.every(isPresent => !isPresent),
329
- orphans: yield orphanLeaves(directory, shipped),
330
- legacyDirs: yield existingLegacyCursorSkillsDirs(skillsHome),
331
- };
332
- });
277
+ export async function planSkillInstall(options) {
278
+ const skillsHome = options?.skillsHome ?? cursorSkillsHome();
279
+ const directory = bdkCursorSkillsDir(skillsHome);
280
+ const shipped = await listShippedPackageSkills(options?.packageRoot);
281
+ const present = await Promise.all(shipped.map(async (skill) => {
282
+ try {
283
+ await access(join(skillInstallPath(skill, skillsHome), "SKILL.md"));
284
+ return true;
285
+ }
286
+ catch {
287
+ return false;
288
+ }
289
+ }));
290
+ return {
291
+ shipped,
292
+ skillsHome,
293
+ directory,
294
+ leaves: shipped.map(skill => skill.leafDir),
295
+ firstInstall: present.every(isPresent => !isPresent),
296
+ orphans: await orphanLeaves(directory, shipped),
297
+ legacyDirs: await existingLegacyCursorSkillsDirs(skillsHome),
298
+ };
333
299
  }
334
300
  /** `Installed 9 BDK skills`, what it dropped, and where it went. */
335
301
  export function formatSkillInstall(plan, result) {
@@ -351,39 +317,36 @@ export function formatSkillInstall(plan, result) {
351
317
  * the package install. No-op in the monorepo source tree and when
352
318
  * `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
353
319
  */
354
- export function syncCursorSkillsOnPackageInstall() {
355
- return __awaiter(this, arguments, void 0, function* (options = {}) {
356
- var _a, _b, _c, _d;
357
- try {
358
- const env = (_a = options.env) !== null && _a !== void 0 ? _a : process.env;
359
- if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
360
- return { status: "skipped", reason: "opt-out" };
361
- }
362
- const packageRoot = (_b = options.packageRoot) !== null && _b !== void 0 ? _b : packageRootDir();
363
- const consumer = (_c = options.consumer) !== null && _c !== void 0 ? _c : isConsumerPackageInstall(packageRoot);
364
- if (!consumer) {
365
- return { status: "skipped", reason: "not-consumer" };
366
- }
367
- const plan = yield planSkillInstall({
368
- packageRoot,
369
- skillsHome: options.skillsHome,
370
- });
371
- if (plan.shipped.length === 0) {
372
- return { status: "skipped", reason: "no-skills" };
373
- }
374
- const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
375
- const out = (_d = options.out) !== null && _d !== void 0 ? _d : (text => process.stderr.write(text));
376
- out(formatSkillInstall(plan, result));
377
- return {
378
- status: "installed",
379
- installed: result.installed,
380
- removed: result.removed,
381
- };
320
+ export async function syncCursorSkillsOnPackageInstall(options = {}) {
321
+ try {
322
+ const env = options.env ?? process.env;
323
+ if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
324
+ return { status: "skipped", reason: "opt-out" };
382
325
  }
383
- catch (_e) {
384
- return { status: "skipped", reason: "error" };
326
+ const packageRoot = options.packageRoot ?? packageRootDir();
327
+ const consumer = options.consumer ?? isConsumerPackageInstall(packageRoot);
328
+ if (!consumer) {
329
+ return { status: "skipped", reason: "not-consumer" };
385
330
  }
386
- });
331
+ const plan = await planSkillInstall({
332
+ packageRoot,
333
+ skillsHome: options.skillsHome,
334
+ });
335
+ if (plan.shipped.length === 0) {
336
+ return { status: "skipped", reason: "no-skills" };
337
+ }
338
+ const result = await installCursorSkills(plan.shipped, plan.skillsHome);
339
+ const out = options.out ?? (text => process.stderr.write(text));
340
+ out(formatSkillInstall(plan, result));
341
+ return {
342
+ status: "installed",
343
+ installed: result.installed,
344
+ removed: result.removed,
345
+ };
346
+ }
347
+ catch {
348
+ return { status: "skipped", reason: "error" };
349
+ }
387
350
  }
388
351
  /**
389
352
  * On a TTY, offer to install/update every shipped package skill into
@@ -391,82 +354,77 @@ export function syncCursorSkillsOnPackageInstall() {
391
354
  * or the package ships no skills. An unanswered prompt skips the install
392
355
  * rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
393
356
  */
394
- export function offerInstallCursorSkills() {
395
- return __awaiter(this, arguments, void 0, function* (options = {}) {
396
- var _a, _b, _c;
397
- const out = (_a = options.out) !== null && _a !== void 0 ? _a : (text => process.stdout.write(text));
398
- const interactive = (_b = options.interactive) !== null && _b !== void 0 ? _b : (process.stdin.isTTY === true && process.stdout.isTTY === true);
399
- if (!interactive) {
400
- return { installed: [], skipped: true };
401
- }
402
- const plan = yield planSkillInstall({
403
- packageRoot: options.packageRoot,
404
- skillsHome: options.skillsHome,
405
- });
406
- if (plan.shipped.length === 0) {
407
- return { installed: [], skipped: true };
408
- }
409
- const noun = plan.shipped.length === 1 ? "skill" : "skills";
410
- const verb = plan.firstInstall ? "Install" : "Update";
411
- const c = stdoutPalette();
412
- out(`${verb} ${plan.shipped.length} BDK ${noun} in ${plan.directory}?\n`);
413
- out(c.dim(` ${plan.leaves.join(", ")}\n`));
414
- if (!plan.firstInstall) {
415
- out(c.dim(" (overwrites existing copies with the package version)\n"));
416
- }
417
- if (plan.orphans.length > 0) {
418
- out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
419
- }
420
- for (const dir of plan.legacyDirs) {
421
- out(c.dim(` (deletes leftover ${dir})\n`));
422
- }
423
- const confirm = (_c = options.confirm) !== null && _c !== void 0 ? _c : (q => promptYesNo(q, {
357
+ export async function offerInstallCursorSkills(options = {}) {
358
+ const out = options.out ?? (text => process.stdout.write(text));
359
+ const interactive = options.interactive ?? (process.stdin.isTTY === true && process.stdout.isTTY === true);
360
+ if (!interactive) {
361
+ return { installed: [], skipped: true };
362
+ }
363
+ const plan = await planSkillInstall({
364
+ packageRoot: options.packageRoot,
365
+ skillsHome: options.skillsHome,
366
+ });
367
+ if (plan.shipped.length === 0) {
368
+ return { installed: [], skipped: true };
369
+ }
370
+ const noun = plan.shipped.length === 1 ? "skill" : "skills";
371
+ const verb = plan.firstInstall ? "Install" : "Update";
372
+ const c = stdoutPalette();
373
+ out(`${verb} ${plan.shipped.length} BDK ${noun} in ${plan.directory}?\n`);
374
+ out(c.dim(` ${plan.leaves.join(", ")}\n`));
375
+ if (!plan.firstInstall) {
376
+ out(c.dim(" (overwrites existing copies with the package version)\n"));
377
+ }
378
+ if (plan.orphans.length > 0) {
379
+ out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
380
+ }
381
+ for (const dir of plan.legacyDirs) {
382
+ out(c.dim(` (deletes leftover ${dir})\n`));
383
+ }
384
+ const confirm = options.confirm ??
385
+ (q => promptYesNo(q, {
424
386
  defaultYes: true,
425
387
  out,
426
388
  timeoutMs: SKILL_PROMPT_TIMEOUT_MS,
427
389
  }));
428
- const accepted = yield confirm(`${verb} now?`);
429
- if (accepted !== true) {
430
- // `undefined` is the prompt timing out or stdin closing; both mean nobody
431
- // said yes, so do not claim a duration neither case is guaranteed to have.
432
- const why = accepted === undefined ? "No answer — skipped the skill install." : "Skipped skill install.";
433
- out(c.dim(`${why}\nInstall later: ${CLI_COMMAND_NAME} install-skills (${plan.directory})\n\n`));
434
- return { installed: [], skipped: true };
435
- }
436
- const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
437
- out(`${formatSkillInstall(plan, result)}\n`);
438
- return { installed: result.installed, skipped: false };
439
- });
390
+ const accepted = await confirm(`${verb} now?`);
391
+ if (accepted !== true) {
392
+ // `undefined` is the prompt timing out or stdin closing; both mean nobody
393
+ // said yes, so do not claim a duration neither case is guaranteed to have.
394
+ const why = accepted === undefined ? "No answer — skipped the skill install." : "Skipped skill install.";
395
+ out(c.dim(`${why}\nInstall later: ${CLI_COMMAND_NAME} install-skills (${plan.directory})\n\n`));
396
+ return { installed: [], skipped: true };
397
+ }
398
+ const result = await installCursorSkills(plan.shipped, plan.skillsHome);
399
+ out(`${formatSkillInstall(plan, result)}\n`);
400
+ return { installed: result.installed, skipped: false };
440
401
  }
441
402
  /**
442
403
  * Ask a yes/no question. Resolves `undefined` when the answer never comes —
443
404
  * the prompt timed out, or stdin closed on an empty line.
444
405
  */
445
- export function promptYesNo(question, options) {
446
- return __awaiter(this, void 0, void 0, function* () {
447
- var _a;
448
- const hint = options.defaultYes ? "Y/n" : "y/N";
449
- const input = (_a = options.input) !== null && _a !== void 0 ? _a : process.stdin;
450
- options.out(`${question} [${hint}] `);
451
- input.resume();
452
- const line = yield readOneLine(input, options.timeoutMs);
453
- input.pause();
454
- if (line === undefined) {
455
- options.out("\n");
456
- return undefined;
457
- }
458
- if (line.trim() === "") {
459
- return options.defaultYes;
460
- }
461
- const answer = line.trim().toLowerCase();
462
- if (answer === "y" || answer === "yes") {
463
- return true;
464
- }
465
- if (answer === "n" || answer === "no") {
466
- return false;
467
- }
406
+ export async function promptYesNo(question, options) {
407
+ const hint = options.defaultYes ? "Y/n" : "y/N";
408
+ const input = options.input ?? process.stdin;
409
+ options.out(`${question} [${hint}] `);
410
+ input.resume();
411
+ const line = await readOneLine(input, options.timeoutMs);
412
+ input.pause();
413
+ if (line === undefined) {
414
+ options.out("\n");
415
+ return undefined;
416
+ }
417
+ if (line.trim() === "") {
468
418
  return options.defaultYes;
469
- });
419
+ }
420
+ const answer = line.trim().toLowerCase();
421
+ if (answer === "y" || answer === "yes") {
422
+ return true;
423
+ }
424
+ if (answer === "n" || answer === "no") {
425
+ return false;
426
+ }
427
+ return options.defaultYes;
470
428
  }
471
429
  /** The line, or `undefined` when the stream ends or the clock runs out first. */
472
430
  function readOneLine(stream, timeoutMs) {