@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
@@ -1,32 +1,32 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { createHmac, timingSafeEqual } from "node:crypto";
11
2
  import { acknowledgeTask, isTaskDispatch, skipped, turnStarted, } from "../../internal/channel-dispatch.js";
12
3
  import { continuationSource } from "../../internal/continuation-identity.js";
13
4
  import { bindLocalIngressSend } from "../../internal/local-ingress.js";
5
+ import { resolveWebhookSecretValue } from "../../internal/named-webhook-secret.js";
14
6
  import { asNonEmptyString, asPositiveInt, asRecord, bitbucketCommentFromPayload, bitbucketPullRequestFromPayload, bitbucketPullRequestRecord, bitbucketPullRequestUrl, bitbucketPushFromPayload, bitbucketRepositoryFromPayload, bitbucketUser, buildBitbucketBinding, } from "./binding.js";
15
7
  import { defaultBitbucketPullRequestDispatch, defaultBitbucketPullRequestMessage, defaultBitbucketTitle, } from "./defaults.js";
16
8
  import { BITBUCKET_CHANNEL_KIND, BITBUCKET_PULL_REQUEST_EVENTS, normalizeBitbucketEventKey, } from "./events.js";
17
9
  import { bitbucketChannelStateForEvent } from "./state.js";
10
+ /** Env var / deployment secret an omitted `webhookSecret` falls back to. */
11
+ export const BITBUCKET_WEBHOOK_SECRET_ENV = "BITBUCKET_WEBHOOK_SECRET";
12
+ /** Header both dialects sign deliveries with; `sha256=<hex hmac of the raw body>`. */
13
+ export const BITBUCKET_SIGNATURE_HEADER = "x-hub-signature";
14
+ export const BITBUCKET_SIGNATURE_PREFIX = "sha256=";
18
15
  /** `BITBUCKET_WEBHOOK_SECRET` fallback for {@link BitbucketChannelOptions.webhookSecret}. */
19
16
  export function envBitbucketWebhookSecret() {
20
- var _a;
21
- const value = (_a = process.env.BITBUCKET_WEBHOOK_SECRET) === null || _a === void 0 ? void 0 : _a.trim();
17
+ const value = process.env[BITBUCKET_WEBHOOK_SECRET_ENV]?.trim();
22
18
  return value === undefined || value === "" ? undefined : value;
23
19
  }
20
+ /**
21
+ * The secret's value for the handler's own signature check. A named secret
22
+ * resolves from the environment (locally the shell's, hosted the bound
23
+ * deployment secrets); an unset field falls back to
24
+ * `BITBUCKET_WEBHOOK_SECRET`.
25
+ */
24
26
  export function resolveBitbucketWebhookSecret(options) {
25
- const authored = typeof options.webhookSecret === "function" ? options.webhookSecret() : options.webhookSecret;
26
- const trimmed = authored === null || authored === void 0 ? void 0 : authored.trim();
27
- return trimmed === undefined || trimmed === "" ? envBitbucketWebhookSecret() : trimmed;
27
+ return resolveWebhookSecretValue(options.webhookSecret) ?? envBitbucketWebhookSecret();
28
28
  }
29
- const SIGNATURE_PREFIX = "sha256=";
29
+ const SIGNATURE_PREFIX = BITBUCKET_SIGNATURE_PREFIX;
30
30
  /** The `X-Hub-Signature` value Bitbucket sends for a raw body. */
31
31
  export function signBitbucketWebhookBody(rawBody, secret) {
32
32
  return `${SIGNATURE_PREFIX}${createHmac("sha256", secret).update(rawBody).digest("hex")}`;
@@ -69,13 +69,13 @@ export function parseBitbucketWebhookPayload(payload, eventKey) {
69
69
  return null;
70
70
  }
71
71
  const fromBody = asNonEmptyString(record.eventKey);
72
- const fromHeader = (eventKey === null || eventKey === void 0 ? void 0 : eventKey.trim()) || undefined;
72
+ const fromHeader = eventKey?.trim() || undefined;
73
73
  if (fromBody !== undefined &&
74
74
  fromHeader !== undefined &&
75
75
  normalizeBitbucketEventKey(fromBody) !== normalizeBitbucketEventKey(fromHeader)) {
76
76
  return null;
77
77
  }
78
- const raw = fromBody !== null && fromBody !== void 0 ? fromBody : fromHeader;
78
+ const raw = fromBody ?? fromHeader;
79
79
  if (raw === undefined) {
80
80
  return null;
81
81
  }
@@ -145,91 +145,98 @@ function isPullRequestEvent(eventType) {
145
145
  return BITBUCKET_PULL_REQUEST_EVENTS.includes(eventType);
146
146
  }
147
147
  export function parseBitbucketEventContext(delivery) {
148
- var _a, _b;
149
- var _c;
150
148
  const repository = bitbucketRepositoryFromPayload(delivery.payload);
151
149
  if (repository === undefined) {
152
150
  return null;
153
151
  }
154
152
  const pullRequestRecord = bitbucketPullRequestRecord(delivery.payload);
155
- const pullRequestId = asPositiveInt(pullRequestRecord === null || pullRequestRecord === void 0 ? void 0 : pullRequestRecord.id);
156
- return Object.assign(Object.assign({ deliveryId: delivery.deliveryId, eventType: delivery.eventType, rawEventType: (_c = delivery.rawEventType) !== null && _c !== void 0 ? _c : delivery.eventType, repository }, (pullRequestId === undefined
157
- ? {}
158
- : {
159
- pullRequestId,
160
- pullRequestUrl: bitbucketPullRequestUrl(repository, pullRequestId, asNonEmptyString((_b = asRecord((_a = asRecord(pullRequestRecord === null || pullRequestRecord === void 0 ? void 0 : pullRequestRecord.links)) === null || _a === void 0 ? void 0 : _a.html)) === null || _b === void 0 ? void 0 : _b.href)),
161
- })), { payload: delivery.payload, sender: bitbucketUser(delivery.payload.actor) });
153
+ const pullRequestId = asPositiveInt(pullRequestRecord?.id);
154
+ return {
155
+ deliveryId: delivery.deliveryId,
156
+ eventType: delivery.eventType,
157
+ rawEventType: delivery.rawEventType ?? delivery.eventType,
158
+ repository,
159
+ ...(pullRequestId === undefined
160
+ ? {}
161
+ : {
162
+ pullRequestId,
163
+ pullRequestUrl: bitbucketPullRequestUrl(repository, pullRequestId, asNonEmptyString(asRecord(asRecord(pullRequestRecord?.links)?.html)?.href)),
164
+ }),
165
+ payload: delivery.payload,
166
+ sender: bitbucketUser(delivery.payload.actor),
167
+ };
162
168
  }
163
169
  function invalidPayload(error) {
164
170
  return Response.json({ ok: false, error }, { status: 400 });
165
171
  }
166
- function startTurn(input) {
167
- return __awaiter(this, void 0, void 0, function* () {
168
- var _a;
169
- const source = continuationSource(input.options.continuation, "bitbucket");
170
- const session = yield input.args.send(input.message, Object.assign(Object.assign(Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine" && input.ctx.pullRequestId !== undefined
172
+ async function startTurn(input) {
173
+ const source = continuationSource(input.options.continuation, "bitbucket");
174
+ const session = await input.args.send(input.message, {
175
+ auth: input.dispatch.auth,
176
+ // v1 agents (omitted continuation resolves to `none/v1`) keep one
177
+ // engine-minted conversation per pull request; v2 takes the CP stamp.
178
+ ...(source === "engine" && input.ctx.pullRequestId !== undefined
171
179
  ? {
172
180
  continuationToken: `bitbucket-pr:${input.ctx.repository.fullName.toLowerCase()}#${input.ctx.pullRequestId}`,
173
181
  }
174
- : {})), { title: (_a = input.dispatch.title) !== null && _a !== void 0 ? _a : defaultBitbucketTitle(input.ctx) }), (input.cloud === undefined ? {} : { cloud: input.cloud })), { state: input.state, refreshState: input.state }));
175
- return turnStarted(session);
182
+ : {}),
183
+ title: input.dispatch.title ?? defaultBitbucketTitle(input.ctx),
184
+ ...(input.cloud === undefined ? {} : { cloud: input.cloud }),
185
+ state: input.state,
186
+ refreshState: input.state,
176
187
  });
188
+ return turnStarted(session);
177
189
  }
178
- function resolveCloudOptions(cloud, ctx, pullRequest) {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- var _a;
181
- if (cloud === undefined || cloud === false) {
182
- return undefined;
183
- }
184
- if (cloud === true) {
185
- const url = (_a = ctx.repository.htmlUrl) !== null && _a !== void 0 ? _a : (ctx.repository.dialect === "cloud"
190
+ async function resolveCloudOptions(cloud, ctx, pullRequest) {
191
+ if (cloud === undefined || cloud === false) {
192
+ return undefined;
193
+ }
194
+ if (cloud === true) {
195
+ const url = ctx.repository.htmlUrl ??
196
+ (ctx.repository.dialect === "cloud"
186
197
  ? `https://bitbucket.org/${ctx.repository.fullName}`
187
198
  : undefined);
188
- if (url === undefined) {
189
- return undefined;
190
- }
191
- return {
192
- repos: [
193
- {
194
- url,
195
- prUrl: pullRequest.htmlUrl,
196
- startingRef: pullRequest.headSha,
197
- },
198
- ],
199
- };
200
- }
201
- if (typeof cloud === "function") {
202
- return yield cloud(ctx, pullRequest);
199
+ if (url === undefined) {
200
+ return undefined;
203
201
  }
204
- return cloud;
205
- });
202
+ return {
203
+ repos: [
204
+ {
205
+ url,
206
+ prUrl: pullRequest.htmlUrl,
207
+ startingRef: pullRequest.headSha,
208
+ },
209
+ ],
210
+ };
211
+ }
212
+ if (typeof cloud === "function") {
213
+ return await cloud(ctx, pullRequest);
214
+ }
215
+ return cloud;
206
216
  }
207
- function applyDispatch(input) {
208
- return __awaiter(this, void 0, void 0, function* () {
209
- var _a, _b;
210
- if (input.dispatch === null) {
211
- return skipped("not_dispatched", input.extra);
212
- }
213
- if (isTaskDispatch(input.dispatch)) {
214
- return acknowledgeTask(input.args, BITBUCKET_CHANNEL_KIND, input.dispatch, input.extra);
215
- }
216
- const message = [(_a = input.dispatch.message) !== null && _a !== void 0 ? _a : input.message, ...((_b = input.dispatch.context) !== null && _b !== void 0 ? _b : [])].join("\n");
217
- return startTurn({
218
- options: input.options,
219
- args: input.args,
220
- ctx: input.ctx,
221
- message,
222
- dispatch: input.dispatch,
223
- cloud: input.cloud,
224
- state: bitbucketChannelStateForEvent({
225
- repository: input.ctx.repository,
226
- pullRequestId: input.ctx.pullRequestId,
227
- headSha: input.headSha,
228
- deliveryId: input.ctx.deliveryId,
229
- eventType: input.ctx.eventType,
230
- triggeringCommentId: input.triggeringCommentId,
231
- }),
232
- });
217
+ async function applyDispatch(input) {
218
+ if (input.dispatch === null) {
219
+ return skipped("not_dispatched", input.extra);
220
+ }
221
+ if (isTaskDispatch(input.dispatch)) {
222
+ return acknowledgeTask(input.args, BITBUCKET_CHANNEL_KIND, input.dispatch, input.extra);
223
+ }
224
+ const message = [input.dispatch.message ?? input.message, ...(input.dispatch.context ?? [])].join("\n");
225
+ return startTurn({
226
+ options: input.options,
227
+ args: input.args,
228
+ ctx: input.ctx,
229
+ message,
230
+ dispatch: input.dispatch,
231
+ cloud: input.cloud,
232
+ state: bitbucketChannelStateForEvent({
233
+ repository: input.ctx.repository,
234
+ pullRequestId: input.ctx.pullRequestId,
235
+ headSha: input.headSha,
236
+ deliveryId: input.ctx.deliveryId,
237
+ eventType: input.ctx.eventType,
238
+ triggeringCommentId: input.triggeringCommentId,
239
+ }),
233
240
  });
234
241
  }
235
242
  /**
@@ -238,108 +245,111 @@ function applyDispatch(input) {
238
245
  * hosted admission arrives verified. The v2 mailbox is stamped upstream
239
246
  * (local CP or hosted ingress), never here.
240
247
  */
241
- export function dispatchBitbucketWebhook(input) {
242
- return __awaiter(this, void 0, void 0, function* () {
243
- var _a;
244
- const { eventType, payload } = input.delivery;
245
- const parsed = parseBitbucketEventContext(input.delivery);
246
- if (parsed === null) {
247
- return invalidPayload("invalid_bitbucket_payload");
248
- }
249
- const args = input.args;
250
- const ctx = Object.assign(Object.assign({}, parsed), { bitbucket: buildBitbucketBinding({
251
- repository: parsed.repository,
252
- proxy: (_a = input.proxy) === null || _a === void 0 ? void 0 : _a.call(input),
253
- token: input.options.token,
254
- apiBaseUrl: input.options.apiBaseUrl,
255
- }), host: args.host, artifacts: args.artifacts, send: args.send });
256
- const allowlist = configuredRepoAllowlist(input.options);
257
- if (allowlist !== undefined && !allowlist.has(ctx.repository.fullName.toLowerCase())) {
258
- return skipped("repo_not_allowed", { repo: ctx.repository.fullName });
248
+ export async function dispatchBitbucketWebhook(input) {
249
+ const { eventType, payload } = input.delivery;
250
+ const parsed = parseBitbucketEventContext(input.delivery);
251
+ if (parsed === null) {
252
+ return invalidPayload("invalid_bitbucket_payload");
253
+ }
254
+ const args = input.args;
255
+ const ctx = {
256
+ ...parsed,
257
+ bitbucket: buildBitbucketBinding({
258
+ repository: parsed.repository,
259
+ proxy: input.proxy?.(),
260
+ token: input.options.token,
261
+ apiBaseUrl: input.options.apiBaseUrl,
262
+ }),
263
+ host: args.host,
264
+ artifacts: args.artifacts,
265
+ send: args.send,
266
+ };
267
+ const allowlist = configuredRepoAllowlist(input.options);
268
+ if (allowlist !== undefined && !allowlist.has(ctx.repository.fullName.toLowerCase())) {
269
+ return skipped("repo_not_allowed", { repo: ctx.repository.fullName });
270
+ }
271
+ const extra = { event: eventType, rawEvent: ctx.rawEventType };
272
+ if (isPullRequestEvent(eventType)) {
273
+ const action = eventType.slice("pullrequest:".length);
274
+ const pullRequest = bitbucketPullRequestFromPayload(ctx.repository, payload, action);
275
+ if (pullRequest === undefined) {
276
+ return invalidPayload("invalid_bitbucket_pull_request_payload");
259
277
  }
260
- const extra = { event: eventType, rawEvent: ctx.rawEventType };
261
- if (isPullRequestEvent(eventType)) {
262
- const action = eventType.slice("pullrequest:".length);
263
- const pullRequest = bitbucketPullRequestFromPayload(ctx.repository, payload, action);
264
- if (pullRequest === undefined) {
265
- return invalidPayload("invalid_bitbucket_pull_request_payload");
278
+ const dispatch = input.options.onPullRequest === undefined
279
+ ? defaultBitbucketPullRequestDispatch(ctx, pullRequest)
280
+ : await input.options.onPullRequest(ctx, pullRequest);
281
+ return applyDispatch({
282
+ options: input.options,
283
+ args,
284
+ ctx,
285
+ dispatch,
286
+ extra: { ...extra, action },
287
+ message: defaultBitbucketPullRequestMessage(ctx, pullRequest),
288
+ cloud: await resolveCloudOptions(input.options.cloud, ctx, pullRequest),
289
+ headSha: pullRequest.headSha,
290
+ });
291
+ }
292
+ switch (eventType) {
293
+ case "pullrequest:comment_created": {
294
+ if (input.options.onPullRequestComment === undefined) {
295
+ return skipped("no_handler", extra);
266
296
  }
267
- const dispatch = input.options.onPullRequest === undefined
268
- ? defaultBitbucketPullRequestDispatch(ctx, pullRequest)
269
- : yield input.options.onPullRequest(ctx, pullRequest);
297
+ const comment = bitbucketCommentFromPayload(payload);
298
+ const pullRequest = bitbucketPullRequestFromPayload(ctx.repository, payload, "comment_created");
299
+ if (comment === undefined || pullRequest === undefined) {
300
+ return invalidPayload("invalid_bitbucket_comment_payload");
301
+ }
302
+ const dispatch = await input.options.onPullRequestComment(ctx, comment, pullRequest);
270
303
  return applyDispatch({
271
304
  options: input.options,
272
305
  args,
273
306
  ctx,
274
307
  dispatch,
275
- extra: Object.assign(Object.assign({}, extra), { action }),
276
- message: defaultBitbucketPullRequestMessage(ctx, pullRequest),
277
- cloud: yield resolveCloudOptions(input.options.cloud, ctx, pullRequest),
308
+ extra,
309
+ message: `Bitbucket comment on ${ctx.repository.fullName}#${pullRequest.id}`,
278
310
  headSha: pullRequest.headSha,
311
+ triggeringCommentId: comment.id,
279
312
  });
280
313
  }
281
- switch (eventType) {
282
- case "pullrequest:comment_created": {
283
- if (input.options.onPullRequestComment === undefined) {
284
- return skipped("no_handler", extra);
285
- }
286
- const comment = bitbucketCommentFromPayload(payload);
287
- const pullRequest = bitbucketPullRequestFromPayload(ctx.repository, payload, "comment_created");
288
- if (comment === undefined || pullRequest === undefined) {
289
- return invalidPayload("invalid_bitbucket_comment_payload");
290
- }
291
- const dispatch = yield input.options.onPullRequestComment(ctx, comment, pullRequest);
292
- return applyDispatch({
293
- options: input.options,
294
- args,
295
- ctx,
296
- dispatch,
297
- extra,
298
- message: `Bitbucket comment on ${ctx.repository.fullName}#${pullRequest.id}`,
299
- headSha: pullRequest.headSha,
300
- triggeringCommentId: comment.id,
301
- });
314
+ case "repo:push": {
315
+ if (input.options.onPush === undefined) {
316
+ return skipped("no_handler", extra);
302
317
  }
303
- case "repo:push": {
304
- if (input.options.onPush === undefined) {
305
- return skipped("no_handler", extra);
306
- }
307
- const push = bitbucketPushFromPayload(payload);
308
- if (push === undefined) {
309
- return invalidPayload("invalid_bitbucket_push_payload");
310
- }
311
- const dispatch = yield input.options.onPush(ctx, push);
312
- const first = push.changes[0];
313
- return applyDispatch({
314
- options: input.options,
315
- args,
316
- ctx,
317
- dispatch,
318
- extra,
319
- message: `Bitbucket push to ${ctx.repository.fullName}${(first === null || first === void 0 ? void 0 : first.name) === undefined ? "" : ` ${first.name}`}`,
320
- headSha: first === null || first === void 0 ? void 0 : first.after,
321
- });
318
+ const push = bitbucketPushFromPayload(payload);
319
+ if (push === undefined) {
320
+ return invalidPayload("invalid_bitbucket_push_payload");
322
321
  }
323
- default: {
324
- if (input.options.onEvent === undefined) {
325
- return skipped("unsupported_event", extra);
326
- }
327
- const dispatch = yield input.options.onEvent(ctx, {
328
- eventType,
329
- rawEventType: ctx.rawEventType,
330
- payload,
331
- });
332
- return applyDispatch({
333
- options: input.options,
334
- args,
335
- ctx,
336
- dispatch,
337
- extra,
338
- message: `Bitbucket ${eventType} event on ${ctx.repository.fullName}`,
339
- });
322
+ const dispatch = await input.options.onPush(ctx, push);
323
+ const first = push.changes[0];
324
+ return applyDispatch({
325
+ options: input.options,
326
+ args,
327
+ ctx,
328
+ dispatch,
329
+ extra,
330
+ message: `Bitbucket push to ${ctx.repository.fullName}${first?.name === undefined ? "" : ` ${first.name}`}`,
331
+ headSha: first?.after,
332
+ });
333
+ }
334
+ default: {
335
+ if (input.options.onEvent === undefined) {
336
+ return skipped("unsupported_event", extra);
340
337
  }
338
+ const dispatch = await input.options.onEvent(ctx, {
339
+ eventType,
340
+ rawEventType: ctx.rawEventType,
341
+ payload,
342
+ });
343
+ return applyDispatch({
344
+ options: input.options,
345
+ args,
346
+ ctx,
347
+ dispatch,
348
+ extra,
349
+ message: `Bitbucket ${eventType} event on ${ctx.repository.fullName}`,
350
+ });
341
351
  }
342
- });
352
+ }
343
353
  }
344
354
  /**
345
355
  * HTTP entry for a single agent's Bitbucket channel: `X-Hub-Signature` HMAC
@@ -347,38 +357,38 @@ export function dispatchBitbucketWebhook(input) {
347
357
  * Without a secret the route auth owns admission (`serve --dev` admits
348
358
  * loopback only; production stays loopback-strict).
349
359
  */
350
- export function handleBitbucketWebhookRequest(input) {
351
- return __awaiter(this, void 0, void 0, function* () {
352
- var _a, _b;
353
- const bodyText = yield input.request.text();
354
- const secret = resolveBitbucketWebhookSecret(input.options);
355
- if (secret !== undefined && input.skipSignatureVerification !== true) {
356
- if (!verifyBitbucketWebhookSignature(bodyText, input.request.headers.get("x-hub-signature"), secret)) {
357
- return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
358
- }
359
- }
360
- let payload;
361
- try {
362
- payload = JSON.parse(bodyText);
363
- }
364
- catch (_c) {
365
- return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
366
- }
367
- const delivery = parseBitbucketWebhookPayload(payload, input.request.headers.get("x-event-key"));
368
- if (delivery === null) {
369
- return invalidPayload("invalid_bitbucket_payload");
360
+ export async function handleBitbucketWebhookRequest(input) {
361
+ const bodyText = await input.request.text();
362
+ const secret = resolveBitbucketWebhookSecret(input.options);
363
+ if (secret !== undefined && input.skipSignatureVerification !== true) {
364
+ if (!verifyBitbucketWebhookSignature(bodyText, input.request.headers.get(BITBUCKET_SIGNATURE_HEADER), secret)) {
365
+ return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
370
366
  }
371
- delivery.deliveryId = (_b = (_a = input.request.headers.get("x-request-uuid")) !== null && _a !== void 0 ? _a : input.request.headers.get("x-request-id")) !== null && _b !== void 0 ? _b : undefined;
372
- return dispatchBitbucketWebhook({
373
- options: input.options,
374
- delivery,
375
- proxy: input.proxy,
376
- args: bindLocalIngressSend(input.args, {
377
- identity: input.options.continuation,
378
- kind: BITBUCKET_CHANNEL_KIND,
379
- eventType: delivery.eventType,
380
- payload: delivery.payload,
381
- }),
382
- });
367
+ }
368
+ let payload;
369
+ try {
370
+ payload = JSON.parse(bodyText);
371
+ }
372
+ catch {
373
+ return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
374
+ }
375
+ const delivery = parseBitbucketWebhookPayload(payload, input.request.headers.get("x-event-key"));
376
+ if (delivery === null) {
377
+ return invalidPayload("invalid_bitbucket_payload");
378
+ }
379
+ delivery.deliveryId =
380
+ input.request.headers.get("x-request-uuid") ??
381
+ input.request.headers.get("x-request-id") ??
382
+ undefined;
383
+ return dispatchBitbucketWebhook({
384
+ options: input.options,
385
+ delivery,
386
+ proxy: input.proxy,
387
+ args: bindLocalIngressSend(input.args, {
388
+ identity: input.options.continuation,
389
+ kind: BITBUCKET_CHANNEL_KIND,
390
+ eventType: delivery.eventType,
391
+ payload: delivery.payload,
392
+ }),
383
393
  });
384
394
  }
@@ -9,15 +9,6 @@
9
9
  * Bitbucket's state set and re-posts the full desired state on every write,
10
10
  * so `resumeBitbucketCheck` needs only `(sha, key)` to rebuild a handle.
11
11
  */
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
12
  import { openCiCheck, resumeCiCheck, } from "../checks.js";
22
13
  /** Shared check status / conclusion → Bitbucket build-status state. */
23
14
  export function bitbucketBuildStatusState(input) {
@@ -44,28 +35,25 @@ export function bitbucketBuildStatusState(input) {
44
35
  * Build statuses have no server id or page URL of their own.
45
36
  */
46
37
  function bitbucketCheckWriter(input) {
47
- var _a;
48
- let lastStatus = (_a = input.status) !== null && _a !== void 0 ? _a : "in_progress";
38
+ let lastStatus = input.status ?? "in_progress";
49
39
  let lastUrl = input.url;
50
- return (write) => __awaiter(this, void 0, void 0, function* () {
51
- var _a, _b;
52
- var _c, _d, _e;
53
- const status = (_c = write.status) !== null && _c !== void 0 ? _c : (write.conclusion === undefined ? lastStatus : "completed");
40
+ return async (write) => {
41
+ const status = write.status ?? (write.conclusion === undefined ? lastStatus : "completed");
54
42
  lastStatus = status;
55
- lastUrl = (_d = write.detailsUrl) !== null && _d !== void 0 ? _d : lastUrl;
56
- yield input.bitbucket.setBuildStatus({
43
+ lastUrl = write.detailsUrl ?? lastUrl;
44
+ await input.bitbucket.setBuildStatus({
57
45
  sha: input.sha,
58
46
  key: input.name,
59
- name: (_e = (_a = write.output) === null || _a === void 0 ? void 0 : _a.title) !== null && _e !== void 0 ? _e : input.name,
47
+ name: write.output?.title ?? input.name,
60
48
  state: bitbucketBuildStatusState({
61
49
  status,
62
50
  conclusion: write.conclusion,
63
51
  }),
64
52
  url: lastUrl,
65
- description: (_b = write.output) === null || _b === void 0 ? void 0 : _b.summary,
53
+ description: write.output?.summary,
66
54
  });
67
55
  return lastUrl === undefined ? undefined : { url: lastUrl };
68
- });
56
+ };
69
57
  }
70
58
  /**
71
59
  * Open a build status on `sha` and return a handle for later updates.
@@ -97,6 +85,6 @@ export function resumeBitbucketCheck(input) {
97
85
  */
98
86
  export function bindBitbucketChecks(input) {
99
87
  return {
100
- createCheck: check => createBitbucketCheck(Object.assign(Object.assign({}, check), { bitbucket: input.bitbucket })),
88
+ createCheck: check => createBitbucketCheck({ ...check, bitbucket: input.bitbucket }),
101
89
  };
102
90
  }
@@ -49,7 +49,7 @@ export function createPendingCursorBitbucketCredentials() {
49
49
  if (getApiKey === undefined || transport === undefined) {
50
50
  return undefined;
51
51
  }
52
- return Object.assign(Object.assign({}, transport), { getApiKey });
52
+ return { ...transport, getApiKey };
53
53
  },
54
54
  };
55
55
  }
@@ -8,7 +8,7 @@ function issuerHost(ctx) {
8
8
  try {
9
9
  return new URL(ctx.repository.htmlUrl).host;
10
10
  }
11
- catch (_a) {
11
+ catch {
12
12
  // fall through to the dialect default
13
13
  }
14
14
  }
@@ -26,9 +26,19 @@ export function defaultBitbucketAuth(ctx) {
26
26
  authenticator: "bitbucket-webhook",
27
27
  principalId: sender === undefined ? "bitbucket" : sender.id,
28
28
  principalType: "user",
29
- attributes: Object.assign(Object.assign(Object.assign({ conversation_kind: ctx.pullRequestId === undefined ? ctx.eventType : "pull_request", repo: ctx.repository.fullName, dialect: ctx.repository.dialect }, (ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId })), (sender === undefined
30
- ? {}
31
- : Object.assign({ subject: sender.id }, (sender.username === undefined ? {} : { username: sender.username })))), { issuer: `bitbucket:${issuerHost(ctx)}` }),
29
+ attributes: {
30
+ conversation_kind: ctx.pullRequestId === undefined ? ctx.eventType : "pull_request",
31
+ repo: ctx.repository.fullName,
32
+ dialect: ctx.repository.dialect,
33
+ ...(ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId }),
34
+ ...(sender === undefined
35
+ ? {}
36
+ : {
37
+ subject: sender.id,
38
+ ...(sender.username === undefined ? {} : { username: sender.username }),
39
+ }),
40
+ issuer: `bitbucket:${issuerHost(ctx)}`,
41
+ },
32
42
  };
33
43
  }
34
44
  export function defaultBitbucketTitle(ctx) {
@@ -18,9 +18,8 @@ export const BITBUCKET_DATA_CENTER_EVENT_KEYS = {
18
18
  };
19
19
  /** `pr:opened` → `pullrequest:created`; Cloud keys pass through unchanged. */
20
20
  export function normalizeBitbucketEventKey(eventKey) {
21
- var _a;
22
21
  const trimmed = eventKey.trim();
23
- return (_a = BITBUCKET_DATA_CENTER_EVENT_KEYS[trimmed]) !== null && _a !== void 0 ? _a : trimmed;
22
+ return BITBUCKET_DATA_CENTER_EVENT_KEYS[trimmed] ?? trimmed;
24
23
  }
25
24
  /** Cloud pull-request event keys, grouped by the hook that receives them. */
26
25
  export const BITBUCKET_PULL_REQUEST_EVENTS = [
@@ -5,7 +5,9 @@
5
5
  * import { bitbucketChannel, defaultBitbucketAuth } from "@cursor/bdk/channels/bitbucket";
6
6
  *
7
7
  * export default bitbucketChannel({
8
- * webhookSecret: () => process.env.BITBUCKET_WEBHOOK_SECRET,
8
+ * // Named, not read: locally `process.env.BITBUCKET_WEBHOOK_SECRET`; hosted,
9
+ * // the deployment secret, which the control plane checks at ingestion.
10
+ * webhookSecret: { secretName: "BITBUCKET_WEBHOOK_SECRET" },
9
11
  * onPullRequest: (ctx) => ({ auth: defaultBitbucketAuth(ctx) }),
10
12
  * onPullRequestComment: (ctx) => ({ auth: defaultBitbucketAuth(ctx) }),
11
13
  * });
@@ -17,7 +19,9 @@
17
19
  * are normalized to the Cloud vocabulary (`pullrequest:created`) before
18
20
  * hooks run, and payload fields from either dialect land on one shape.
19
21
  * Hosted deployments receive deliveries the Cursor backend already verified
20
- * and normalized. The turn principal is `bitbucket-webhook` plus the
22
+ * and normalized: a named `webhookSecret` lets the control plane verify
23
+ * `X-Hub-Signature` before any compute starts (architecture `v2` requires
24
+ * that form) and the handler verifies it again on replay. The turn principal is `bitbucket-webhook` plus the
21
25
  * Bitbucket actor — not the Cursor subscriber.
22
26
  */
23
27
  export * from "./api.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,KAAK,eAAe,EACpB,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,EACzB,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACxB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,KAAK,wBAAwB,EAC7B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,KAAK,eAAe,EACpB,+BAA+B,EAC/B,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,EACzB,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACxB,8BAA8B,EAC9B,aAAa,EACb,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,KAAK,wBAAwB,EAC7B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}