@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
@@ -7,27 +7,18 @@
7
7
  * readable. Both authenticate with the host's Cursor API key; the RPCs
8
8
  * exchange it for a session token the way the dashboard client does.
9
9
  */
10
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
11
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16
- step((generator = generator.apply(thisArg, _arguments || [])).next());
17
- });
18
- };
19
10
  import { randomUUID } from "node:crypto";
20
11
  import { z } from "zod";
21
12
  import { CursorBackendClient } from "../../../internal/cursor/backend-client.js";
22
- import { cursorBackendUrl, cursorExternalApiUrl, cursorWebsiteUrl, resolveApiKeySync, SIGN_IN_HINT, } from "../../../internal/cursor/credentials.js";
13
+ import { cloudAgentUrl, cursorBackendUrl, cursorExternalApiUrl, resolveApiKeySync, SIGN_IN_HINT, } from "../../../internal/cursor/credentials.js";
23
14
  import { toModelSelection } from "../../../internal/sdk-runner.js";
24
15
  import extension from "../extension.js";
25
16
  const SERVICE = "BackgroundComposerService";
26
17
  /** Launches and follow-ups from this extension carry the SDK source, like the v1 API. */
27
18
  const SOURCE = "BACKGROUND_COMPOSER_SOURCE_SDK";
28
- const RPC_TIMEOUT_MS = 60000;
19
+ const RPC_TIMEOUT_MS = 60_000;
29
20
  // The create call returns once the initial run exists, which can wait on a VM.
30
- const LAUNCH_TIMEOUT_MS = 300000;
21
+ const LAUNCH_TIMEOUT_MS = 300_000;
31
22
  export class CloudAgentsApiError extends Error {
32
23
  constructor(message, status) {
33
24
  super(message);
@@ -96,128 +87,114 @@ export class CloudAgentsBackend {
96
87
  });
97
88
  }
98
89
  /** `POST /v1/agents`: create the agent and start its first run in one call. */
99
- launch(request) {
100
- return __awaiter(this, void 0, void 0, function* () {
101
- var _a;
102
- const { cloud } = request;
103
- const body = {
104
- prompt: { text: request.prompt },
105
- name: request.name,
106
- model: request.model === undefined ? undefined : toModelSelection(request.model),
107
- env: cloud.env,
108
- envVars: cloud.envVars,
109
- repos: cloud.repos,
110
- workOnCurrentBranch: cloud.workOnCurrentBranch,
111
- autoCreatePR: cloud.autoCreatePR,
112
- skipReviewerRequest: cloud.skipReviewerRequest,
113
- };
114
- let response;
115
- try {
116
- response = yield this.fetchImpl(`${cursorExternalApiUrl()}/v1/agents`, {
117
- method: "POST",
118
- headers: {
119
- "content-type": "application/json",
120
- authorization: `Bearer ${this.apiKey()}`,
121
- "x-ghost-mode": "true",
122
- "x-cursor-client-type": "agent-serve",
123
- "x-request-id": randomUUID(),
124
- },
125
- body: JSON.stringify(body),
126
- signal: AbortSignal.timeout(LAUNCH_TIMEOUT_MS),
127
- });
128
- }
129
- catch (error) {
130
- throw new CloudAgentsApiError(`Cloud agent launch failed: ${error instanceof Error ? error.message : String(error)}`);
131
- }
132
- const text = yield response.text();
133
- if (!response.ok) {
134
- throw new CloudAgentsApiError(`Cloud agent launch failed (${response.status}): ${apiErrorMessage(text)}`, response.status);
135
- }
136
- const parsed = launchResponseSchema.parse(JSON.parse(text));
137
- return {
138
- agentId: parsed.agent.id,
139
- runId: parsed.run.id,
140
- status: parsed.run.status.toLowerCase(),
141
- url: (_a = parsed.agent.url) !== null && _a !== void 0 ? _a : agentUrl(parsed.agent.id),
142
- };
143
- });
90
+ async launch(request) {
91
+ const { cloud } = request;
92
+ const body = {
93
+ prompt: { text: request.prompt },
94
+ name: request.name,
95
+ model: request.model === undefined ? undefined : toModelSelection(request.model),
96
+ env: cloud.env,
97
+ envVars: cloud.envVars,
98
+ repos: cloud.repos,
99
+ workOnCurrentBranch: cloud.workOnCurrentBranch,
100
+ autoCreatePR: cloud.autoCreatePR,
101
+ skipReviewerRequest: cloud.skipReviewerRequest,
102
+ };
103
+ let response;
104
+ try {
105
+ response = await this.fetchImpl(`${cursorExternalApiUrl()}/v1/agents`, {
106
+ method: "POST",
107
+ headers: {
108
+ "content-type": "application/json",
109
+ authorization: `Bearer ${this.apiKey()}`,
110
+ "x-ghost-mode": "true",
111
+ "x-cursor-client-type": "agent-serve",
112
+ "x-request-id": randomUUID(),
113
+ },
114
+ body: JSON.stringify(body),
115
+ signal: AbortSignal.timeout(LAUNCH_TIMEOUT_MS),
116
+ });
117
+ }
118
+ catch (error) {
119
+ throw new CloudAgentsApiError(`Cloud agent launch failed: ${error instanceof Error ? error.message : String(error)}`);
120
+ }
121
+ const text = await response.text();
122
+ if (!response.ok) {
123
+ throw new CloudAgentsApiError(`Cloud agent launch failed (${response.status}): ${apiErrorMessage(text)}`, response.status);
124
+ }
125
+ const parsed = launchResponseSchema.parse(JSON.parse(text));
126
+ return {
127
+ agentId: parsed.agent.id,
128
+ runId: parsed.run.id,
129
+ status: parsed.run.status.toLowerCase(),
130
+ url: parsed.agent.url ?? cloudAgentUrl(parsed.agent.id),
131
+ };
132
+ }
133
+ async info(agentId) {
134
+ const { composer } = infoResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerInfo", { bcId: agentId }, RPC_TIMEOUT_MS));
135
+ const { composer: summary } = composer;
136
+ const failure = composer.permanentError ?? composer.startError;
137
+ return {
138
+ agentId: summary.bcId,
139
+ name: summary.name ?? "",
140
+ status: statusOf(summary.status),
141
+ archived: summary.isArchived === true,
142
+ url: cloudAgentUrl(summary.bcId),
143
+ branch: emptyToUndefined(summary.branchName),
144
+ prUrl: emptyToUndefined(summary.prUrl),
145
+ summary: emptyToUndefined(composer.summary),
146
+ error: failureMessage(failure),
147
+ changes: summary.filesChanged === undefined
148
+ ? undefined
149
+ : {
150
+ filesChanged: summary.filesChanged,
151
+ linesAdded: summary.linesAdded ?? 0,
152
+ linesRemoved: summary.linesRemoved ?? 0,
153
+ },
154
+ };
144
155
  }
145
- info(agentId) {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- var _a, _b, _c, _d;
148
- const { composer } = infoResponseSchema.parse(yield this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerInfo", { bcId: agentId }, RPC_TIMEOUT_MS));
149
- const { composer: summary } = composer;
150
- const failure = (_a = composer.permanentError) !== null && _a !== void 0 ? _a : composer.startError;
156
+ async conversation(agentId) {
157
+ const { conversation } = conversationResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerConversation", { bcId: agentId }, RPC_TIMEOUT_MS));
158
+ return (conversation ?? []).map(message => {
159
+ const toolCalls = (message.toolResults ?? []).map(result => ({
160
+ name: result.toolName ?? "",
161
+ args: parseArgs(result.args ?? result.rawArgs),
162
+ content: result.content,
163
+ error: result.error?.clientVisibleErrorMessage,
164
+ }));
151
165
  return {
152
- agentId: summary.bcId,
153
- name: (_b = summary.name) !== null && _b !== void 0 ? _b : "",
154
- status: statusOf(summary.status),
155
- archived: summary.isArchived === true,
156
- url: agentUrl(summary.bcId),
157
- branch: emptyToUndefined(summary.branchName),
158
- prUrl: emptyToUndefined(summary.prUrl),
159
- summary: emptyToUndefined(composer.summary),
160
- error: failureMessage(failure),
161
- changes: summary.filesChanged === undefined
162
- ? undefined
163
- : {
164
- filesChanged: summary.filesChanged,
165
- linesAdded: (_c = summary.linesAdded) !== null && _c !== void 0 ? _c : 0,
166
- linesRemoved: (_d = summary.linesRemoved) !== null && _d !== void 0 ? _d : 0,
167
- },
166
+ role: message.type === "MESSAGE_TYPE_HUMAN" ? "user" : "assistant",
167
+ text: emptyToUndefined(message.text),
168
+ thinking: emptyToUndefined(message.thinking?.text),
169
+ toolCalls: toolCalls.length === 0 ? undefined : toolCalls,
168
170
  };
169
171
  });
170
172
  }
171
- conversation(agentId) {
172
- return __awaiter(this, void 0, void 0, function* () {
173
- const { conversation } = conversationResponseSchema.parse(yield this.rpcClient.serviceRpc(SERVICE, "GetBackgroundComposerConversation", { bcId: agentId }, RPC_TIMEOUT_MS));
174
- return (conversation !== null && conversation !== void 0 ? conversation : []).map(message => {
175
- var _a;
176
- var _b;
177
- const toolCalls = ((_b = message.toolResults) !== null && _b !== void 0 ? _b : []).map(result => { var _a; var _b, _c; return ({
178
- name: (_b = result.toolName) !== null && _b !== void 0 ? _b : "",
179
- args: parseArgs((_c = result.args) !== null && _c !== void 0 ? _c : result.rawArgs),
180
- content: result.content,
181
- error: (_a = result.error) === null || _a === void 0 ? void 0 : _a.clientVisibleErrorMessage,
182
- }); });
183
- return {
184
- role: message.type === "MESSAGE_TYPE_HUMAN" ? "user" : "assistant",
185
- text: emptyToUndefined(message.text),
186
- thinking: emptyToUndefined((_a = message.thinking) === null || _a === void 0 ? void 0 : _a.text),
187
- toolCalls: toolCalls.length === 0 ? undefined : toolCalls,
188
- };
189
- });
190
- });
191
- }
192
173
  /**
193
174
  * Queue a follow-up behind the current run, or with `interrupt` cancel the
194
175
  * in-flight step and run it now; the backend's `synchronous` switch.
195
176
  */
196
- followUp(agentId, prompt, interrupt) {
197
- return __awaiter(this, void 0, void 0, function* () {
198
- const { runId } = followupResponseSchema.parse(yield this.rpcClient.serviceRpc(SERVICE, "AddAsyncFollowupBackgroundComposer", {
199
- bcId: agentId,
200
- synchronous: interrupt,
201
- followupSource: SOURCE,
202
- followupMessage: {
203
- text: prompt,
204
- type: "MESSAGE_TYPE_HUMAN",
205
- bubbleId: randomUUID(),
206
- },
207
- }, RPC_TIMEOUT_MS));
208
- return { runId };
209
- });
177
+ async followUp(agentId, prompt, interrupt) {
178
+ const { runId } = followupResponseSchema.parse(await this.rpcClient.serviceRpc(SERVICE, "AddAsyncFollowupBackgroundComposer", {
179
+ bcId: agentId,
180
+ synchronous: interrupt,
181
+ followupSource: SOURCE,
182
+ followupMessage: {
183
+ text: prompt,
184
+ type: "MESSAGE_TYPE_HUMAN",
185
+ bubbleId: randomUUID(),
186
+ },
187
+ }, RPC_TIMEOUT_MS));
188
+ return { runId };
210
189
  }
211
- pause(agentId) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- yield this.rpcClient.serviceRpc(SERVICE, "PauseBackgroundComposer", { bcId: agentId, source: SOURCE }, RPC_TIMEOUT_MS);
214
- });
190
+ async pause(agentId) {
191
+ await this.rpcClient.serviceRpc(SERVICE, "PauseBackgroundComposer", { bcId: agentId, source: SOURCE }, RPC_TIMEOUT_MS);
215
192
  }
216
193
  }
217
194
  let backend;
218
195
  /** The process-wide backend for this mount, built on first use. */
219
196
  export function cloudAgentsBackend() {
220
- backend !== null && backend !== void 0 ? backend : (backend = new CloudAgentsBackend(apiKey));
197
+ backend ??= new CloudAgentsBackend(apiKey);
221
198
  return backend;
222
199
  }
223
200
  export function apiKey() {
@@ -227,9 +204,6 @@ export function apiKey() {
227
204
  }
228
205
  return key.apiKey;
229
206
  }
230
- export function agentUrl(agentId) {
231
- return `${cursorWebsiteUrl()}/agents/${agentId}`;
232
- }
233
207
  function statusOf(status) {
234
208
  switch (status) {
235
209
  case "BACKGROUND_COMPOSER_STATUS_CREATING":
@@ -247,8 +221,7 @@ function statusOf(status) {
247
221
  }
248
222
  }
249
223
  function failureMessage(failure) {
250
- var _a, _b;
251
- const parts = [(_a = failure === null || failure === void 0 ? void 0 : failure.details) === null || _a === void 0 ? void 0 : _a.title, (_b = failure === null || failure === void 0 ? void 0 : failure.details) === null || _b === void 0 ? void 0 : _b.detail].filter((part) => part !== undefined && part !== "");
224
+ const parts = [failure?.details?.title, failure?.details?.detail].filter((part) => part !== undefined && part !== "");
252
225
  return parts.length === 0 ? undefined : parts.join(": ");
253
226
  }
254
227
  function parseArgs(args) {
@@ -258,7 +231,7 @@ function parseArgs(args) {
258
231
  try {
259
232
  return JSON.parse(args);
260
233
  }
261
- catch (_a) {
234
+ catch {
262
235
  return args;
263
236
  }
264
237
  }
@@ -266,15 +239,13 @@ function emptyToUndefined(value) {
266
239
  return value === undefined || value === "" ? undefined : value;
267
240
  }
268
241
  function apiErrorMessage(text) {
269
- var _a, _b;
270
- var _c, _d;
271
242
  try {
272
243
  const parsed = JSON.parse(text);
273
- const code = (_c = (_a = parsed.error) === null || _a === void 0 ? void 0 : _a.code) !== null && _c !== void 0 ? _c : parsed.code;
274
- const message = (_d = (_b = parsed.error) === null || _b === void 0 ? void 0 : _b.message) !== null && _d !== void 0 ? _d : parsed.message;
244
+ const code = parsed.error?.code ?? parsed.code;
245
+ const message = parsed.error?.message ?? parsed.message;
275
246
  return [code, message].filter(part => part !== undefined).join(": ") || text;
276
247
  }
277
- catch (_e) {
248
+ catch {
278
249
  return text;
279
250
  }
280
251
  }
@@ -6,15 +6,6 @@
6
6
  * the fleet listing is that principal's records, by default narrowed to the
7
7
  * session that launched them.
8
8
  */
9
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
- return new (P || (P = Promise))(function (resolve, reject) {
12
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
- step((generator = generator.apply(thisArg, _arguments || [])).next());
16
- });
17
- };
18
9
  import { z } from "zod";
19
10
  const PREFIX = "cloud-agents";
20
11
  const fleetSchema = z.array(z.object({
@@ -29,8 +20,7 @@ const ownerSchema = z.object({ principal: z.string() });
29
20
  // principal so neither launch overwrites the other's entry.
30
21
  const indexWrites = new Map();
31
22
  function withIndexLock(key, task) {
32
- var _a;
33
- const run = ((_a = indexWrites.get(key)) !== null && _a !== void 0 ? _a : Promise.resolve()).then(task, task);
23
+ const run = (indexWrites.get(key) ?? Promise.resolve()).then(task, task);
34
24
  indexWrites.set(key, run);
35
25
  return run.finally(() => {
36
26
  if (indexWrites.get(key) === run) {
@@ -43,38 +33,32 @@ export function principalOf(ctx) {
43
33
  const auth = ctx.session.auth;
44
34
  return auth === null ? "anonymous" : `${auth.principalType}:${auth.principalId}`;
45
35
  }
46
- export function recordLaunch(ctx, agentId, name) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const principal = principalOf(ctx);
49
- const entry = {
50
- agentId,
51
- name,
52
- launchedAt: new Date().toISOString(),
53
- sessionId: ctx.session.id,
54
- };
55
- yield ctx.host.kv.put(`${PREFIX}/agents/${agentId}`, { principal });
56
- yield withIndexLock(fleetKey(principal), () => __awaiter(this, void 0, void 0, function* () {
57
- const fleet = yield listFleet(ctx);
58
- yield ctx.host.kv.put(fleetKey(principal), [entry, ...fleet]);
59
- }));
36
+ export async function recordLaunch(ctx, agentId, name) {
37
+ const principal = principalOf(ctx);
38
+ const entry = {
39
+ agentId,
40
+ name,
41
+ launchedAt: new Date().toISOString(),
42
+ sessionId: ctx.session.id,
43
+ };
44
+ await ctx.host.kv.put(`${PREFIX}/agents/${agentId}`, { principal });
45
+ await withIndexLock(fleetKey(principal), async () => {
46
+ const fleet = await listFleet(ctx);
47
+ await ctx.host.kv.put(fleetKey(principal), [entry, ...fleet]);
60
48
  });
61
49
  }
62
50
  /** Refuse agents launched by another principal, or not through the extension. */
63
- export function assertOwned(ctx, agentId) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- const owner = ownerSchema.safeParse(yield ctx.host.kv.get(`${PREFIX}/agents/${agentId}`));
66
- if (!owner.success || owner.data.principal !== principalOf(ctx)) {
67
- throw new Error(`Agent ${agentId} was not launched through this extension by this principal; only your own launches can be read or steered.`);
68
- }
69
- });
51
+ export async function assertOwned(ctx, agentId) {
52
+ const owner = ownerSchema.safeParse(await ctx.host.kv.get(`${PREFIX}/agents/${agentId}`));
53
+ if (!owner.success || owner.data.principal !== principalOf(ctx)) {
54
+ throw new Error(`Agent ${agentId} was not launched through this extension by this principal; only your own launches can be read or steered.`);
55
+ }
70
56
  }
71
57
  /** The caller's launches, newest first: this session's, or every session's. */
72
- export function listFleet(ctx_1) {
73
- return __awaiter(this, arguments, void 0, function* (ctx, scope = "all") {
74
- const fleet = fleetSchema.safeParse(yield ctx.host.kv.get(fleetKey(principalOf(ctx))));
75
- const entries = fleet.success ? fleet.data : [];
76
- return scope === "all" ? entries : entries.filter(entry => entry.sessionId === ctx.session.id);
77
- });
58
+ export async function listFleet(ctx, scope = "all") {
59
+ const fleet = fleetSchema.safeParse(await ctx.host.kv.get(fleetKey(principalOf(ctx))));
60
+ const entries = fleet.success ? fleet.data : [];
61
+ return scope === "all" ? entries : entries.filter(entry => entry.sessionId === ctx.session.id);
78
62
  }
79
63
  function fleetKey(principal) {
80
64
  return `${PREFIX}/principals/${encodeURIComponent(principal)}`;
@@ -8,11 +8,9 @@
8
8
  */
9
9
  import { parsePrUrl } from "../../../internal/scm/pr-url.js";
10
10
  export function launchRepos(target, cloud) {
11
- var _a;
12
- var _b, _c, _d, _e, _f;
13
11
  const resolved = typeof cloud.repos === "function";
14
12
  const allowlist = typeof cloud.repos === "function" ? cloud.repos() : cloud.repos;
15
- if (resolved && (allowlist === null || allowlist === void 0 ? void 0 : allowlist.length) === 0) {
13
+ if (resolved && allowlist?.length === 0) {
16
14
  throw new Error("No repositories are available to cloud agents for this deployment.");
17
15
  }
18
16
  if (!resolved &&
@@ -22,13 +20,13 @@ export function launchRepos(target, cloud) {
22
20
  return allowlist;
23
21
  }
24
22
  const pr = target.prUrl === undefined ? undefined : parsePrUrl(target.prUrl);
25
- if (target.prUrl !== undefined && (pr === null || pr === void 0 ? void 0 : pr.provider) !== "github") {
23
+ if (target.prUrl !== undefined && pr?.provider !== "github") {
26
24
  throw new Error(`prUrl must be a GitHub pull request URL: ${target.prUrl}`);
27
25
  }
28
26
  const prRepo = pr === undefined ? undefined : `https://github.com/${pr.owner}/${pr.repo}`;
29
27
  // A lone `ref` needs exactly one configured repository to apply to.
30
- const configured = allowlist !== null && allowlist !== void 0 ? allowlist : [];
31
- const url = (_c = (_b = target.repo) !== null && _b !== void 0 ? _b : prRepo) !== null && _c !== void 0 ? _c : (configured.length === 1 ? (_a = configured[0]) === null || _a === void 0 ? void 0 : _a.url : undefined);
28
+ const configured = allowlist ?? [];
29
+ const url = target.repo ?? prRepo ?? (configured.length === 1 ? configured[0]?.url : undefined);
32
30
  if (url === undefined) {
33
31
  throw new Error(configured.length > 1
34
32
  ? "`repo` is required: this extension configures several repositories."
@@ -37,7 +35,7 @@ export function launchRepos(target, cloud) {
37
35
  if (prRepo !== undefined && repoKey(prRepo) !== repoKey(url)) {
38
36
  throw new Error(`prUrl ${target.prUrl} is not a pull request of ${url}.`);
39
37
  }
40
- const allowlisted = allowlist === null || allowlist === void 0 ? void 0 : allowlist.some(configured => repoKey(configured.url) === repoKey(url));
38
+ const allowlisted = allowlist?.some(configured => repoKey(configured.url) === repoKey(url));
41
39
  if (allowlisted !== true) {
42
40
  throw new Error(allowlist === undefined
43
41
  ? `Configure cloud.repos before launching against a model-chosen repository (${url}).`
@@ -49,9 +47,9 @@ export function launchRepos(target, cloud) {
49
47
  const match = configured.find(configuredRepo => repoKey(configuredRepo.url) === repoKey(url));
50
48
  return [
51
49
  {
52
- url: (_d = match === null || match === void 0 ? void 0 : match.url) !== null && _d !== void 0 ? _d : url,
53
- startingRef: (_e = target.ref) !== null && _e !== void 0 ? _e : match === null || match === void 0 ? void 0 : match.startingRef,
54
- prUrl: (_f = target.prUrl) !== null && _f !== void 0 ? _f : (target.ref !== undefined ? undefined : match === null || match === void 0 ? void 0 : match.prUrl),
50
+ url: match?.url ?? url,
51
+ startingRef: target.ref ?? match?.startingRef,
52
+ prUrl: target.prUrl ?? (target.ref !== undefined ? undefined : match?.prUrl),
55
53
  },
56
54
  ];
57
55
  }
@@ -8,8 +8,7 @@ export function transcriptLines(messages) {
8
8
  }
9
9
  /** The text of the last assistant message, the agent's report. */
10
10
  export function lastAssistantText(messages) {
11
- var _a;
12
- return (_a = messages
11
+ return messages
13
12
  .toReversed()
14
- .find(message => message.role === "assistant" && message.text !== undefined)) === null || _a === void 0 ? void 0 : _a.text;
13
+ .find(message => message.role === "assistant" && message.text !== undefined)?.text;
15
14
  }
@@ -3,15 +3,6 @@
3
3
  * per launched agent, bound to the session whose turn launched it, so the
4
4
  * host wakes that conversation once the launched run stops.
5
5
  */
6
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
- return new (P || (P = Promise))(function (resolve, reject) {
9
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
- step((generator = generator.apply(thisArg, _arguments || [])).next());
13
- });
14
- };
15
6
  import { describeError } from "../../../internal/describe-error.js";
16
7
  import extension from "../extension.js";
17
8
  import stopWatch, { WATCH_WINDOW_HOURS, } from "../reminders/cloud-agent-stop-watch.js";
@@ -31,69 +22,64 @@ const STOPPED_RUN_STATUSES = new Set([
31
22
  * reminders, the session has no continuation key, or arming failed; the
32
23
  * agent runs either way.
33
24
  */
34
- export function armWatch(ctx, launch) {
35
- return __awaiter(this, void 0, void 0, function* () {
36
- const reminders = ctx.host.reminders;
37
- const continuationToken = ctx.session.continuationKey;
38
- if (!extension.config.watchStops ||
39
- STOPPED_RUN_STATUSES.has(launch.status) ||
40
- reminders === undefined ||
41
- continuationToken == null) {
42
- return false;
43
- }
44
- const { agentId } = launch;
45
- const { channelId } = ctx.session;
46
- try {
47
- const armed = yield reminders.list({
48
- status: "armed",
49
- purpose: WATCH_PURPOSE,
50
- continuationToken,
51
- });
52
- if (armed.some(reminder => reminder.channelId === channelId && watched(reminder) === agentId)) {
53
- return true;
54
- }
55
- const args = {
56
- agentId,
57
- deadline: new Date(Date.now() + WATCH_WINDOW_HOURS * 3600000).toISOString(),
58
- };
59
- yield reminders.create({
60
- purpose: WATCH_PURPOSE,
61
- channelId,
62
- continuationToken,
63
- handler: stopWatch,
64
- args,
65
- every: POLL_INTERVAL,
66
- // A fire during a turn waits for it instead of skipping to the next poll.
67
- busyPolicy: "queueBehindTurn",
68
- });
25
+ export async function armWatch(ctx, launch) {
26
+ const reminders = ctx.host.reminders;
27
+ const continuationToken = ctx.session.continuationKey;
28
+ if (!extension.config.watchStops ||
29
+ STOPPED_RUN_STATUSES.has(launch.status) ||
30
+ reminders === undefined ||
31
+ continuationToken == null) {
32
+ return false;
33
+ }
34
+ const { agentId } = launch;
35
+ const { channelId } = ctx.session;
36
+ try {
37
+ const armed = await reminders.list({
38
+ status: "armed",
39
+ purpose: WATCH_PURPOSE,
40
+ continuationToken,
41
+ });
42
+ if (armed.some(reminder => reminder.channelId === channelId && watched(reminder) === agentId)) {
69
43
  return true;
70
44
  }
71
- catch (error) {
72
- console.warn(`[cursor-cloud-agents] could not watch ${agentId}: ${describeError(error)}`);
73
- return false;
74
- }
75
- });
45
+ const args = {
46
+ agentId,
47
+ deadline: new Date(Date.now() + WATCH_WINDOW_HOURS * 3_600_000).toISOString(),
48
+ };
49
+ await reminders.create({
50
+ purpose: WATCH_PURPOSE,
51
+ channelId,
52
+ continuationToken,
53
+ handler: stopWatch,
54
+ args,
55
+ every: POLL_INTERVAL,
56
+ // A fire during a turn waits for it instead of skipping to the next poll.
57
+ busyPolicy: "queueBehindTurn",
58
+ });
59
+ return true;
60
+ }
61
+ catch (error) {
62
+ console.warn(`[cursor-cloud-agents] could not watch ${agentId}: ${describeError(error)}`);
63
+ return false;
64
+ }
76
65
  }
77
66
  /** End every watch on `agentId`, whose run was stopped on purpose. */
78
- export function disarmWatches(ctx, agentId) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- const reminders = ctx.host.reminders;
81
- if (reminders === undefined) {
82
- return;
83
- }
84
- try {
85
- for (const reminder of yield reminders.list({ status: "armed", purpose: WATCH_PURPOSE })) {
86
- if (watched(reminder) === agentId) {
87
- yield reminders.cancel(reminder.id, "cloud_agent_cancelled");
88
- }
67
+ export async function disarmWatches(ctx, agentId) {
68
+ const reminders = ctx.host.reminders;
69
+ if (reminders === undefined) {
70
+ return;
71
+ }
72
+ try {
73
+ for (const reminder of await reminders.list({ status: "armed", purpose: WATCH_PURPOSE })) {
74
+ if (watched(reminder) === agentId) {
75
+ await reminders.cancel(reminder.id, "cloud_agent_cancelled");
89
76
  }
90
77
  }
91
- catch (error) {
92
- console.warn(`[cursor-cloud-agents] could not stop watching ${agentId}: ${describeError(error)}`);
93
- }
94
- });
78
+ }
79
+ catch (error) {
80
+ console.warn(`[cursor-cloud-agents] could not stop watching ${agentId}: ${describeError(error)}`);
81
+ }
95
82
  }
96
83
  function watched(reminder) {
97
- var _a;
98
- return (_a = reminder.args) === null || _a === void 0 ? void 0 : _a.agentId;
84
+ return reminder.args?.agentId;
99
85
  }