@cursor/bdk 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.d.ts +1 -0
  3. package/dist/bin/agent-serve.d.ts.map +1 -1
  4. package/dist/bin/agent-serve.js +820 -807
  5. package/dist/channels/bitbucket/api.js +305 -321
  6. package/dist/channels/bitbucket/binding.js +97 -61
  7. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  8. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  11. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  13. package/dist/channels/bitbucket/checks.js +9 -21
  14. package/dist/channels/bitbucket/cursor-account.js +1 -1
  15. package/dist/channels/bitbucket/defaults.js +14 -4
  16. package/dist/channels/bitbucket/events.js +1 -2
  17. package/dist/channels/bitbucket/index.d.ts +6 -2
  18. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  19. package/dist/channels/bitbucket/index.js +6 -2
  20. package/dist/channels/bitbucket/replay.js +80 -56
  21. package/dist/channels/bitbucket/state.js +16 -7
  22. package/dist/channels/bitbucket/types.d.ts +11 -2
  23. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  24. package/dist/channels/checks.js +18 -28
  25. package/dist/channels/deployments/deployments-channel.js +26 -34
  26. package/dist/channels/github/api.js +216 -210
  27. package/dist/channels/github/auth.d.ts +5 -1
  28. package/dist/channels/github/auth.d.ts.map +1 -1
  29. package/dist/channels/github/auth.js +157 -174
  30. package/dist/channels/github/binding.js +48 -39
  31. package/dist/channels/github/checks.js +9 -14
  32. package/dist/channels/github/cursor-account.js +6 -11
  33. package/dist/channels/github/defaults.js +105 -130
  34. package/dist/channels/github/forward.js +13 -17
  35. package/dist/channels/github/github-channel.d.ts +43 -2
  36. package/dist/channels/github/github-channel.d.ts.map +1 -1
  37. package/dist/channels/github/github-channel.js +1228 -958
  38. package/dist/channels/github/progress.js +145 -146
  39. package/dist/channels/github/replay.js +30 -39
  40. package/dist/channels/github/state.js +40 -16
  41. package/dist/channels/github/types.d.ts +30 -6
  42. package/dist/channels/github/types.d.ts.map +1 -1
  43. package/dist/channels/gitlab/api.js +100 -114
  44. package/dist/channels/gitlab/binding.js +52 -33
  45. package/dist/channels/gitlab/checks.js +28 -29
  46. package/dist/channels/gitlab/cursor-account.js +1 -1
  47. package/dist/channels/gitlab/defaults.js +9 -3
  48. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  49. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  50. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  51. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  52. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  53. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  54. package/dist/channels/gitlab/index.d.ts +6 -2
  55. package/dist/channels/gitlab/index.d.ts.map +1 -1
  56. package/dist/channels/gitlab/index.js +6 -2
  57. package/dist/channels/gitlab/replay.js +50 -27
  58. package/dist/channels/gitlab/state.js +14 -6
  59. package/dist/channels/gitlab/types.d.ts +13 -2
  60. package/dist/channels/gitlab/types.d.ts.map +1 -1
  61. package/dist/channels/origin/api.js +100 -116
  62. package/dist/channels/origin/binding.js +15 -16
  63. package/dist/channels/origin/checks.js +30 -28
  64. package/dist/channels/origin/defaults.js +50 -65
  65. package/dist/channels/origin/origin-channel.js +266 -272
  66. package/dist/channels/origin/origin-webhook.js +70 -88
  67. package/dist/channels/origin/reactions.js +9 -21
  68. package/dist/channels/origin/state.js +13 -5
  69. package/dist/channels/slack/agentic-delivery.js +426 -478
  70. package/dist/channels/slack/agentic-posted.js +9 -10
  71. package/dist/channels/slack/agentic-signals.js +2 -3
  72. package/dist/channels/slack/api.js +417 -427
  73. package/dist/channels/slack/approvals.js +1 -1
  74. package/dist/channels/slack/assistant.js +37 -47
  75. package/dist/channels/slack/attachments.js +188 -206
  76. package/dist/channels/slack/auth.js +8 -6
  77. package/dist/channels/slack/bot-mentions.js +31 -45
  78. package/dist/channels/slack/channel-watch.js +42 -48
  79. package/dist/channels/slack/cli-project.js +112 -137
  80. package/dist/channels/slack/code-fences.js +3 -5
  81. package/dist/channels/slack/constants.js +2 -2
  82. package/dist/channels/slack/credentials.js +23 -38
  83. package/dist/channels/slack/defaults.js +292 -331
  84. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  85. package/dist/channels/slack/dispatch.js +533 -460
  86. package/dist/channels/slack/doctor.js +200 -214
  87. package/dist/channels/slack/eval-directive.js +79 -96
  88. package/dist/channels/slack/event-id-dedupe.js +1 -1
  89. package/dist/channels/slack/external-policy.js +26 -39
  90. package/dist/channels/slack/footer.js +28 -41
  91. package/dist/channels/slack/inbound.d.ts +1 -0
  92. package/dist/channels/slack/inbound.d.ts.map +1 -1
  93. package/dist/channels/slack/inbound.js +50 -31
  94. package/dist/channels/slack/init.d.ts +1 -5
  95. package/dist/channels/slack/init.d.ts.map +1 -1
  96. package/dist/channels/slack/init.js +42 -59
  97. package/dist/channels/slack/interactive.d.ts +9 -3
  98. package/dist/channels/slack/interactive.d.ts.map +1 -1
  99. package/dist/channels/slack/interactive.js +160 -162
  100. package/dist/channels/slack/links.js +1 -2
  101. package/dist/channels/slack/live-delivery.js +172 -190
  102. package/dist/channels/slack/manifest.d.ts.map +1 -1
  103. package/dist/channels/slack/manifest.js +44 -23
  104. package/dist/channels/slack/message-body.js +2 -2
  105. package/dist/channels/slack/nudge-carrier.js +30 -42
  106. package/dist/channels/slack/nudge-store.js +164 -191
  107. package/dist/channels/slack/paint-start.js +66 -81
  108. package/dist/channels/slack/placeholder.js +123 -152
  109. package/dist/channels/slack/pr-ref.js +1 -1
  110. package/dist/channels/slack/progress-delivery.js +65 -78
  111. package/dist/channels/slack/reasoning-card.js +36 -49
  112. package/dist/channels/slack/recording-sink.js +12 -24
  113. package/dist/channels/slack/reply-options.js +7 -12
  114. package/dist/channels/slack/self-identity.js +27 -35
  115. package/dist/channels/slack/sender-name.d.ts +12 -3
  116. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  117. package/dist/channels/slack/sender-name.js +57 -61
  118. package/dist/channels/slack/setup.js +2 -4
  119. package/dist/channels/slack/slack-channel.d.ts +6 -4
  120. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  121. package/dist/channels/slack/slack-channel.js +441 -308
  122. package/dist/channels/slack/socket-mode.js +38 -52
  123. package/dist/channels/slack/thread-context.js +143 -160
  124. package/dist/channels/slack/tool-approval-events.js +149 -166
  125. package/dist/channels/slack/tool-cards.js +6 -11
  126. package/dist/channels/slack/tool-chip.js +1 -2
  127. package/dist/channels/slack/types.d.ts +15 -17
  128. package/dist/channels/slack/types.d.ts.map +1 -1
  129. package/dist/channels/slack/upload.js +84 -97
  130. package/dist/channels/slack/user-info.js +27 -41
  131. package/dist/channels.js +9 -20
  132. package/dist/dashboard-session-url.js +3 -4
  133. package/dist/docs/404.html +2 -2
  134. package/dist/docs/assets/{app.oyjtOr3W.js → app.DXI7bwox.js} +4 -4
  135. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  136. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  137. package/dist/docs/assets/chunks/{VPLocalSearchBox.D0P6J_UJ.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  138. package/dist/docs/assets/chunks/{arc.B0LY1J1h.js → arc.BOG1yms8.js} +1 -1
  139. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.dPduLUxY.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  140. package/dist/docs/assets/chunks/{baseUniq.B_Ohm21h.js → baseUniq.H044KjKs.js} +1 -1
  141. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.B4zcanaJ.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  142. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.D9Iw21nx.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  143. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  144. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.DDVwRShI.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.DsYcdn1i.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-55IACEB6.BzzQvcYp.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.BMiXZ7FX.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.D_mBcLoc.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CMVjWVMx.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  150. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BG-FrPv9.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  151. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.CkFE1ap3.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  152. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  153. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  154. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  155. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BVNnCTvY.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  156. package/dist/docs/assets/chunks/{dagre-KV5264BT.CDN5PR9l.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.DQRUlT-i.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.CoeblYQT.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  159. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DW3ymjl0.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  160. package/dist/docs/assets/chunks/{diagram-TYMM5635.BP0uN4Jw.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  161. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DVFUWEn4.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  162. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.HU-eHspv.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  163. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DHNhXijY.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  164. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.DkISXcO3.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  165. package/dist/docs/assets/chunks/{graph.CCV0fuRR.js → graph.BVqKRmRo.js} +1 -1
  166. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.bgILzOoc.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  167. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.CuryXC0F.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  168. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.BL1Pr-wu.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  169. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.BbGjvk4l.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  170. package/dist/docs/assets/chunks/{layout.C4PfdldS.js → layout.CGU3gfSf.js} +1 -1
  171. package/dist/docs/assets/chunks/{linear.C3xD1T6X.js → linear.DaihpW_n.js} +1 -1
  172. package/dist/docs/assets/chunks/{min.CzgRAQ9c.js → min.BS-j8kHQ.js} +1 -1
  173. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CA9rSWum.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  174. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B8MprgJu.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  175. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.DndDwbKT.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  176. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.Zhfgwlnn.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  177. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.B6RRm6N5.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  178. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bfmz-1PN.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  179. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.gbrdNqgj.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  180. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  181. package/dist/docs/assets/chunks/{theme.gpWjytMh.js → theme.DaplWQhQ.js} +2 -2
  182. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Bl1l7M1f.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  183. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.Dfle4U0d.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  184. package/dist/docs/assets/chunks/wardley-RL74JXVD.iXazD3Z7.js +162 -0
  185. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.CM_4lmvZ.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  186. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CHT5X28R.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  187. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  188. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  189. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  191. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  192. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  193. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  194. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  195. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  196. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  197. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  198. package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
  199. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  200. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  201. package/dist/docs/building-with-agents.html +37 -37
  202. package/dist/docs/building-with-agents.md +2 -0
  203. package/dist/docs/deployment.html +38 -38
  204. package/dist/docs/deployment.md +7 -0
  205. package/dist/docs/evals.html +36 -36
  206. package/dist/docs/guides/agent-to-agent.html +35 -35
  207. package/dist/docs/guides/bitbucket.html +38 -38
  208. package/dist/docs/guides/bitbucket.md +9 -1
  209. package/dist/docs/guides/cloud-agents.html +35 -35
  210. package/dist/docs/guides/convert-automation.html +35 -35
  211. package/dist/docs/guides/github.html +39 -39
  212. package/dist/docs/guides/github.md +20 -4
  213. package/dist/docs/guides/gitlab.html +38 -38
  214. package/dist/docs/guides/gitlab.md +9 -1
  215. package/dist/docs/guides/grokbot-agents.html +35 -35
  216. package/dist/docs/guides/hooks.html +35 -35
  217. package/dist/docs/guides/improve.html +35 -35
  218. package/dist/docs/guides/jev.html +35 -35
  219. package/dist/docs/guides/mcp-oauth.html +35 -35
  220. package/dist/docs/guides/migrate.html +66 -0
  221. package/dist/docs/guides/migrate.md +122 -0
  222. package/dist/docs/guides/opentelemetry.html +35 -35
  223. package/dist/docs/guides/slack.html +35 -35
  224. package/dist/docs/guides/webhooks.html +35 -35
  225. package/dist/docs/hashmap.json +1 -1
  226. package/dist/docs/hillclimbing.html +35 -35
  227. package/dist/docs/index.html +35 -35
  228. package/dist/docs/llms-full.txt +214 -6
  229. package/dist/docs/llms.txt +1 -0
  230. package/dist/docs/quickstart.html +35 -35
  231. package/dist/docs/reference/agent-config.html +35 -35
  232. package/dist/docs/reference/artifacts.html +35 -35
  233. package/dist/docs/reference/channels.html +35 -35
  234. package/dist/docs/reference/cli.html +39 -38
  235. package/dist/docs/reference/cli.md +39 -0
  236. package/dist/docs/reference/connections.html +35 -35
  237. package/dist/docs/reference/evals.html +35 -35
  238. package/dist/docs/reference/extensions.html +35 -35
  239. package/dist/docs/reference/hooks.html +35 -35
  240. package/dist/docs/reference/http-api.html +35 -35
  241. package/dist/docs/reference/instructions.html +35 -35
  242. package/dist/docs/reference/playground.html +35 -35
  243. package/dist/docs/reference/project-layout.html +35 -35
  244. package/dist/docs/reference/prompt.html +35 -35
  245. package/dist/docs/reference/schedules.html +35 -35
  246. package/dist/docs/reference/sessions.html +35 -35
  247. package/dist/docs/reference/skills.html +38 -38
  248. package/dist/docs/reference/subagents.html +35 -35
  249. package/dist/docs/reference/tools.html +35 -35
  250. package/dist/docs/templates/agentic-owners.html +35 -35
  251. package/dist/docs/templates/grokbot-agents.html +35 -35
  252. package/dist/docs/templates/security-reviewer.html +35 -35
  253. package/dist/docs/templates/thermo-quality-review.html +35 -35
  254. package/dist/docs/templates/thermo-review.html +35 -35
  255. package/dist/docs/templates/triage.html +35 -35
  256. package/dist/docs/troubleshooting.html +36 -36
  257. package/dist/docs/troubleshooting.md +1 -0
  258. package/dist/evals/assertions.js +20 -34
  259. package/dist/evals/expect.js +3 -6
  260. package/dist/evals/judge.js +5 -8
  261. package/dist/evals/loaders.js +45 -62
  262. package/dist/evals/matchers.js +2 -3
  263. package/dist/evals/reporters.js +43 -67
  264. package/dist/evals/results.js +1 -1
  265. package/dist/evals/run-facts.js +5 -6
  266. package/dist/evals.js +27 -15
  267. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  268. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +0 -1
  269. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  270. package/dist/extensions/cursor-cloud-agents/lib/backend.js +101 -130
  271. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  272. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  273. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  274. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  275. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  276. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  277. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  278. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  279. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  280. package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -1
  281. package/dist/extensions/cursor-cloud-agents/tools/list.js +9 -20
  282. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  283. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  284. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  285. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  286. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  287. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  288. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  289. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  290. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  291. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  292. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  293. package/dist/extensions/jev/extension.js +3 -3
  294. package/dist/extensions/jev/lib/evaluate.js +43 -60
  295. package/dist/extensions/jev/tools/evaluate.js +6 -17
  296. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  297. package/dist/extensions.js +3 -5
  298. package/dist/files-backends/cursor-hosted.js +504 -523
  299. package/dist/files-backends/local-fs.js +72 -134
  300. package/dist/files.js +3 -3
  301. package/dist/filesystem.js +562 -861
  302. package/dist/index.js +16 -35
  303. package/dist/internal/advertise-tools.js +74 -86
  304. package/dist/internal/artifacts-store.js +298 -361
  305. package/dist/internal/as-of.js +2 -4
  306. package/dist/internal/authored-alias-hooks.js +6 -4
  307. package/dist/internal/authored-loaders.js +37 -52
  308. package/dist/internal/bounded-int.js +1 -2
  309. package/dist/internal/bounded.js +13 -24
  310. package/dist/internal/brand.js +1 -1
  311. package/dist/internal/browser-origin-guard.js +4 -4
  312. package/dist/internal/builtin-tools/artifacts.js +15 -27
  313. package/dist/internal/builtin-tools/index.js +2 -3
  314. package/dist/internal/builtin-tools/reminders.js +33 -52
  315. package/dist/internal/channel-architecture.d.ts +21 -0
  316. package/dist/internal/channel-architecture.d.ts.map +1 -0
  317. package/dist/internal/channel-architecture.js +41 -0
  318. package/dist/internal/channel-dispatch.js +3 -4
  319. package/dist/internal/channel-route-dispatch.js +40 -51
  320. package/dist/internal/channel-state.js +1 -1
  321. package/dist/internal/chat-client.js +319 -340
  322. package/dist/internal/cli-ax.js +1262 -1294
  323. package/dist/internal/cli-bitbucket.js +244 -272
  324. package/dist/internal/cli-convert-automation.js +137 -151
  325. package/dist/internal/cli-cursor.js +126 -147
  326. package/dist/internal/cli-deploy.d.ts.map +1 -1
  327. package/dist/internal/cli-deploy.js +1457 -1507
  328. package/dist/internal/cli-docs.js +130 -147
  329. package/dist/internal/cli-github.js +437 -476
  330. package/dist/internal/cli-gitlab.js +259 -288
  331. package/dist/internal/cli-images.js +266 -334
  332. package/dist/internal/cli-manifest.js +25 -37
  333. package/dist/internal/cli-mcp-oauth.js +228 -247
  334. package/dist/internal/cli-mcp.js +358 -383
  335. package/dist/internal/cli-migrate.d.ts +18 -0
  336. package/dist/internal/cli-migrate.d.ts.map +1 -0
  337. package/dist/internal/cli-migrate.js +136 -0
  338. package/dist/internal/cli-skills.js +35 -47
  339. package/dist/internal/cli-slack-manual.d.ts +0 -1
  340. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  341. package/dist/internal/cli-slack-manual.js +175 -204
  342. package/dist/internal/cli-slack.d.ts +1 -1
  343. package/dist/internal/cli-slack.d.ts.map +1 -1
  344. package/dist/internal/cli-slack.js +416 -456
  345. package/dist/internal/cloud-merge.js +7 -3
  346. package/dist/internal/cloud-turn-cost.js +8 -1
  347. package/dist/internal/connection-env.js +5 -6
  348. package/dist/internal/continuation-channel.js +10 -7
  349. package/dist/internal/continuation-identity.js +85 -67
  350. package/dist/internal/conversation-mirror.js +112 -131
  351. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  352. package/dist/internal/cron.js +3 -3
  353. package/dist/internal/cursor/account-mcp.js +147 -146
  354. package/dist/internal/cursor/backend-client.js +290 -320
  355. package/dist/internal/cursor/bound-secret-file.js +3 -3
  356. package/dist/internal/cursor/credentials.d.ts +1 -0
  357. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  358. package/dist/internal/cursor/credentials.js +130 -142
  359. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  360. package/dist/internal/cursor/github-credentials.js +91 -108
  361. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  362. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  363. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  364. package/dist/internal/cursor/session-token.js +36 -48
  365. package/dist/internal/cursor/store-api-client.js +77 -92
  366. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  367. package/dist/internal/cursor-agent-template.js +1 -1
  368. package/dist/internal/cursor-deployment-relay.js +33 -54
  369. package/dist/internal/cursor-event-relay.js +65 -59
  370. package/dist/internal/cursor-relay-core.js +258 -286
  371. package/dist/internal/deferred-channel-session.js +3 -12
  372. package/dist/internal/deploy-client.js +410 -475
  373. package/dist/internal/deploy-manifest.d.ts +17 -0
  374. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  375. package/dist/internal/deploy-manifest.js +71 -21
  376. package/dist/internal/deploy-source.js +31 -43
  377. package/dist/internal/discovery/agent-config.js +45 -59
  378. package/dist/internal/discovery/agent.js +276 -280
  379. package/dist/internal/discovery/channels.js +67 -80
  380. package/dist/internal/discovery/connections.js +286 -296
  381. package/dist/internal/discovery/context.js +2 -13
  382. package/dist/internal/discovery/cursor-plugin.js +223 -259
  383. package/dist/internal/discovery/extension-overlay.js +104 -131
  384. package/dist/internal/discovery/extensions.js +276 -281
  385. package/dist/internal/discovery/fs.js +56 -79
  386. package/dist/internal/discovery/hooks.js +39 -50
  387. package/dist/internal/discovery/info.js +17 -19
  388. package/dist/internal/discovery/instructions.js +58 -71
  389. package/dist/internal/discovery/modules.js +45 -58
  390. package/dist/internal/discovery/project.d.ts.map +1 -1
  391. package/dist/internal/discovery/project.js +192 -215
  392. package/dist/internal/discovery/reminders.js +41 -52
  393. package/dist/internal/discovery/runtime.js +1 -1
  394. package/dist/internal/discovery/schedules.js +71 -82
  395. package/dist/internal/discovery/seed-files.js +21 -32
  396. package/dist/internal/discovery/services.js +74 -96
  397. package/dist/internal/discovery/skills.js +77 -94
  398. package/dist/internal/discovery/subagent.js +79 -95
  399. package/dist/internal/discovery/tools.js +12 -23
  400. package/dist/internal/distribution.js +2 -2
  401. package/dist/internal/docs-site.js +30 -45
  402. package/dist/internal/duration.js +1 -1
  403. package/dist/internal/env-file.js +48 -64
  404. package/dist/internal/eval-judge-model.js +17 -28
  405. package/dist/internal/eval-run-store.js +265 -254
  406. package/dist/internal/eval-runner.d.ts +8 -0
  407. package/dist/internal/eval-runner.d.ts.map +1 -1
  408. package/dist/internal/eval-runner.js +406 -408
  409. package/dist/internal/eval-transport.d.ts +24 -0
  410. package/dist/internal/eval-transport.d.ts.map +1 -0
  411. package/dist/internal/eval-transport.js +22 -0
  412. package/dist/internal/evals-client.js +242 -246
  413. package/dist/internal/event-log.js +72 -120
  414. package/dist/internal/event-mapper.js +30 -31
  415. package/dist/internal/factory-resource-channel.js +16 -30
  416. package/dist/internal/filesystem/errors.js +6 -6
  417. package/dist/internal/filesystem/format.js +10 -13
  418. package/dist/internal/filesystem/merge.js +52 -94
  419. package/dist/internal/filesystem/nearest.js +15 -27
  420. package/dist/internal/filesystem/scratch.js +65 -85
  421. package/dist/internal/filesystem/tools.js +221 -241
  422. package/dist/internal/filesystem/walk.js +76 -143
  423. package/dist/internal/framework-file-storage.js +118 -139
  424. package/dist/internal/framework-storage-selection.js +21 -13
  425. package/dist/internal/frontmatter.js +4 -6
  426. package/dist/internal/github-fanout.js +50 -64
  427. package/dist/internal/guest-network.js +96 -109
  428. package/dist/internal/handleAgentServeTrigger.js +121 -126
  429. package/dist/internal/host-files.js +73 -88
  430. package/dist/internal/host-kv.js +21 -36
  431. package/dist/internal/host-otel.js +22 -19
  432. package/dist/internal/host-platforms.js +49 -63
  433. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  434. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  435. package/dist/internal/hosted-catch-protocol.js +1 -0
  436. package/dist/internal/hosted-catch.d.ts +5 -3
  437. package/dist/internal/hosted-catch.d.ts.map +1 -1
  438. package/dist/internal/hosted-catch.js +84 -93
  439. package/dist/internal/hosted-delivery-protocol.js +32 -8
  440. package/dist/internal/hosted-delivery.d.ts +13 -1
  441. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  442. package/dist/internal/hosted-delivery.js +614 -584
  443. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  444. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  445. package/dist/internal/hosted-eval-cases.js +162 -0
  446. package/dist/internal/hosted-execution-diag.js +38 -30
  447. package/dist/internal/hosted-execution-flush.js +75 -66
  448. package/dist/internal/hosted-execution-latency.js +16 -8
  449. package/dist/internal/hosted-managed-automation.js +2 -2
  450. package/dist/internal/hosting.js +2 -3
  451. package/dist/internal/http-channel-define.js +4 -1
  452. package/dist/internal/http-channel.js +101 -112
  453. package/dist/internal/http-control-plane-session.d.ts +18 -1
  454. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  455. package/dist/internal/http-control-plane-session.js +66 -32
  456. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  457. package/dist/internal/init-interview.js +73 -93
  458. package/dist/internal/init-project.js +182 -214
  459. package/dist/internal/init-scaffold.js +10 -21
  460. package/dist/internal/inline-stdio-mcp.js +80 -86
  461. package/dist/internal/install-cursor-skills.d.ts.map +1 -1
  462. package/dist/internal/install-cursor-skills.js +238 -274
  463. package/dist/internal/legacy-command-guard.js +18 -31
  464. package/dist/internal/listen-port.js +34 -45
  465. package/dist/internal/local-control-plane.js +293 -307
  466. package/dist/internal/local-env.js +1 -1
  467. package/dist/internal/local-ingress.js +15 -9
  468. package/dist/internal/log-ring.js +1 -2
  469. package/dist/internal/logs-client.js +207 -227
  470. package/dist/internal/map-pool.js +24 -38
  471. package/dist/internal/mcp-endpoint.js +204 -180
  472. package/dist/internal/mcp-host.js +165 -168
  473. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  474. package/dist/internal/mcp-oauth-persist.js +15 -29
  475. package/dist/internal/mcp-oauth.js +209 -266
  476. package/dist/internal/named-webhook-secret.d.ts +39 -0
  477. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  478. package/dist/internal/named-webhook-secret.js +47 -0
  479. package/dist/internal/open-browser.js +2 -3
  480. package/dist/internal/otel/collector.js +104 -68
  481. package/dist/internal/otel/config.js +24 -37
  482. package/dist/internal/otel/http.js +5 -7
  483. package/dist/internal/otel/mcp.js +3 -12
  484. package/dist/internal/otel/runtime.js +69 -83
  485. package/dist/internal/package-inline-stdio.js +57 -65
  486. package/dist/internal/peer-connections.js +9 -5
  487. package/dist/internal/platform-schedule-sync.js +39 -54
  488. package/dist/internal/platform-timers.js +176 -210
  489. package/dist/internal/playground/static.js +1 -2
  490. package/dist/internal/playground/toolchain.js +37 -53
  491. package/dist/internal/playground-proxy.js +230 -270
  492. package/dist/internal/process-memory-telemetry.js +33 -51
  493. package/dist/internal/prompt-context.js +3 -6
  494. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  495. package/dist/internal/reminder-runner.js +770 -785
  496. package/dist/internal/reminder-schedule.js +1 -1
  497. package/dist/internal/reminder-store.js +57 -78
  498. package/dist/internal/request-error-status.js +1 -3
  499. package/dist/internal/request-headers.js +2 -2
  500. package/dist/internal/resolve-prod-target.js +119 -135
  501. package/dist/internal/resolved-connections.js +16 -6
  502. package/dist/internal/run-client.js +221 -229
  503. package/dist/internal/runtime-dispatch-runner.js +18 -43
  504. package/dist/internal/schedule-runner.js +49 -58
  505. package/dist/internal/scm/pr-url.js +7 -6
  506. package/dist/internal/sdk-runner.js +388 -363
  507. package/dist/internal/serve-restart.js +26 -39
  508. package/dist/internal/server.d.ts.map +1 -1
  509. package/dist/internal/server.js +1283 -1244
  510. package/dist/internal/session-cost.js +7 -9
  511. package/dist/internal/session-engine.d.ts +3 -1
  512. package/dist/internal/session-engine.d.ts.map +1 -1
  513. package/dist/internal/session-engine.js +2801 -2777
  514. package/dist/internal/session-links.js +12 -16
  515. package/dist/internal/session-run-log.js +134 -82
  516. package/dist/internal/session-store.js +133 -164
  517. package/dist/internal/sessions-client.js +97 -118
  518. package/dist/internal/skill-catalog.js +18 -23
  519. package/dist/internal/skills-sync.js +16 -30
  520. package/dist/internal/slack-provision-client.js +90 -116
  521. package/dist/internal/start-log-store.js +48 -67
  522. package/dist/internal/steering.js +1 -2
  523. package/dist/internal/storage-coordinator.js +160 -196
  524. package/dist/internal/store-mirror.js +16 -30
  525. package/dist/internal/stream-progress.js +6 -8
  526. package/dist/internal/terminal-style.js +3 -4
  527. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  528. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  529. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  530. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  531. package/dist/internal/tool-catalog.js +11 -5
  532. package/dist/internal/tool-result.js +1 -1
  533. package/dist/internal/trajectory.js +19 -22
  534. package/dist/internal/turn-cost.js +52 -62
  535. package/dist/internal/turn-governor.js +5 -8
  536. package/dist/internal/turn-lease-store.js +85 -105
  537. package/dist/internal/turn-outbox.js +28 -43
  538. package/dist/internal/update-check.js +231 -259
  539. package/dist/internal/v2-hosting.js +1 -2
  540. package/dist/internal/workspace-sync.js +25 -41
  541. package/dist/internal/workspace.js +111 -139
  542. package/dist/kv/memory-kv.js +27 -51
  543. package/dist/memory.js +106 -148
  544. package/dist/otel.js +5 -8
  545. package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
  546. package/dist/playground/assets/{index-MijLHTbB.js → index-JekUQERK.js} +45 -45
  547. package/dist/playground/index.html +2 -2
  548. package/dist/prompt.js +2 -4
  549. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  550. package/dist/storage-backends/cursor-hosted.js +105 -145
  551. package/dist/storage-backends/file-kv.js +100 -128
  552. package/dist/storage-protocol.js +3 -5
  553. package/dist/storage.js +17 -26
  554. package/dist/types.d.ts +68 -0
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +20 -18
  557. package/docs/building-with-agents.md +2 -0
  558. package/docs/deployment.md +7 -0
  559. package/docs/guides/bitbucket.md +9 -1
  560. package/docs/guides/github.md +20 -4
  561. package/docs/guides/gitlab.md +9 -1
  562. package/docs/guides/migrate.md +127 -0
  563. package/docs/reference/cli.md +39 -0
  564. package/docs/troubleshooting.md +1 -0
  565. package/package.json +1 -1
  566. package/skills/debug/SKILL.md +1 -0
  567. package/skills/github/SKILL.md +23 -0
  568. package/skills/migrate-v2/SKILL.md +264 -0
  569. package/dist/docs/assets/chunks/@localSearchIndexroot.C25zYVuc.js +0 -1
  570. package/dist/docs/assets/chunks/channel.CRUyWDV-.js +0 -1
  571. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CG_UObcQ.js +0 -1
  572. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CG_UObcQ.js +0 -1
  573. package/dist/docs/assets/chunks/clone.NYSZ9qZN.js +0 -1
  574. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DOOmulfQ.js +0 -1
  575. package/dist/docs/assets/chunks/wardley-RL74JXVD.BJrCW6xc.js +0 -162
  576. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  577. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  578. package/dist/playground/assets/index-DPKLl4C_.css +0 -1
  579. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  580. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
  581. /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
@@ -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--;
@@ -286,8 +255,14 @@ function stripPathsFromFrontmatter(frontmatter) {
286
255
  }
287
256
  return out.join("\n");
288
257
  }
289
- /** Cursor loads `alwaysApply: true` skills as global rules, not catalog rows. */
258
+ /**
259
+ * Cursor loads `alwaysApply: true` skills as global rules, not catalog rows.
260
+ * A situational skill opts out with an explicit `alwaysApply: false`.
261
+ */
290
262
  function withAlwaysApply(frontmatter) {
263
+ if (/^\s*alwaysApply\s*:\s*false\s*$/m.test(frontmatter)) {
264
+ return frontmatter;
265
+ }
291
266
  const without = frontmatter
292
267
  .split(/\r?\n/)
293
268
  .filter(line => !/^\s*alwaysApply\s*:/.test(line))
@@ -299,31 +274,28 @@ function withAlwaysApply(frontmatter) {
299
274
  return `${without}\nalwaysApply: true`;
300
275
  }
301
276
  /** What an install would do, for the offer and for `install-skills`. */
302
- export function planSkillInstall(options) {
303
- return __awaiter(this, void 0, void 0, function* () {
304
- var _a;
305
- const skillsHome = (_a = options === null || options === void 0 ? void 0 : options.skillsHome) !== null && _a !== void 0 ? _a : cursorSkillsHome();
306
- const directory = bdkCursorSkillsDir(skillsHome);
307
- const shipped = yield listShippedPackageSkills(options === null || options === void 0 ? void 0 : options.packageRoot);
308
- const present = yield Promise.all(shipped.map((skill) => __awaiter(this, void 0, void 0, function* () {
309
- try {
310
- yield access(join(skillInstallPath(skill, skillsHome), "SKILL.md"));
311
- return true;
312
- }
313
- catch (_a) {
314
- return false;
315
- }
316
- })));
317
- return {
318
- shipped,
319
- skillsHome,
320
- directory,
321
- leaves: shipped.map(skill => skill.leafDir),
322
- firstInstall: present.every(isPresent => !isPresent),
323
- orphans: yield orphanLeaves(directory, shipped),
324
- legacyDirs: yield existingLegacyCursorSkillsDirs(skillsHome),
325
- };
326
- });
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
+ };
327
299
  }
328
300
  /** `Installed 9 BDK skills`, what it dropped, and where it went. */
329
301
  export function formatSkillInstall(plan, result) {
@@ -345,39 +317,36 @@ export function formatSkillInstall(plan, result) {
345
317
  * the package install. No-op in the monorepo source tree and when
346
318
  * `CURSOR_JULY_SKIP_SKILL_INSTALL=1`.
347
319
  */
348
- export function syncCursorSkillsOnPackageInstall() {
349
- return __awaiter(this, arguments, void 0, function* (options = {}) {
350
- var _a, _b, _c, _d;
351
- try {
352
- const env = (_a = options.env) !== null && _a !== void 0 ? _a : process.env;
353
- if (env[CURSOR_JULY_SKIP_SKILL_INSTALL_ENV] === "1") {
354
- return { status: "skipped", reason: "opt-out" };
355
- }
356
- const packageRoot = (_b = options.packageRoot) !== null && _b !== void 0 ? _b : packageRootDir();
357
- const consumer = (_c = options.consumer) !== null && _c !== void 0 ? _c : isConsumerPackageInstall(packageRoot);
358
- if (!consumer) {
359
- return { status: "skipped", reason: "not-consumer" };
360
- }
361
- const plan = yield planSkillInstall({
362
- packageRoot,
363
- skillsHome: options.skillsHome,
364
- });
365
- if (plan.shipped.length === 0) {
366
- return { status: "skipped", reason: "no-skills" };
367
- }
368
- const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
369
- const out = (_d = options.out) !== null && _d !== void 0 ? _d : (text => process.stderr.write(text));
370
- out(formatSkillInstall(plan, result));
371
- return {
372
- status: "installed",
373
- installed: result.installed,
374
- removed: result.removed,
375
- };
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" };
376
325
  }
377
- catch (_e) {
378
- 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" };
379
330
  }
380
- });
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
+ }
381
350
  }
382
351
  /**
383
352
  * On a TTY, offer to install/update every shipped package skill into
@@ -385,82 +354,77 @@ export function syncCursorSkillsOnPackageInstall() {
385
354
  * or the package ships no skills. An unanswered prompt skips the install
386
355
  * rather than blocking the caller — see `SKILL_PROMPT_TIMEOUT_MS`.
387
356
  */
388
- export function offerInstallCursorSkills() {
389
- return __awaiter(this, arguments, void 0, function* (options = {}) {
390
- var _a, _b, _c;
391
- const out = (_a = options.out) !== null && _a !== void 0 ? _a : (text => process.stdout.write(text));
392
- const interactive = (_b = options.interactive) !== null && _b !== void 0 ? _b : (process.stdin.isTTY === true && process.stdout.isTTY === true);
393
- if (!interactive) {
394
- return { installed: [], skipped: true };
395
- }
396
- const plan = yield planSkillInstall({
397
- packageRoot: options.packageRoot,
398
- skillsHome: options.skillsHome,
399
- });
400
- if (plan.shipped.length === 0) {
401
- return { installed: [], skipped: true };
402
- }
403
- const noun = plan.shipped.length === 1 ? "skill" : "skills";
404
- const verb = plan.firstInstall ? "Install" : "Update";
405
- const c = stdoutPalette();
406
- out(`${verb} ${plan.shipped.length} BDK ${noun} in ${plan.directory}?\n`);
407
- out(c.dim(` ${plan.leaves.join(", ")}\n`));
408
- if (!plan.firstInstall) {
409
- out(c.dim(" (overwrites existing copies with the package version)\n"));
410
- }
411
- if (plan.orphans.length > 0) {
412
- out(c.dim(` (deletes ${plan.orphans.join(", ")})\n`));
413
- }
414
- for (const dir of plan.legacyDirs) {
415
- out(c.dim(` (deletes leftover ${dir})\n`));
416
- }
417
- 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, {
418
386
  defaultYes: true,
419
387
  out,
420
388
  timeoutMs: SKILL_PROMPT_TIMEOUT_MS,
421
389
  }));
422
- const accepted = yield confirm(`${verb} now?`);
423
- if (accepted !== true) {
424
- // `undefined` is the prompt timing out or stdin closing; both mean nobody
425
- // said yes, so do not claim a duration neither case is guaranteed to have.
426
- const why = accepted === undefined ? "No answer — skipped the skill install." : "Skipped skill install.";
427
- out(c.dim(`${why}\nInstall later: ${CLI_COMMAND_NAME} install-skills (${plan.directory})\n\n`));
428
- return { installed: [], skipped: true };
429
- }
430
- const result = yield installCursorSkills(plan.shipped, plan.skillsHome);
431
- out(`${formatSkillInstall(plan, result)}\n`);
432
- return { installed: result.installed, skipped: false };
433
- });
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 };
434
401
  }
435
402
  /**
436
403
  * Ask a yes/no question. Resolves `undefined` when the answer never comes —
437
404
  * the prompt timed out, or stdin closed on an empty line.
438
405
  */
439
- export function promptYesNo(question, options) {
440
- return __awaiter(this, void 0, void 0, function* () {
441
- var _a;
442
- const hint = options.defaultYes ? "Y/n" : "y/N";
443
- const input = (_a = options.input) !== null && _a !== void 0 ? _a : process.stdin;
444
- options.out(`${question} [${hint}] `);
445
- input.resume();
446
- const line = yield readOneLine(input, options.timeoutMs);
447
- input.pause();
448
- if (line === undefined) {
449
- options.out("\n");
450
- return undefined;
451
- }
452
- if (line.trim() === "") {
453
- return options.defaultYes;
454
- }
455
- const answer = line.trim().toLowerCase();
456
- if (answer === "y" || answer === "yes") {
457
- return true;
458
- }
459
- if (answer === "n" || answer === "no") {
460
- return false;
461
- }
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() === "") {
462
418
  return options.defaultYes;
463
- });
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;
464
428
  }
465
429
  /** The line, or `undefined` when the stream ends or the clock runs out first. */
466
430
  function readOneLine(stream, timeoutMs) {