@cursor/bdk 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (569) hide show
  1. package/dist/artifacts.js +3 -5
  2. package/dist/bin/agent-serve.js +803 -812
  3. package/dist/channels/bitbucket/api.js +305 -321
  4. package/dist/channels/bitbucket/binding.js +97 -61
  5. package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
  6. package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
  7. package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
  9. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
  11. package/dist/channels/bitbucket/checks.js +9 -21
  12. package/dist/channels/bitbucket/cursor-account.js +1 -1
  13. package/dist/channels/bitbucket/defaults.js +14 -4
  14. package/dist/channels/bitbucket/events.js +1 -2
  15. package/dist/channels/bitbucket/index.d.ts +6 -2
  16. package/dist/channels/bitbucket/index.d.ts.map +1 -1
  17. package/dist/channels/bitbucket/index.js +6 -2
  18. package/dist/channels/bitbucket/replay.js +80 -56
  19. package/dist/channels/bitbucket/state.js +16 -7
  20. package/dist/channels/bitbucket/types.d.ts +11 -2
  21. package/dist/channels/bitbucket/types.d.ts.map +1 -1
  22. package/dist/channels/checks.js +18 -28
  23. package/dist/channels/deployments/deployments-channel.js +26 -34
  24. package/dist/channels/github/api.js +216 -210
  25. package/dist/channels/github/auth.d.ts +5 -1
  26. package/dist/channels/github/auth.d.ts.map +1 -1
  27. package/dist/channels/github/auth.js +157 -174
  28. package/dist/channels/github/binding.js +48 -39
  29. package/dist/channels/github/checks.js +9 -14
  30. package/dist/channels/github/cursor-account.js +6 -11
  31. package/dist/channels/github/defaults.js +105 -130
  32. package/dist/channels/github/forward.js +13 -17
  33. package/dist/channels/github/github-channel.d.ts +43 -2
  34. package/dist/channels/github/github-channel.d.ts.map +1 -1
  35. package/dist/channels/github/github-channel.js +1228 -958
  36. package/dist/channels/github/progress.js +145 -146
  37. package/dist/channels/github/replay.js +30 -39
  38. package/dist/channels/github/state.js +40 -16
  39. package/dist/channels/github/types.d.ts +30 -6
  40. package/dist/channels/github/types.d.ts.map +1 -1
  41. package/dist/channels/gitlab/api.js +100 -114
  42. package/dist/channels/gitlab/binding.js +52 -33
  43. package/dist/channels/gitlab/checks.js +28 -29
  44. package/dist/channels/gitlab/cursor-account.js +1 -1
  45. package/dist/channels/gitlab/defaults.js +9 -3
  46. package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
  47. package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
  48. package/dist/channels/gitlab/gitlab-channel.js +95 -42
  49. package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
  50. package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
  51. package/dist/channels/gitlab/gitlab-webhook.js +282 -249
  52. package/dist/channels/gitlab/index.d.ts +6 -2
  53. package/dist/channels/gitlab/index.d.ts.map +1 -1
  54. package/dist/channels/gitlab/index.js +6 -2
  55. package/dist/channels/gitlab/replay.js +50 -27
  56. package/dist/channels/gitlab/state.js +14 -6
  57. package/dist/channels/gitlab/types.d.ts +13 -2
  58. package/dist/channels/gitlab/types.d.ts.map +1 -1
  59. package/dist/channels/origin/api.js +100 -116
  60. package/dist/channels/origin/binding.js +15 -16
  61. package/dist/channels/origin/checks.js +30 -28
  62. package/dist/channels/origin/defaults.js +50 -65
  63. package/dist/channels/origin/origin-channel.js +266 -272
  64. package/dist/channels/origin/origin-webhook.js +70 -88
  65. package/dist/channels/origin/reactions.js +9 -21
  66. package/dist/channels/origin/state.js +13 -5
  67. package/dist/channels/slack/agentic-delivery.js +426 -478
  68. package/dist/channels/slack/agentic-posted.js +9 -10
  69. package/dist/channels/slack/agentic-signals.js +2 -3
  70. package/dist/channels/slack/api.js +417 -427
  71. package/dist/channels/slack/approvals.js +1 -1
  72. package/dist/channels/slack/assistant.js +37 -47
  73. package/dist/channels/slack/attachments.js +188 -206
  74. package/dist/channels/slack/auth.js +8 -6
  75. package/dist/channels/slack/bot-mentions.js +31 -45
  76. package/dist/channels/slack/channel-watch.js +42 -48
  77. package/dist/channels/slack/cli-project.js +112 -137
  78. package/dist/channels/slack/code-fences.js +3 -5
  79. package/dist/channels/slack/constants.js +2 -2
  80. package/dist/channels/slack/credentials.js +23 -38
  81. package/dist/channels/slack/defaults.js +292 -331
  82. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  83. package/dist/channels/slack/dispatch.js +533 -460
  84. package/dist/channels/slack/doctor.js +200 -214
  85. package/dist/channels/slack/eval-directive.js +79 -96
  86. package/dist/channels/slack/event-id-dedupe.js +1 -1
  87. package/dist/channels/slack/external-policy.js +26 -39
  88. package/dist/channels/slack/footer.js +28 -41
  89. package/dist/channels/slack/inbound.d.ts +1 -0
  90. package/dist/channels/slack/inbound.d.ts.map +1 -1
  91. package/dist/channels/slack/inbound.js +50 -31
  92. package/dist/channels/slack/init.d.ts +1 -5
  93. package/dist/channels/slack/init.d.ts.map +1 -1
  94. package/dist/channels/slack/init.js +42 -59
  95. package/dist/channels/slack/interactive.d.ts +9 -3
  96. package/dist/channels/slack/interactive.d.ts.map +1 -1
  97. package/dist/channels/slack/interactive.js +160 -162
  98. package/dist/channels/slack/links.js +1 -2
  99. package/dist/channels/slack/live-delivery.js +172 -190
  100. package/dist/channels/slack/manifest.d.ts.map +1 -1
  101. package/dist/channels/slack/manifest.js +44 -23
  102. package/dist/channels/slack/message-body.js +2 -2
  103. package/dist/channels/slack/nudge-carrier.js +30 -42
  104. package/dist/channels/slack/nudge-store.js +164 -191
  105. package/dist/channels/slack/paint-start.js +66 -81
  106. package/dist/channels/slack/placeholder.js +123 -152
  107. package/dist/channels/slack/pr-ref.js +1 -1
  108. package/dist/channels/slack/progress-delivery.js +65 -78
  109. package/dist/channels/slack/reasoning-card.js +36 -49
  110. package/dist/channels/slack/recording-sink.js +12 -24
  111. package/dist/channels/slack/reply-options.js +7 -12
  112. package/dist/channels/slack/self-identity.js +27 -35
  113. package/dist/channels/slack/sender-name.d.ts +12 -3
  114. package/dist/channels/slack/sender-name.d.ts.map +1 -1
  115. package/dist/channels/slack/sender-name.js +57 -61
  116. package/dist/channels/slack/setup.js +2 -4
  117. package/dist/channels/slack/slack-channel.d.ts +6 -4
  118. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  119. package/dist/channels/slack/slack-channel.js +441 -308
  120. package/dist/channels/slack/socket-mode.js +38 -52
  121. package/dist/channels/slack/thread-context.js +143 -160
  122. package/dist/channels/slack/tool-approval-events.js +149 -166
  123. package/dist/channels/slack/tool-cards.js +6 -11
  124. package/dist/channels/slack/tool-chip.js +1 -2
  125. package/dist/channels/slack/types.d.ts +15 -17
  126. package/dist/channels/slack/types.d.ts.map +1 -1
  127. package/dist/channels/slack/upload.js +84 -97
  128. package/dist/channels/slack/user-info.js +27 -41
  129. package/dist/channels.js +9 -20
  130. package/dist/dashboard-session-url.js +3 -4
  131. package/dist/docs/404.html +2 -2
  132. package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
  133. package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
  134. package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
  135. package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
  136. package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
  137. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
  138. package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
  139. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
  140. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
  141. package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
  142. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
  143. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
  144. package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
  145. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
  146. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
  147. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
  148. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
  149. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
  150. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
  151. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
  152. package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
  153. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
  154. package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
  155. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
  156. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
  157. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
  158. package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
  159. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
  160. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
  161. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
  162. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
  163. package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
  164. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
  165. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
  166. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
  167. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
  168. package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
  169. package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
  170. package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
  171. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
  172. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
  173. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
  174. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
  175. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
  176. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
  177. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
  178. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
  179. package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
  180. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
  181. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
  182. package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
  183. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
  184. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
  185. package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
  186. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
  187. package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
  188. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
  189. package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
  190. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
  191. package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
  192. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
  193. package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
  194. package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
  195. package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
  196. package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
  197. package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
  198. package/dist/docs/building-with-agents.html +37 -37
  199. package/dist/docs/building-with-agents.md +2 -0
  200. package/dist/docs/deployment.html +38 -38
  201. package/dist/docs/deployment.md +7 -0
  202. package/dist/docs/evals.html +36 -36
  203. package/dist/docs/guides/agent-to-agent.html +35 -35
  204. package/dist/docs/guides/bitbucket.html +38 -38
  205. package/dist/docs/guides/bitbucket.md +9 -1
  206. package/dist/docs/guides/cloud-agents.html +35 -35
  207. package/dist/docs/guides/convert-automation.html +35 -35
  208. package/dist/docs/guides/github.html +39 -39
  209. package/dist/docs/guides/github.md +20 -4
  210. package/dist/docs/guides/gitlab.html +38 -38
  211. package/dist/docs/guides/gitlab.md +9 -1
  212. package/dist/docs/guides/grokbot-agents.html +35 -35
  213. package/dist/docs/guides/hooks.html +35 -35
  214. package/dist/docs/guides/improve.html +35 -35
  215. package/dist/docs/guides/jev.html +35 -35
  216. package/dist/docs/guides/mcp-oauth.html +35 -35
  217. package/dist/docs/guides/migrate.html +66 -0
  218. package/dist/docs/guides/migrate.md +122 -0
  219. package/dist/docs/guides/opentelemetry.html +35 -35
  220. package/dist/docs/guides/slack.html +35 -35
  221. package/dist/docs/guides/webhooks.html +35 -35
  222. package/dist/docs/hashmap.json +1 -1
  223. package/dist/docs/hillclimbing.html +35 -35
  224. package/dist/docs/index.html +35 -35
  225. package/dist/docs/llms-full.txt +214 -6
  226. package/dist/docs/llms.txt +1 -0
  227. package/dist/docs/quickstart.html +35 -35
  228. package/dist/docs/reference/agent-config.html +35 -35
  229. package/dist/docs/reference/artifacts.html +35 -35
  230. package/dist/docs/reference/channels.html +35 -35
  231. package/dist/docs/reference/cli.html +39 -38
  232. package/dist/docs/reference/cli.md +39 -0
  233. package/dist/docs/reference/connections.html +35 -35
  234. package/dist/docs/reference/evals.html +35 -35
  235. package/dist/docs/reference/extensions.html +35 -35
  236. package/dist/docs/reference/hooks.html +35 -35
  237. package/dist/docs/reference/http-api.html +35 -35
  238. package/dist/docs/reference/instructions.html +35 -35
  239. package/dist/docs/reference/playground.html +35 -35
  240. package/dist/docs/reference/project-layout.html +35 -35
  241. package/dist/docs/reference/prompt.html +35 -35
  242. package/dist/docs/reference/schedules.html +35 -35
  243. package/dist/docs/reference/sessions.html +35 -35
  244. package/dist/docs/reference/skills.html +35 -35
  245. package/dist/docs/reference/subagents.html +35 -35
  246. package/dist/docs/reference/tools.html +35 -35
  247. package/dist/docs/templates/agentic-owners.html +35 -35
  248. package/dist/docs/templates/grokbot-agents.html +35 -35
  249. package/dist/docs/templates/security-reviewer.html +35 -35
  250. package/dist/docs/templates/thermo-quality-review.html +35 -35
  251. package/dist/docs/templates/thermo-review.html +35 -35
  252. package/dist/docs/templates/triage.html +35 -35
  253. package/dist/docs/troubleshooting.html +36 -36
  254. package/dist/docs/troubleshooting.md +1 -0
  255. package/dist/evals/assertions.js +20 -34
  256. package/dist/evals/expect.js +3 -6
  257. package/dist/evals/judge.js +5 -8
  258. package/dist/evals/loaders.js +45 -62
  259. package/dist/evals/matchers.js +2 -3
  260. package/dist/evals/reporters.js +43 -67
  261. package/dist/evals/results.js +1 -1
  262. package/dist/evals/run-facts.js +5 -6
  263. package/dist/evals.js +27 -15
  264. package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
  265. package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
  266. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
  267. package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
  268. package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
  269. package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
  270. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
  271. package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
  272. package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
  273. package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
  274. package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
  275. package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
  276. package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
  277. package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
  278. package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
  279. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
  280. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
  281. package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
  282. package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
  283. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
  284. package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
  285. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
  286. package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
  287. package/dist/extensions/jev/extension.js +3 -3
  288. package/dist/extensions/jev/lib/evaluate.js +43 -60
  289. package/dist/extensions/jev/tools/evaluate.js +6 -17
  290. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  291. package/dist/extensions.js +3 -5
  292. package/dist/files-backends/cursor-hosted.js +504 -523
  293. package/dist/files-backends/local-fs.js +72 -134
  294. package/dist/files.js +3 -3
  295. package/dist/filesystem.js +562 -861
  296. package/dist/index.js +16 -35
  297. package/dist/internal/advertise-tools.js +74 -86
  298. package/dist/internal/artifacts-store.js +298 -361
  299. package/dist/internal/as-of.js +2 -4
  300. package/dist/internal/authored-alias-hooks.js +6 -4
  301. package/dist/internal/authored-loaders.js +37 -52
  302. package/dist/internal/bounded-int.js +1 -2
  303. package/dist/internal/bounded.js +13 -24
  304. package/dist/internal/brand.js +1 -1
  305. package/dist/internal/browser-origin-guard.js +4 -4
  306. package/dist/internal/builtin-tools/artifacts.js +15 -27
  307. package/dist/internal/builtin-tools/index.js +2 -3
  308. package/dist/internal/builtin-tools/reminders.js +33 -52
  309. package/dist/internal/channel-architecture.d.ts +21 -0
  310. package/dist/internal/channel-architecture.d.ts.map +1 -0
  311. package/dist/internal/channel-architecture.js +41 -0
  312. package/dist/internal/channel-dispatch.js +3 -4
  313. package/dist/internal/channel-route-dispatch.js +40 -51
  314. package/dist/internal/channel-state.js +1 -1
  315. package/dist/internal/chat-client.js +319 -340
  316. package/dist/internal/cli-ax.js +1262 -1294
  317. package/dist/internal/cli-bitbucket.js +244 -272
  318. package/dist/internal/cli-convert-automation.js +137 -151
  319. package/dist/internal/cli-cursor.js +126 -147
  320. package/dist/internal/cli-deploy.d.ts.map +1 -1
  321. package/dist/internal/cli-deploy.js +1457 -1507
  322. package/dist/internal/cli-docs.js +130 -147
  323. package/dist/internal/cli-github.js +437 -476
  324. package/dist/internal/cli-gitlab.js +259 -288
  325. package/dist/internal/cli-images.js +266 -334
  326. package/dist/internal/cli-manifest.js +25 -37
  327. package/dist/internal/cli-mcp-oauth.js +228 -247
  328. package/dist/internal/cli-mcp.js +358 -383
  329. package/dist/internal/cli-migrate.js +73 -90
  330. package/dist/internal/cli-skills.js +35 -47
  331. package/dist/internal/cli-slack-manual.d.ts +0 -1
  332. package/dist/internal/cli-slack-manual.d.ts.map +1 -1
  333. package/dist/internal/cli-slack-manual.js +175 -204
  334. package/dist/internal/cli-slack.d.ts +1 -1
  335. package/dist/internal/cli-slack.d.ts.map +1 -1
  336. package/dist/internal/cli-slack.js +416 -456
  337. package/dist/internal/cloud-merge.js +7 -3
  338. package/dist/internal/cloud-turn-cost.js +8 -1
  339. package/dist/internal/connection-env.js +5 -6
  340. package/dist/internal/continuation-channel.js +10 -7
  341. package/dist/internal/continuation-identity.js +85 -67
  342. package/dist/internal/conversation-mirror.js +112 -131
  343. package/dist/internal/convert-automation/convert-workflow.js +21 -31
  344. package/dist/internal/cron.js +3 -3
  345. package/dist/internal/cursor/account-mcp.js +147 -146
  346. package/dist/internal/cursor/backend-client.js +290 -320
  347. package/dist/internal/cursor/bound-secret-file.js +3 -3
  348. package/dist/internal/cursor/credentials.js +127 -142
  349. package/dist/internal/cursor/cursor-api-transport.js +4 -8
  350. package/dist/internal/cursor/github-credentials.js +91 -108
  351. package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
  352. package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
  353. package/dist/internal/cursor/hosted-store-secrets.js +5 -9
  354. package/dist/internal/cursor/session-token.js +36 -48
  355. package/dist/internal/cursor/store-api-client.js +77 -92
  356. package/dist/internal/cursor-account-mcp-auth.js +132 -149
  357. package/dist/internal/cursor-agent-template.js +1 -1
  358. package/dist/internal/cursor-deployment-relay.js +33 -54
  359. package/dist/internal/cursor-event-relay.js +65 -59
  360. package/dist/internal/cursor-relay-core.js +258 -286
  361. package/dist/internal/deferred-channel-session.js +3 -12
  362. package/dist/internal/deploy-client.d.ts.map +1 -1
  363. package/dist/internal/deploy-client.js +413 -475
  364. package/dist/internal/deploy-manifest.d.ts +17 -0
  365. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  366. package/dist/internal/deploy-manifest.js +71 -21
  367. package/dist/internal/deploy-source.js +31 -43
  368. package/dist/internal/discovery/agent-config.js +45 -59
  369. package/dist/internal/discovery/agent.js +276 -280
  370. package/dist/internal/discovery/channels.js +67 -80
  371. package/dist/internal/discovery/connections.js +286 -296
  372. package/dist/internal/discovery/context.js +2 -13
  373. package/dist/internal/discovery/cursor-plugin.js +223 -259
  374. package/dist/internal/discovery/extension-overlay.js +104 -131
  375. package/dist/internal/discovery/extensions.js +276 -281
  376. package/dist/internal/discovery/fs.js +56 -79
  377. package/dist/internal/discovery/hooks.js +39 -50
  378. package/dist/internal/discovery/info.js +17 -19
  379. package/dist/internal/discovery/instructions.js +58 -71
  380. package/dist/internal/discovery/modules.js +45 -58
  381. package/dist/internal/discovery/project.d.ts.map +1 -1
  382. package/dist/internal/discovery/project.js +192 -215
  383. package/dist/internal/discovery/reminders.js +41 -52
  384. package/dist/internal/discovery/runtime.js +1 -1
  385. package/dist/internal/discovery/schedules.js +71 -82
  386. package/dist/internal/discovery/seed-files.js +21 -32
  387. package/dist/internal/discovery/services.js +74 -96
  388. package/dist/internal/discovery/skills.js +77 -94
  389. package/dist/internal/discovery/subagent.js +79 -95
  390. package/dist/internal/discovery/tools.js +12 -23
  391. package/dist/internal/distribution.js +2 -2
  392. package/dist/internal/docs-site.js +30 -45
  393. package/dist/internal/duration.js +1 -1
  394. package/dist/internal/env-file.js +48 -64
  395. package/dist/internal/eval-judge-model.js +17 -28
  396. package/dist/internal/eval-run-store.js +265 -254
  397. package/dist/internal/eval-runner.d.ts +8 -0
  398. package/dist/internal/eval-runner.d.ts.map +1 -1
  399. package/dist/internal/eval-runner.js +406 -408
  400. package/dist/internal/eval-transport.d.ts +24 -0
  401. package/dist/internal/eval-transport.d.ts.map +1 -0
  402. package/dist/internal/eval-transport.js +22 -0
  403. package/dist/internal/evals-client.js +242 -246
  404. package/dist/internal/event-log.js +72 -120
  405. package/dist/internal/event-mapper.js +30 -31
  406. package/dist/internal/factory-resource-channel.js +16 -30
  407. package/dist/internal/filesystem/errors.js +6 -6
  408. package/dist/internal/filesystem/format.js +10 -13
  409. package/dist/internal/filesystem/merge.js +52 -94
  410. package/dist/internal/filesystem/nearest.js +15 -27
  411. package/dist/internal/filesystem/scratch.js +65 -85
  412. package/dist/internal/filesystem/tools.js +221 -241
  413. package/dist/internal/filesystem/walk.js +76 -143
  414. package/dist/internal/framework-file-storage.js +118 -139
  415. package/dist/internal/framework-storage-selection.js +21 -13
  416. package/dist/internal/frontmatter.js +4 -6
  417. package/dist/internal/github-fanout.js +50 -64
  418. package/dist/internal/guest-network.js +96 -109
  419. package/dist/internal/handleAgentServeTrigger.js +121 -126
  420. package/dist/internal/host-files.js +73 -88
  421. package/dist/internal/host-kv.js +21 -36
  422. package/dist/internal/host-otel.js +22 -19
  423. package/dist/internal/host-platforms.js +49 -63
  424. package/dist/internal/hosted-catch-protocol.d.ts +1 -0
  425. package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
  426. package/dist/internal/hosted-catch-protocol.js +1 -0
  427. package/dist/internal/hosted-catch.d.ts +5 -3
  428. package/dist/internal/hosted-catch.d.ts.map +1 -1
  429. package/dist/internal/hosted-catch.js +84 -93
  430. package/dist/internal/hosted-delivery-protocol.js +32 -8
  431. package/dist/internal/hosted-delivery.d.ts +13 -1
  432. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  433. package/dist/internal/hosted-delivery.js +614 -584
  434. package/dist/internal/hosted-eval-cases.d.ts +21 -0
  435. package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
  436. package/dist/internal/hosted-eval-cases.js +162 -0
  437. package/dist/internal/hosted-execution-diag.js +38 -30
  438. package/dist/internal/hosted-execution-flush.js +75 -66
  439. package/dist/internal/hosted-execution-latency.js +16 -8
  440. package/dist/internal/hosted-managed-automation.js +2 -2
  441. package/dist/internal/hosting.js +2 -3
  442. package/dist/internal/http-channel-define.js +4 -1
  443. package/dist/internal/http-channel.js +101 -112
  444. package/dist/internal/http-control-plane-session.d.ts +18 -1
  445. package/dist/internal/http-control-plane-session.d.ts.map +1 -1
  446. package/dist/internal/http-control-plane-session.js +66 -32
  447. package/dist/internal/incoming-headers-to-fetch.js +1 -2
  448. package/dist/internal/init-interview.js +73 -93
  449. package/dist/internal/init-project.js +182 -214
  450. package/dist/internal/init-scaffold.js +10 -21
  451. package/dist/internal/inline-stdio-mcp.js +80 -86
  452. package/dist/internal/install-cursor-skills.js +231 -273
  453. package/dist/internal/legacy-command-guard.js +18 -31
  454. package/dist/internal/listen-port.js +34 -45
  455. package/dist/internal/local-control-plane.js +293 -307
  456. package/dist/internal/local-env.js +1 -1
  457. package/dist/internal/local-ingress.js +15 -9
  458. package/dist/internal/log-ring.js +1 -2
  459. package/dist/internal/logs-client.js +207 -227
  460. package/dist/internal/map-pool.js +24 -38
  461. package/dist/internal/mcp-endpoint.js +204 -180
  462. package/dist/internal/mcp-host.js +165 -168
  463. package/dist/internal/mcp-oauth-on-demand.js +170 -207
  464. package/dist/internal/mcp-oauth-persist.js +15 -29
  465. package/dist/internal/mcp-oauth.js +209 -266
  466. package/dist/internal/named-webhook-secret.d.ts +39 -0
  467. package/dist/internal/named-webhook-secret.d.ts.map +1 -0
  468. package/dist/internal/named-webhook-secret.js +47 -0
  469. package/dist/internal/open-browser.js +2 -3
  470. package/dist/internal/otel/collector.js +104 -68
  471. package/dist/internal/otel/config.js +24 -37
  472. package/dist/internal/otel/http.js +5 -7
  473. package/dist/internal/otel/mcp.js +3 -12
  474. package/dist/internal/otel/runtime.js +69 -83
  475. package/dist/internal/package-inline-stdio.js +57 -65
  476. package/dist/internal/peer-connections.js +9 -5
  477. package/dist/internal/platform-schedule-sync.js +39 -54
  478. package/dist/internal/platform-timers.js +176 -210
  479. package/dist/internal/playground/static.js +1 -2
  480. package/dist/internal/playground/toolchain.js +37 -53
  481. package/dist/internal/playground-proxy.js +230 -270
  482. package/dist/internal/process-memory-telemetry.js +33 -51
  483. package/dist/internal/prompt-context.js +3 -6
  484. package/dist/internal/reminder-control-plane-protocol.js +46 -13
  485. package/dist/internal/reminder-runner.js +770 -785
  486. package/dist/internal/reminder-schedule.js +1 -1
  487. package/dist/internal/reminder-store.js +57 -78
  488. package/dist/internal/request-error-status.js +1 -3
  489. package/dist/internal/request-headers.js +2 -2
  490. package/dist/internal/resolve-prod-target.js +119 -135
  491. package/dist/internal/resolved-connections.js +16 -6
  492. package/dist/internal/run-client.js +221 -229
  493. package/dist/internal/runtime-dispatch-runner.js +18 -43
  494. package/dist/internal/schedule-runner.js +49 -58
  495. package/dist/internal/scm/pr-url.js +7 -6
  496. package/dist/internal/sdk-runner.js +388 -363
  497. package/dist/internal/serve-restart.js +26 -39
  498. package/dist/internal/server.d.ts.map +1 -1
  499. package/dist/internal/server.js +1283 -1244
  500. package/dist/internal/session-cost.js +7 -9
  501. package/dist/internal/session-engine.d.ts +3 -1
  502. package/dist/internal/session-engine.d.ts.map +1 -1
  503. package/dist/internal/session-engine.js +2801 -2777
  504. package/dist/internal/session-links.js +12 -16
  505. package/dist/internal/session-run-log.js +134 -82
  506. package/dist/internal/session-store.js +133 -164
  507. package/dist/internal/sessions-client.js +97 -118
  508. package/dist/internal/skill-catalog.js +18 -23
  509. package/dist/internal/skills-sync.js +16 -30
  510. package/dist/internal/slack-provision-client.js +90 -116
  511. package/dist/internal/start-log-store.js +48 -67
  512. package/dist/internal/steering.js +1 -2
  513. package/dist/internal/storage-coordinator.js +160 -196
  514. package/dist/internal/store-mirror.js +16 -30
  515. package/dist/internal/stream-progress.js +6 -8
  516. package/dist/internal/terminal-style.js +3 -4
  517. package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
  518. package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
  519. package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
  520. package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
  521. package/dist/internal/tool-catalog.js +11 -5
  522. package/dist/internal/tool-result.js +1 -1
  523. package/dist/internal/trajectory.js +19 -22
  524. package/dist/internal/turn-cost.js +52 -62
  525. package/dist/internal/turn-governor.js +5 -8
  526. package/dist/internal/turn-lease-store.js +85 -105
  527. package/dist/internal/turn-outbox.js +28 -43
  528. package/dist/internal/update-check.js +231 -259
  529. package/dist/internal/v2-hosting.js +1 -2
  530. package/dist/internal/workspace-sync.js +25 -41
  531. package/dist/internal/workspace.js +111 -139
  532. package/dist/kv/memory-kv.js +27 -51
  533. package/dist/memory.js +106 -148
  534. package/dist/otel.js +5 -8
  535. package/dist/playground/assets/{index-Co4CUVTQ.js → index-Be0-1hw2.js} +45 -45
  536. package/dist/playground/assets/index-Clz6uHj9.css +1 -0
  537. package/dist/playground/index.html +2 -2
  538. package/dist/prompt.js +2 -4
  539. package/dist/storage-backends/cursor-hosted-v2.js +53 -83
  540. package/dist/storage-backends/cursor-hosted.js +105 -145
  541. package/dist/storage-backends/file-kv.js +100 -128
  542. package/dist/storage-protocol.js +3 -5
  543. package/dist/storage.js +17 -26
  544. package/dist/types.d.ts +68 -0
  545. package/dist/types.d.ts.map +1 -1
  546. package/dist/types.js +20 -18
  547. package/docs/building-with-agents.md +2 -0
  548. package/docs/deployment.md +7 -0
  549. package/docs/guides/bitbucket.md +9 -1
  550. package/docs/guides/github.md +20 -4
  551. package/docs/guides/gitlab.md +9 -1
  552. package/docs/guides/migrate.md +127 -0
  553. package/docs/reference/cli.md +39 -0
  554. package/docs/troubleshooting.md +1 -0
  555. package/package.json +1 -1
  556. package/skills/debug/SKILL.md +1 -0
  557. package/skills/github/SKILL.md +23 -0
  558. package/skills/migrate-v2/SKILL.md +51 -10
  559. package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
  560. package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
  561. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
  562. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
  563. package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
  564. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
  565. package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
  566. package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
  567. package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
  568. /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
  569. /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
@@ -7,33 +7,24 @@
7
7
  * as data or closures on a {@link RelayAdapter}, so this engine is written
8
8
  * once and tested through each provider's relay.
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 { mkdir, readFile, rename, writeFile } from "node:fs/promises";
21
12
  import { join } from "node:path";
22
13
  import { LOG_PREFIX } from "./distribution.js";
23
14
  const OFFSET_SNAPSHOT_VERSION = 1;
24
- const DEFAULT_POLL_WAIT_MS = 25000;
15
+ const DEFAULT_POLL_WAIT_MS = 25_000;
25
16
  const DEFAULT_POLL_LIMIT = 100;
26
17
  const DEFAULT_REGISTER_INTERVAL_MS = 5 * 60 * 1000;
27
18
  const CONSUMER_ID_PATTERN = /^[a-zA-Z0-9_-]{1,64}$/;
28
19
  const DEFAULT_IDLE_POLL_DELAY_MS = 250;
29
- const MIN_BACKOFF_MS = 1000;
30
- const MAX_BACKOFF_MS = 30000;
31
- const AUTH_FAILURE_BACKOFF_MS = 60000;
20
+ const MIN_BACKOFF_MS = 1_000;
21
+ const MAX_BACKOFF_MS = 30_000;
22
+ const AUTH_FAILURE_BACKOFF_MS = 60_000;
32
23
  /** Attempts per event before the offset advances past it. */
33
24
  const DISPATCH_ATTEMPTS = 3;
34
- const DISPATCH_RETRY_DELAYS_MS = [250, 1000];
25
+ const DISPATCH_RETRY_DELAYS_MS = [250, 1_000];
35
26
  /** Budget for the best-effort deregistration PUT during stop(). */
36
- const DEREGISTER_TIMEOUT_MS = 1500;
27
+ const DEREGISTER_TIMEOUT_MS = 1_500;
37
28
  /** Durable offset snapshot under `<stateDir>/offset.json`. */
38
29
  export class RelayOffsetStore {
39
30
  constructor(stateDir) {
@@ -42,34 +33,30 @@ export class RelayOffsetStore {
42
33
  get filePath() {
43
34
  return join(this.stateDir, "offset.json");
44
35
  }
45
- load() {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- try {
48
- const raw = yield readFile(this.filePath, "utf8");
49
- const parsed = JSON.parse(raw);
50
- if (parsed.version === OFFSET_SNAPSHOT_VERSION && typeof parsed.offset === "string") {
51
- return parsed.offset;
52
- }
53
- return undefined;
36
+ async load() {
37
+ try {
38
+ const raw = await readFile(this.filePath, "utf8");
39
+ const parsed = JSON.parse(raw);
40
+ if (parsed.version === OFFSET_SNAPSHOT_VERSION && typeof parsed.offset === "string") {
41
+ return parsed.offset;
54
42
  }
55
- catch (_a) {
56
- return undefined;
57
- }
58
- });
43
+ return undefined;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
59
48
  }
60
- save(offset) {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- yield mkdir(this.stateDir, { recursive: true });
63
- const snapshot = {
64
- version: OFFSET_SNAPSHOT_VERSION,
65
- offset,
66
- updatedAt: new Date().toISOString(),
67
- };
68
- // Write-then-rename so a crash mid-write never corrupts the snapshot.
69
- const tmpPath = `${this.filePath}.tmp`;
70
- yield writeFile(tmpPath, JSON.stringify(snapshot, null, 2), "utf8");
71
- yield rename(tmpPath, this.filePath);
72
- });
49
+ async save(offset) {
50
+ await mkdir(this.stateDir, { recursive: true });
51
+ const snapshot = {
52
+ version: OFFSET_SNAPSHOT_VERSION,
53
+ offset,
54
+ updatedAt: new Date().toISOString(),
55
+ };
56
+ // Write-then-rename so a crash mid-write never corrupts the snapshot.
57
+ const tmpPath = `${this.filePath}.tmp`;
58
+ await writeFile(tmpPath, JSON.stringify(snapshot, null, 2), "utf8");
59
+ await rename(tmpPath, this.filePath);
73
60
  }
74
61
  }
75
62
  /** Compare stream offsets (`<ms>-<seq>`). */
@@ -96,11 +83,10 @@ export const AGENT_SERVE_GENERATION_HEADER = "x-agent-serve-generation";
96
83
  /** Must match server-shared `AGENT_SERVE_GENERATION_ENV_VAR`. */
97
84
  export const AGENT_SERVE_GENERATION_ENV_VAR = "AGENT_SERVE_GENERATION";
98
85
  export function resolveAgentServeDeploymentGeneration(explicit) {
99
- var _a;
100
86
  if (explicit !== undefined && Number.isSafeInteger(explicit) && explicit > 0) {
101
87
  return explicit;
102
88
  }
103
- const raw = (_a = process.env[AGENT_SERVE_GENERATION_ENV_VAR]) === null || _a === void 0 ? void 0 : _a.trim();
89
+ const raw = process.env[AGENT_SERVE_GENERATION_ENV_VAR]?.trim();
104
90
  if (raw === undefined || raw.length === 0) {
105
91
  return undefined;
106
92
  }
@@ -115,14 +101,13 @@ export function resolveAgentServeDeploymentGeneration(explicit) {
115
101
  }
116
102
  export class CursorRelayCore {
117
103
  constructor(options) {
118
- var _a;
119
104
  this.options = options;
120
105
  this.running = false;
121
106
  this.consumerId = "";
122
107
  /** Whether any registration succeeded (gates the stop-time deregister). */
123
108
  this.registeredOnce = false;
124
109
  this.offsetStore = new RelayOffsetStore(options.stateDir);
125
- this.fetchImpl = (_a = options.fetchImpl) !== null && _a !== void 0 ? _a : fetch;
110
+ this.fetchImpl = options.fetchImpl ?? fetch;
126
111
  this.deploymentGeneration = resolveAgentServeDeploymentGeneration(options.deploymentGeneration);
127
112
  }
128
113
  start() {
@@ -137,19 +122,16 @@ export class CursorRelayCore {
137
122
  * registration succeeded — anchoring "now" while unsubscribed would
138
123
  * silently miss every delivery in between.
139
124
  */
140
- run() {
141
- return __awaiter(this, void 0, void 0, function* () {
142
- var _a, _b;
143
- yield this.resolveConsumerId();
144
- const registered = yield this.registerUntilSuccess();
145
- if (!registered)
146
- return;
147
- this.registerTimer = setInterval(() => {
148
- this.heartbeatPromise = this.registerOnce();
149
- }, DEFAULT_REGISTER_INTERVAL_MS);
150
- (_b = (_a = this.registerTimer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
151
- yield this.consumeLoop();
152
- });
125
+ async run() {
126
+ await this.resolveConsumerId();
127
+ const registered = await this.registerUntilSuccess();
128
+ if (!registered)
129
+ return;
130
+ this.registerTimer = setInterval(() => {
131
+ this.heartbeatPromise = this.registerOnce();
132
+ }, DEFAULT_REGISTER_INTERVAL_MS);
133
+ this.registerTimer.unref?.();
134
+ await this.consumeLoop();
153
135
  }
154
136
  /**
155
137
  * Durable consumer identity for this state root (memoized), so this host's
@@ -157,63 +139,57 @@ export class CursorRelayCore {
157
139
  * survive restarts. Public so callers can bind transports with it before
158
140
  * `start()` (the Slack relay proxies outbound calls under this id).
159
141
  */
160
- resolveConsumerId() {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- if (this.consumerId !== "") {
163
- return this.consumerId;
164
- }
165
- const filePath = join(this.options.stateDir, "consumer-id");
166
- try {
167
- const existing = (yield readFile(filePath, "utf8")).trim();
168
- if (CONSUMER_ID_PATTERN.test(existing)) {
169
- this.consumerId = existing;
170
- return existing;
171
- }
172
- }
173
- catch (_a) {
174
- // Missing or unreadable: mint below.
175
- }
176
- const minted = randomUUID();
177
- try {
178
- yield mkdir(this.options.stateDir, { recursive: true });
179
- const tmpPath = `${filePath}.tmp`;
180
- yield writeFile(tmpPath, `${minted}\n`, "utf8");
181
- yield rename(tmpPath, filePath);
182
- }
183
- catch (error) {
184
- this.log(`could not persist consumer id (${describeRelayError(error)}); using an ephemeral one for this run`);
142
+ async resolveConsumerId() {
143
+ if (this.consumerId !== "") {
144
+ return this.consumerId;
145
+ }
146
+ const filePath = join(this.options.stateDir, "consumer-id");
147
+ try {
148
+ const existing = (await readFile(filePath, "utf8")).trim();
149
+ if (CONSUMER_ID_PATTERN.test(existing)) {
150
+ this.consumerId = existing;
151
+ return existing;
185
152
  }
186
- this.consumerId = minted;
187
- return minted;
188
- });
153
+ }
154
+ catch {
155
+ // Missing or unreadable: mint below.
156
+ }
157
+ const minted = randomUUID();
158
+ try {
159
+ await mkdir(this.options.stateDir, { recursive: true });
160
+ const tmpPath = `${filePath}.tmp`;
161
+ await writeFile(tmpPath, `${minted}\n`, "utf8");
162
+ await rename(tmpPath, filePath);
163
+ }
164
+ catch (error) {
165
+ this.log(`could not persist consumer id (${describeRelayError(error)}); using an ephemeral one for this run`);
166
+ }
167
+ this.consumerId = minted;
168
+ return minted;
189
169
  }
190
- stop() {
191
- return __awaiter(this, void 0, void 0, function* () {
192
- var _a, _b, _c;
193
- if (!this.running)
194
- return;
195
- this.running = false;
196
- if (this.registerTimer !== undefined) {
197
- clearInterval(this.registerTimer);
198
- this.registerTimer = undefined;
199
- }
200
- (_a = this.abort) === null || _a === void 0 ? void 0 : _a.abort();
201
- // Bounded wait: server close must never hang on a poll that ignores the
202
- // abort (offsets are saved as events are processed, so cutting the loop
203
- // loose loses nothing).
204
- yield Promise.race([
205
- (_b = this.consumePromise) === null || _b === void 0 ? void 0 : _b.catch(() => { }),
206
- new Promise(resolve => {
207
- var _a;
208
- const timer = setTimeout(resolve, 2000);
209
- (_a = timer.unref) === null || _a === void 0 ? void 0 : _a.call(timer);
210
- }),
211
- ]);
212
- // A heartbeat re-registration may be in flight (its fetch was just
213
- // aborted); let it settle so it cannot land after the deregistration.
214
- yield (_c = this.heartbeatPromise) === null || _c === void 0 ? void 0 : _c.catch(() => { });
215
- yield this.deregister();
216
- });
170
+ async stop() {
171
+ if (!this.running)
172
+ return;
173
+ this.running = false;
174
+ if (this.registerTimer !== undefined) {
175
+ clearInterval(this.registerTimer);
176
+ this.registerTimer = undefined;
177
+ }
178
+ this.abort?.abort();
179
+ // Bounded wait: server close must never hang on a poll that ignores the
180
+ // abort (offsets are saved as events are processed, so cutting the loop
181
+ // loose loses nothing).
182
+ await Promise.race([
183
+ this.consumePromise?.catch(() => { }),
184
+ new Promise(resolve => {
185
+ const timer = setTimeout(resolve, 2_000);
186
+ timer.unref?.();
187
+ }),
188
+ ]);
189
+ // A heartbeat re-registration may be in flight (its fetch was just
190
+ // aborted); let it settle so it cannot land after the deregistration.
191
+ await this.heartbeatPromise?.catch(() => { });
192
+ await this.deregister();
217
193
  }
218
194
  /**
219
195
  * Best-effort empty-scope PUT on clean stop, so this consumer's
@@ -222,102 +198,106 @@ export class CursorRelayCore {
222
198
  * live and makes name routing ambiguous for a redeployed sibling with a
223
199
  * fresh consumer id. Failures only log — the TTL still cleans up.
224
200
  */
225
- deregister() {
226
- return __awaiter(this, void 0, void 0, function* () {
227
- var _a;
228
- const adapter = this.options.adapter;
229
- if (adapter.buildDeregistrationBody === undefined ||
230
- !this.registeredOnce ||
231
- this.consumerId === "") {
232
- return;
233
- }
234
- const url = `${this.options.baseUrl.replace(/\/+$/, "")}${adapter.subscribePath}`;
235
- const controller = new AbortController();
236
- const timer = setTimeout(() => controller.abort(), DEREGISTER_TIMEOUT_MS);
237
- (_a = timer.unref) === null || _a === void 0 ? void 0 : _a.call(timer);
238
- try {
239
- const response = yield this.fetchImpl(url, {
240
- method: "PUT",
241
- headers: Object.assign({ authorization: `Bearer ${this.options.apiKey}`, "content-type": "application/json" }, (this.deploymentGeneration === undefined
201
+ async deregister() {
202
+ const adapter = this.options.adapter;
203
+ if (adapter.buildDeregistrationBody === undefined ||
204
+ !this.registeredOnce ||
205
+ this.consumerId === "") {
206
+ return;
207
+ }
208
+ const url = `${this.options.baseUrl.replace(/\/+$/, "")}${adapter.subscribePath}`;
209
+ const controller = new AbortController();
210
+ const timer = setTimeout(() => controller.abort(), DEREGISTER_TIMEOUT_MS);
211
+ timer.unref?.();
212
+ try {
213
+ const response = await this.fetchImpl(url, {
214
+ method: "PUT",
215
+ headers: {
216
+ authorization: `Bearer ${this.options.apiKey}`,
217
+ "content-type": "application/json",
218
+ ...(this.deploymentGeneration === undefined
242
219
  ? {}
243
220
  : {
244
221
  [AGENT_SERVE_GENERATION_HEADER]: String(this.deploymentGeneration),
245
- })),
246
- body: JSON.stringify(adapter.buildDeregistrationBody(this.consumerId)),
247
- signal: controller.signal,
248
- });
249
- if (response.ok) {
250
- this.log("deregistered on shutdown");
251
- }
252
- else {
253
- this.log(`deregistration failed: ${response.status} (registration lapses by TTL)`);
254
- }
255
- }
256
- catch (error) {
257
- this.log(`deregistration failed: ${describeRelayError(error)} (registration lapses by TTL)`);
222
+ }),
223
+ },
224
+ body: JSON.stringify(adapter.buildDeregistrationBody(this.consumerId)),
225
+ signal: controller.signal,
226
+ });
227
+ if (response.ok) {
228
+ this.log("deregistered on shutdown");
258
229
  }
259
- finally {
260
- clearTimeout(timer);
230
+ else {
231
+ this.log(`deregistration failed: ${response.status} (registration lapses by TTL)`);
261
232
  }
262
- });
233
+ }
234
+ catch (error) {
235
+ this.log(`deregistration failed: ${describeRelayError(error)} (registration lapses by TTL)`);
236
+ }
237
+ finally {
238
+ clearTimeout(timer);
239
+ }
263
240
  }
264
241
  log(line) {
265
242
  this.options.logger(`${LOG_PREFIX} ${this.options.adapter.logPrefix}: ${line}`);
266
243
  }
267
- request(method, path, body) {
268
- return __awaiter(this, void 0, void 0, function* () {
269
- const url = `${this.options.baseUrl.replace(/\/+$/, "")}${path}`;
270
- return this.fetchImpl(url, Object.assign(Object.assign({ method, headers: Object.assign(Object.assign({ authorization: `Bearer ${this.options.apiKey}` }, (body === undefined ? {} : { "content-type": "application/json" })), (this.deploymentGeneration === undefined
244
+ async request(method, path, body) {
245
+ const url = `${this.options.baseUrl.replace(/\/+$/, "")}${path}`;
246
+ return this.fetchImpl(url, {
247
+ method,
248
+ headers: {
249
+ authorization: `Bearer ${this.options.apiKey}`,
250
+ ...(body === undefined ? {} : { "content-type": "application/json" }),
251
+ ...(this.deploymentGeneration === undefined
271
252
  ? {}
272
253
  : {
273
254
  [AGENT_SERVE_GENERATION_HEADER]: String(this.deploymentGeneration),
274
- })) }, (body === undefined ? {} : { body: JSON.stringify(body) })), (this.abort === undefined ? {} : { signal: this.abort.signal })));
255
+ }),
256
+ },
257
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
258
+ ...(this.abort === undefined ? {} : { signal: this.abort.signal }),
275
259
  });
276
260
  }
277
261
  /** Retry registration with backoff until it succeeds or the relay stops. */
278
- registerUntilSuccess() {
279
- return __awaiter(this, void 0, void 0, function* () {
280
- let backoffMs = MIN_BACKOFF_MS;
281
- while (this.running) {
282
- if (yield this.registerOnce()) {
283
- return true;
284
- }
285
- yield this.sleep(backoffMs);
286
- backoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);
262
+ async registerUntilSuccess() {
263
+ let backoffMs = MIN_BACKOFF_MS;
264
+ while (this.running) {
265
+ if (await this.registerOnce()) {
266
+ return true;
287
267
  }
288
- return false;
289
- });
268
+ await this.sleep(backoffMs);
269
+ backoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);
270
+ }
271
+ return false;
290
272
  }
291
273
  /**
292
274
  * Register (or refresh) via the adapter. Returns true when the server
293
275
  * accepted the registration (individual scopes may still have failed
294
276
  * validation — the adapter logs those).
295
277
  */
296
- registerOnce() {
297
- return __awaiter(this, void 0, void 0, function* () {
298
- if (!this.running)
278
+ async registerOnce() {
279
+ if (!this.running)
280
+ return false;
281
+ try {
282
+ const response = await this.request("PUT", this.options.adapter.subscribePath, this.options.adapter.buildRegistrationBody(this.consumerId));
283
+ if (!response.ok) {
284
+ const text = await response.text().catch(() => "");
285
+ this.logRegistrationOutcome([
286
+ `registration failed: ${response.status} ${text.slice(0, 300)}`,
287
+ ]);
299
288
  return false;
300
- try {
301
- const response = yield this.request("PUT", this.options.adapter.subscribePath, this.options.adapter.buildRegistrationBody(this.consumerId));
302
- if (!response.ok) {
303
- const text = yield response.text().catch(() => "");
304
- this.logRegistrationOutcome([
305
- `registration failed: ${response.status} ${text.slice(0, 300)}`,
306
- ]);
307
- return false;
308
- }
309
- const json = (yield response.json());
310
- this.logRegistrationOutcome(this.options.adapter.applyRegistrationResponse(json));
311
- this.registeredOnce = true;
312
- return true;
313
289
  }
314
- catch (error) {
315
- if (this.isAbort(error))
316
- return false;
317
- this.logRegistrationOutcome([`registration error: ${describeRelayError(error)}`]);
290
+ const json = (await response.json());
291
+ this.logRegistrationOutcome(this.options.adapter.applyRegistrationResponse(json));
292
+ this.registeredOnce = true;
293
+ return true;
294
+ }
295
+ catch (error) {
296
+ if (this.isAbort(error))
318
297
  return false;
319
- }
320
- });
298
+ this.logRegistrationOutcome([`registration error: ${describeRelayError(error)}`]);
299
+ return false;
300
+ }
321
301
  }
322
302
  /** Log registration outcome lines only when they change (heartbeat-quiet). */
323
303
  logRegistrationOutcome(lines) {
@@ -329,80 +309,77 @@ export class CursorRelayCore {
329
309
  this.log(line);
330
310
  }
331
311
  }
332
- consumeLoop() {
333
- return __awaiter(this, void 0, void 0, function* () {
334
- var _a;
335
- let backoffMs = MIN_BACKOFF_MS;
336
- let offset = yield this.offsetStore.load();
337
- let announcedGap = false;
338
- while (this.running) {
339
- try {
340
- if (offset === undefined) {
341
- // First run: anchor at "now" so the agent does not replay (and
342
- // react to) the retained backlog of old events.
343
- const anchorResponse = yield this.request("GET", `${this.options.adapter.pollPath}?after=%24&limit=1`);
344
- if (!anchorResponse.ok) {
345
- backoffMs = yield this.backoffAfterHttpFailure(anchorResponse, backoffMs);
346
- continue;
347
- }
348
- const anchor = (yield anchorResponse.json());
349
- offset = anchor.nextOffset;
350
- yield this.offsetStore.save(offset);
351
- this.log(`anchored at offset "${offset}"`);
352
- backoffMs = MIN_BACKOFF_MS;
353
- continue;
354
- }
355
- const query = new URLSearchParams({
356
- after: offset,
357
- limit: String(DEFAULT_POLL_LIMIT),
358
- waitMs: String((_a = this.options.pollWaitMs) !== null && _a !== void 0 ? _a : DEFAULT_POLL_WAIT_MS),
359
- });
360
- const response = yield this.request("GET", `${this.options.adapter.pollPath}?${query.toString()}`);
361
- if (!response.ok) {
362
- backoffMs = yield this.backoffAfterHttpFailure(response, backoffMs);
312
+ async consumeLoop() {
313
+ let backoffMs = MIN_BACKOFF_MS;
314
+ let offset = await this.offsetStore.load();
315
+ let announcedGap = false;
316
+ while (this.running) {
317
+ try {
318
+ if (offset === undefined) {
319
+ // First run: anchor at "now" so the agent does not replay (and
320
+ // react to) the retained backlog of old events.
321
+ const anchorResponse = await this.request("GET", `${this.options.adapter.pollPath}?after=%24&limit=1`);
322
+ if (!anchorResponse.ok) {
323
+ backoffMs = await this.backoffAfterHttpFailure(anchorResponse, backoffMs);
363
324
  continue;
364
325
  }
365
- const poll = (yield response.json());
326
+ const anchor = (await anchorResponse.json());
327
+ offset = anchor.nextOffset;
328
+ await this.offsetStore.save(offset);
329
+ this.log(`anchored at offset "${offset}"`);
366
330
  backoffMs = MIN_BACKOFF_MS;
367
- if (poll.gapDetected && !announcedGap) {
368
- announcedGap = true;
369
- this.log("gap detected: events may have been trimmed while this host was offline; resuming from the oldest retained event");
370
- }
371
- if (poll.events.length > 0) {
372
- announcedGap = false;
373
- }
374
- for (const event of poll.events) {
375
- if (!this.running)
376
- break;
377
- // At-least-once dedupe: never re-dispatch at or before the last
378
- // processed offset (reads are exclusive-after, so this only fires
379
- // on replay after a crash between dispatch and save).
380
- if (compareStreamOffsets(event.offset, offset) <= 0)
381
- continue;
382
- if (this.options.adapter.shouldDispatch(event)) {
383
- yield this.dispatchWithRetry(event);
384
- }
385
- offset = event.offset;
386
- }
387
- if (poll.nextOffset !== "" && compareStreamOffsets(poll.nextOffset, offset) > 0) {
388
- offset = poll.nextOffset;
389
- }
390
- if (poll.events.length > 0) {
391
- yield this.offsetStore.save(offset);
392
- }
393
- else {
394
- yield this.sleep(DEFAULT_IDLE_POLL_DELAY_MS);
331
+ continue;
332
+ }
333
+ const query = new URLSearchParams({
334
+ after: offset,
335
+ limit: String(DEFAULT_POLL_LIMIT),
336
+ waitMs: String(this.options.pollWaitMs ?? DEFAULT_POLL_WAIT_MS),
337
+ });
338
+ const response = await this.request("GET", `${this.options.adapter.pollPath}?${query.toString()}`);
339
+ if (!response.ok) {
340
+ backoffMs = await this.backoffAfterHttpFailure(response, backoffMs);
341
+ continue;
342
+ }
343
+ const poll = (await response.json());
344
+ backoffMs = MIN_BACKOFF_MS;
345
+ if (poll.gapDetected && !announcedGap) {
346
+ announcedGap = true;
347
+ this.log("gap detected: events may have been trimmed while this host was offline; resuming from the oldest retained event");
348
+ }
349
+ if (poll.events.length > 0) {
350
+ announcedGap = false;
351
+ }
352
+ for (const event of poll.events) {
353
+ if (!this.running)
354
+ break;
355
+ // At-least-once dedupe: never re-dispatch at or before the last
356
+ // processed offset (reads are exclusive-after, so this only fires
357
+ // on replay after a crash between dispatch and save).
358
+ if (compareStreamOffsets(event.offset, offset) <= 0)
359
+ continue;
360
+ if (this.options.adapter.shouldDispatch(event)) {
361
+ await this.dispatchWithRetry(event);
395
362
  }
363
+ offset = event.offset;
396
364
  }
397
- catch (error) {
398
- if (this.isAbort(error))
399
- return;
400
- this.log(`poll error: ${describeRelayError(error)}`);
401
- yield this.sleep(backoffMs);
402
- backoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);
365
+ if (poll.nextOffset !== "" && compareStreamOffsets(poll.nextOffset, offset) > 0) {
366
+ offset = poll.nextOffset;
367
+ }
368
+ if (poll.events.length > 0) {
369
+ await this.offsetStore.save(offset);
370
+ }
371
+ else {
372
+ await this.sleep(DEFAULT_IDLE_POLL_DELAY_MS);
403
373
  }
404
374
  }
405
- });
375
+ catch (error) {
376
+ if (this.isAbort(error))
377
+ return;
378
+ this.log(`poll error: ${describeRelayError(error)}`);
379
+ await this.sleep(backoffMs);
380
+ backoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);
381
+ }
382
+ }
406
383
  }
407
384
  /**
408
385
  * Dispatch one event with a small bounded retry before the offset advances
@@ -411,57 +388,52 @@ export class CursorRelayCore {
411
388
  * only costs {@link DISPATCH_ATTEMPTS} tries and is then skipped, keeping
412
389
  * at-least-once semantics without a retry loop.
413
390
  */
414
- dispatchWithRetry(event) {
415
- return __awaiter(this, void 0, void 0, function* () {
416
- for (let attempt = 1; attempt <= DISPATCH_ATTEMPTS; attempt++) {
417
- if (attempt > 1 && !this.running) {
418
- this.log(`dispatch abandoned at offset ${event.offset}: relay stopping`);
419
- return;
420
- }
421
- try {
422
- yield this.options.adapter.dispatch(event);
391
+ async dispatchWithRetry(event) {
392
+ for (let attempt = 1; attempt <= DISPATCH_ATTEMPTS; attempt++) {
393
+ if (attempt > 1 && !this.running) {
394
+ this.log(`dispatch abandoned at offset ${event.offset}: relay stopping`);
395
+ return;
396
+ }
397
+ try {
398
+ await this.options.adapter.dispatch(event);
399
+ return;
400
+ }
401
+ catch (error) {
402
+ if (attempt === DISPATCH_ATTEMPTS) {
403
+ this.log(`dispatch failed at offset ${event.offset} after ${attempt} attempts: ${describeRelayError(error)}`);
423
404
  return;
424
405
  }
425
- catch (error) {
426
- if (attempt === DISPATCH_ATTEMPTS) {
427
- this.log(`dispatch failed at offset ${event.offset} after ${attempt} attempts: ${describeRelayError(error)}`);
428
- return;
429
- }
430
- this.log(`dispatch attempt ${attempt} failed at offset ${event.offset}: ${describeRelayError(error)}; retrying`);
431
- yield this.sleep(DISPATCH_RETRY_DELAYS_MS[Math.min(attempt - 1, DISPATCH_RETRY_DELAYS_MS.length - 1)]);
432
- }
406
+ this.log(`dispatch attempt ${attempt} failed at offset ${event.offset}: ${describeRelayError(error)}; retrying`);
407
+ await this.sleep(DISPATCH_RETRY_DELAYS_MS[Math.min(attempt - 1, DISPATCH_RETRY_DELAYS_MS.length - 1)]);
433
408
  }
434
- });
409
+ }
435
410
  }
436
411
  /** Log the failure, sleep, and return the backoff for the NEXT failure. */
437
- backoffAfterHttpFailure(response, backoffMs) {
438
- return __awaiter(this, void 0, void 0, function* () {
439
- // 409 = generation fence (stale resident after redeploy). Same long
440
- // backoff as auth: retrying every second cannot heal a wrong generation.
441
- const isAuthOrFenceFailure = response.status === 401 || response.status === 403 || response.status === 409;
442
- const sleepMs = isAuthOrFenceFailure ? AUTH_FAILURE_BACKOFF_MS : backoffMs;
443
- const text = yield response.text().catch(() => "");
444
- this.log(`poll failed: ${response.status} ${text.slice(0, 300)} (retrying in ${Math.round(sleepMs / 1000)}s)`);
445
- yield this.sleep(sleepMs);
446
- return isAuthOrFenceFailure ? AUTH_FAILURE_BACKOFF_MS : Math.min(backoffMs * 2, MAX_BACKOFF_MS);
447
- });
412
+ async backoffAfterHttpFailure(response, backoffMs) {
413
+ // 409 = generation fence (stale resident after redeploy). Same long
414
+ // backoff as auth: retrying every second cannot heal a wrong generation.
415
+ const isAuthOrFenceFailure = response.status === 401 || response.status === 403 || response.status === 409;
416
+ const sleepMs = isAuthOrFenceFailure ? AUTH_FAILURE_BACKOFF_MS : backoffMs;
417
+ const text = await response.text().catch(() => "");
418
+ this.log(`poll failed: ${response.status} ${text.slice(0, 300)} (retrying in ${Math.round(sleepMs / 1000)}s)`);
419
+ await this.sleep(sleepMs);
420
+ return isAuthOrFenceFailure ? AUTH_FAILURE_BACKOFF_MS : Math.min(backoffMs * 2, MAX_BACKOFF_MS);
448
421
  }
449
422
  sleep(ms) {
450
423
  return new Promise(resolve => {
451
- var _a, _b;
452
- const signal = (_a = this.abort) === null || _a === void 0 ? void 0 : _a.signal;
453
- if ((signal === null || signal === void 0 ? void 0 : signal.aborted) === true) {
424
+ const signal = this.abort?.signal;
425
+ if (signal?.aborted === true) {
454
426
  resolve();
455
427
  return;
456
428
  }
457
429
  const finish = () => {
458
430
  clearTimeout(timer);
459
- signal === null || signal === void 0 ? void 0 : signal.removeEventListener("abort", finish);
431
+ signal?.removeEventListener("abort", finish);
460
432
  resolve();
461
433
  };
462
434
  const timer = setTimeout(finish, ms);
463
- (_b = timer.unref) === null || _b === void 0 ? void 0 : _b.call(timer);
464
- signal === null || signal === void 0 ? void 0 : signal.addEventListener("abort", finish, { once: true });
435
+ timer.unref?.();
436
+ signal?.addEventListener("abort", finish, { once: true });
465
437
  });
466
438
  }
467
439
  isAbort(error) {