@cursor/bdk 0.2.24 → 0.2.26

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 (553) hide show
  1. package/AGENTS.md +4 -18
  2. package/CHANGELOG.md +3 -0
  3. package/dist/artifacts.d.ts +1 -1
  4. package/dist/artifacts.js +1 -1
  5. package/dist/bin/agent-serve.d.ts +1 -1
  6. package/dist/bin/agent-serve.js +71 -31
  7. package/dist/channels/bitbucket/api.d.ts +2 -2
  8. package/dist/channels/bitbucket/api.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  10. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +5 -4
  11. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  12. package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
  13. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  14. package/dist/channels/deployments/deployments-channel.js +1 -1
  15. package/dist/channels/github/cursor-account.d.ts +7 -0
  16. package/dist/channels/github/cursor-account.d.ts.map +1 -1
  17. package/dist/channels/github/cursor-account.js +22 -5
  18. package/dist/channels/github/github-channel.d.ts.map +1 -1
  19. package/dist/channels/github/github-channel.js +10 -19
  20. package/dist/channels/github/replay.d.ts +1 -1
  21. package/dist/channels/github/replay.d.ts.map +1 -1
  22. package/dist/channels/gitlab/api.d.ts +2 -2
  23. package/dist/channels/gitlab/api.d.ts.map +1 -1
  24. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  25. package/dist/channels/issues/issues-channel.js +1 -1
  26. package/dist/channels/origin/api.d.ts +4 -4
  27. package/dist/channels/origin/api.d.ts.map +1 -1
  28. package/dist/channels/origin/origin-channel.js +1 -1
  29. package/dist/channels/origin/origin-webhook.d.ts +3 -3
  30. package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
  31. package/dist/channels/pagerduty/api.d.ts +74 -0
  32. package/dist/channels/pagerduty/api.d.ts.map +1 -0
  33. package/dist/channels/pagerduty/api.js +101 -0
  34. package/dist/channels/pagerduty/defaults.d.ts +42 -0
  35. package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
  36. package/dist/channels/pagerduty/defaults.js +132 -0
  37. package/dist/channels/pagerduty/events.d.ts +24 -0
  38. package/dist/channels/pagerduty/events.d.ts.map +1 -0
  39. package/dist/channels/pagerduty/events.js +38 -0
  40. package/dist/channels/pagerduty/index.d.ts +31 -0
  41. package/dist/channels/pagerduty/index.d.ts.map +1 -0
  42. package/dist/channels/pagerduty/index.js +30 -0
  43. package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
  44. package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
  45. package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
  46. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
  47. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
  48. package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
  49. package/dist/channels/pagerduty/payload.d.ts +33 -0
  50. package/dist/channels/pagerduty/payload.d.ts.map +1 -0
  51. package/dist/channels/pagerduty/payload.js +150 -0
  52. package/dist/channels/pagerduty/replay.d.ts +35 -0
  53. package/dist/channels/pagerduty/replay.d.ts.map +1 -0
  54. package/dist/channels/pagerduty/replay.js +115 -0
  55. package/dist/channels/pagerduty/secrets.d.ts +16 -0
  56. package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
  57. package/dist/channels/pagerduty/secrets.js +23 -0
  58. package/dist/channels/pagerduty/self-user.d.ts +51 -0
  59. package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
  60. package/dist/channels/pagerduty/self-user.js +157 -0
  61. package/dist/channels/pagerduty/state.d.ts +31 -0
  62. package/dist/channels/pagerduty/state.d.ts.map +1 -0
  63. package/dist/channels/pagerduty/state.js +30 -0
  64. package/dist/channels/pagerduty/types.d.ts +217 -0
  65. package/dist/channels/pagerduty/types.d.ts.map +1 -0
  66. package/dist/channels/pagerduty/types.js +1 -0
  67. package/dist/channels/runs/runs-channel.js +1 -1
  68. package/dist/channels/slack/agentic-delivery.d.ts +2 -1
  69. package/dist/channels/slack/agentic-delivery.d.ts.map +1 -1
  70. package/dist/channels/slack/agentic-delivery.js +6 -10
  71. package/dist/channels/slack/agentic-signals.d.ts +2 -7
  72. package/dist/channels/slack/agentic-signals.d.ts.map +1 -1
  73. package/dist/channels/slack/agentic-signals.js +4 -3
  74. package/dist/channels/slack/api.d.ts +1 -0
  75. package/dist/channels/slack/api.d.ts.map +1 -1
  76. package/dist/channels/slack/api.js +3 -0
  77. package/dist/channels/slack/constants.d.ts +2 -0
  78. package/dist/channels/slack/constants.d.ts.map +1 -1
  79. package/dist/channels/slack/constants.js +2 -0
  80. package/dist/channels/slack/defaults.d.ts.map +1 -1
  81. package/dist/channels/slack/defaults.js +3 -2
  82. package/dist/channels/slack/dispatch.d.ts +9 -0
  83. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  84. package/dist/channels/slack/dispatch.js +3 -0
  85. package/dist/channels/slack/inbound.d.ts.map +1 -1
  86. package/dist/channels/slack/inbound.js +24 -20
  87. package/dist/channels/slack/interactive.d.ts +2 -0
  88. package/dist/channels/slack/interactive.d.ts.map +1 -1
  89. package/dist/channels/slack/interactive.js +1 -0
  90. package/dist/channels/slack/live-delivery.d.ts +3 -0
  91. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  92. package/dist/channels/slack/live-delivery.js +5 -0
  93. package/dist/channels/slack/reply-options.d.ts +9 -0
  94. package/dist/channels/slack/reply-options.d.ts.map +1 -1
  95. package/dist/channels/slack/reply-options.js +31 -1
  96. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  97. package/dist/channels/slack/slack-channel.js +7 -0
  98. package/dist/channels/slack/stream.d.ts +5 -1
  99. package/dist/channels/slack/stream.d.ts.map +1 -1
  100. package/dist/channels/slack/types.d.ts +29 -0
  101. package/dist/channels/slack/types.d.ts.map +1 -1
  102. package/dist/channels.d.ts +7 -1
  103. package/dist/channels.d.ts.map +1 -1
  104. package/dist/channels.js +12 -24
  105. package/dist/docs/404.html +3 -3
  106. package/dist/docs/assets/{app.DTIg0uKK.js → app.BITbgXMP.js} +4 -4
  107. package/dist/docs/assets/changelog.md.sdD6ctqK.js +1 -0
  108. package/dist/docs/assets/changelog.md.sdD6ctqK.lean.js +1 -0
  109. package/dist/docs/assets/chunks/@localSearchIndexroot.B45uCZp9.js +1 -0
  110. package/dist/docs/assets/chunks/{VPLocalSearchBox.BpJoSaxi.js → VPLocalSearchBox.3qo4-bX9.js} +2 -2
  111. package/dist/docs/assets/chunks/{arc.ylgNvRNq.js → arc.CTrZocKU.js} +1 -1
  112. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BMrNJqYk.js → architectureDiagram-Q4EWVU46.BkgIqxrv.js} +1 -1
  113. package/dist/docs/assets/chunks/{baseUniq.BBWUEqf9.js → baseUniq.5w0JfVgo.js} +1 -1
  114. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DFMu-Vza.js → blockDiagram-DXYQGD6D.BVLtPjQc.js} +1 -1
  115. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.8nkAAxWv.js → c4Diagram-AHTNJAMY.CQ7neZTW.js} +1 -1
  116. package/dist/docs/assets/chunks/channel.Cv2w64wj.js +1 -0
  117. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.sO-z2Bag.js → chunk-4BX2VUAB.D-hJ7uKM.js} +1 -1
  118. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BMROzTMq.js → chunk-4TB4RGXK.RBYX5ywX.js} +1 -1
  119. package/dist/docs/assets/chunks/{chunk-55IACEB6.X81urwg7.js → chunk-55IACEB6.Br05HoEb.js} +1 -1
  120. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.eaZVFLZM.js → chunk-EDXVE4YY.BD_7QS60.js} +1 -1
  121. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CmZhzstR.js → chunk-FMBD7UC4.BOPnMabX.js} +1 -1
  122. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CTezt9Lc.js → chunk-OYMX7WX6.DmGIdP8i.js} +1 -1
  123. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.s-T8zukB.js → chunk-QZHKN3VN.CGHmolCB.js} +1 -1
  124. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DN4Nhy-D.js → chunk-YZCP3GAM.C_Uhs25v.js} +1 -1
  125. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CtO2atCr.js +1 -0
  126. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CtO2atCr.js +1 -0
  127. package/dist/docs/assets/chunks/clone.hfsCtgP4.js +1 -0
  128. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Cqyp4BUH.js → cose-bilkent-S5V4N54A.DsU6xpcZ.js} +1 -1
  129. package/dist/docs/assets/chunks/{dagre-KV5264BT.BIECOiqR.js → dagre-KV5264BT.BqQLDcoU.js} +1 -1
  130. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.1tLyWoTg.js → diagram-5BDNPKRD.Cgv8uUNF.js} +1 -1
  131. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BVY_6VMO.js → diagram-G4DWMVQ6.BXHPSXh_.js} +1 -1
  132. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BSZ7xiBB.js → diagram-MMDJMWI5.CgJzo8f_.js} +1 -1
  133. package/dist/docs/assets/chunks/{diagram-TYMM5635.Bho6GmLh.js → diagram-TYMM5635.CfiN6lgT.js} +1 -1
  134. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.A0yVIANn.js → erDiagram-SMLLAGMA.8n_hHzAd.js} +1 -1
  135. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.ZMgbllH6.js → flowDiagram-DWJPFMVM.B2pb1Dv_.js} +1 -1
  136. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.BCCPBhXo.js → ganttDiagram-T4ZO3ILL.BFih4ucI.js} +1 -1
  137. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BOkL0BbA.js → gitGraphDiagram-UUTBAWPF.CqZ8PTl8.js} +1 -1
  138. package/dist/docs/assets/chunks/{graph.DMyZPu86.js → graph.0ufsI9gu.js} +1 -1
  139. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.CjG1IiEw.js → infoDiagram-42DDH7IO.BkPRFww4.js} +1 -1
  140. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.UCe-kq9g.js → ishikawaDiagram-UXIWVN3A.DCRK-cVX.js} +1 -1
  141. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.3WyOK_eY.js → journeyDiagram-VCZTEJTY.BFyAJo33.js} +1 -1
  142. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.WoRG2qY1.js → kanban-definition-6JOO6SKY.CmA2SoGc.js} +1 -1
  143. package/dist/docs/assets/chunks/{layout.DV07xDd5.js → layout.CYY-CbMr.js} +1 -1
  144. package/dist/docs/assets/chunks/{linear.CTO8mN6o.js → linear.DeeDV4Oq.js} +1 -1
  145. package/dist/docs/assets/chunks/{min.SvTtcKuZ.js → min.BL3XTBN2.js} +1 -1
  146. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.DMGgQ-HB.js → mindmap-definition-QFDTVHPH.BcbY-G6H.js} +1 -1
  147. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B7851apI.js → pieDiagram-DEJITSTG.dzDcQnPE.js} +1 -1
  148. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CEqyypIX.js → quadrantDiagram-34T5L4WZ.RxR0m5iK.js} +1 -1
  149. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.C3Mwsw-H.js → requirementDiagram-MS252O5E.DflaXb6Q.js} +1 -1
  150. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DyYK0XxY.js → sankeyDiagram-XADWPNL6.BteLKQAe.js} +1 -1
  151. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.SiQPH-XM.js → sequenceDiagram-FGHM5R23.BD8jM8oz.js} +1 -1
  152. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CTJMsP4p.js → stateDiagram-FHFEXIEX.C8SBkbPH.js} +1 -1
  153. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BLz7Qyo3.js +1 -0
  154. package/dist/docs/assets/chunks/{theme.DJo4my9R.js → theme.DiViIOLe.js} +2 -2
  155. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.CxSNRlQ6.js → timeline-definition-GMOUNBTQ.D64XF5dV.js} +1 -1
  156. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BdoJskyD.js → vennDiagram-DHZGUBPP.CwmeYan-.js} +1 -1
  157. package/dist/docs/assets/chunks/wardley-RL74JXVD.DmAlXlpu.js +162 -0
  158. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.IjIbFn_F.js → wardleyDiagram-NUSXRM2D.5VJ2-5K0.js} +1 -1
  159. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CPUxDZLH.js → xychartDiagram-5P7HB3ND.Cl6_fZVC.js} +1 -1
  160. package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.js → guides_hooks.md.B2XfGX50.js} +7 -3
  161. package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.js → guides_mcp-oauth.md.Cxq2TxBB.js} +3 -3
  162. package/dist/docs/assets/{guides_mcp-oauth.md.BM_eFC0L.lean.js → guides_mcp-oauth.md.Cxq2TxBB.lean.js} +1 -1
  163. package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.js +37 -0
  164. package/dist/docs/assets/guides_opentelemetry.md.D4wO7_8v.lean.js +1 -0
  165. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
  166. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
  167. package/dist/docs/assets/{guides_slack.md.Bn-WupSE.js → guides_slack.md.ClIyi7FI.js} +8 -3
  168. package/dist/docs/assets/{guides_slack.md.Bn-WupSE.lean.js → guides_slack.md.ClIyi7FI.lean.js} +1 -1
  169. package/dist/docs/assets/{reference_agent-config.md.IplwL25I.js → reference_agent-config.md.CGSx8COP.js} +6 -2
  170. package/dist/docs/assets/{reference_agent-config.md.IplwL25I.lean.js → reference_agent-config.md.CGSx8COP.lean.js} +1 -1
  171. package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.CNNIS6K7.js} +1 -1
  172. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
  173. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
  174. package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.js → reference_hooks.md.CROr0QgC.js} +13 -7
  175. package/dist/docs/assets/{reference_hooks.md.B1jq3oGl.lean.js → reference_hooks.md.CROr0QgC.lean.js} +1 -1
  176. package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.js → reference_schedules.md.BqWnJES4.js} +3 -3
  177. package/dist/docs/assets/reference_sessions.md.Bi6lHttM.js +22 -0
  178. package/dist/docs/assets/reference_sessions.md.Bi6lHttM.lean.js +1 -0
  179. package/dist/docs/assets/{reference_skills.md.C2GWh7g8.js → reference_skills.md.Ckddg6KX.js} +3 -3
  180. package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.Bo0UfT0a.js} +1 -1
  181. package/dist/docs/assets/{style.nMsabY-V.css → style.B9o0luvp.css} +1 -1
  182. package/dist/docs/building-with-agents.html +37 -37
  183. package/dist/docs/changelog.html +60 -0
  184. package/dist/docs/changelog.md +86 -0
  185. package/dist/docs/deployment.html +37 -37
  186. package/dist/docs/evals.html +37 -37
  187. package/dist/docs/guides/agent-to-agent.html +37 -37
  188. package/dist/docs/guides/bitbucket.html +37 -37
  189. package/dist/docs/guides/cloud-agents.html +37 -37
  190. package/dist/docs/guides/convert-automation.html +37 -37
  191. package/dist/docs/guides/export-grokbot.html +37 -37
  192. package/dist/docs/guides/github.html +37 -37
  193. package/dist/docs/guides/gitlab.html +37 -37
  194. package/dist/docs/guides/grokbot-agents.html +37 -37
  195. package/dist/docs/guides/hooks.html +45 -41
  196. package/dist/docs/guides/hooks.md +7 -3
  197. package/dist/docs/guides/improve.html +37 -37
  198. package/dist/docs/guides/jev.html +37 -37
  199. package/dist/docs/guides/mcp-oauth.html +39 -39
  200. package/dist/docs/guides/mcp-oauth.md +12 -0
  201. package/dist/docs/guides/migrate.html +37 -37
  202. package/dist/docs/guides/opentelemetry.html +62 -70
  203. package/dist/docs/guides/opentelemetry.md +150 -175
  204. package/dist/docs/guides/pagerduty.html +119 -0
  205. package/dist/docs/guides/pagerduty.md +336 -0
  206. package/dist/docs/guides/slack.html +44 -39
  207. package/dist/docs/guides/slack.md +41 -0
  208. package/dist/docs/guides/webhooks.html +37 -37
  209. package/dist/docs/hashmap.json +1 -1
  210. package/dist/docs/hillclimbing.html +37 -37
  211. package/dist/docs/index.html +37 -37
  212. package/dist/docs/llms-full.txt +730 -163
  213. package/dist/docs/llms.txt +3 -1
  214. package/dist/docs/quickstart.html +37 -37
  215. package/dist/docs/reference/agent-config.html +42 -38
  216. package/dist/docs/reference/agent-config.md +21 -1
  217. package/dist/docs/reference/artifacts.html +37 -37
  218. package/dist/docs/reference/channels.html +38 -38
  219. package/dist/docs/reference/channels.md +7 -2
  220. package/dist/docs/reference/cli.html +43 -38
  221. package/dist/docs/reference/cli.md +27 -0
  222. package/dist/docs/reference/connections.html +37 -37
  223. package/dist/docs/reference/evals.html +37 -37
  224. package/dist/docs/reference/extensions.html +37 -37
  225. package/dist/docs/reference/hooks.html +49 -43
  226. package/dist/docs/reference/hooks.md +10 -5
  227. package/dist/docs/reference/http-api.html +37 -37
  228. package/dist/docs/reference/instructions.html +37 -37
  229. package/dist/docs/reference/memory.html +37 -37
  230. package/dist/docs/reference/playground.html +36 -36
  231. package/dist/docs/reference/project-layout.html +37 -37
  232. package/dist/docs/reference/prompt.html +37 -37
  233. package/dist/docs/reference/schedules.html +40 -40
  234. package/dist/docs/reference/sessions.html +58 -37
  235. package/dist/docs/reference/sessions.md +46 -1
  236. package/dist/docs/reference/skills.html +40 -40
  237. package/dist/docs/reference/subagents.html +37 -37
  238. package/dist/docs/reference/tools.html +39 -39
  239. package/dist/docs/reference/tools.md +4 -3
  240. package/dist/docs/templates/agentic-owners.html +37 -37
  241. package/dist/docs/templates/grokbot-agents.html +37 -37
  242. package/dist/docs/templates/security-reviewer.html +37 -37
  243. package/dist/docs/templates/thermo-quality-review.html +37 -37
  244. package/dist/docs/templates/thermo-review.html +37 -37
  245. package/dist/docs/templates/triage.html +37 -37
  246. package/dist/docs/troubleshooting.html +36 -36
  247. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  248. package/dist/extensions/cursor-cloud-agents/extension.js +15 -15
  249. package/dist/extensions/cursor-cloud-agents/lib/backend.js +1 -1
  250. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  251. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
  252. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
  253. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
  254. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
  255. package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
  256. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  257. package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
  258. package/dist/extensions/cursor-grokbot-agents/extension.d.ts.map +1 -1
  259. package/dist/extensions/cursor-grokbot-agents/extension.js +7 -3
  260. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
  261. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
  262. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
  263. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
  264. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
  265. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
  266. package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
  267. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
  268. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  269. package/dist/extensions/improve/extension.js +1 -1
  270. package/dist/extensions/jev/extension.js +2 -2
  271. package/dist/extensions/jev/tools/evaluate.js +3 -3
  272. package/dist/extensions/slack-communication/extension.js +1 -1
  273. package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
  274. package/dist/extensions/slack-communication/tools/edit-message.d.ts.map +1 -1
  275. package/dist/extensions/slack-communication/tools/edit-message.js +3 -6
  276. package/dist/extensions/slack-communication/tools/post-card.js +1 -1
  277. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  278. package/dist/extensions/slack-communication/tools/post-update.d.ts.map +1 -1
  279. package/dist/extensions/slack-communication/tools/post-update.js +3 -6
  280. package/dist/extensions/slack-communication/tools/react.js +1 -1
  281. package/dist/extensions/slack-communication/tools/set-status.js +1 -1
  282. package/dist/extensions.d.ts +1 -1
  283. package/dist/extensions.js +1 -1
  284. package/dist/index.d.ts +14 -11
  285. package/dist/index.d.ts.map +1 -1
  286. package/dist/index.js +8 -4
  287. package/dist/internal/approval-gate.d.ts +4 -2
  288. package/dist/internal/approval-gate.d.ts.map +1 -1
  289. package/dist/internal/approval-gate.js +2 -1
  290. package/dist/internal/as-of.d.ts +2 -0
  291. package/dist/internal/as-of.d.ts.map +1 -1
  292. package/dist/internal/as-of.js +2 -0
  293. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  294. package/dist/internal/builtin-tools/artifacts.js +45 -12
  295. package/dist/internal/builtin-tools/reminders.js +1 -1
  296. package/dist/internal/channel-architecture.d.ts +1 -1
  297. package/dist/internal/channel-architecture.d.ts.map +1 -1
  298. package/dist/internal/channel-architecture.js +4 -2
  299. package/dist/internal/cli-deploy.d.ts.map +1 -1
  300. package/dist/internal/cli-deploy.js +39 -22
  301. package/dist/internal/cli-pagerduty.d.ts +32 -0
  302. package/dist/internal/cli-pagerduty.d.ts.map +1 -0
  303. package/dist/internal/cli-pagerduty.js +242 -0
  304. package/dist/internal/continuation-channel.d.ts.map +1 -1
  305. package/dist/internal/continuation-channel.js +7 -0
  306. package/dist/internal/continuation-identity.d.ts +11 -3
  307. package/dist/internal/continuation-identity.d.ts.map +1 -1
  308. package/dist/internal/continuation-identity.js +83 -0
  309. package/dist/internal/continuation.d.ts +3 -0
  310. package/dist/internal/continuation.d.ts.map +1 -0
  311. package/dist/internal/continuation.js +1 -0
  312. package/dist/internal/conversation-mirror.d.ts +5 -0
  313. package/dist/internal/conversation-mirror.d.ts.map +1 -1
  314. package/dist/internal/conversation-mirror.js +12 -1
  315. package/dist/internal/convert-automation/convert-workflow.js +1 -1
  316. package/dist/internal/convert-grokbot/answers.d.ts.map +1 -1
  317. package/dist/internal/convert-grokbot/answers.js +10 -8
  318. package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
  319. package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
  320. package/dist/internal/convert-grokbot/recipe.js +1 -1
  321. package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
  322. package/dist/internal/cursor/account-mcp.js +2 -0
  323. package/dist/internal/cursor/backend-client.d.ts +8 -3
  324. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  325. package/dist/internal/cursor/backend-client.js +8 -3
  326. package/dist/internal/cursor/credentials.d.ts +2 -2
  327. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  328. package/dist/internal/cursor/credentials.js +1 -1
  329. package/dist/internal/cursor-account-mcp-auth.d.ts +6 -2
  330. package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
  331. package/dist/internal/cursor-account-mcp-auth.js +15 -6
  332. package/dist/internal/deferred-channel-session.d.ts +5 -4
  333. package/dist/internal/deferred-channel-session.d.ts.map +1 -1
  334. package/dist/internal/deferred-channel-session.js +6 -4
  335. package/dist/internal/deploy-client.d.ts +5 -0
  336. package/dist/internal/deploy-client.d.ts.map +1 -1
  337. package/dist/internal/deploy-client.js +3 -3
  338. package/dist/internal/deploy-manifest.d.ts +11 -4
  339. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  340. package/dist/internal/deploy-manifest.js +19 -7
  341. package/dist/internal/describe-error.d.ts +2 -0
  342. package/dist/internal/describe-error.d.ts.map +1 -1
  343. package/dist/internal/describe-error.js +2 -0
  344. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  345. package/dist/internal/discovery/agent-config.js +10 -10
  346. package/dist/internal/discovery/agent.d.ts.map +1 -1
  347. package/dist/internal/discovery/agent.js +10 -10
  348. package/dist/internal/discovery/channels.d.ts.map +1 -1
  349. package/dist/internal/discovery/channels.js +20 -16
  350. package/dist/internal/discovery/context.d.ts +16 -0
  351. package/dist/internal/discovery/context.d.ts.map +1 -1
  352. package/dist/internal/discovery/context.js +67 -2
  353. package/dist/internal/discovery/cursor-plugin.js +8 -8
  354. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  355. package/dist/internal/discovery/extension-overlay.js +2 -6
  356. package/dist/internal/discovery/extensions.js +15 -8
  357. package/dist/internal/discovery/info.d.ts +2 -2
  358. package/dist/internal/discovery/info.d.ts.map +1 -1
  359. package/dist/internal/discovery/info.js +9 -9
  360. package/dist/internal/discovery/instructions.d.ts.map +1 -1
  361. package/dist/internal/discovery/instructions.js +3 -6
  362. package/dist/internal/discovery/instrumentation.d.ts +10 -0
  363. package/dist/internal/discovery/instrumentation.d.ts.map +1 -0
  364. package/dist/internal/discovery/instrumentation.js +29 -0
  365. package/dist/internal/discovery/modules.d.ts.map +1 -1
  366. package/dist/internal/discovery/modules.js +7 -10
  367. package/dist/internal/discovery/project-public.d.ts +16 -0
  368. package/dist/internal/discovery/project-public.d.ts.map +1 -0
  369. package/dist/internal/discovery/project-public.js +54 -0
  370. package/dist/internal/discovery/project.d.ts +6 -0
  371. package/dist/internal/discovery/project.d.ts.map +1 -1
  372. package/dist/internal/discovery/project.js +40 -8
  373. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  374. package/dist/internal/discovery/runtime.js +8 -8
  375. package/dist/internal/discovery/services.d.ts +5 -4
  376. package/dist/internal/discovery/services.d.ts.map +1 -1
  377. package/dist/internal/discovery/services.js +12 -6
  378. package/dist/internal/discovery.d.ts +1 -1
  379. package/dist/internal/discovery.d.ts.map +1 -1
  380. package/dist/internal/discovery.js +1 -1
  381. package/dist/internal/event-mapper.d.ts.map +1 -1
  382. package/dist/internal/event-mapper.js +1 -0
  383. package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
  384. package/dist/internal/expected-delivery-failure.js +6 -0
  385. package/dist/internal/factory-resource-channel.d.ts +1 -1
  386. package/dist/internal/factory-resource-channel.d.ts.map +1 -1
  387. package/dist/internal/filesystem/nearest.d.ts +1 -0
  388. package/dist/internal/filesystem/nearest.d.ts.map +1 -1
  389. package/dist/internal/filesystem/nearest.js +1 -0
  390. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
  391. package/dist/internal/filesystem/sdk-schemas.js +4 -3
  392. package/dist/internal/filesystem/tools.d.ts.map +1 -1
  393. package/dist/internal/filesystem/tools.js +1 -1
  394. package/dist/internal/handleAgentServeTrigger.d.ts +10 -0
  395. package/dist/internal/handleAgentServeTrigger.d.ts.map +1 -1
  396. package/dist/internal/handleAgentServeTrigger.js +3 -0
  397. package/dist/internal/hmac-secret-values.d.ts +48 -0
  398. package/dist/internal/hmac-secret-values.d.ts.map +1 -0
  399. package/dist/internal/hmac-secret-values.js +68 -0
  400. package/dist/internal/host-otel.d.ts +1 -1
  401. package/dist/internal/host-otel.d.ts.map +1 -1
  402. package/dist/internal/host-otel.js +5 -0
  403. package/dist/internal/host-platforms.d.ts.map +1 -1
  404. package/dist/internal/host-platforms.js +8 -2
  405. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  406. package/dist/internal/hosted-delivery.js +6 -2
  407. package/dist/internal/http-channel.d.ts.map +1 -1
  408. package/dist/internal/http-channel.js +1 -0
  409. package/dist/internal/ids.d.ts +8 -0
  410. package/dist/internal/ids.d.ts.map +1 -1
  411. package/dist/internal/ids.js +20 -0
  412. package/dist/internal/init-scaffold.js +1 -1
  413. package/dist/internal/interview/agent-questions.d.ts +1 -1
  414. package/dist/internal/interview/agent-questions.d.ts.map +1 -1
  415. package/dist/internal/interview/agent-questions.js +1 -1
  416. package/dist/internal/interview/question.d.ts +2 -2
  417. package/dist/internal/interview/question.d.ts.map +1 -1
  418. package/dist/internal/interview/question.js +2 -2
  419. package/dist/internal/json-schema.d.ts +7 -7
  420. package/dist/internal/json-schema.d.ts.map +1 -1
  421. package/dist/internal/json-schema.js +16 -23
  422. package/dist/internal/mcp-endpoint.d.ts +16 -4
  423. package/dist/internal/mcp-endpoint.d.ts.map +1 -1
  424. package/dist/internal/mcp-endpoint.js +18 -6
  425. package/dist/internal/mcp-host.d.ts +9 -0
  426. package/dist/internal/mcp-host.d.ts.map +1 -1
  427. package/dist/internal/mcp-host.js +15 -0
  428. package/dist/internal/otel/collector.d.ts +5 -0
  429. package/dist/internal/otel/collector.d.ts.map +1 -1
  430. package/dist/internal/otel/collector.js +27 -6
  431. package/dist/internal/otel/config.d.ts +37 -22
  432. package/dist/internal/otel/config.d.ts.map +1 -1
  433. package/dist/internal/otel/config.js +132 -125
  434. package/dist/internal/otel/conversation-span-processor.d.ts +9 -0
  435. package/dist/internal/otel/conversation-span-processor.d.ts.map +1 -0
  436. package/dist/internal/otel/conversation-span-processor.js +34 -0
  437. package/dist/internal/otel/customer.d.ts +52 -0
  438. package/dist/internal/otel/customer.d.ts.map +1 -0
  439. package/dist/internal/otel/customer.js +727 -0
  440. package/dist/internal/otel/runtime.d.ts +12 -16
  441. package/dist/internal/otel/runtime.d.ts.map +1 -1
  442. package/dist/internal/otel/runtime.js +37 -218
  443. package/dist/internal/otel-env.d.ts +6 -0
  444. package/dist/internal/otel-env.d.ts.map +1 -0
  445. package/dist/internal/otel-env.js +5 -0
  446. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  447. package/dist/internal/package-inline-stdio.js +21 -6
  448. package/dist/internal/reminder-runner.d.ts +9 -4
  449. package/dist/internal/reminder-runner.d.ts.map +1 -1
  450. package/dist/internal/reminder-runner.js +12 -10
  451. package/dist/internal/reminder-schedule.d.ts +1 -0
  452. package/dist/internal/reminder-schedule.d.ts.map +1 -1
  453. package/dist/internal/reminder-schedule.js +1 -0
  454. package/dist/internal/sdk-runner.d.ts +4 -3
  455. package/dist/internal/sdk-runner.d.ts.map +1 -1
  456. package/dist/internal/sdk-runner.js +157 -17
  457. package/dist/internal/secret-alternatives.d.ts +11 -0
  458. package/dist/internal/secret-alternatives.d.ts.map +1 -0
  459. package/dist/internal/secret-alternatives.js +13 -0
  460. package/dist/internal/server.d.ts +4 -1
  461. package/dist/internal/server.d.ts.map +1 -1
  462. package/dist/internal/server.js +27 -26
  463. package/dist/internal/session-engine.d.ts +27 -0
  464. package/dist/internal/session-engine.d.ts.map +1 -1
  465. package/dist/internal/session-engine.js +154 -25
  466. package/dist/internal/slack-provision-client.js +1 -1
  467. package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
  468. package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
  469. package/dist/internal/sqlite-experimental-warning.js +22 -0
  470. package/dist/internal/store-api-protocol.d.ts +1 -1
  471. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  472. package/dist/internal/store-api-protocol.js +1 -1
  473. package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
  474. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
  475. package/dist/internal/testing/conversation-identity-vectors.js +34 -0
  476. package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
  477. package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
  478. package/dist/internal/testing/hmac-secret-vectors.js +89 -0
  479. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
  480. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
  481. package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
  482. package/dist/internal/update-check.d.ts +2 -2
  483. package/dist/internal/update-check.d.ts.map +1 -1
  484. package/dist/internal/update-check.js +3 -3
  485. package/dist/internal/zod-schema.d.ts +14 -0
  486. package/dist/internal/zod-schema.d.ts.map +1 -0
  487. package/dist/internal/zod-schema.js +22 -0
  488. package/dist/internal/zod3-datetime.d.ts +12 -0
  489. package/dist/internal/zod3-datetime.d.ts.map +1 -0
  490. package/dist/internal/zod3-datetime.js +17 -0
  491. package/dist/otel-public.d.ts +2 -3
  492. package/dist/otel-public.d.ts.map +1 -1
  493. package/dist/otel-public.js +2 -2
  494. package/dist/otel.d.ts +3 -102
  495. package/dist/otel.d.ts.map +1 -1
  496. package/dist/otel.js +61 -97
  497. package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
  498. package/dist/playground/assets/index-CyPkf2y7.css +1 -0
  499. package/dist/playground/assets/index-DpbzbqFY.js +62 -0
  500. package/dist/playground/index.html +2 -2
  501. package/dist/public-deprecated.d.ts +36 -0
  502. package/dist/public-deprecated.d.ts.map +1 -0
  503. package/dist/public-deprecated.js +39 -0
  504. package/dist/tools.d.ts +16 -13
  505. package/dist/tools.d.ts.map +1 -1
  506. package/dist/tools.js +4 -3
  507. package/dist/types.d.ts +286 -104
  508. package/dist/types.d.ts.map +1 -1
  509. package/docs/changelog.md +91 -0
  510. package/docs/guides/hooks.md +7 -3
  511. package/docs/guides/mcp-oauth.md +12 -0
  512. package/docs/guides/opentelemetry.md +150 -180
  513. package/docs/guides/pagerduty.md +341 -0
  514. package/docs/guides/slack.md +41 -0
  515. package/docs/reference/agent-config.md +21 -1
  516. package/docs/reference/channels.md +7 -2
  517. package/docs/reference/cli.md +27 -0
  518. package/docs/reference/hooks.md +10 -5
  519. package/docs/reference/sessions.md +46 -1
  520. package/docs/reference/tools.md +4 -3
  521. package/package.json +39 -8
  522. package/schemas/grokbot-answers.schema.json +11 -0
  523. package/skills/framework-map/SKILL.md +2 -1
  524. package/skills/migrate-v2/SKILL.md +1 -1
  525. package/skills/otel/SKILL.md +30 -46
  526. package/templates/agentic-owners/README.md +6 -1
  527. package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
  528. package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
  529. package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
  530. package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
  531. package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
  532. package/templates/code-wiki/evals/wiki.eval.ts +2 -2
  533. package/dist/docs/assets/chunks/@localSearchIndexroot.3ebvCWKy.js +0 -1
  534. package/dist/docs/assets/chunks/channel.BOebySCN.js +0 -1
  535. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C55IaN-T.js +0 -1
  536. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C55IaN-T.js +0 -1
  537. package/dist/docs/assets/chunks/clone.D06pA7ML.js +0 -1
  538. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DddRVjeq.js +0 -1
  539. package/dist/docs/assets/chunks/wardley-RL74JXVD.CVCRSuQK.js +0 -162
  540. package/dist/docs/assets/guides_opentelemetry.md.Ck1o2frw.js +0 -45
  541. package/dist/docs/assets/guides_opentelemetry.md.Ck1o2frw.lean.js +0 -1
  542. package/dist/docs/assets/reference_sessions.md.C8FXuGwk.js +0 -1
  543. package/dist/docs/assets/reference_sessions.md.C8FXuGwk.lean.js +0 -1
  544. package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
  545. package/dist/playground/assets/index-DKKdkF29.js +0 -62
  546. package/dist/playground/assets/index-DpKinTMs.css +0 -1
  547. package/templates/grokbot-agents/.gitignore +0 -4
  548. package/templates/security-help/.gitignore +0 -4
  549. /package/dist/docs/assets/{guides_hooks.md.Bfj0pK91.lean.js → guides_hooks.md.B2XfGX50.lean.js} +0 -0
  550. /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.CNNIS6K7.lean.js} +0 -0
  551. /package/dist/docs/assets/{reference_schedules.md.03Ryy9ca.lean.js → reference_schedules.md.BqWnJES4.lean.js} +0 -0
  552. /package/dist/docs/assets/{reference_skills.md.C2GWh7g8.lean.js → reference_skills.md.Ckddg6KX.lean.js} +0 -0
  553. /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.Bo0UfT0a.lean.js} +0 -0
@@ -0,0 +1,64 @@
1
+ import { type AuthPolicy, type ChannelDefinition } from "../../types.js";
2
+ import type { SecretAlternatives } from "../../internal/secret-alternatives.js";
3
+ import { type PagerDutyChannelState } from "./state.js";
4
+ import type { PagerDutyChannelOptions } from "./types.js";
5
+ export declare function getPagerDutyChannelOptions(definition: object): PagerDutyChannelOptions | undefined;
6
+ /**
7
+ * Deployment secrets the channel reads in the guest that must each be set:
8
+ * a named `selfUserIds`, `token`, or `from` secret. `deploy` declares them
9
+ * so an unset one is flagged instead of the agent waking on its own echoes
10
+ * or failing its write-backs.
11
+ */
12
+ export declare function pagerDutyChannelCredentialSecretNames(definition: object): string[];
13
+ /**
14
+ * Deployment secrets of which at least one must be set: with `selfUserIds`
15
+ * omitted, the agent's user comes from `PAGERDUTY_USER_ID` or is inferred
16
+ * from the channel's token. `deploy` warns when neither is set. A token
17
+ * authored in code always infers, so it needs no warning.
18
+ */
19
+ export declare function pagerDutyChannelSecretAlternatives(definition: object): SecretAlternatives[];
20
+ /**
21
+ * Why a `pagerdutyChannel` cannot deploy onto architecture v2 as authored,
22
+ * or `undefined` when it can: v2 needs a named `webhookSecret` so the
23
+ * control plane can verify `X-PagerDuty-Signature` before any compute starts.
24
+ */
25
+ export declare function pagerDutyChannelArchitectureError(definition: object): string | undefined;
26
+ /**
27
+ * The route policy for a PagerDuty v3 webhook whose secret is named: any
28
+ * `v1=` entry of `X-PagerDuty-Signature` must be the body's HMAC under the
29
+ * env var / deployment secret `secretName`, so both of a rotating pair of
30
+ * secrets verify. Being an {@link hmacSignatureAuth} policy, `deploy`
31
+ * writes it into the manifest and the control plane runs the same check
32
+ * at ingestion.
33
+ */
34
+ export declare function pagerDutyWebhookSignatureAuth(secretName: string): AuthPolicy;
35
+ export declare function pagerdutyChannel(options?: PagerDutyChannelOptions): ChannelDefinition<PagerDutyChannelState>;
36
+ /** The slice of a discovered agent mount that {@link findPagerDutyChannelTargets} reads. */
37
+ export interface PagerDutyAgentMountLike {
38
+ slug: string;
39
+ project: {
40
+ channels: Array<{
41
+ id: string;
42
+ definition: {
43
+ meta?: {
44
+ kind?: string;
45
+ pagerdutyWebhookEvents?: readonly string[];
46
+ };
47
+ routes?: ReadonlyArray<{
48
+ method: string;
49
+ path: string;
50
+ }>;
51
+ };
52
+ }>;
53
+ };
54
+ }
55
+ export interface PagerDutyChannelTarget {
56
+ slug: string;
57
+ channelId: string;
58
+ /** Route path under the channel (default `/`). */
59
+ routePath: string;
60
+ events: string[];
61
+ }
62
+ /** Every mounted `pagerdutyChannel()`, for `bdk pagerduty replay` and `events`. */
63
+ export declare function findPagerDutyChannelTargets(mounts: ReadonlyArray<PagerDutyAgentMountLike>): PagerDutyChannelTarget[];
64
+ //# sourceMappingURL=pagerduty-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagerduty-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/pagerduty-channel.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAe,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAahF,OAAO,EAA8B,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAI1D,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,GACjB,uBAAuB,GAAG,SAAS,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,qCAAqC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAUlF;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAe3F;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAO5E;AAmCD,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,iBAAiB,CAAC,qBAAqB,CAAC,CA4D1C;AAED,4FAA4F;AAC5F,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;YACX,UAAU,EAAE;gBACV,IAAI,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;oBAAC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;iBAAE,CAAC;gBACrE,MAAM,CAAC,EAAE,aAAa,CAAC;oBAAE,MAAM,EAAE,MAAM,CAAC;oBAAC,IAAI,EAAE,MAAM,CAAA;iBAAE,CAAC,CAAC;aAC1D,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAC7C,sBAAsB,EAAE,CAkB1B"}
@@ -0,0 +1,195 @@
1
+ import * as z from "zod/v4";
2
+ import { allowAll, defineChannel, hmacSignatureAuth, localDevStrict, loopbackOnly, POST, } from "../../channels.js";
3
+ import { withPropagatingBackgroundErrors } from "../../internal/channel-dispatch.js";
4
+ import { normalizeIdentity } from "../../internal/continuation-identity.js";
5
+ import { isDevMode } from "../../internal/dev-mode.js";
6
+ import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
7
+ import { replayCatchRequest } from "../../internal/hosted-catch.js";
8
+ import { AGENT_SDK_CATCH_EVENT_TYPE } from "../../internal/hosted-catch-protocol.js";
9
+ import { namedWebhookSecretArchitectureError } from "../../internal/named-webhook-secret.js";
10
+ import { isSecretRef } from "../../types.js";
11
+ import { buildDefaultPagerDutyEvents } from "./defaults.js";
12
+ import { derivePagerDutyWebhookEvents, PAGERDUTY_CHANNEL_KIND } from "./events.js";
13
+ import { handlePagerDutyWebhookRequest, PAGERDUTY_SIGNATURE_HEADER, PAGERDUTY_SIGNATURE_PREFIX, PAGERDUTY_SIGNATURE_SEPARATOR, PAGERDUTY_WEBHOOK_SECRET_ENV, } from "./pagerduty-webhook.js";
14
+ import { PAGERDUTY_TOKEN_ENV } from "./api.js";
15
+ import { PAGERDUTY_USER_ID_ENV, pagerDutySelfUserIdSecretName } from "./self-user.js";
16
+ import { pagerDutySecretName, resolvePagerDutySecret } from "./secrets.js";
17
+ import { emptyPagerDutyChannelState } from "./state.js";
18
+ const pagerDutyChannelOptionsByDefinition = new WeakMap();
19
+ export function getPagerDutyChannelOptions(definition) {
20
+ return pagerDutyChannelOptionsByDefinition.get(definition);
21
+ }
22
+ /**
23
+ * Deployment secrets the channel reads in the guest that must each be set:
24
+ * a named `selfUserIds`, `token`, or `from` secret. `deploy` declares them
25
+ * so an unset one is flagged instead of the agent waking on its own echoes
26
+ * or failing its write-backs.
27
+ */
28
+ export function pagerDutyChannelCredentialSecretNames(definition) {
29
+ const options = getPagerDutyChannelOptions(definition);
30
+ if (options === undefined) {
31
+ return [];
32
+ }
33
+ return [
34
+ ...(options.selfUserIds === undefined ? [] : [pagerDutySelfUserIdSecretName(options)]),
35
+ ...(isSecretRef(options.token) ? [options.token.secretName] : []),
36
+ ...(isSecretRef(options.from) ? [options.from.secretName] : []),
37
+ ].filter((name) => name !== undefined);
38
+ }
39
+ /**
40
+ * Deployment secrets of which at least one must be set: with `selfUserIds`
41
+ * omitted, the agent's user comes from `PAGERDUTY_USER_ID` or is inferred
42
+ * from the channel's token. `deploy` warns when neither is set. A token
43
+ * authored in code always infers, so it needs no warning.
44
+ */
45
+ export function pagerDutyChannelSecretAlternatives(definition) {
46
+ const options = getPagerDutyChannelOptions(definition);
47
+ if (options === undefined || options.selfUserIds !== undefined) {
48
+ return [];
49
+ }
50
+ const tokenName = pagerDutySecretName(options.token, PAGERDUTY_TOKEN_ENV);
51
+ if (tokenName === undefined) {
52
+ return [];
53
+ }
54
+ return [
55
+ {
56
+ names: [PAGERDUTY_USER_ID_ENV, tokenName],
57
+ unsetEffect: `the PagerDuty channel cannot tell the agent's own actions apart, so echo skip is off (set ${PAGERDUTY_USER_ID_ENV}, or ${tokenName} to infer it)`,
58
+ },
59
+ ];
60
+ }
61
+ /**
62
+ * Why a `pagerdutyChannel` cannot deploy onto architecture v2 as authored,
63
+ * or `undefined` when it can: v2 needs a named `webhookSecret` so the
64
+ * control plane can verify `X-PagerDuty-Signature` before any compute starts.
65
+ */
66
+ export function pagerDutyChannelArchitectureError(definition) {
67
+ const options = getPagerDutyChannelOptions(definition);
68
+ if (options === undefined) {
69
+ return undefined;
70
+ }
71
+ return namedWebhookSecretArchitectureError({
72
+ option: "pagerdutyChannel webhookSecret",
73
+ webhookSecret: options.webhookSecret,
74
+ envName: PAGERDUTY_WEBHOOK_SECRET_ENV,
75
+ verifies: "X-PagerDuty-Signature",
76
+ });
77
+ }
78
+ /**
79
+ * The route policy for a PagerDuty v3 webhook whose secret is named: any
80
+ * `v1=` entry of `X-PagerDuty-Signature` must be the body's HMAC under the
81
+ * env var / deployment secret `secretName`, so both of a rotating pair of
82
+ * secrets verify. Being an {@link hmacSignatureAuth} policy, `deploy`
83
+ * writes it into the manifest and the control plane runs the same check
84
+ * at ingestion.
85
+ */
86
+ export function pagerDutyWebhookSignatureAuth(secretName) {
87
+ return hmacSignatureAuth({
88
+ header: PAGERDUTY_SIGNATURE_HEADER,
89
+ secret: secretName,
90
+ prefix: PAGERDUTY_SIGNATURE_PREFIX,
91
+ separator: PAGERDUTY_SIGNATURE_SEPARATOR,
92
+ });
93
+ }
94
+ /**
95
+ * Default route auth for the resolved webhook secret, the same postures as
96
+ * the SCM channels: a named secret is the route policy (and the control
97
+ * plane's catch check); a literal or getter keeps the check in the handler
98
+ * behind `allowAll()`.
99
+ *
100
+ * An omitted `webhookSecret` names `PAGERDUTY_WEBHOOK_SECRET`, so a
101
+ * zero-config channel deploys with the control plane verifying against
102
+ * that deployment secret. While it is unset (a fresh local checkout), the
103
+ * route keeps the no-secret posture: loopback-strict, and `--dev` admits
104
+ * loopback. Both are read per request: channel modules construct at import,
105
+ * and a hosted deployment receives its secrets per request.
106
+ */
107
+ function defaultPagerDutyRouteAuth(webhookSecret, usesDefaultSecret) {
108
+ if (isSecretRef(webhookSecret)) {
109
+ const signature = pagerDutyWebhookSignatureAuth(webhookSecret.secretName);
110
+ if (!usesDefaultSecret) {
111
+ return [signature];
112
+ }
113
+ const whileUnset = (request, info) => {
114
+ if (resolvePagerDutySecret(webhookSecret, PAGERDUTY_WEBHOOK_SECRET_ENV) !== undefined) {
115
+ return null;
116
+ }
117
+ return (isDevMode() ? loopbackOnly() : localDevStrict())(request, info);
118
+ };
119
+ return [signature, whileUnset];
120
+ }
121
+ return [allowAll()];
122
+ }
123
+ export function pagerdutyChannel(options = {}) {
124
+ const routePath = options.path ?? "/";
125
+ // Always named, never read here: it deploys like an authored
126
+ // `{ secretName: "PAGERDUTY_WEBHOOK_SECRET" }` whether or not the shell
127
+ // that runs `deploy` has the value.
128
+ const usesDefaultSecret = options.webhookSecret === undefined;
129
+ const webhookSecret = options.webhookSecret ?? { secretName: PAGERDUTY_WEBHOOK_SECRET_ENV };
130
+ const auth = options.auth ?? defaultPagerDutyRouteAuth(webhookSecret, usesDefaultSecret);
131
+ const channelOptions = { ...options, webhookSecret };
132
+ if (channelOptions.continuation !== undefined) {
133
+ channelOptions.continuation = normalizeIdentity(channelOptions.continuation, PAGERDUTY_CHANNEL_KIND);
134
+ }
135
+ const definition = defineChannel({
136
+ auth,
137
+ state: emptyPagerDutyChannelState(),
138
+ events: { ...buildDefaultPagerDutyEvents(channelOptions), ...options.events },
139
+ onStart: options.onStart,
140
+ onStop: options.onStop,
141
+ meta: {
142
+ kind: PAGERDUTY_CHANNEL_KIND,
143
+ pagerdutyWebhookEvents: derivePagerDutyWebhookEvents(channelOptions),
144
+ },
145
+ routes: [
146
+ POST(routePath, {
147
+ bodySchema: z.unknown(),
148
+ description: "PagerDuty v3 webhook ingress",
149
+ handler: async (request, args) => handlePagerDutyWebhookRequest({ options: channelOptions, request, args }),
150
+ }),
151
+ ],
152
+ });
153
+ pagerDutyChannelOptionsByDefinition.set(definition, channelOptions);
154
+ attachHostedAdmissionAdapter(definition, {
155
+ kind: PAGERDUTY_CHANNEL_KIND,
156
+ prepareArgs: withPropagatingBackgroundErrors,
157
+ dispatch: async ({ channelId, eventType, payload, deliveryId, args }) => {
158
+ // Hosted deliveries are http.request envelopes the control plane
159
+ // already verified with the deployment secret and stamped with the
160
+ // incident's key. Replay into the route handler, which verifies
161
+ // X-PagerDuty-Signature again and runs the echo skip.
162
+ if (eventType !== AGENT_SDK_CATCH_EVENT_TYPE) {
163
+ return Response.json({ ok: false, error: "unsupported_pagerduty_delivery" }, { status: 400 });
164
+ }
165
+ return replayCatchRequest({
166
+ channelId: channelId ?? PAGERDUTY_CHANNEL_KIND,
167
+ deliveryId,
168
+ routes: definition.routes ?? [],
169
+ payload,
170
+ args,
171
+ });
172
+ },
173
+ });
174
+ return definition;
175
+ }
176
+ /** Every mounted `pagerdutyChannel()`, for `bdk pagerduty replay` and `events`. */
177
+ export function findPagerDutyChannelTargets(mounts) {
178
+ const targets = [];
179
+ for (const { slug, project } of mounts) {
180
+ for (const channel of project.channels) {
181
+ const meta = channel.definition.meta;
182
+ if (meta?.kind !== PAGERDUTY_CHANNEL_KIND) {
183
+ continue;
184
+ }
185
+ const postRoute = (channel.definition.routes ?? []).find((route) => route.method === "POST");
186
+ targets.push({
187
+ slug,
188
+ channelId: channel.id,
189
+ routePath: postRoute?.path ?? "/",
190
+ events: [...(meta.pagerdutyWebhookEvents ?? [])],
191
+ });
192
+ }
193
+ }
194
+ return targets;
195
+ }
@@ -0,0 +1,70 @@
1
+ import type { ChannelHandlerArgs } from "../../types.js";
2
+ import type { PagerDutyChannelOptions, PagerDutyEventContext, PagerDutyWebhookDelivery } from "./types.js";
3
+ /** Env var / deployment secret an omitted `webhookSecret` falls back to. */
4
+ export declare const PAGERDUTY_WEBHOOK_SECRET_ENV = "PAGERDUTY_WEBHOOK_SECRET";
5
+ /** Header PagerDuty signs v3 deliveries with: `v1=<hex>[,v1=<hex>…]`. */
6
+ export declare const PAGERDUTY_SIGNATURE_HEADER = "x-pagerduty-signature";
7
+ export declare const PAGERDUTY_SIGNATURE_PREFIX = "v1=";
8
+ /** Separator between signatures while a subscription's secret rotates. */
9
+ export declare const PAGERDUTY_SIGNATURE_SEPARATOR = ",";
10
+ /**
11
+ * The secret's value for the handler's own signature check, read now: an
12
+ * omitted field names `PAGERDUTY_WEBHOOK_SECRET` (hosted, the addressed
13
+ * installation's secret), and an authored name never falls back to it.
14
+ */
15
+ export declare function resolvePagerDutyWebhookSecret(options: Pick<PagerDutyChannelOptions, "webhookSecret">): string | undefined;
16
+ /** One `X-PagerDuty-Signature` entry for a raw body: `v1=<hex>`. */
17
+ export declare function signPagerDutyWebhookBody(input: {
18
+ rawBody: string | Uint8Array;
19
+ secret: string;
20
+ }): string;
21
+ /**
22
+ * True when any `v1=` entry in the header is the body's HMAC-SHA256 under
23
+ * any secret `secret` holds. `secret` is the named secret's value: one
24
+ * signing secret, or one per line when several subscriptions sign the
25
+ * route. Every (secret, entry) pair is compared in constant time with no
26
+ * early exit; malformed entries never match, and a missing header is a
27
+ * plain `false`.
28
+ */
29
+ export declare function verifyPagerDutyWebhookSignature(input: {
30
+ rawBody: string | Uint8Array;
31
+ signatureHeader: string | null | undefined;
32
+ secret: string;
33
+ }): boolean;
34
+ /**
35
+ * True when the event is the agent's own action echoed back: its `agent`
36
+ * is a PagerDuty user the agent acts as. Service integrations and
37
+ * PagerDuty itself never count, so an alert the agent's own monitor opened
38
+ * still dispatches.
39
+ */
40
+ export declare function isPagerDutySelfEcho(ctx: Pick<PagerDutyEventContext, "agent">, selfUserIds: ReadonlySet<string>): boolean;
41
+ /**
42
+ * Accept a raw v3 body. The event type comes from the signed body's
43
+ * `event.event_type`, never from a header, so a captured delivery cannot be
44
+ * re-dispatched as another event.
45
+ */
46
+ export declare function parsePagerDutyWebhookPayload(payload: unknown): PagerDutyWebhookDelivery | null;
47
+ export declare function parsePagerDutyEventContext(delivery: PagerDutyWebhookDelivery): Omit<PagerDutyEventContext, "host" | "artifacts" | "send" | "pagerduty"> | null;
48
+ /**
49
+ * Run the authored hooks for one verified PagerDuty delivery and `send()`
50
+ * the turn. Callers own delivery auth: the HTTP route verifies
51
+ * `X-PagerDuty-Signature`; hosted admission arrives verified. The v2
52
+ * mailbox is stamped upstream (local CP or hosted ingress), never here.
53
+ */
54
+ export declare function dispatchPagerDutyWebhook(input: {
55
+ options: PagerDutyChannelOptions;
56
+ delivery: PagerDutyWebhookDelivery;
57
+ args: ChannelHandlerArgs;
58
+ }): Promise<Response>;
59
+ /**
60
+ * HTTP entry for one agent's PagerDuty channel: the `X-PagerDuty-Signature`
61
+ * check when a secret is configured, then {@link dispatchPagerDutyWebhook}.
62
+ * Without a secret the route auth owns admission (`serve --dev` admits
63
+ * loopback only; production stays loopback-strict).
64
+ */
65
+ export declare function handlePagerDutyWebhookRequest(input: {
66
+ options: PagerDutyChannelOptions;
67
+ request: Request;
68
+ args: ChannelHandlerArgs;
69
+ }): Promise<Response>;
70
+ //# sourceMappingURL=pagerduty-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagerduty-webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/pagerduty-webhook.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAiC,MAAM,gBAAgB,CAAC;AA0BxF,OAAO,KAAK,EACV,uBAAuB,EAEvB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,yEAAyE;AACzE,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAClE,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAChD,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GACtD,MAAM,GAAG,SAAS,CAEpB;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAYV;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,EACzC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B,OAAO,CAST;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,wBAAwB,GAAG,IAAI,CAO9F;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,wBAAwB,GACjC,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC,GAAG,IAAI,CAmBjF;AA+DD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,uBAAuB,CAAC;IACjC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2FpB;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkCpB"}
@@ -0,0 +1,280 @@
1
+ import { createHmac } from "node:crypto";
2
+ import { acknowledgeTask, isTaskDispatch, skipped, turnStarted, } from "../../internal/channel-dispatch.js";
3
+ import { continuationSource, mintClaim } from "../../internal/continuation-identity.js";
4
+ import { hmacSignatureMatchesAny, parseHmacSecrets } from "../../internal/hmac-secret-values.js";
5
+ import { bindLocalIngressSend } from "../../internal/local-ingress.js";
6
+ import { defaultPagerDutyIncidentDispatch, defaultPagerDutyIncidentMessage, defaultPagerDutyTitle, } from "./defaults.js";
7
+ import { isPagerDutyIncidentLifecycleEvent, PAGERDUTY_CHANNEL_KIND, PAGERDUTY_NOTE_EVENTS, PAGERDUTY_RESPONDER_EVENTS, } from "./events.js";
8
+ import { asNonEmptyString, pagerDutyAccountSubdomain, pagerDutyEventIncident, pagerDutyEventRecord, pagerDutyIncidentFromData, pagerDutyNoteFromData, pagerDutyReference, pagerDutyResponderFromData, } from "./payload.js";
9
+ import { pagerDutyChannelClient } from "./api.js";
10
+ import { resolvePagerDutySecret } from "./secrets.js";
11
+ import { resolvePagerDutySelfUserIds } from "./self-user.js";
12
+ import { pagerDutyChannelStateForEvent } from "./state.js";
13
+ /** Env var / deployment secret an omitted `webhookSecret` falls back to. */
14
+ export const PAGERDUTY_WEBHOOK_SECRET_ENV = "PAGERDUTY_WEBHOOK_SECRET";
15
+ /** Header PagerDuty signs v3 deliveries with: `v1=<hex>[,v1=<hex>…]`. */
16
+ export const PAGERDUTY_SIGNATURE_HEADER = "x-pagerduty-signature";
17
+ export const PAGERDUTY_SIGNATURE_PREFIX = "v1=";
18
+ /** Separator between signatures while a subscription's secret rotates. */
19
+ export const PAGERDUTY_SIGNATURE_SEPARATOR = ",";
20
+ /**
21
+ * The secret's value for the handler's own signature check, read now: an
22
+ * omitted field names `PAGERDUTY_WEBHOOK_SECRET` (hosted, the addressed
23
+ * installation's secret), and an authored name never falls back to it.
24
+ */
25
+ export function resolvePagerDutyWebhookSecret(options) {
26
+ return resolvePagerDutySecret(options.webhookSecret, PAGERDUTY_WEBHOOK_SECRET_ENV);
27
+ }
28
+ /** One `X-PagerDuty-Signature` entry for a raw body: `v1=<hex>`. */
29
+ export function signPagerDutyWebhookBody(input) {
30
+ return `${PAGERDUTY_SIGNATURE_PREFIX}${createHmac("sha256", input.secret).update(input.rawBody).digest("hex")}`;
31
+ }
32
+ /**
33
+ * True when any `v1=` entry in the header is the body's HMAC-SHA256 under
34
+ * any secret `secret` holds. `secret` is the named secret's value: one
35
+ * signing secret, or one per line when several subscriptions sign the
36
+ * route. Every (secret, entry) pair is compared in constant time with no
37
+ * early exit; malformed entries never match, and a missing header is a
38
+ * plain `false`.
39
+ */
40
+ export function verifyPagerDutyWebhookSignature(input) {
41
+ const parsed = parseHmacSecrets(input.secret);
42
+ if (input.signatureHeader === null || input.signatureHeader === undefined || !parsed.ok) {
43
+ return false;
44
+ }
45
+ return hmacSignatureMatchesAny({
46
+ body: input.rawBody,
47
+ presented: input.signatureHeader,
48
+ secrets: parsed.secrets,
49
+ prefix: PAGERDUTY_SIGNATURE_PREFIX,
50
+ separator: PAGERDUTY_SIGNATURE_SEPARATOR,
51
+ });
52
+ }
53
+ /**
54
+ * True when the event is the agent's own action echoed back: its `agent`
55
+ * is a PagerDuty user the agent acts as. Service integrations and
56
+ * PagerDuty itself never count, so an alert the agent's own monitor opened
57
+ * still dispatches.
58
+ */
59
+ export function isPagerDutySelfEcho(ctx, selfUserIds) {
60
+ const agent = ctx.agent;
61
+ if (agent === undefined || selfUserIds.size === 0) {
62
+ return false;
63
+ }
64
+ if (agent.type !== undefined && agent.type !== "user_reference" && agent.type !== "user") {
65
+ return false;
66
+ }
67
+ return selfUserIds.has(agent.id);
68
+ }
69
+ /**
70
+ * Accept a raw v3 body. The event type comes from the signed body's
71
+ * `event.event_type`, never from a header, so a captured delivery cannot be
72
+ * re-dispatched as another event.
73
+ */
74
+ export function parsePagerDutyWebhookPayload(payload) {
75
+ const event = pagerDutyEventRecord(payload);
76
+ const eventType = asNonEmptyString(event?.event_type);
77
+ if (event === undefined || eventType === undefined) {
78
+ return null;
79
+ }
80
+ return { eventType, payload: payload };
81
+ }
82
+ export function parsePagerDutyEventContext(delivery) {
83
+ const event = pagerDutyEventRecord(delivery.payload);
84
+ const eventId = asNonEmptyString(event?.id);
85
+ if (event === undefined || eventId === undefined) {
86
+ return null;
87
+ }
88
+ const incident = pagerDutyEventIncident(event);
89
+ return {
90
+ deliveryId: delivery.deliveryId,
91
+ eventId,
92
+ eventType: delivery.eventType,
93
+ resourceType: asNonEmptyString(event.resource_type),
94
+ occurredAt: asNonEmptyString(event.occurred_at),
95
+ agent: pagerDutyReference(event.agent),
96
+ incidentId: incident?.id,
97
+ incidentKey: incident?.incidentKey,
98
+ accountSubdomain: pagerDutyAccountSubdomain(event),
99
+ payload: event,
100
+ };
101
+ }
102
+ function invalidPayload(error) {
103
+ return Response.json({ ok: false, error }, { status: 400 });
104
+ }
105
+ async function applyDispatch(input) {
106
+ const extra = { event: input.ctx.eventType };
107
+ if (input.dispatch === null) {
108
+ return skipped("not_dispatched", extra);
109
+ }
110
+ if (isTaskDispatch(input.dispatch)) {
111
+ return acknowledgeTask(input.args, PAGERDUTY_CHANNEL_KIND, input.dispatch, extra);
112
+ }
113
+ const ctx = input.ctx;
114
+ const state = pagerDutyChannelStateForEvent({
115
+ eventType: ctx.eventType,
116
+ eventId: ctx.eventId,
117
+ incidentId: ctx.incidentId,
118
+ incidentNumber: input.incidentNumber,
119
+ incidentKey: ctx.incidentKey,
120
+ serviceId: input.serviceId,
121
+ deliveryId: ctx.deliveryId,
122
+ occurredAt: ctx.occurredAt,
123
+ });
124
+ // v1 agents (omitted continuation resolves to `none/v1`) keep one
125
+ // engine-minted conversation per incident; v2 takes the CP stamp.
126
+ const engineToken = continuationSource(input.options.continuation, PAGERDUTY_CHANNEL_KIND) === "engine" &&
127
+ ctx.incidentId !== undefined
128
+ ? mintClaim({
129
+ type: "pagerduty-incident",
130
+ resource: { incidentId: ctx.incidentId },
131
+ }).slice("cont:".length)
132
+ : undefined;
133
+ const turn = {
134
+ auth: input.dispatch.auth,
135
+ title: input.dispatch.title ?? input.title,
136
+ state: state,
137
+ refreshState: state,
138
+ };
139
+ if (engineToken !== undefined) {
140
+ turn.continuationToken = engineToken;
141
+ }
142
+ if (input.options.cloud !== undefined) {
143
+ turn.cloud = input.options.cloud;
144
+ }
145
+ const session = await input.args.send([input.dispatch.message ?? input.message, ...(input.dispatch.context ?? [])].join("\n"), turn);
146
+ return turnStarted(session);
147
+ }
148
+ /**
149
+ * Run the authored hooks for one verified PagerDuty delivery and `send()`
150
+ * the turn. Callers own delivery auth: the HTTP route verifies
151
+ * `X-PagerDuty-Signature`; hosted admission arrives verified. The v2
152
+ * mailbox is stamped upstream (local CP or hosted ingress), never here.
153
+ */
154
+ export async function dispatchPagerDutyWebhook(input) {
155
+ const parsed = parsePagerDutyEventContext(input.delivery);
156
+ if (parsed === null) {
157
+ return invalidPayload("invalid_pagerduty_payload");
158
+ }
159
+ const args = input.args;
160
+ const ctx = {
161
+ ...parsed,
162
+ pagerduty: pagerDutyChannelClient(input.options),
163
+ host: args.host,
164
+ artifacts: args.artifacts,
165
+ send: args.send,
166
+ };
167
+ const eventType = ctx.eventType;
168
+ if (eventType === "pagey.ping") {
169
+ return skipped("ping");
170
+ }
171
+ if (isPagerDutySelfEcho(ctx, await resolvePagerDutySelfUserIds({ options: input.options }))) {
172
+ return skipped("self_echo", { event: eventType, agent: ctx.agent?.id });
173
+ }
174
+ const data = ctx.payload.data;
175
+ if (isPagerDutyIncidentLifecycleEvent(eventType)) {
176
+ const incident = pagerDutyIncidentFromData(data);
177
+ if (incident === undefined) {
178
+ return invalidPayload("invalid_pagerduty_incident_payload");
179
+ }
180
+ const event = { eventType, action: eventType.slice("incident.".length), incident };
181
+ const dispatch = input.options.onIncident === undefined
182
+ ? defaultPagerDutyIncidentDispatch(ctx, event)
183
+ : await input.options.onIncident(ctx, event);
184
+ return applyDispatch({
185
+ options: input.options,
186
+ args,
187
+ ctx,
188
+ dispatch,
189
+ message: defaultPagerDutyIncidentMessage(ctx, event),
190
+ title: defaultPagerDutyTitle(ctx, incident),
191
+ incidentNumber: incident.number,
192
+ serviceId: incident.service?.id,
193
+ });
194
+ }
195
+ if (PAGERDUTY_NOTE_EVENTS.includes(eventType)) {
196
+ if (input.options.onNote === undefined) {
197
+ return skipped("no_handler", { event: eventType });
198
+ }
199
+ const note = pagerDutyNoteFromData(data);
200
+ if (note === undefined) {
201
+ return invalidPayload("invalid_pagerduty_note_payload");
202
+ }
203
+ return applyDispatch({
204
+ options: input.options,
205
+ args,
206
+ ctx,
207
+ dispatch: await input.options.onNote(ctx, note),
208
+ message: `PagerDuty note on incident ${note.incident.id}:\n${note.content}`,
209
+ title: defaultPagerDutyTitle(ctx),
210
+ });
211
+ }
212
+ if (PAGERDUTY_RESPONDER_EVENTS.includes(eventType)) {
213
+ if (input.options.onResponder === undefined) {
214
+ return skipped("no_handler", { event: eventType });
215
+ }
216
+ const responder = pagerDutyResponderFromData(eventType, data);
217
+ if (responder === undefined) {
218
+ return invalidPayload("invalid_pagerduty_responder_payload");
219
+ }
220
+ return applyDispatch({
221
+ options: input.options,
222
+ args,
223
+ ctx,
224
+ dispatch: await input.options.onResponder(ctx, responder),
225
+ message: `PagerDuty ${eventType} on incident ${responder.incident.id}`,
226
+ title: defaultPagerDutyTitle(ctx),
227
+ });
228
+ }
229
+ if (input.options.onEvent === undefined) {
230
+ return skipped("unsupported_event", { event: eventType });
231
+ }
232
+ return applyDispatch({
233
+ options: input.options,
234
+ args,
235
+ ctx,
236
+ dispatch: await input.options.onEvent(ctx, { eventType, data }),
237
+ message: `PagerDuty ${eventType} event`,
238
+ title: defaultPagerDutyTitle(ctx),
239
+ });
240
+ }
241
+ /**
242
+ * HTTP entry for one agent's PagerDuty channel: the `X-PagerDuty-Signature`
243
+ * check when a secret is configured, then {@link dispatchPagerDutyWebhook}.
244
+ * Without a secret the route auth owns admission (`serve --dev` admits
245
+ * loopback only; production stays loopback-strict).
246
+ */
247
+ export async function handlePagerDutyWebhookRequest(input) {
248
+ const bodyText = await input.request.text();
249
+ const secret = resolvePagerDutyWebhookSecret(input.options);
250
+ if (secret !== undefined &&
251
+ !verifyPagerDutyWebhookSignature({
252
+ rawBody: bodyText,
253
+ signatureHeader: input.request.headers.get(PAGERDUTY_SIGNATURE_HEADER),
254
+ secret,
255
+ })) {
256
+ return Response.json({ ok: false, error: "invalid_signature" }, { status: 401 });
257
+ }
258
+ let payload;
259
+ try {
260
+ payload = JSON.parse(bodyText);
261
+ }
262
+ catch {
263
+ return Response.json({ ok: false, error: "invalid_json" }, { status: 400 });
264
+ }
265
+ const delivery = parsePagerDutyWebhookPayload(payload);
266
+ if (delivery === null) {
267
+ return invalidPayload("invalid_pagerduty_payload");
268
+ }
269
+ delivery.deliveryId = input.request.headers.get("x-webhook-id") ?? undefined;
270
+ return dispatchPagerDutyWebhook({
271
+ options: input.options,
272
+ delivery,
273
+ args: bindLocalIngressSend(input.args, {
274
+ identity: input.options.continuation,
275
+ kind: PAGERDUTY_CHANNEL_KIND,
276
+ eventType: delivery.eventType,
277
+ payload: delivery.payload,
278
+ }),
279
+ });
280
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Typed views over a PagerDuty v3 webhook body. Every reader tolerates
3
+ * missing optional fields and returns `undefined` for a shape it does not
4
+ * recognize, so a new PagerDuty field never fails a delivery.
5
+ */
6
+ import type { PagerDutyIncident, PagerDutyIncidentNote, PagerDutyReference, PagerDutyResponderEvent } from "./types.js";
7
+ export declare function asRecord(value: unknown): Record<string, unknown> | undefined;
8
+ export declare function asNonEmptyString(value: unknown): string | undefined;
9
+ /** The delivery's `event` record, or `undefined` when the body is not a v3 event. */
10
+ export declare function pagerDutyEventRecord(payload: unknown): Record<string, unknown> | undefined;
11
+ export declare function pagerDutyReference(value: unknown): PagerDutyReference | undefined;
12
+ /** `data` of a lifecycle event: the full incident. */
13
+ export declare function pagerDutyIncidentFromData(data: unknown): PagerDutyIncident | undefined;
14
+ /** `data` of `incident.annotated`. */
15
+ export declare function pagerDutyNoteFromData(data: unknown): PagerDutyIncidentNote | undefined;
16
+ /** `data` of `incident.responder.added` / `.replied`. */
17
+ export declare function pagerDutyResponderFromData(eventType: string, data: unknown): PagerDutyResponderEvent | undefined;
18
+ /**
19
+ * The incident any incident event names: `data` itself for lifecycle
20
+ * events, `data.incident` for sub-resources. Mirrors the continuation
21
+ * selector, so a hook's `ctx.incidentId` names the session's incident.
22
+ */
23
+ export declare function pagerDutyEventIncident(event: Record<string, unknown>): {
24
+ id: string;
25
+ incidentKey?: string;
26
+ } | undefined;
27
+ /**
28
+ * The account subdomain (`acme` for `acme.pagerduty.com` or
29
+ * `acme.eu.pagerduty.com`) from the first PagerDuty web URL the event
30
+ * carries: the incident's, the agent's, or the data's own.
31
+ */
32
+ export declare function pagerDutyAccountSubdomain(event: Record<string, unknown>): string | undefined;
33
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EAErB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAI5E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEnE;AAMD,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAG1F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,SAAS,CAYjF;AAYD,sDAAsD;AACtD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAsBtF;AAUD,sCAAsC;AACtC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAYtF;AAED,yDAAyD;AACzD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,GACZ,uBAAuB,GAAG,SAAS,CAcrC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUlD;AAID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAuB5F"}