@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
@@ -1,12 +1,3 @@
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 { z } from "zod";
11
2
  import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST } from "../../channels.js";
12
3
  import { acknowledgeTask, isTaskDispatch, skipped, turnStarted, withPropagatingBackgroundErrors, } from "../../internal/channel-dispatch.js";
@@ -60,7 +51,7 @@ function originActor(value) {
60
51
  ["service_account", asRecord(record.serviceAccount)],
61
52
  ];
62
53
  for (const [kind, actor] of nestedActors) {
63
- const id = asNonEmptyString(actor === null || actor === void 0 ? void 0 : actor.id);
54
+ const id = asNonEmptyString(actor?.id);
64
55
  if (id !== undefined) {
65
56
  return { id, kind };
66
57
  }
@@ -72,16 +63,14 @@ function originActor(value) {
72
63
  return kind === undefined ? { id } : { id, kind };
73
64
  }
74
65
  function originHeaders(request) {
75
- var _a, _b, _c;
76
66
  return {
77
- "webhook-id": (_a = request.headers.get("webhook-id")) !== null && _a !== void 0 ? _a : undefined,
78
- "webhook-timestamp": (_b = request.headers.get("webhook-timestamp")) !== null && _b !== void 0 ? _b : undefined,
79
- "webhook-signature": (_c = request.headers.get("webhook-signature")) !== null && _c !== void 0 ? _c : undefined,
67
+ "webhook-id": request.headers.get("webhook-id") ?? undefined,
68
+ "webhook-timestamp": request.headers.get("webhook-timestamp") ?? undefined,
69
+ "webhook-signature": request.headers.get("webhook-signature") ?? undefined,
80
70
  };
81
71
  }
82
72
  function skipOriginVerify() {
83
- var _a;
84
- return ((_a = process.env.AGENT_SERVE_ORIGIN_SKIP_VERIFY) === null || _a === void 0 ? void 0 : _a.trim()) === "1";
73
+ return process.env.AGENT_SERVE_ORIGIN_SKIP_VERIFY?.trim() === "1";
85
74
  }
86
75
  /**
87
76
  * Direct Origin HTTP deliveries verify v1ed. `--dev` and
@@ -99,8 +88,7 @@ function asIdList(value) {
99
88
  }
100
89
  /** `AGENT_SERVE_ORIGIN_APP_ID` fallback for {@link OriginChannelOptions.appId}. */
101
90
  export function envOriginAppId() {
102
- var _a;
103
- const value = (_a = process.env.AGENT_SERVE_ORIGIN_APP_ID) === null || _a === void 0 ? void 0 : _a.trim();
91
+ const value = process.env.AGENT_SERVE_ORIGIN_APP_ID?.trim();
104
92
  return value === undefined || value === "" ? undefined : value;
105
93
  }
106
94
  function configuredOriginAppIds(options) {
@@ -134,12 +122,11 @@ function configuredOriginRepoAllowlist(options) {
134
122
  * webhook-secret analogue). Cursor-internal documents the same gap.
135
123
  */
136
124
  function originHttpBindingError(options, envelope) {
137
- var _a, _b;
138
125
  const allowedApps = configuredOriginAppIds(options);
139
126
  if (allowedApps.length === 0) {
140
127
  return "unbound_origin_app";
141
128
  }
142
- const deliveredAppId = (_a = envelope.appId) === null || _a === void 0 ? void 0 : _a.trim();
129
+ const deliveredAppId = envelope.appId?.trim();
143
130
  if (deliveredAppId === undefined || deliveredAppId === "") {
144
131
  return "invalid_app";
145
132
  }
@@ -150,7 +137,7 @@ function originHttpBindingError(options, envelope) {
150
137
  if (allowedInstalls.length === 0) {
151
138
  return undefined;
152
139
  }
153
- const deliveredInstallationId = (_b = envelope.installationId) === null || _b === void 0 ? void 0 : _b.trim();
140
+ const deliveredInstallationId = envelope.installationId?.trim();
154
141
  if (deliveredInstallationId === undefined ||
155
142
  deliveredInstallationId === "" ||
156
143
  !allowedInstalls.includes(deliveredInstallationId)) {
@@ -160,7 +147,7 @@ function originHttpBindingError(options, envelope) {
160
147
  }
161
148
  function resolveApiBaseUrl(options) {
162
149
  const authored = typeof options.apiBaseUrl === "function" ? options.apiBaseUrl() : options.apiBaseUrl;
163
- const trimmed = authored === null || authored === void 0 ? void 0 : authored.trim();
150
+ const trimmed = authored?.trim();
164
151
  return trimmed === undefined || trimmed === "" ? DEFAULT_ORIGIN_API_BASE_URL : trimmed;
165
152
  }
166
153
  const originEnvelopeSchema = z.object({
@@ -185,38 +172,38 @@ export function parseOriginWebhookEnvelope(payload) {
185
172
  return parsed.success ? parsed.data : null;
186
173
  }
187
174
  function originRepoFromPayload(payload) {
188
- var _a, _b;
189
- var _c;
190
- const repository = (_c = asRecord(payload.repository)) !== null && _c !== void 0 ? _c : asRecord((_a = asRecord(payload.pullRequest)) === null || _a === void 0 ? void 0 : _a.repository);
191
- const owner = asNonEmptyString((_b = asRecord(repository === null || repository === void 0 ? void 0 : repository.owner)) === null || _b === void 0 ? void 0 : _b.slug);
192
- const name = asNonEmptyString(repository === null || repository === void 0 ? void 0 : repository.name);
175
+ const repository = asRecord(payload.repository) ?? asRecord(asRecord(payload.pullRequest)?.repository);
176
+ const owner = asNonEmptyString(asRecord(repository?.owner)?.slug);
177
+ const name = asNonEmptyString(repository?.name);
193
178
  if (owner === undefined || name === undefined)
194
179
  return undefined;
195
180
  return { owner, name, fullName: `${owner}/${name}` };
196
181
  }
197
182
  function originPrUrl(repository, number, explicit) {
198
- return (explicit !== null && explicit !== void 0 ? explicit : `https://cursor.com/codebase/${repository.owner}/${repository.name}/pull/${number}`);
183
+ return (explicit ?? `https://cursor.com/codebase/${repository.owner}/${repository.name}/pull/${number}`);
199
184
  }
200
185
  function originSender(envelope, payload) {
201
- var _a, _b, _c;
202
- var _d, _e, _f, _g, _h;
203
- return ((_h = (_g = (_f = (_e = (_d = envelope.sender) !== null && _d !== void 0 ? _d : originActor(payload.actor)) !== null && _e !== void 0 ? _e : originActor(payload.pusher)) !== null && _f !== void 0 ? _f : originActor((_a = asRecord(payload.review)) === null || _a === void 0 ? void 0 : _a.author)) !== null && _g !== void 0 ? _g : originActor((_b = asRecord(payload.comment)) === null || _b === void 0 ? void 0 : _b.author)) !== null && _h !== void 0 ? _h : originActor((_c = asRecord(payload.pullRequest)) === null || _c === void 0 ? void 0 : _c.author));
186
+ return (envelope.sender ??
187
+ originActor(payload.actor) ??
188
+ originActor(payload.pusher) ??
189
+ originActor(asRecord(payload.review)?.author) ??
190
+ originActor(asRecord(payload.comment)?.author) ??
191
+ originActor(asRecord(payload.pullRequest)?.author));
204
192
  }
205
193
  export function parseOriginPullRequestEvent(input) {
206
- var _a, _b, _c, _d;
207
- const payload = (_a = asRecord(input.envelope.event.payload)) !== null && _a !== void 0 ? _a : {};
194
+ const payload = asRecord(input.envelope.event.payload) ?? {};
208
195
  const repository = originRepoFromPayload(payload);
209
196
  const pullRequest = asRecord(payload.pullRequest);
210
- const number = asPositiveInt(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.number);
197
+ const number = asPositiveInt(pullRequest?.number);
211
198
  if (repository === undefined || number === undefined) {
212
199
  return null;
213
200
  }
214
201
  const eventType = input.envelope.event.type;
215
- const url = originPrUrl(repository, number, asNonEmptyString(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.url));
216
- const head = asRecord(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.head);
217
- const base = asRecord(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.base);
218
- const version = asRecord(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.version);
219
- const author = originActor(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.author);
202
+ const url = originPrUrl(repository, number, asNonEmptyString(pullRequest?.url));
203
+ const head = asRecord(pullRequest?.head);
204
+ const base = asRecord(pullRequest?.base);
205
+ const version = asRecord(pullRequest?.version);
206
+ const author = originActor(pullRequest?.author);
220
207
  return {
221
208
  payload,
222
209
  ctx: {
@@ -235,17 +222,18 @@ export function parseOriginPullRequestEvent(input) {
235
222
  type: eventType,
236
223
  number,
237
224
  url,
238
- title: asNonEmptyString(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.title),
239
- body: (pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.body) === null
225
+ title: asNonEmptyString(pullRequest?.title),
226
+ body: pullRequest?.body === null
240
227
  ? null
241
- : ((_b = asNonEmptyString(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.body)) !== null && _b !== void 0 ? _b : (typeof (pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.body) === "string" ? pullRequest.body : undefined)),
242
- draft: asBoolean(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.draft),
243
- merged: eventType === "pull_request.merged" || asBoolean(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.merged),
244
- authorId: author === null || author === void 0 ? void 0 : author.id,
245
- headRef: asNonEmptyString(head === null || head === void 0 ? void 0 : head.ref),
246
- headSha: (_c = asNonEmptyString(head === null || head === void 0 ? void 0 : head.sha)) !== null && _c !== void 0 ? _c : asNonEmptyString(version === null || version === void 0 ? void 0 : version.headSha),
247
- baseRef: asNonEmptyString(base === null || base === void 0 ? void 0 : base.ref),
248
- baseSha: (_d = asNonEmptyString(base === null || base === void 0 ? void 0 : base.sha)) !== null && _d !== void 0 ? _d : asNonEmptyString(version === null || version === void 0 ? void 0 : version.baseSha),
228
+ : (asNonEmptyString(pullRequest?.body) ??
229
+ (typeof pullRequest?.body === "string" ? pullRequest.body : undefined)),
230
+ draft: asBoolean(pullRequest?.draft),
231
+ merged: eventType === "pull_request.merged" || asBoolean(pullRequest?.merged),
232
+ authorId: author?.id,
233
+ headRef: asNonEmptyString(head?.ref),
234
+ headSha: asNonEmptyString(head?.sha) ?? asNonEmptyString(version?.headSha),
235
+ baseRef: asNonEmptyString(base?.ref),
236
+ baseSha: asNonEmptyString(base?.sha) ?? asNonEmptyString(version?.baseSha),
249
237
  },
250
238
  };
251
239
  }
@@ -256,14 +244,20 @@ export function parseOriginPullRequestEvent(input) {
256
244
  * as {@link defaultGitHubAuth}).
257
245
  */
258
246
  export function defaultOriginAuth(ctx) {
259
- var _a, _b;
260
- const senderId = (_a = ctx.sender) === null || _a === void 0 ? void 0 : _a.id;
261
- const senderKind = (_b = ctx.sender) === null || _b === void 0 ? void 0 : _b.kind;
247
+ const senderId = ctx.sender?.id;
248
+ const senderKind = ctx.sender?.kind;
262
249
  return {
263
250
  authenticator: "origin-webhook",
264
- principalId: senderId !== null && senderId !== void 0 ? senderId : "origin",
251
+ principalId: senderId ?? "origin",
265
252
  principalType: senderKind === "app" || senderKind === "service_account" ? "service" : "user",
266
- attributes: Object.assign(Object.assign(Object.assign(Object.assign({ conversation_kind: "pull_request", repository: ctx.repository.fullName }, (ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId })), (senderId === undefined ? {} : { subject: senderId })), (senderKind === undefined ? {} : { user_type: senderKind })), { issuer: `origin:${ctx.repository.owner}` }),
253
+ attributes: {
254
+ conversation_kind: "pull_request",
255
+ repository: ctx.repository.fullName,
256
+ ...(ctx.deliveryId === undefined ? {} : { delivery_id: ctx.deliveryId }),
257
+ ...(senderId === undefined ? {} : { subject: senderId }),
258
+ ...(senderKind === undefined ? {} : { user_type: senderKind }),
259
+ issuer: `origin:${ctx.repository.owner}`,
260
+ },
267
261
  };
268
262
  }
269
263
  export function originContinuationKey(ctx) {
@@ -303,75 +297,79 @@ export function defaultOriginPullRequestDispatch(ctx, pullRequest) {
303
297
  return { auth: defaultOriginAuth(ctx) };
304
298
  }
305
299
  function enrichEventContext(input) {
306
- return Object.assign(Object.assign({}, input.ctx), { host: input.args.host, artifacts: input.args.artifacts, send: input.args.send, origin: buildOriginBinding({
300
+ return {
301
+ ...input.ctx,
302
+ host: input.args.host,
303
+ artifacts: input.args.artifacts,
304
+ send: input.args.send,
305
+ origin: buildOriginBinding({
307
306
  repository: input.ctx.repository,
308
307
  installationId: input.ctx.installationId,
309
308
  executionId: input.ctx.deliveryId,
310
309
  cursorAccount: input.options.cursorAccount !== undefined && input.options.cursorAccount !== false,
311
310
  app: input.options.app,
312
- }) });
313
- }
314
- function startTurn(input) {
315
- return __awaiter(this, void 0, void 0, function* () {
316
- var _a, _b;
317
- const source = continuationSource(input.options.continuation, "origin");
318
- const cloud = (_a = input.dispatch.cloud) !== null && _a !== void 0 ? _a : input.cloud;
319
- const state = Object.assign(Object.assign({}, input.dispatch.state), input.state);
320
- const session = yield input.args.send(input.message, Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine" ? { continuationToken: originContinuationKey(input.ctx) } : {})), { title: (_b = input.dispatch.title) !== null && _b !== void 0 ? _b : defaultOriginTitle(input.ctx), cloud, state: state,
321
- // Resume must refresh the triggering comment / delivery identifiers so
322
- // reply delivery targets the latest wake, not the session's first.
323
- refreshState: state }));
324
- return turnStarted(session);
325
- });
311
+ }),
312
+ };
326
313
  }
327
- function resolveCloudOptions(cloud, ctx, pullRequest) {
328
- return __awaiter(this, void 0, void 0, function* () {
329
- if (cloud === undefined || cloud === false) {
330
- return undefined;
331
- }
332
- if (cloud === true) {
333
- return {
334
- repos: [
335
- {
336
- url: `https://cursor.com/codebase/${ctx.repository.fullName}`,
337
- prUrl: pullRequest.url,
338
- startingRef: pullRequest.headSha,
339
- },
340
- ],
341
- };
342
- }
343
- if (typeof cloud === "function") {
344
- return yield cloud(ctx, pullRequest);
345
- }
346
- return cloud;
314
+ async function startTurn(input) {
315
+ const source = continuationSource(input.options.continuation, "origin");
316
+ const cloud = input.dispatch.cloud ?? input.cloud;
317
+ const state = { ...input.dispatch.state, ...input.state };
318
+ const session = await input.args.send(input.message, {
319
+ auth: input.dispatch.auth,
320
+ ...(source === "engine" ? { continuationToken: originContinuationKey(input.ctx) } : {}),
321
+ title: input.dispatch.title ?? defaultOriginTitle(input.ctx),
322
+ cloud,
323
+ state: state,
324
+ // Resume must refresh the triggering comment / delivery identifiers so
325
+ // reply delivery targets the latest wake, not the session's first.
326
+ refreshState: state,
347
327
  });
328
+ return turnStarted(session);
348
329
  }
349
- function applyDispatch(input) {
350
- return __awaiter(this, void 0, void 0, function* () {
351
- var _a, _b;
352
- if (input.dispatch === null) {
353
- return skipped("not_dispatched", input.extra);
354
- }
355
- if (isTaskDispatch(input.dispatch)) {
356
- return acknowledgeTask(input.args, ORIGIN_CHANNEL_KIND, input.dispatch, input.extra);
357
- }
358
- const message = [(_a = input.dispatch.message) !== null && _a !== void 0 ? _a : input.message, ...((_b = input.dispatch.context) !== null && _b !== void 0 ? _b : [])].join("\n");
359
- return startTurn({
360
- options: input.options,
361
- args: input.args,
362
- ctx: input.ctx,
363
- message,
364
- dispatch: input.dispatch,
365
- cloud: input.cloud,
366
- state: originChannelStateForEvent({
367
- repository: input.ctx.repository,
368
- pullRequestNumber: input.ctx.pullRequestNumber,
369
- installationId: input.ctx.installationId,
370
- deliveryId: input.ctx.deliveryId,
371
- eventType: input.ctx.eventType,
372
- triggeringCommentId: input.triggeringCommentId,
373
- }),
374
- });
330
+ async function resolveCloudOptions(cloud, ctx, pullRequest) {
331
+ if (cloud === undefined || cloud === false) {
332
+ return undefined;
333
+ }
334
+ if (cloud === true) {
335
+ return {
336
+ repos: [
337
+ {
338
+ url: `https://cursor.com/codebase/${ctx.repository.fullName}`,
339
+ prUrl: pullRequest.url,
340
+ startingRef: pullRequest.headSha,
341
+ },
342
+ ],
343
+ };
344
+ }
345
+ if (typeof cloud === "function") {
346
+ return await cloud(ctx, pullRequest);
347
+ }
348
+ return cloud;
349
+ }
350
+ async function applyDispatch(input) {
351
+ if (input.dispatch === null) {
352
+ return skipped("not_dispatched", input.extra);
353
+ }
354
+ if (isTaskDispatch(input.dispatch)) {
355
+ return acknowledgeTask(input.args, ORIGIN_CHANNEL_KIND, input.dispatch, input.extra);
356
+ }
357
+ const message = [input.dispatch.message ?? input.message, ...(input.dispatch.context ?? [])].join("\n");
358
+ return startTurn({
359
+ options: input.options,
360
+ args: input.args,
361
+ ctx: input.ctx,
362
+ message,
363
+ dispatch: input.dispatch,
364
+ cloud: input.cloud,
365
+ state: originChannelStateForEvent({
366
+ repository: input.ctx.repository,
367
+ pullRequestNumber: input.ctx.pullRequestNumber,
368
+ installationId: input.ctx.installationId,
369
+ deliveryId: input.ctx.deliveryId,
370
+ eventType: input.ctx.eventType,
371
+ triggeringCommentId: input.triggeringCommentId,
372
+ }),
375
373
  });
376
374
  }
377
375
  /**
@@ -380,156 +378,151 @@ function applyDispatch(input) {
380
378
  * id; trigger fan-out and hosted admission arrive verified. The v2 mailbox
381
379
  * is stamped upstream (local CP or hosted ingress), never here.
382
380
  */
383
- export function dispatchOriginWebhook(input) {
384
- return __awaiter(this, void 0, void 0, function* () {
385
- var _a;
386
- const eventType = input.envelope.event.type;
387
- const parsed = parseOriginPullRequestEvent({ envelope: input.envelope });
388
- if (parsed === null) {
389
- return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
381
+ export async function dispatchOriginWebhook(input) {
382
+ const eventType = input.envelope.event.type;
383
+ const parsed = parseOriginPullRequestEvent({ envelope: input.envelope });
384
+ if (parsed === null) {
385
+ return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
386
+ }
387
+ const args = input.args;
388
+ const ctx = enrichEventContext({
389
+ ctx: parsed.ctx,
390
+ args,
391
+ options: input.options,
392
+ });
393
+ const { pullRequest, payload } = parsed;
394
+ const repoAllowlist = configuredOriginRepoAllowlist(input.options);
395
+ if (repoAllowlist !== undefined && !repoAllowlist.has(ctx.repository.fullName.toLowerCase())) {
396
+ return skipped("repo_not_allowed", { repo: ctx.repository.fullName });
397
+ }
398
+ if (eventType.startsWith("pull_request.comment.")) {
399
+ if (input.options.onComment === undefined) {
400
+ return skipped("no_handler", { event: eventType });
390
401
  }
391
- const args = input.args;
392
- const ctx = enrichEventContext({
393
- ctx: parsed.ctx,
394
- args,
402
+ const commentRecord = asRecord(payload.comment);
403
+ const commentId = asNonEmptyString(commentRecord?.id);
404
+ const commentBody = typeof commentRecord?.body === "string" ? commentRecord.body : undefined;
405
+ if (commentId === undefined || commentBody === undefined) {
406
+ return Response.json({ ok: false, error: "invalid_origin_comment_payload" }, { status: 400 });
407
+ }
408
+ const comment = {
409
+ id: commentId,
410
+ body: commentBody,
411
+ author: originActor(commentRecord?.author),
412
+ };
413
+ const dispatch = await input.options.onComment(ctx, comment);
414
+ return applyDispatch({
395
415
  options: input.options,
416
+ args,
417
+ ctx,
418
+ dispatch,
419
+ extra: { event: eventType },
420
+ message: commentBody.trim() === ""
421
+ ? `Origin comment on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`
422
+ : commentBody.trim(),
423
+ triggeringCommentId: commentId,
396
424
  });
397
- const { pullRequest, payload } = parsed;
398
- const repoAllowlist = configuredOriginRepoAllowlist(input.options);
399
- if (repoAllowlist !== undefined && !repoAllowlist.has(ctx.repository.fullName.toLowerCase())) {
400
- return skipped("repo_not_allowed", { repo: ctx.repository.fullName });
401
- }
402
- if (eventType.startsWith("pull_request.comment.")) {
403
- if (input.options.onComment === undefined) {
404
- return skipped("no_handler", { event: eventType });
405
- }
406
- const commentRecord = asRecord(payload.comment);
407
- const commentId = asNonEmptyString(commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.id);
408
- const commentBody = typeof (commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.body) === "string" ? commentRecord.body : undefined;
409
- if (commentId === undefined || commentBody === undefined) {
410
- return Response.json({ ok: false, error: "invalid_origin_comment_payload" }, { status: 400 });
411
- }
412
- const comment = {
413
- id: commentId,
414
- body: commentBody,
415
- author: originActor(commentRecord === null || commentRecord === void 0 ? void 0 : commentRecord.author),
416
- };
417
- const dispatch = yield input.options.onComment(ctx, comment);
418
- return applyDispatch({
419
- options: input.options,
420
- args,
421
- ctx,
422
- dispatch,
423
- extra: { event: eventType },
424
- message: commentBody.trim() === ""
425
- ? `Origin comment on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`
426
- : commentBody.trim(),
427
- triggeringCommentId: commentId,
428
- });
429
- }
430
- if (eventType.startsWith("pull_request.review.")) {
431
- if (input.options.onReview === undefined) {
432
- return skipped("no_handler", { event: eventType });
433
- }
434
- const reviewRecord = (_a = asRecord(payload.review)) !== null && _a !== void 0 ? _a : {};
435
- const review = {
436
- id: asNonEmptyString(reviewRecord.id),
437
- verdict: asNonEmptyString(reviewRecord.verdict),
438
- author: originActor(reviewRecord.author),
439
- };
440
- const dispatch = yield input.options.onReview(ctx, review);
441
- return applyDispatch({
442
- options: input.options,
443
- args,
444
- ctx,
445
- dispatch,
446
- extra: { event: eventType },
447
- message: `Origin review on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`,
448
- });
449
- }
450
- if (eventType.startsWith("pull_request.")) {
451
- const dispatch = input.options.onPullRequest === undefined
452
- ? defaultOriginPullRequestDispatch(ctx, pullRequest)
453
- : yield input.options.onPullRequest(ctx, pullRequest);
454
- const cloud = yield resolveCloudOptions(input.options.cloud, ctx, pullRequest);
455
- return applyDispatch({
456
- options: input.options,
457
- args,
458
- ctx,
459
- dispatch,
460
- extra: { event: eventType },
461
- message: defaultOriginPullRequestMessage(ctx, pullRequest),
462
- cloud,
463
- });
464
- }
465
- if (input.options.onEvent !== undefined) {
466
- const dispatch = yield input.options.onEvent(ctx, {
467
- eventType,
468
- payload,
469
- });
470
- return applyDispatch({
471
- options: input.options,
472
- args,
473
- ctx,
474
- dispatch,
475
- extra: { event: eventType },
476
- message: `Origin ${eventType} event`,
477
- });
425
+ }
426
+ if (eventType.startsWith("pull_request.review.")) {
427
+ if (input.options.onReview === undefined) {
428
+ return skipped("no_handler", { event: eventType });
478
429
  }
479
- return skipped("unsupported_event", { event: eventType });
480
- });
430
+ const reviewRecord = asRecord(payload.review) ?? {};
431
+ const review = {
432
+ id: asNonEmptyString(reviewRecord.id),
433
+ verdict: asNonEmptyString(reviewRecord.verdict),
434
+ author: originActor(reviewRecord.author),
435
+ };
436
+ const dispatch = await input.options.onReview(ctx, review);
437
+ return applyDispatch({
438
+ options: input.options,
439
+ args,
440
+ ctx,
441
+ dispatch,
442
+ extra: { event: eventType },
443
+ message: `Origin review on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`,
444
+ });
445
+ }
446
+ if (eventType.startsWith("pull_request.")) {
447
+ const dispatch = input.options.onPullRequest === undefined
448
+ ? defaultOriginPullRequestDispatch(ctx, pullRequest)
449
+ : await input.options.onPullRequest(ctx, pullRequest);
450
+ const cloud = await resolveCloudOptions(input.options.cloud, ctx, pullRequest);
451
+ return applyDispatch({
452
+ options: input.options,
453
+ args,
454
+ ctx,
455
+ dispatch,
456
+ extra: { event: eventType },
457
+ message: defaultOriginPullRequestMessage(ctx, pullRequest),
458
+ cloud,
459
+ });
460
+ }
461
+ if (input.options.onEvent !== undefined) {
462
+ const dispatch = await input.options.onEvent(ctx, {
463
+ eventType,
464
+ payload,
465
+ });
466
+ return applyDispatch({
467
+ options: input.options,
468
+ args,
469
+ ctx,
470
+ dispatch,
471
+ extra: { event: eventType },
472
+ message: `Origin ${eventType} event`,
473
+ });
474
+ }
475
+ return skipped("unsupported_event", { event: eventType });
481
476
  }
482
477
  /**
483
478
  * HTTP entry for a single agent's Origin channel: optional v1ed verify, then
484
479
  * app-id bind, then {@link dispatchOriginWebhook}.
485
480
  */
486
- export function handleOriginWebhookRequest(input) {
487
- return __awaiter(this, void 0, void 0, function* () {
488
- const bodyText = yield input.request.text();
489
- const requireHttpBinding = input.skipSignatureVerification !== true && shouldSkipOriginVerify() !== true;
490
- if (requireHttpBinding) {
491
- try {
492
- yield verifyOriginWebhook(bodyText, originHeaders(input.request), {
493
- apiBaseUrl: resolveApiBaseUrl(input.options),
494
- });
495
- }
496
- catch (error) {
497
- // A JWKS outage means the delivery was never checked: answer 503 so
498
- // Origin's delivery worker retries. Only a real signature mismatch
499
- // is the terminal 401.
500
- if (error instanceof OriginJwksUnavailableError) {
501
- return Response.json({ ok: false, error: "signature_verification_unavailable" }, { status: 503 });
502
- }
503
- return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
504
- }
505
- }
506
- let payload;
481
+ export async function handleOriginWebhookRequest(input) {
482
+ const bodyText = await input.request.text();
483
+ const requireHttpBinding = input.skipSignatureVerification !== true && shouldSkipOriginVerify() !== true;
484
+ if (requireHttpBinding) {
507
485
  try {
508
- payload = JSON.parse(bodyText);
509
- }
510
- catch (_a) {
511
- return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
512
- }
513
- const envelope = parseOriginWebhookEnvelope(payload);
514
- if (envelope === null) {
515
- return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
486
+ await verifyOriginWebhook(bodyText, originHeaders(input.request), {
487
+ apiBaseUrl: resolveApiBaseUrl(input.options),
488
+ });
516
489
  }
517
- if (requireHttpBinding) {
518
- const bindingError = originHttpBindingError(input.options, envelope);
519
- if (bindingError !== undefined) {
520
- return Response.json({ ok: false, error: bindingError }, { status: 401 });
490
+ catch (error) {
491
+ // A JWKS outage means the delivery was never checked: answer 503 so
492
+ // Origin's delivery worker retries. Only a real signature mismatch
493
+ // is the terminal 401.
494
+ if (error instanceof OriginJwksUnavailableError) {
495
+ return Response.json({ ok: false, error: "signature_verification_unavailable" }, { status: 503 });
521
496
  }
497
+ return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
522
498
  }
523
- return dispatchOriginWebhook({
524
- options: input.options,
525
- envelope,
526
- args: bindLocalIngressSend(input.args, {
527
- identity: input.options.continuation,
528
- kind: "origin",
529
- eventType: envelope.event.type,
530
- payload: originIngressExtractPayload(envelope),
531
- }),
532
- });
499
+ }
500
+ let payload;
501
+ try {
502
+ payload = JSON.parse(bodyText);
503
+ }
504
+ catch {
505
+ return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
506
+ }
507
+ const envelope = parseOriginWebhookEnvelope(payload);
508
+ if (envelope === null) {
509
+ return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
510
+ }
511
+ if (requireHttpBinding) {
512
+ const bindingError = originHttpBindingError(input.options, envelope);
513
+ if (bindingError !== undefined) {
514
+ return Response.json({ ok: false, error: bindingError }, { status: 401 });
515
+ }
516
+ }
517
+ return dispatchOriginWebhook({
518
+ options: input.options,
519
+ envelope,
520
+ args: bindLocalIngressSend(input.args, {
521
+ identity: input.options.continuation,
522
+ kind: "origin",
523
+ eventType: envelope.event.type,
524
+ payload: originIngressExtractPayload(envelope),
525
+ }),
533
526
  });
534
527
  }
535
528
  const originChannelOptionsByDefinition = new WeakMap();
@@ -537,7 +530,6 @@ export function getOriginChannelOptions(definition) {
537
530
  return originChannelOptionsByDefinition.get(definition);
538
531
  }
539
532
  export function originChannel(options = {}) {
540
- var _a, _b;
541
533
  const usesCursorAccount = options.cursorAccount === true || typeof options.cursorAccount === "object";
542
534
  const cursorScope = typeof options.cursorAccount === "object"
543
535
  ? parseCursorOriginRepoScope(options.cursorAccount.repos)
@@ -545,27 +537,32 @@ export function originChannel(options = {}) {
545
537
  if (options.repos !== undefined) {
546
538
  parseCursorOriginRepoScope(options.repos);
547
539
  }
548
- const routePath = (_a = options.path) !== null && _a !== void 0 ? _a : "/";
540
+ const routePath = options.path ?? "/";
549
541
  // v1ed + configured app id is the request auth (allowAll), matching GitHub
550
542
  // HMAC + webhookSecret. Without an app id, prod stays loopback-strict so a
551
543
  // reachable URL cannot be driven by any Origin-signed delivery. `--dev`
552
544
  // / skip-verify admits loopback only.
553
- const auth = (_b = options.auth) !== null && _b !== void 0 ? _b : [
545
+ const auth = options.auth ?? [
554
546
  (request, info) => (shouldSkipOriginVerify()
555
547
  ? loopbackOnly()
556
548
  : configuredOriginAppIds(options).length > 0
557
549
  ? allowAll()
558
550
  : localDevStrict())(request, info),
559
551
  ];
560
- const channelOptions = Object.assign({}, options);
552
+ const channelOptions = {
553
+ ...options,
554
+ };
561
555
  if (channelOptions.continuation !== undefined) {
562
556
  channelOptions.continuation = normalizeIdentity(channelOptions.continuation, "origin");
563
557
  }
564
- const events = Object.assign(Object.assign({}, buildDefaultOriginEvents({
565
- cursorAccount: channelOptions.cursorAccount,
566
- app: channelOptions.app,
567
- deliverReplies: channelOptions.deliverReplies,
568
- })), options.events);
558
+ const events = {
559
+ ...buildDefaultOriginEvents({
560
+ cursorAccount: channelOptions.cursorAccount,
561
+ app: channelOptions.app,
562
+ deliverReplies: channelOptions.deliverReplies,
563
+ }),
564
+ ...options.events,
565
+ };
569
566
  const definition = defineChannel({
570
567
  auth,
571
568
  state: emptyOriginChannelState(),
@@ -580,12 +577,10 @@ export function originChannel(options = {}) {
580
577
  POST(routePath, {
581
578
  bodySchema: z.unknown(),
582
579
  description: "Origin webhook ingress",
583
- handler: (request, args) => __awaiter(this, void 0, void 0, function* () {
584
- return handleOriginWebhookRequest({
585
- options: channelOptions,
586
- request,
587
- args,
588
- });
580
+ handler: async (request, args) => handleOriginWebhookRequest({
581
+ options: channelOptions,
582
+ request,
583
+ args,
589
584
  }),
590
585
  }),
591
586
  ],
@@ -594,7 +589,7 @@ export function originChannel(options = {}) {
594
589
  attachHostedAdmissionAdapter(definition, {
595
590
  kind: ORIGIN_CHANNEL_KIND,
596
591
  prepareArgs: withPropagatingBackgroundErrors,
597
- dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ payload, args }) {
592
+ dispatch: async ({ payload, args }) => {
598
593
  const envelope = parseOriginWebhookEnvelope(payload);
599
594
  if (envelope === null) {
600
595
  return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
@@ -604,7 +599,7 @@ export function originChannel(options = {}) {
604
599
  envelope,
605
600
  args,
606
601
  });
607
- }),
602
+ },
608
603
  });
609
604
  if (usesCursorAccount) {
610
605
  registerOriginCursorAccountRuntime(definition, {
@@ -615,18 +610,17 @@ export function originChannel(options = {}) {
615
610
  return definition;
616
611
  }
617
612
  export function findOriginChannelTargets(mounts) {
618
- var _a;
619
613
  const targets = [];
620
614
  for (const { slug, project } of mounts) {
621
615
  for (const channel of project.channels) {
622
616
  const meta = channel.definition.meta;
623
- if ((meta === null || meta === void 0 ? void 0 : meta.kind) !== ORIGIN_CHANNEL_KIND) {
617
+ if (meta?.kind !== ORIGIN_CHANNEL_KIND) {
624
618
  continue;
625
619
  }
626
620
  targets.push({
627
621
  slug,
628
622
  channelId: channel.id,
629
- events: [...((_a = meta.originWebhookEvents) !== null && _a !== void 0 ? _a : [])],
623
+ events: [...(meta.originWebhookEvents ?? [])],
630
624
  });
631
625
  }
632
626
  }