@cursor/bdk 0.2.23 → 0.2.25

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 (421) hide show
  1. package/AGENTS.md +1 -0
  2. package/dist/artifacts.d.ts +1 -1
  3. package/dist/artifacts.js +1 -1
  4. package/dist/bin/agent-serve.d.ts +1 -1
  5. package/dist/bin/agent-serve.js +48 -12
  6. package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
  7. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
  8. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  9. package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
  10. package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
  11. package/dist/channels/deployments/deployments-channel.js +1 -1
  12. package/dist/channels/github/github-channel.d.ts.map +1 -1
  13. package/dist/channels/github/github-channel.js +10 -19
  14. package/dist/channels/gitlab/gitlab-channel.js +1 -1
  15. package/dist/channels/issues/issues-channel.js +1 -1
  16. package/dist/channels/origin/origin-channel.js +1 -1
  17. package/dist/channels/pagerduty/api.d.ts +74 -0
  18. package/dist/channels/pagerduty/api.d.ts.map +1 -0
  19. package/dist/channels/pagerduty/api.js +101 -0
  20. package/dist/channels/pagerduty/defaults.d.ts +42 -0
  21. package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
  22. package/dist/channels/pagerduty/defaults.js +132 -0
  23. package/dist/channels/pagerduty/events.d.ts +24 -0
  24. package/dist/channels/pagerduty/events.d.ts.map +1 -0
  25. package/dist/channels/pagerduty/events.js +38 -0
  26. package/dist/channels/pagerduty/index.d.ts +31 -0
  27. package/dist/channels/pagerduty/index.d.ts.map +1 -0
  28. package/dist/channels/pagerduty/index.js +30 -0
  29. package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
  30. package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
  31. package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
  32. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
  33. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
  34. package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
  35. package/dist/channels/pagerduty/payload.d.ts +33 -0
  36. package/dist/channels/pagerduty/payload.d.ts.map +1 -0
  37. package/dist/channels/pagerduty/payload.js +150 -0
  38. package/dist/channels/pagerduty/replay.d.ts +35 -0
  39. package/dist/channels/pagerduty/replay.d.ts.map +1 -0
  40. package/dist/channels/pagerduty/replay.js +115 -0
  41. package/dist/channels/pagerduty/secrets.d.ts +16 -0
  42. package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
  43. package/dist/channels/pagerduty/secrets.js +23 -0
  44. package/dist/channels/pagerduty/self-user.d.ts +51 -0
  45. package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
  46. package/dist/channels/pagerduty/self-user.js +157 -0
  47. package/dist/channels/pagerduty/state.d.ts +31 -0
  48. package/dist/channels/pagerduty/state.d.ts.map +1 -0
  49. package/dist/channels/pagerduty/state.js +30 -0
  50. package/dist/channels/pagerduty/types.d.ts +217 -0
  51. package/dist/channels/pagerduty/types.d.ts.map +1 -0
  52. package/dist/channels/pagerduty/types.js +1 -0
  53. package/dist/channels/runs/runs-channel.js +1 -1
  54. package/dist/channels/slack/tool-approval-events.js +5 -5
  55. package/dist/channels.d.ts +14 -1
  56. package/dist/channels.d.ts.map +1 -1
  57. package/dist/channels.js +24 -9
  58. package/dist/docs/404.html +3 -3
  59. package/dist/docs/assets/{app.AXQcJZaf.js → app.BjS1QEI4.js} +4 -4
  60. package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
  61. package/dist/docs/assets/chunks/{VPLocalSearchBox.hlZ2vmun.js → VPLocalSearchBox.BOuvjb5Y.js} +2 -2
  62. package/dist/docs/assets/chunks/{arc.9KNWdH-l.js → arc.3WR6Jf-y.js} +1 -1
  63. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BfGzkBHI.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
  64. package/dist/docs/assets/chunks/{baseUniq.Btk8-2Rs.js → baseUniq.BUyrgrZE.js} +1 -1
  65. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BmHm9OH5.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
  66. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.9POrbDHJ.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
  67. package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
  68. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YWZVSM6S.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
  69. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.Cxr_SFgw.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
  70. package/dist/docs/assets/chunks/{chunk-55IACEB6.DtiJyPlD.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
  71. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.b5gNHJPH.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
  72. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DmN9yA_M.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
  73. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Dfm3xgV5.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
  74. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.sXNxDcJA.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
  75. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DgBnDUV7.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
  76. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
  77. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
  78. package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
  79. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.D18MEcoN.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
  80. package/dist/docs/assets/chunks/{dagre-KV5264BT.CSf3tihh.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
  81. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.cbfzAfoC.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
  82. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.6i6P3uu9.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
  83. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.B9HAIfN6.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
  84. package/dist/docs/assets/chunks/{diagram-TYMM5635.B9baAjUv.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
  85. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DaBmX_GN.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
  86. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CJqQJjkb.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
  87. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CIXBLQhC.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
  88. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CDgentto.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
  89. package/dist/docs/assets/chunks/{graph.BWHn6JBQ.js → graph.C5IB6_e_.js} +1 -1
  90. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.d9VU_ts_.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
  91. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.BNO79Prj.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
  92. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CPgUTM1R.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
  93. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.idl0Eoe1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
  94. package/dist/docs/assets/chunks/{layout.BY7DIMr6.js → layout.6Um-DVJT.js} +1 -1
  95. package/dist/docs/assets/chunks/{linear.DYaUDrHd.js → linear.DcTeg4Hn.js} +1 -1
  96. package/dist/docs/assets/chunks/{min.V6MWb1UC.js → min.CIxkY8Fe.js} +1 -1
  97. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BRlJXuFS.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
  98. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BIhkDLcB.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
  99. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.Bw-_VEL3.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
  100. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DolEGwxw.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
  101. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.hMM-8BhN.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
  102. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bg_CRVDy.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
  103. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DNWdl34_.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
  104. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
  105. package/dist/docs/assets/chunks/{theme.CBW1oolh.js → theme.D5jbBys7.js} +2 -2
  106. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Cr1wJ1mB.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
  107. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BltDV9j7.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
  108. package/dist/docs/assets/chunks/{wardley-RL74JXVD.BWPaUhOs.js → wardley-RL74JXVD.B-FXivgT.js} +1 -1
  109. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.nsADqCCo.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
  110. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CCwbO3dK.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
  111. package/dist/docs/assets/{deployment.md.CtSJ6sF9.js → deployment.md.3MMWuPeV.js} +5 -5
  112. package/dist/docs/assets/{deployment.md.CtSJ6sF9.lean.js → deployment.md.3MMWuPeV.lean.js} +1 -1
  113. package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.js → guides_cloud-agents.md.BzbzcOyj.js} +2 -2
  114. package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.lean.js → guides_cloud-agents.md.BzbzcOyj.lean.js} +1 -1
  115. package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.js → guides_opentelemetry.md.DBQtp7_V.js} +13 -5
  116. package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
  117. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
  118. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
  119. package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.js → reference_agent-config.md.IplwL25I.js} +1 -2
  120. package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.lean.js → reference_agent-config.md.IplwL25I.lean.js} +1 -1
  121. package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
  122. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
  123. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
  124. package/dist/docs/assets/{reference_extensions.md.OUacPetl.js → reference_extensions.md.DKxTuCIw.js} +11 -8
  125. package/dist/docs/assets/{reference_extensions.md.OUacPetl.lean.js → reference_extensions.md.DKxTuCIw.lean.js} +1 -1
  126. package/dist/docs/assets/{reference_instructions.md.DrcHZXig.js → reference_instructions.md.BYMVxAkw.js} +4 -4
  127. package/dist/docs/assets/{reference_instructions.md.DrcHZXig.lean.js → reference_instructions.md.BYMVxAkw.lean.js} +1 -1
  128. package/dist/docs/assets/{reference_schedules.md.BqWnJES4.js → reference_schedules.md.03Ryy9ca.js} +3 -3
  129. package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
  130. package/dist/docs/assets/{style.Dwls12uf.css → style.nMsabY-V.css} +1 -1
  131. package/dist/docs/assets/templates_agentic-owners.md.CTEnR0jp.js +13 -0
  132. package/dist/docs/assets/{templates_agentic-owners.md.CvmABtia.lean.js → templates_agentic-owners.md.CTEnR0jp.lean.js} +1 -1
  133. package/dist/docs/building-with-agents.html +37 -37
  134. package/dist/docs/deployment.html +42 -42
  135. package/dist/docs/deployment.md +9 -4
  136. package/dist/docs/evals.html +37 -37
  137. package/dist/docs/guides/agent-to-agent.html +37 -37
  138. package/dist/docs/guides/bitbucket.html +37 -37
  139. package/dist/docs/guides/cloud-agents.html +38 -38
  140. package/dist/docs/guides/cloud-agents.md +1 -0
  141. package/dist/docs/guides/convert-automation.html +37 -37
  142. package/dist/docs/guides/export-grokbot.html +37 -37
  143. package/dist/docs/guides/github.html +37 -37
  144. package/dist/docs/guides/gitlab.html +37 -37
  145. package/dist/docs/guides/grokbot-agents.html +37 -37
  146. package/dist/docs/guides/hooks.html +37 -37
  147. package/dist/docs/guides/improve.html +37 -37
  148. package/dist/docs/guides/jev.html +37 -37
  149. package/dist/docs/guides/mcp-oauth.html +37 -37
  150. package/dist/docs/guides/migrate.html +37 -37
  151. package/dist/docs/guides/opentelemetry.html +49 -41
  152. package/dist/docs/guides/opentelemetry.md +54 -3
  153. package/dist/docs/guides/pagerduty.html +119 -0
  154. package/dist/docs/guides/pagerduty.md +336 -0
  155. package/dist/docs/guides/slack.html +37 -37
  156. package/dist/docs/guides/webhooks.html +37 -37
  157. package/dist/docs/hashmap.json +1 -1
  158. package/dist/docs/hillclimbing.html +37 -37
  159. package/dist/docs/index.html +37 -37
  160. package/dist/docs/llms-full.txt +510 -42
  161. package/dist/docs/llms.txt +1 -0
  162. package/dist/docs/quickstart.html +37 -37
  163. package/dist/docs/reference/agent-config.html +38 -39
  164. package/dist/docs/reference/agent-config.md +0 -1
  165. package/dist/docs/reference/artifacts.html +37 -37
  166. package/dist/docs/reference/channels.html +38 -38
  167. package/dist/docs/reference/channels.md +2 -1
  168. package/dist/docs/reference/cli.html +43 -38
  169. package/dist/docs/reference/cli.md +27 -0
  170. package/dist/docs/reference/connections.html +37 -37
  171. package/dist/docs/reference/evals.html +37 -37
  172. package/dist/docs/reference/extensions.html +47 -44
  173. package/dist/docs/reference/extensions.md +15 -9
  174. package/dist/docs/reference/hooks.html +37 -37
  175. package/dist/docs/reference/http-api.html +37 -37
  176. package/dist/docs/reference/instructions.html +40 -40
  177. package/dist/docs/reference/instructions.md +5 -1
  178. package/dist/docs/reference/memory.html +37 -37
  179. package/dist/docs/reference/playground.html +36 -36
  180. package/dist/docs/reference/project-layout.html +37 -37
  181. package/dist/docs/reference/prompt.html +37 -37
  182. package/dist/docs/reference/schedules.html +40 -40
  183. package/dist/docs/reference/sessions.html +36 -36
  184. package/dist/docs/reference/skills.html +37 -37
  185. package/dist/docs/reference/subagents.html +37 -37
  186. package/dist/docs/reference/tools.html +39 -39
  187. package/dist/docs/reference/tools.md +1 -0
  188. package/dist/docs/templates/agentic-owners.html +42 -43
  189. package/dist/docs/templates/agentic-owners.md +55 -23
  190. package/dist/docs/templates/grokbot-agents.html +37 -37
  191. package/dist/docs/templates/security-reviewer.html +37 -37
  192. package/dist/docs/templates/thermo-quality-review.html +37 -37
  193. package/dist/docs/templates/thermo-review.html +37 -37
  194. package/dist/docs/templates/triage.html +37 -37
  195. package/dist/docs/troubleshooting.html +36 -36
  196. package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
  197. package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
  198. package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
  199. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +1 -0
  200. package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
  201. package/dist/extensions/cursor-cloud-agents/lib/backend.js +2 -1
  202. package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
  203. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
  204. package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
  205. package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
  206. package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
  207. package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
  208. package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
  209. package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
  210. package/dist/extensions/cursor-grokbot-agents/extension.js +1 -1
  211. package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
  212. package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
  213. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
  214. package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
  215. package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
  216. package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
  217. package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
  218. package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
  219. package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
  220. package/dist/extensions/improve/extension.js +1 -1
  221. package/dist/extensions/jev/extension.js +1 -1
  222. package/dist/extensions/jev/tools/evaluate.js +1 -1
  223. package/dist/extensions/slack-communication/extension.js +1 -1
  224. package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
  225. package/dist/extensions/slack-communication/tools/edit-message.js +1 -1
  226. package/dist/extensions/slack-communication/tools/post-card.js +1 -1
  227. package/dist/extensions/slack-communication/tools/post-file.js +1 -1
  228. package/dist/extensions/slack-communication/tools/post-update.js +1 -1
  229. package/dist/extensions/slack-communication/tools/react.js +1 -1
  230. package/dist/extensions/slack-communication/tools/set-status.js +1 -1
  231. package/dist/extensions.d.ts +1 -1
  232. package/dist/extensions.js +1 -1
  233. package/dist/internal/approval-gate.d.ts +4 -2
  234. package/dist/internal/approval-gate.d.ts.map +1 -1
  235. package/dist/internal/approval-gate.js +2 -1
  236. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  237. package/dist/internal/builtin-tools/artifacts.js +46 -13
  238. package/dist/internal/builtin-tools/reminders.js +1 -1
  239. package/dist/internal/channel-architecture.d.ts +1 -1
  240. package/dist/internal/channel-architecture.d.ts.map +1 -1
  241. package/dist/internal/channel-architecture.js +4 -2
  242. package/dist/internal/cli-deploy.d.ts.map +1 -1
  243. package/dist/internal/cli-deploy.js +21 -12
  244. package/dist/internal/cli-pagerduty.d.ts +32 -0
  245. package/dist/internal/cli-pagerduty.d.ts.map +1 -0
  246. package/dist/internal/cli-pagerduty.js +242 -0
  247. package/dist/internal/continuation-channel.d.ts.map +1 -1
  248. package/dist/internal/continuation-channel.js +7 -0
  249. package/dist/internal/continuation-identity.d.ts +11 -3
  250. package/dist/internal/continuation-identity.d.ts.map +1 -1
  251. package/dist/internal/continuation-identity.js +83 -0
  252. package/dist/internal/convert-automation/convert-workflow.js +1 -1
  253. package/dist/internal/convert-grokbot/answers.js +1 -1
  254. package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
  255. package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
  256. package/dist/internal/convert-grokbot/recipe.js +1 -1
  257. package/dist/internal/cursor/backend-client.d.ts +1 -1
  258. package/dist/internal/cursor/backend-client.d.ts.map +1 -1
  259. package/dist/internal/cursor/backend-client.js +1 -1
  260. package/dist/internal/cursor/credentials.d.ts +1 -1
  261. package/dist/internal/cursor/credentials.d.ts.map +1 -1
  262. package/dist/internal/cursor/credentials.js +1 -1
  263. package/dist/internal/deploy-client.js +1 -1
  264. package/dist/internal/deploy-manifest.d.ts +11 -4
  265. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  266. package/dist/internal/deploy-manifest.js +19 -6
  267. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  268. package/dist/internal/discovery/agent-config.js +10 -10
  269. package/dist/internal/discovery/agent.d.ts.map +1 -1
  270. package/dist/internal/discovery/agent.js +10 -10
  271. package/dist/internal/discovery/channels.d.ts.map +1 -1
  272. package/dist/internal/discovery/channels.js +20 -16
  273. package/dist/internal/discovery/context.d.ts +16 -0
  274. package/dist/internal/discovery/context.d.ts.map +1 -1
  275. package/dist/internal/discovery/context.js +66 -0
  276. package/dist/internal/discovery/cursor-plugin.js +1 -1
  277. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  278. package/dist/internal/discovery/extension-overlay.js +2 -6
  279. package/dist/internal/discovery/info.d.ts.map +1 -1
  280. package/dist/internal/discovery/info.js +3 -0
  281. package/dist/internal/discovery/instructions.d.ts.map +1 -1
  282. package/dist/internal/discovery/instructions.js +3 -6
  283. package/dist/internal/discovery/modules.d.ts.map +1 -1
  284. package/dist/internal/discovery/modules.js +3 -6
  285. package/dist/internal/discovery/project.d.ts +6 -0
  286. package/dist/internal/discovery/project.d.ts.map +1 -1
  287. package/dist/internal/discovery/project.js +27 -5
  288. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  289. package/dist/internal/discovery/runtime.js +8 -8
  290. package/dist/internal/discovery.d.ts +1 -1
  291. package/dist/internal/discovery.d.ts.map +1 -1
  292. package/dist/internal/discovery.js +1 -1
  293. package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
  294. package/dist/internal/expected-delivery-failure.js +6 -0
  295. package/dist/internal/factory-resource-channel.d.ts +1 -1
  296. package/dist/internal/factory-resource-channel.d.ts.map +1 -1
  297. package/dist/internal/filesystem/sdk-schemas.d.ts +1 -1
  298. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
  299. package/dist/internal/filesystem/sdk-schemas.js +5 -4
  300. package/dist/internal/filesystem/tools.js +1 -1
  301. package/dist/internal/hmac-secret-values.d.ts +48 -0
  302. package/dist/internal/hmac-secret-values.d.ts.map +1 -0
  303. package/dist/internal/hmac-secret-values.js +68 -0
  304. package/dist/internal/host-otel.d.ts +2 -1
  305. package/dist/internal/host-otel.d.ts.map +1 -1
  306. package/dist/internal/host-otel.js +20 -6
  307. package/dist/internal/host-platforms.d.ts.map +1 -1
  308. package/dist/internal/host-platforms.js +8 -2
  309. package/dist/internal/hosted-delivery-protocol.d.ts +4 -0
  310. package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
  311. package/dist/internal/hosted-delivery.d.ts +7 -0
  312. package/dist/internal/hosted-delivery.d.ts.map +1 -1
  313. package/dist/internal/hosted-delivery.js +19 -17
  314. package/dist/internal/hosting.d.ts +6 -0
  315. package/dist/internal/hosting.d.ts.map +1 -1
  316. package/dist/internal/hosting.js +9 -0
  317. package/dist/internal/init-scaffold.js +1 -1
  318. package/dist/internal/interview/agent-questions.d.ts +1 -1
  319. package/dist/internal/interview/agent-questions.d.ts.map +1 -1
  320. package/dist/internal/interview/agent-questions.js +1 -1
  321. package/dist/internal/interview/question.d.ts +1 -1
  322. package/dist/internal/interview/question.d.ts.map +1 -1
  323. package/dist/internal/interview/question.js +1 -1
  324. package/dist/internal/json-schema.d.ts +7 -7
  325. package/dist/internal/json-schema.d.ts.map +1 -1
  326. package/dist/internal/json-schema.js +14 -17
  327. package/dist/internal/mcp-endpoint.js +1 -1
  328. package/dist/internal/otel/collector.d.ts.map +1 -1
  329. package/dist/internal/otel/collector.js +50 -19
  330. package/dist/internal/otel/config.d.ts +10 -1
  331. package/dist/internal/otel/config.d.ts.map +1 -1
  332. package/dist/internal/otel/config.js +47 -10
  333. package/dist/internal/otel/http.d.ts +1 -1
  334. package/dist/internal/otel/http.d.ts.map +1 -1
  335. package/dist/internal/otel/http.js +1 -1
  336. package/dist/internal/otel/runtime.d.ts +17 -14
  337. package/dist/internal/otel/runtime.d.ts.map +1 -1
  338. package/dist/internal/otel/runtime.js +203 -237
  339. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  340. package/dist/internal/package-inline-stdio.js +21 -5
  341. package/dist/internal/process-memory-telemetry.d.ts +1 -1
  342. package/dist/internal/process-memory-telemetry.d.ts.map +1 -1
  343. package/dist/internal/process-memory-telemetry.js +1 -1
  344. package/dist/internal/sdk-runner.d.ts +2 -3
  345. package/dist/internal/sdk-runner.d.ts.map +1 -1
  346. package/dist/internal/sdk-runner.js +30 -6
  347. package/dist/internal/secret-alternatives.d.ts +11 -0
  348. package/dist/internal/secret-alternatives.d.ts.map +1 -0
  349. package/dist/internal/secret-alternatives.js +13 -0
  350. package/dist/internal/server.d.ts.map +1 -1
  351. package/dist/internal/server.js +27 -15
  352. package/dist/internal/session-engine.d.ts +9 -1
  353. package/dist/internal/session-engine.d.ts.map +1 -1
  354. package/dist/internal/session-engine.js +30 -4
  355. package/dist/internal/slack-provision-client.js +1 -1
  356. package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
  357. package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
  358. package/dist/internal/sqlite-experimental-warning.js +22 -0
  359. package/dist/internal/store-api-protocol.d.ts +1 -1
  360. package/dist/internal/store-api-protocol.d.ts.map +1 -1
  361. package/dist/internal/store-api-protocol.js +1 -1
  362. package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
  363. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
  364. package/dist/internal/testing/conversation-identity-vectors.js +34 -0
  365. package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
  366. package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
  367. package/dist/internal/testing/hmac-secret-vectors.js +89 -0
  368. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
  369. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
  370. package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
  371. package/dist/internal/update-check.d.ts +1 -1
  372. package/dist/internal/update-check.d.ts.map +1 -1
  373. package/dist/internal/update-check.js +1 -1
  374. package/dist/internal/zod-schema.d.ts +14 -0
  375. package/dist/internal/zod-schema.d.ts.map +1 -0
  376. package/dist/internal/zod-schema.js +22 -0
  377. package/dist/otel.d.ts +1 -2
  378. package/dist/otel.d.ts.map +1 -1
  379. package/dist/otel.js +0 -1
  380. package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
  381. package/dist/playground/assets/index-BdMwybMt.css +1 -0
  382. package/dist/playground/assets/index-CHk6O92d.js +62 -0
  383. package/dist/playground/index.html +2 -2
  384. package/dist/tools.d.ts +14 -11
  385. package/dist/tools.d.ts.map +1 -1
  386. package/dist/tools.js +4 -3
  387. package/dist/types.d.ts +67 -16
  388. package/dist/types.d.ts.map +1 -1
  389. package/docs/deployment.md +9 -4
  390. package/docs/guides/cloud-agents.md +1 -0
  391. package/docs/guides/opentelemetry.md +54 -3
  392. package/docs/guides/pagerduty.md +341 -0
  393. package/docs/reference/agent-config.md +0 -1
  394. package/docs/reference/channels.md +2 -1
  395. package/docs/reference/cli.md +27 -0
  396. package/docs/reference/extensions.md +15 -9
  397. package/docs/reference/instructions.md +5 -1
  398. package/docs/reference/tools.md +1 -0
  399. package/docs/templates/agentic-owners.md +55 -23
  400. package/package.json +24 -19
  401. package/skills/migrate-v2/SKILL.md +1 -1
  402. package/skills/otel/SKILL.md +24 -7
  403. package/templates/agentic-owners/README.md +6 -1
  404. package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
  405. package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
  406. package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
  407. package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
  408. package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
  409. package/dist/docs/assets/chunks/@localSearchIndexroot.B3j7LFef.js +0 -1
  410. package/dist/docs/assets/chunks/channel.RoCpi7X1.js +0 -1
  411. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.oxdmwwqk.js +0 -1
  412. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.oxdmwwqk.js +0 -1
  413. package/dist/docs/assets/chunks/clone.BkguoIMm.js +0 -1
  414. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.7W-btjJ2.js +0 -1
  415. package/dist/docs/assets/templates_agentic-owners.md.CvmABtia.js +0 -14
  416. package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
  417. package/dist/playground/assets/index-BtsbIqV9.css +0 -1
  418. package/dist/playground/assets/index-CD8VRa25.js +0 -71
  419. /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
  420. /package/dist/docs/assets/{reference_schedules.md.BqWnJES4.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +0 -0
  421. /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Default dispatch decisions for the PagerDuty channel: turn auth derived
3
+ * from the event's agent, the title and message a turn starts with, which
4
+ * lifecycle events dispatch when no `onIncident` hook exists, and the
5
+ * stream handlers that post replies back to the incident.
6
+ */
7
+ import { PAGERDUTY_TOKEN_ENV, pagerDutyChannelClient } from "./api.js";
8
+ import { resolvePagerDutySecret } from "./secrets.js";
9
+ import { PAGERDUTY_USER_ID_ENV, resolvePagerDutySelfUserIds } from "./self-user.js";
10
+ /**
11
+ * Derive the turn's auth from who made the change: a PagerDuty user, a
12
+ * service integration, or PagerDuty itself. The webhook subscriber is not
13
+ * the turn principal (same pattern as `defaultGitHubAuth`).
14
+ */
15
+ export function defaultPagerDutyAuth(ctx) {
16
+ const agent = ctx.agent;
17
+ const isUser = agent?.type === "user_reference" || agent?.type === "user";
18
+ const attributes = {
19
+ conversation_kind: "incident",
20
+ event_type: ctx.eventType,
21
+ event_id: ctx.eventId,
22
+ issuer: ctx.accountSubdomain === undefined ? "pagerduty" : `pagerduty:${ctx.accountSubdomain}`,
23
+ };
24
+ if (ctx.incidentId !== undefined) {
25
+ attributes.incident_id = ctx.incidentId;
26
+ }
27
+ if (ctx.incidentKey !== undefined) {
28
+ attributes.incident_key = ctx.incidentKey;
29
+ }
30
+ if (ctx.deliveryId !== undefined) {
31
+ attributes.delivery_id = ctx.deliveryId;
32
+ }
33
+ if (agent !== undefined) {
34
+ attributes.subject = agent.id;
35
+ }
36
+ return {
37
+ authenticator: "pagerduty-webhook",
38
+ principalId: agent === undefined ? "pagerduty" : `pagerduty:${agent.id}`,
39
+ principalType: isUser ? "user" : "service",
40
+ attributes,
41
+ };
42
+ }
43
+ export function defaultPagerDutyTitle(ctx, incident) {
44
+ if (incident?.number !== undefined && incident.title !== undefined) {
45
+ return `PagerDuty #${incident.number}: ${incident.title}`;
46
+ }
47
+ return ctx.incidentId === undefined
48
+ ? `PagerDuty ${ctx.eventType}`
49
+ : `PagerDuty incident ${ctx.incidentId}`;
50
+ }
51
+ /** The facts of a lifecycle event, one per line, for the turn's first message. */
52
+ export function defaultPagerDutyIncidentMessage(ctx, event) {
53
+ const incident = event.incident;
54
+ return [
55
+ `PagerDuty ${ctx.eventType}: ${incident.number === undefined ? incident.id : `#${incident.number}`}`,
56
+ ...(incident.title === undefined ? [] : [`Title: ${incident.title}`]),
57
+ ...(incident.status === undefined ? [] : [`Status: ${incident.status}`]),
58
+ ...(incident.urgency === undefined ? [] : [`Urgency: ${incident.urgency}`]),
59
+ ...(incident.service?.summary === undefined ? [] : [`Service: ${incident.service.summary}`]),
60
+ ...(incident.priority?.summary === undefined ? [] : [`Priority: ${incident.priority.summary}`]),
61
+ ...(incident.incidentKey === undefined ? [] : [`Incident key: ${incident.incidentKey}`]),
62
+ ...(incident.htmlUrl === undefined ? [] : [`URL: ${incident.htmlUrl}`]),
63
+ ...(ctx.agent?.summary === undefined ? [] : [`By: ${ctx.agent.summary}`]),
64
+ ...(ctx.occurredAt === undefined ? [] : [`Occurred at: ${ctx.occurredAt}`]),
65
+ "Handle this PagerDuty incident event.",
66
+ ].join("\n");
67
+ }
68
+ /**
69
+ * Default gate when no `onIncident` hook is declared: a new or reopened
70
+ * incident starts a turn as the event's agent. Acknowledgements,
71
+ * escalations, and resolves are acknowledged without one.
72
+ */
73
+ export function defaultPagerDutyIncidentDispatch(ctx, event) {
74
+ if (event.eventType !== "incident.triggered" && event.eventType !== "incident.reopened") {
75
+ return null;
76
+ }
77
+ return { auth: defaultPagerDutyAuth(ctx) };
78
+ }
79
+ const PAGERDUTY_FAILURE_NOTE = "The agent hit an error while handling this incident. Check the agent's session for details.";
80
+ /**
81
+ * Opt-in delivery (`deliverReplies: true`): post each completed assistant
82
+ * reply as a note on the session's incident, and a short note when a turn
83
+ * or session fails. Skipped when the session names no incident or is an
84
+ * eval run, or when the channel has no token (a read-only agent).
85
+ *
86
+ * A posted note comes back as an `incident.annotated` event, which only the
87
+ * echo skip keeps from starting another turn. So nothing is posted until the
88
+ * agent's own PagerDuty user resolves (see `selfUserIds`); until then each
89
+ * skipped note logs a warning.
90
+ */
91
+ export function buildDefaultPagerDutyEvents(options) {
92
+ if (options.deliverReplies !== true) {
93
+ return {};
94
+ }
95
+ const postNote = async (state, content) => {
96
+ if (state.incidentId === null ||
97
+ resolvePagerDutySecret(options.token, PAGERDUTY_TOKEN_ENV) === undefined) {
98
+ return;
99
+ }
100
+ if ((await resolvePagerDutySelfUserIds({ options })).size === 0) {
101
+ console.warn(`[bdk/pagerduty] warn not posting a reply note to incident ${state.incidentId}: the agent's own PagerDuty user is unknown, so the note would come back as a new event. Set ${PAGERDUTY_USER_ID_ENV} or selfUserIds, or use a token that names one user.`);
102
+ return;
103
+ }
104
+ try {
105
+ await pagerDutyChannelClient(options).addNote({ incidentId: state.incidentId, content });
106
+ }
107
+ catch (error) {
108
+ console.warn(`[bdk/pagerduty] warn could not post a note to incident ${state.incidentId}: ${error instanceof Error ? error.message : String(error)}`);
109
+ }
110
+ };
111
+ return {
112
+ async "message.completed"(event, channel, ctx) {
113
+ if (ctx.session.purpose === "eval" ||
114
+ event.data.parentCallId !== undefined ||
115
+ event.data.finishReason === "tool_call" ||
116
+ event.data.text === "") {
117
+ return;
118
+ }
119
+ await postNote(channel.state, event.data.text);
120
+ },
121
+ async "turn.failed"(_event, channel, ctx) {
122
+ if (ctx.session.purpose !== "eval") {
123
+ await postNote(channel.state, PAGERDUTY_FAILURE_NOTE);
124
+ }
125
+ },
126
+ async "session.failed"(_event, channel, ctx) {
127
+ if (ctx.session.purpose !== "eval") {
128
+ await postNote(channel.state, PAGERDUTY_FAILURE_NOTE);
129
+ }
130
+ },
131
+ };
132
+ }
@@ -0,0 +1,24 @@
1
+ import { PAGERDUTY_INCIDENT_EVENT_TYPES } from "../../internal/continuation-identity.js";
2
+ /** {@link ChannelMeta.kind} value used by {@link pagerdutyChannel}. */
3
+ export declare const PAGERDUTY_CHANNEL_KIND = "pagerduty";
4
+ /** Every v3 `event_type` that names one incident; the selector's membership. */
5
+ export { PAGERDUTY_INCIDENT_EVENT_TYPES };
6
+ /** Lifecycle events whose `data` is the full incident; `onIncident` receives them. */
7
+ export declare const PAGERDUTY_INCIDENT_LIFECYCLE_EVENTS: readonly ["incident.triggered", "incident.acknowledged", "incident.unacknowledged", "incident.escalated", "incident.reassigned", "incident.delegated", "incident.resolved", "incident.reopened", "incident.priority_updated", "incident.incident_type.changed"];
8
+ export type PagerDutyIncidentLifecycleEvent = (typeof PAGERDUTY_INCIDENT_LIFECYCLE_EVENTS)[number];
9
+ /** `incident.annotated`: a note on the incident; `onNote` receives it. */
10
+ export declare const PAGERDUTY_NOTE_EVENTS: readonly ["incident.annotated"];
11
+ /** Responder requests and replies; `onResponder` receives them. */
12
+ export declare const PAGERDUTY_RESPONDER_EVENTS: readonly ["incident.responder.added", "incident.responder.replied"];
13
+ export interface PagerDutyWebhookEventOptions {
14
+ webhookEvents?: readonly string[];
15
+ }
16
+ /**
17
+ * The event types the channel publishes as `meta.pagerdutyWebhookEvents`
18
+ * and the deploy manifest's `eventTypes`: a pinned list, or every incident
19
+ * event. Every typed hook and the default dispatch fall inside that set, so
20
+ * an omitted selector defaults to `pagerduty.incident/v2`.
21
+ */
22
+ export declare function derivePagerDutyWebhookEvents(options: PagerDutyWebhookEventOptions): string[];
23
+ export declare function isPagerDutyIncidentLifecycleEvent(eventType: string): eventType is PagerDutyIncidentLifecycleEvent;
24
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,uEAAuE;AACvE,eAAO,MAAM,sBAAsB,cAAc,CAAC;AAElD,gFAAgF;AAChF,OAAO,EAAE,8BAA8B,EAAE,CAAC;AAE1C,sFAAsF;AACtF,eAAO,MAAM,mCAAmC,YAC9C,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,gCAAgC,CACxB,CAAC;AAEX,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,mCAAmC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnG,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,YACrC,0BAA0B,EAC1B,4BAA4B,CACpB,CAAC;AAEX,MAAM,WAAW,4BAA4B;IAC3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM,EAAE,CAG5F;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,GAChB,SAAS,IAAI,+BAA+B,CAE9C"}
@@ -0,0 +1,38 @@
1
+ import { PAGERDUTY_INCIDENT_EVENT_TYPES } from "../../internal/continuation-identity.js";
2
+ /** {@link ChannelMeta.kind} value used by {@link pagerdutyChannel}. */
3
+ export const PAGERDUTY_CHANNEL_KIND = "pagerduty";
4
+ /** Every v3 `event_type` that names one incident; the selector's membership. */
5
+ export { PAGERDUTY_INCIDENT_EVENT_TYPES };
6
+ /** Lifecycle events whose `data` is the full incident; `onIncident` receives them. */
7
+ export const PAGERDUTY_INCIDENT_LIFECYCLE_EVENTS = [
8
+ "incident.triggered",
9
+ "incident.acknowledged",
10
+ "incident.unacknowledged",
11
+ "incident.escalated",
12
+ "incident.reassigned",
13
+ "incident.delegated",
14
+ "incident.resolved",
15
+ "incident.reopened",
16
+ "incident.priority_updated",
17
+ "incident.incident_type.changed",
18
+ ];
19
+ /** `incident.annotated`: a note on the incident; `onNote` receives it. */
20
+ export const PAGERDUTY_NOTE_EVENTS = ["incident.annotated"];
21
+ /** Responder requests and replies; `onResponder` receives them. */
22
+ export const PAGERDUTY_RESPONDER_EVENTS = [
23
+ "incident.responder.added",
24
+ "incident.responder.replied",
25
+ ];
26
+ /**
27
+ * The event types the channel publishes as `meta.pagerdutyWebhookEvents`
28
+ * and the deploy manifest's `eventTypes`: a pinned list, or every incident
29
+ * event. Every typed hook and the default dispatch fall inside that set, so
30
+ * an omitted selector defaults to `pagerduty.incident/v2`.
31
+ */
32
+ export function derivePagerDutyWebhookEvents(options) {
33
+ const events = options.webhookEvents ?? PAGERDUTY_INCIDENT_EVENT_TYPES;
34
+ return [...new Set(events.map((event) => event.trim()).filter(Boolean))];
35
+ }
36
+ export function isPagerDutyIncidentLifecycleEvent(eventType) {
37
+ return PAGERDUTY_INCIDENT_LIFECYCLE_EVENTS.includes(eventType);
38
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * PagerDuty v3 webhook channel pack.
3
+ *
4
+ * ```ts
5
+ * import { defaultPagerDutyAuth, pagerdutyChannel } from "@cursor/bdk/channels/pagerduty";
6
+ *
7
+ * // Verifies against the PAGERDUTY_WEBHOOK_SECRET deployment secret and skips
8
+ * // the agent's own actions: PAGERDUTY_USER_ID, else the user PAGERDUTY_TOKEN
9
+ * // acts as.
10
+ * export default pagerdutyChannel({
11
+ * onIncident: (ctx) => ({ auth: defaultPagerDutyAuth(ctx) }),
12
+ * });
13
+ * ```
14
+ *
15
+ * The route verifies `X-PagerDuty-Signature` (one `v1=` HMAC-SHA256 entry
16
+ * per active subscription secret; any match admits). Every event for one
17
+ * incident key, the dedup key of the alert that opened the incident, joins
18
+ * one session; an incident without a key joins on its id. The agent's own
19
+ * actions, echoed back with its PagerDuty user as `agent`, are acknowledged
20
+ * without a turn.
21
+ */
22
+ export * from "./api.js";
23
+ export * from "./defaults.js";
24
+ export * from "./events.js";
25
+ export { pagerDutyAccountSubdomain, pagerDutyEventIncident, pagerDutyIncidentFromData, pagerDutyNoteFromData, pagerDutyResponderFromData, } from "./payload.js";
26
+ export * from "./pagerduty-channel.js";
27
+ export * from "./pagerduty-webhook.js";
28
+ export { inferPagerDutySelfUserId, PAGERDUTY_USER_ID_ENV, type PagerDutySelfUserDeps, pagerDutySelfUserIdSecretName, resolvePagerDutySelfUserIds, } from "./self-user.js";
29
+ export * from "./state.js";
30
+ export * from "./types.js";
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/pagerduty/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * PagerDuty v3 webhook channel pack.
3
+ *
4
+ * ```ts
5
+ * import { defaultPagerDutyAuth, pagerdutyChannel } from "@cursor/bdk/channels/pagerduty";
6
+ *
7
+ * // Verifies against the PAGERDUTY_WEBHOOK_SECRET deployment secret and skips
8
+ * // the agent's own actions: PAGERDUTY_USER_ID, else the user PAGERDUTY_TOKEN
9
+ * // acts as.
10
+ * export default pagerdutyChannel({
11
+ * onIncident: (ctx) => ({ auth: defaultPagerDutyAuth(ctx) }),
12
+ * });
13
+ * ```
14
+ *
15
+ * The route verifies `X-PagerDuty-Signature` (one `v1=` HMAC-SHA256 entry
16
+ * per active subscription secret; any match admits). Every event for one
17
+ * incident key, the dedup key of the alert that opened the incident, joins
18
+ * one session; an incident without a key joins on its id. The agent's own
19
+ * actions, echoed back with its PagerDuty user as `agent`, are acknowledged
20
+ * without a turn.
21
+ */
22
+ export * from "./api.js";
23
+ export * from "./defaults.js";
24
+ export * from "./events.js";
25
+ export { pagerDutyAccountSubdomain, pagerDutyEventIncident, pagerDutyIncidentFromData, pagerDutyNoteFromData, pagerDutyResponderFromData, } from "./payload.js";
26
+ export * from "./pagerduty-channel.js";
27
+ export * from "./pagerduty-webhook.js";
28
+ export { inferPagerDutySelfUserId, PAGERDUTY_USER_ID_ENV, pagerDutySelfUserIdSecretName, resolvePagerDutySelfUserIds, } from "./self-user.js";
29
+ export * from "./state.js";
30
+ export * from "./types.js";
@@ -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 | Buffer;
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 | Buffer;
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,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,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"}