@cursor/bdk 0.2.24 → 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 (290) hide show
  1. package/AGENTS.md +1 -0
  2. package/dist/bin/agent-serve.d.ts +1 -1
  3. package/dist/bin/agent-serve.js +48 -12
  4. package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
  5. package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
  6. package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
  7. package/dist/channels/github/github-channel.d.ts.map +1 -1
  8. package/dist/channels/github/github-channel.js +9 -18
  9. package/dist/channels/pagerduty/api.d.ts +74 -0
  10. package/dist/channels/pagerduty/api.d.ts.map +1 -0
  11. package/dist/channels/pagerduty/api.js +101 -0
  12. package/dist/channels/pagerduty/defaults.d.ts +42 -0
  13. package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
  14. package/dist/channels/pagerduty/defaults.js +132 -0
  15. package/dist/channels/pagerduty/events.d.ts +24 -0
  16. package/dist/channels/pagerduty/events.d.ts.map +1 -0
  17. package/dist/channels/pagerduty/events.js +38 -0
  18. package/dist/channels/pagerduty/index.d.ts +31 -0
  19. package/dist/channels/pagerduty/index.d.ts.map +1 -0
  20. package/dist/channels/pagerduty/index.js +30 -0
  21. package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
  22. package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
  23. package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
  24. package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
  25. package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
  26. package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
  27. package/dist/channels/pagerduty/payload.d.ts +33 -0
  28. package/dist/channels/pagerduty/payload.d.ts.map +1 -0
  29. package/dist/channels/pagerduty/payload.js +150 -0
  30. package/dist/channels/pagerduty/replay.d.ts +35 -0
  31. package/dist/channels/pagerduty/replay.d.ts.map +1 -0
  32. package/dist/channels/pagerduty/replay.js +115 -0
  33. package/dist/channels/pagerduty/secrets.d.ts +16 -0
  34. package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
  35. package/dist/channels/pagerduty/secrets.js +23 -0
  36. package/dist/channels/pagerduty/self-user.d.ts +51 -0
  37. package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
  38. package/dist/channels/pagerduty/self-user.js +157 -0
  39. package/dist/channels/pagerduty/state.d.ts +31 -0
  40. package/dist/channels/pagerduty/state.d.ts.map +1 -0
  41. package/dist/channels/pagerduty/state.js +30 -0
  42. package/dist/channels/pagerduty/types.d.ts +217 -0
  43. package/dist/channels/pagerduty/types.d.ts.map +1 -0
  44. package/dist/channels/pagerduty/types.js +1 -0
  45. package/dist/channels.d.ts +6 -0
  46. package/dist/channels.d.ts.map +1 -1
  47. package/dist/channels.js +11 -23
  48. package/dist/docs/404.html +2 -2
  49. package/dist/docs/assets/{app.DTIg0uKK.js → app.BjS1QEI4.js} +4 -4
  50. package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
  51. package/dist/docs/assets/chunks/{VPLocalSearchBox.BpJoSaxi.js → VPLocalSearchBox.BOuvjb5Y.js} +1 -1
  52. package/dist/docs/assets/chunks/{arc.ylgNvRNq.js → arc.3WR6Jf-y.js} +1 -1
  53. package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BMrNJqYk.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
  54. package/dist/docs/assets/chunks/{baseUniq.BBWUEqf9.js → baseUniq.BUyrgrZE.js} +1 -1
  55. package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.DFMu-Vza.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
  56. package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.8nkAAxWv.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
  57. package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
  58. package/dist/docs/assets/chunks/{chunk-4BX2VUAB.sO-z2Bag.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
  59. package/dist/docs/assets/chunks/{chunk-4TB4RGXK.BMROzTMq.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
  60. package/dist/docs/assets/chunks/{chunk-55IACEB6.X81urwg7.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
  61. package/dist/docs/assets/chunks/{chunk-EDXVE4YY.eaZVFLZM.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
  62. package/dist/docs/assets/chunks/{chunk-FMBD7UC4.CmZhzstR.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
  63. package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CTezt9Lc.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
  64. package/dist/docs/assets/chunks/{chunk-QZHKN3VN.s-T8zukB.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
  65. package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DN4Nhy-D.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
  66. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
  67. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
  68. package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
  69. package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.Cqyp4BUH.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
  70. package/dist/docs/assets/chunks/{dagre-KV5264BT.BIECOiqR.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
  71. package/dist/docs/assets/chunks/{diagram-5BDNPKRD.1tLyWoTg.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
  72. package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.BVY_6VMO.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
  73. package/dist/docs/assets/chunks/{diagram-MMDJMWI5.BSZ7xiBB.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
  74. package/dist/docs/assets/chunks/{diagram-TYMM5635.Bho6GmLh.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
  75. package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.A0yVIANn.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
  76. package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.ZMgbllH6.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
  77. package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.BCCPBhXo.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
  78. package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.BOkL0BbA.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
  79. package/dist/docs/assets/chunks/{graph.DMyZPu86.js → graph.C5IB6_e_.js} +1 -1
  80. package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.CjG1IiEw.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
  81. package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.UCe-kq9g.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
  82. package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.3WyOK_eY.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
  83. package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.WoRG2qY1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
  84. package/dist/docs/assets/chunks/{layout.DV07xDd5.js → layout.6Um-DVJT.js} +1 -1
  85. package/dist/docs/assets/chunks/{linear.CTO8mN6o.js → linear.DcTeg4Hn.js} +1 -1
  86. package/dist/docs/assets/chunks/{min.SvTtcKuZ.js → min.CIxkY8Fe.js} +1 -1
  87. package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.DMGgQ-HB.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
  88. package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.B7851apI.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
  89. package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.CEqyypIX.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
  90. package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.C3Mwsw-H.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
  91. package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.DyYK0XxY.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
  92. package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.SiQPH-XM.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
  93. package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CTJMsP4p.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
  94. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
  95. package/dist/docs/assets/chunks/{theme.DJo4my9R.js → theme.D5jbBys7.js} +2 -2
  96. package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.CxSNRlQ6.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
  97. package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BdoJskyD.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
  98. package/dist/docs/assets/chunks/wardley-RL74JXVD.B-FXivgT.js +162 -0
  99. package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.IjIbFn_F.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
  100. package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CPUxDZLH.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
  101. package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.js → guides_opentelemetry.md.DBQtp7_V.js} +4 -4
  102. package/dist/docs/assets/{guides_opentelemetry.md.Ck1o2frw.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
  103. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
  104. package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
  105. package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
  106. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
  107. package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
  108. package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
  109. package/dist/docs/building-with-agents.html +35 -35
  110. package/dist/docs/deployment.html +35 -35
  111. package/dist/docs/evals.html +35 -35
  112. package/dist/docs/guides/agent-to-agent.html +35 -35
  113. package/dist/docs/guides/bitbucket.html +36 -36
  114. package/dist/docs/guides/cloud-agents.html +35 -35
  115. package/dist/docs/guides/convert-automation.html +35 -35
  116. package/dist/docs/guides/export-grokbot.html +35 -35
  117. package/dist/docs/guides/github.html +35 -35
  118. package/dist/docs/guides/gitlab.html +35 -35
  119. package/dist/docs/guides/grokbot-agents.html +35 -35
  120. package/dist/docs/guides/hooks.html +35 -35
  121. package/dist/docs/guides/improve.html +35 -35
  122. package/dist/docs/guides/jev.html +35 -35
  123. package/dist/docs/guides/mcp-oauth.html +35 -35
  124. package/dist/docs/guides/migrate.html +35 -35
  125. package/dist/docs/guides/opentelemetry.html +39 -39
  126. package/dist/docs/guides/opentelemetry.md +10 -5
  127. package/dist/docs/guides/pagerduty.html +119 -0
  128. package/dist/docs/guides/pagerduty.md +336 -0
  129. package/dist/docs/guides/slack.html +35 -35
  130. package/dist/docs/guides/webhooks.html +35 -35
  131. package/dist/docs/hashmap.json +1 -1
  132. package/dist/docs/hillclimbing.html +35 -35
  133. package/dist/docs/index.html +35 -35
  134. package/dist/docs/llms-full.txt +381 -6
  135. package/dist/docs/llms.txt +1 -0
  136. package/dist/docs/quickstart.html +35 -35
  137. package/dist/docs/reference/agent-config.html +35 -35
  138. package/dist/docs/reference/artifacts.html +35 -35
  139. package/dist/docs/reference/channels.html +37 -37
  140. package/dist/docs/reference/channels.md +2 -1
  141. package/dist/docs/reference/cli.html +42 -37
  142. package/dist/docs/reference/cli.md +27 -0
  143. package/dist/docs/reference/connections.html +35 -35
  144. package/dist/docs/reference/evals.html +35 -35
  145. package/dist/docs/reference/extensions.html +36 -36
  146. package/dist/docs/reference/hooks.html +35 -35
  147. package/dist/docs/reference/http-api.html +35 -35
  148. package/dist/docs/reference/instructions.html +35 -35
  149. package/dist/docs/reference/memory.html +35 -35
  150. package/dist/docs/reference/playground.html +35 -35
  151. package/dist/docs/reference/project-layout.html +35 -35
  152. package/dist/docs/reference/prompt.html +35 -35
  153. package/dist/docs/reference/schedules.html +35 -35
  154. package/dist/docs/reference/sessions.html +35 -35
  155. package/dist/docs/reference/skills.html +35 -35
  156. package/dist/docs/reference/subagents.html +35 -35
  157. package/dist/docs/reference/tools.html +37 -37
  158. package/dist/docs/reference/tools.md +1 -0
  159. package/dist/docs/templates/agentic-owners.html +35 -35
  160. package/dist/docs/templates/grokbot-agents.html +35 -35
  161. package/dist/docs/templates/security-reviewer.html +35 -35
  162. package/dist/docs/templates/thermo-quality-review.html +35 -35
  163. package/dist/docs/templates/thermo-review.html +35 -35
  164. package/dist/docs/templates/triage.html +35 -35
  165. package/dist/docs/troubleshooting.html +35 -35
  166. package/dist/internal/approval-gate.d.ts +4 -2
  167. package/dist/internal/approval-gate.d.ts.map +1 -1
  168. package/dist/internal/approval-gate.js +2 -1
  169. package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
  170. package/dist/internal/builtin-tools/artifacts.js +45 -12
  171. package/dist/internal/channel-architecture.d.ts +1 -1
  172. package/dist/internal/channel-architecture.d.ts.map +1 -1
  173. package/dist/internal/channel-architecture.js +4 -2
  174. package/dist/internal/cli-deploy.d.ts.map +1 -1
  175. package/dist/internal/cli-deploy.js +21 -12
  176. package/dist/internal/cli-pagerduty.d.ts +32 -0
  177. package/dist/internal/cli-pagerduty.d.ts.map +1 -0
  178. package/dist/internal/cli-pagerduty.js +242 -0
  179. package/dist/internal/continuation-channel.d.ts.map +1 -1
  180. package/dist/internal/continuation-channel.js +7 -0
  181. package/dist/internal/continuation-identity.d.ts +11 -3
  182. package/dist/internal/continuation-identity.d.ts.map +1 -1
  183. package/dist/internal/continuation-identity.js +83 -0
  184. package/dist/internal/deploy-manifest.d.ts +11 -4
  185. package/dist/internal/deploy-manifest.d.ts.map +1 -1
  186. package/dist/internal/deploy-manifest.js +17 -5
  187. package/dist/internal/discovery/agent-config.d.ts.map +1 -1
  188. package/dist/internal/discovery/agent-config.js +10 -10
  189. package/dist/internal/discovery/agent.d.ts.map +1 -1
  190. package/dist/internal/discovery/agent.js +10 -10
  191. package/dist/internal/discovery/channels.d.ts.map +1 -1
  192. package/dist/internal/discovery/channels.js +20 -16
  193. package/dist/internal/discovery/context.d.ts +16 -0
  194. package/dist/internal/discovery/context.d.ts.map +1 -1
  195. package/dist/internal/discovery/context.js +66 -0
  196. package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
  197. package/dist/internal/discovery/extension-overlay.js +2 -6
  198. package/dist/internal/discovery/info.d.ts.map +1 -1
  199. package/dist/internal/discovery/info.js +3 -0
  200. package/dist/internal/discovery/instructions.d.ts.map +1 -1
  201. package/dist/internal/discovery/instructions.js +3 -6
  202. package/dist/internal/discovery/modules.d.ts.map +1 -1
  203. package/dist/internal/discovery/modules.js +3 -6
  204. package/dist/internal/discovery/project.d.ts +6 -0
  205. package/dist/internal/discovery/project.d.ts.map +1 -1
  206. package/dist/internal/discovery/project.js +27 -5
  207. package/dist/internal/discovery/runtime.d.ts.map +1 -1
  208. package/dist/internal/discovery/runtime.js +8 -8
  209. package/dist/internal/discovery.d.ts +1 -1
  210. package/dist/internal/discovery.d.ts.map +1 -1
  211. package/dist/internal/discovery.js +1 -1
  212. package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
  213. package/dist/internal/expected-delivery-failure.js +6 -0
  214. package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
  215. package/dist/internal/filesystem/sdk-schemas.js +4 -3
  216. package/dist/internal/hmac-secret-values.d.ts +48 -0
  217. package/dist/internal/hmac-secret-values.d.ts.map +1 -0
  218. package/dist/internal/hmac-secret-values.js +68 -0
  219. package/dist/internal/host-platforms.d.ts.map +1 -1
  220. package/dist/internal/host-platforms.js +8 -2
  221. package/dist/internal/json-schema.d.ts +7 -7
  222. package/dist/internal/json-schema.d.ts.map +1 -1
  223. package/dist/internal/json-schema.js +13 -16
  224. package/dist/internal/otel/collector.d.ts.map +1 -1
  225. package/dist/internal/otel/collector.js +3 -1
  226. package/dist/internal/otel/config.d.ts +6 -1
  227. package/dist/internal/otel/config.d.ts.map +1 -1
  228. package/dist/internal/otel/config.js +27 -1
  229. package/dist/internal/otel/runtime.d.ts.map +1 -1
  230. package/dist/internal/otel/runtime.js +26 -3
  231. package/dist/internal/package-inline-stdio.d.ts.map +1 -1
  232. package/dist/internal/package-inline-stdio.js +21 -6
  233. package/dist/internal/sdk-runner.d.ts +2 -3
  234. package/dist/internal/sdk-runner.d.ts.map +1 -1
  235. package/dist/internal/sdk-runner.js +8 -4
  236. package/dist/internal/secret-alternatives.d.ts +11 -0
  237. package/dist/internal/secret-alternatives.d.ts.map +1 -0
  238. package/dist/internal/secret-alternatives.js +13 -0
  239. package/dist/internal/server.js +2 -2
  240. package/dist/internal/session-engine.d.ts.map +1 -1
  241. package/dist/internal/session-engine.js +5 -4
  242. package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
  243. package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
  244. package/dist/internal/sqlite-experimental-warning.js +22 -0
  245. package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
  246. package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
  247. package/dist/internal/testing/conversation-identity-vectors.js +34 -0
  248. package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
  249. package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
  250. package/dist/internal/testing/hmac-secret-vectors.js +89 -0
  251. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
  252. package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
  253. package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
  254. package/dist/internal/zod-schema.d.ts +14 -0
  255. package/dist/internal/zod-schema.d.ts.map +1 -0
  256. package/dist/internal/zod-schema.js +22 -0
  257. package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
  258. package/dist/playground/assets/index-BdMwybMt.css +1 -0
  259. package/dist/playground/assets/{index-DKKdkF29.js → index-CHk6O92d.js} +38 -38
  260. package/dist/playground/index.html +2 -2
  261. package/dist/tools.d.ts +13 -10
  262. package/dist/tools.d.ts.map +1 -1
  263. package/dist/tools.js +3 -2
  264. package/dist/types.d.ts +67 -16
  265. package/dist/types.d.ts.map +1 -1
  266. package/docs/guides/opentelemetry.md +10 -5
  267. package/docs/guides/pagerduty.md +341 -0
  268. package/docs/reference/channels.md +2 -1
  269. package/docs/reference/cli.md +27 -0
  270. package/docs/reference/tools.md +1 -0
  271. package/package.json +10 -3
  272. package/skills/migrate-v2/SKILL.md +1 -1
  273. package/skills/otel/SKILL.md +7 -3
  274. package/templates/agentic-owners/README.md +6 -1
  275. package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
  276. package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
  277. package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
  278. package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
  279. package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
  280. package/dist/docs/assets/chunks/@localSearchIndexroot.3ebvCWKy.js +0 -1
  281. package/dist/docs/assets/chunks/channel.BOebySCN.js +0 -1
  282. package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.C55IaN-T.js +0 -1
  283. package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.C55IaN-T.js +0 -1
  284. package/dist/docs/assets/chunks/clone.D06pA7ML.js +0 -1
  285. package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DddRVjeq.js +0 -1
  286. package/dist/docs/assets/chunks/wardley-RL74JXVD.CVCRSuQK.js +0 -162
  287. package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
  288. package/dist/playground/assets/index-DpKinTMs.css +0 -1
  289. /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
  290. /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
@@ -3,6 +3,7 @@
3
3
 
4
4
  import { posix } from "node:path";
5
5
  import { AGENTIC_OWNERS_DIR } from "./constants.js";
6
+ import { blocksGlobalOverride, mergeGlobalOverride } from "./globalOverride.js";
6
7
  import { patternMatchesFile, patternSpecificity } from "./matching.js";
7
8
  import type {
8
9
  AgenticOwnersMatchedConfig,
@@ -16,6 +17,11 @@ type PathScopedRule = {
16
17
  readonly paths: readonly string[];
17
18
  /** Root-only repository-wide exemption, produced from `global_exclusions`. */
18
19
  readonly globalExclusion?: boolean;
20
+ /**
21
+ * Root `global_overrides` entry. Applied after precedence, not as a
22
+ * candidate for it.
23
+ */
24
+ readonly globalOverride?: boolean;
19
25
  };
20
26
 
21
27
  /**
@@ -116,23 +122,84 @@ function compareRulePrecedence(
116
122
  return left.sourcePath.localeCompare(right.sourcePath);
117
123
  }
118
124
 
119
- function pickWinningRuleForFile<T extends PathScopedRule>({
120
- filepath,
121
- rules,
122
- }: {
123
- filepath: string;
124
- rules: readonly T[];
125
- }): T | undefined {
126
- let winner: T | undefined;
127
- for (const rule of rules) {
125
+ function selectRuleForFile(
126
+ filepath: string,
127
+ rules: readonly AgenticOwnersPathRule[],
128
+ ): {
129
+ readonly winner: { readonly rule: AgenticOwnersPathRule; readonly order: number } | undefined;
130
+ readonly overrides: readonly { readonly rule: AgenticOwnersPathRule; readonly order: number }[];
131
+ } {
132
+ let winner: { readonly rule: AgenticOwnersPathRule; readonly order: number } | undefined;
133
+ const overrides: { readonly rule: AgenticOwnersPathRule; readonly order: number }[] = [];
134
+ for (const [order, rule] of rules.entries()) {
128
135
  if (!ruleMatchesFile({ rule, filepath })) {
129
136
  continue;
130
137
  }
131
- if (winner === undefined || compareRulePrecedence(rule, winner, filepath) > 0) {
132
- winner = rule;
138
+ if (rule.globalOverride === true) {
139
+ overrides.push({ rule, order });
140
+ continue;
141
+ }
142
+ if (winner === undefined || compareRulePrecedence(rule, winner.rule, filepath) > 0) {
143
+ winner = { rule, order };
133
144
  }
134
145
  }
135
- return winner;
146
+ return { winner, overrides };
147
+ }
148
+
149
+ function teamsSkippedByOverride(
150
+ winner: AgenticOwnersPathRule,
151
+ override: AgenticOwnersPathRule,
152
+ ): boolean {
153
+ const skipped = override.skipTeams;
154
+ if (skipped === undefined || skipped.length === 0) {
155
+ return false;
156
+ }
157
+ const names = new Set(skipped.map((team) => team.trim().toLowerCase()));
158
+ return winner.teams.some((team) => names.has(team.trim().toLowerCase()));
159
+ }
160
+
161
+ function overrideAppliesToFile(
162
+ override: AgenticOwnersPathRule,
163
+ winner: AgenticOwnersPathRule,
164
+ filepath: string,
165
+ ): boolean {
166
+ if (teamsSkippedByOverride(winner, override)) {
167
+ return false;
168
+ }
169
+ const skipPaths = override.skipPaths;
170
+ if (skipPaths === undefined || skipPaths.length === 0) {
171
+ return true;
172
+ }
173
+ return !ruleMatchesFile({ rule: { ...override, paths: skipPaths }, filepath });
174
+ }
175
+
176
+ function effectiveRuleSelector(
177
+ rules: readonly AgenticOwnersPathRule[],
178
+ ): (filepath: string) => AgenticOwnersPathRule | undefined {
179
+ const cache = new Map<string, AgenticOwnersPathRule>();
180
+ return (filepath) => {
181
+ const { winner, overrides } = selectRuleForFile(filepath, rules);
182
+ if (winner === undefined || blocksGlobalOverride(winner.rule)) {
183
+ return winner?.rule;
184
+ }
185
+ const applicable = overrides.filter((entry) =>
186
+ overrideAppliesToFile(entry.rule, winner.rule, filepath),
187
+ );
188
+ if (applicable.length === 0) {
189
+ return winner.rule;
190
+ }
191
+ const key = `${winner.order}:${applicable.map((entry) => entry.order).join(",")}`;
192
+ const cached = cache.get(key);
193
+ if (cached !== undefined) {
194
+ return cached;
195
+ }
196
+ const effective = mergeGlobalOverride(
197
+ winner.rule,
198
+ applicable.map((entry) => entry.rule),
199
+ );
200
+ cache.set(key, effective);
201
+ return effective;
202
+ };
136
203
  }
137
204
 
138
205
  export function matchRepoConfigForChangedFiles({
@@ -147,8 +214,9 @@ export function matchRepoConfigForChangedFiles({
147
214
  // file path would silently drop one (e.g. a hard-gate rule lost behind an
148
215
  // advisory rule from the same policy).
149
216
  const winners = new Set<AgenticOwnersPathRule>();
217
+ const ruleForFile = effectiveRuleSelector(config.rules);
150
218
  for (const filepath of changedFiles) {
151
- const winner = pickWinningRuleForFile({ filepath, rules: config.rules });
219
+ const winner = ruleForFile(filepath);
152
220
  if (winner !== undefined) {
153
221
  winners.add(winner);
154
222
  }
@@ -175,9 +243,8 @@ export function changedFilesWithoutWinningRule({
175
243
  changedFiles: readonly string[];
176
244
  rules: readonly AgenticOwnersPathRule[];
177
245
  }): string[] {
178
- return changedFiles.filter(
179
- (filepath) => pickWinningRuleForFile({ filepath, rules }) === undefined,
180
- );
246
+ const ruleForFile = effectiveRuleSelector(rules);
247
+ return changedFiles.filter((filepath) => ruleForFile(filepath) === undefined);
181
248
  }
182
249
 
183
250
  /**
@@ -198,9 +265,8 @@ export function everyChangedFileGloballyExcluded({
198
265
  if (changedFiles.length === 0) {
199
266
  return false;
200
267
  }
201
- return changedFiles.every(
202
- (filepath) => pickWinningRuleForFile({ filepath, rules })?.globalExclusion === true,
203
- );
268
+ const ruleForFile = effectiveRuleSelector(rules);
269
+ return changedFiles.every((filepath) => ruleForFile(filepath)?.globalExclusion === true);
204
270
  }
205
271
 
206
272
  function hasOwners(rule: AgenticOwnersPathRule): boolean {
@@ -143,6 +143,131 @@ function parseGlobalExclusions({
143
143
  return paths;
144
144
  }
145
145
 
146
+ const GLOBAL_OVERRIDE_KEYS = [
147
+ "paths",
148
+ "team",
149
+ "teams",
150
+ "user",
151
+ "users",
152
+ "self_review",
153
+ "skip_teams",
154
+ "skip_paths",
155
+ ] as const;
156
+
157
+ function parseGlobalOverrides({
158
+ value,
159
+ sourcePath,
160
+ issues,
161
+ }: {
162
+ value: unknown;
163
+ sourcePath: string;
164
+ issues: string[];
165
+ }): AgenticOwnersPathRule[] {
166
+ if (value === undefined) {
167
+ return [];
168
+ }
169
+ if (sourcePath !== ROOT_POLICY_SOURCE_PATH) {
170
+ issues.push(`${sourcePath}: global_overrides is only allowed in ${ROOT_POLICY_SOURCE_PATH}`);
171
+ return [];
172
+ }
173
+ if (!Array.isArray(value)) {
174
+ issues.push(`${sourcePath}: global_overrides must be a list`);
175
+ return [];
176
+ }
177
+ const rules: AgenticOwnersPathRule[] = [];
178
+ for (const [index, entry] of value.entries()) {
179
+ const label = `${sourcePath}: global_overrides[${index}]`;
180
+ if (!isRecord(entry)) {
181
+ issues.push(`${label} must be a mapping`);
182
+ continue;
183
+ }
184
+ const unknownKeys = Object.keys(entry).filter(
185
+ (key) => !(GLOBAL_OVERRIDE_KEYS as readonly string[]).includes(key),
186
+ );
187
+ if (unknownKeys.length > 0) {
188
+ issues.push(
189
+ `${label}: unknown key(s) ${unknownKeys.join(", ")} (allowed: ${GLOBAL_OVERRIDE_KEYS.join(", ")})`,
190
+ );
191
+ }
192
+ const paths = parsePaths(entry.paths, `${label}.paths`, issues);
193
+ const selfReview = parseBooleanField(
194
+ entry.self_review,
195
+ `${label}.self_review`,
196
+ "self_review",
197
+ issues,
198
+ );
199
+ const teams = parseOwnerList({
200
+ singular: entry.team,
201
+ plural: entry.teams,
202
+ label,
203
+ field: "teams",
204
+ issues,
205
+ parseEntry: parseTeamSlug,
206
+ });
207
+ const users = parseOwnerList({
208
+ singular: entry.user,
209
+ plural: entry.users,
210
+ label,
211
+ field: "users",
212
+ issues,
213
+ parseEntry: parseUserHandle,
214
+ });
215
+ const skipTeams = parseOwnerList({
216
+ singular: undefined,
217
+ plural: entry.skip_teams,
218
+ label,
219
+ field: "skip_teams",
220
+ issues,
221
+ parseEntry: parseTeamSlug,
222
+ });
223
+ const skipPaths =
224
+ entry.skip_paths === undefined
225
+ ? []
226
+ : parsePaths(entry.skip_paths, `${label}.skip_paths`, issues);
227
+ if (paths === undefined || selfReview === undefined || skipPaths === undefined) {
228
+ continue;
229
+ }
230
+ validatePathsStayWithinRepository({
231
+ paths,
232
+ sourcePath,
233
+ label: `${label}.paths`,
234
+ issues,
235
+ });
236
+ validatePathsStayWithinRepository({
237
+ paths: skipPaths,
238
+ sourcePath,
239
+ label: `${label}.skip_paths`,
240
+ issues,
241
+ });
242
+ if (teams.length === 0 && users.length === 0) {
243
+ issues.push(`${label}: team or user is required`);
244
+ }
245
+ if (!selfReview) {
246
+ issues.push(
247
+ `${label}: self_review: true is required (an override only lets its owners clear matching files by self-review)`,
248
+ );
249
+ }
250
+ rules.push({
251
+ sourcePath,
252
+ scopeDepth: 0,
253
+ globalOverride: true,
254
+ paths,
255
+ teams,
256
+ users,
257
+ team: teams[0],
258
+ user: users[0],
259
+ prompt: undefined,
260
+ alwaysApprove: false,
261
+ mode: "advisory",
262
+ humanReviewRequired: false,
263
+ selfReview,
264
+ ...(skipTeams.length > 0 ? { skipTeams } : {}),
265
+ ...(skipPaths.length > 0 ? { skipPaths } : {}),
266
+ });
267
+ }
268
+ return rules;
269
+ }
270
+
146
271
  function parsePromptPath(value: unknown, label: string, issues: string[]): string | undefined {
147
272
  if (value === undefined) {
148
273
  return undefined;
@@ -228,12 +353,12 @@ function parseOwnerList({
228
353
  singular: unknown;
229
354
  plural: unknown;
230
355
  label: string;
231
- field: "teams" | "users";
356
+ field: "teams" | "users" | "skip_teams";
232
357
  issues: string[];
233
358
  parseEntry: (value: unknown, label: string, issues: string[]) => string | undefined;
234
359
  }): string[] {
235
360
  const owners: string[] = [];
236
- const singularField = field === "teams" ? "team" : "user";
361
+ const singularField = field === "users" ? "user" : "team";
237
362
  const parsedSingular = parseEntry(singular, `${label}.${singularField}`, issues);
238
363
  if (parsedSingular !== undefined) {
239
364
  owners.push(parsedSingular);
@@ -507,6 +632,11 @@ export function parseAgenticOwnersPolicyYaml({
507
632
  sourcePath,
508
633
  issues,
509
634
  });
635
+ const globalOverrides = parseGlobalOverrides({
636
+ value: parsed.global_overrides,
637
+ sourcePath,
638
+ issues,
639
+ });
510
640
 
511
641
  if (parsed.rules !== undefined) {
512
642
  issues.push(`${sourcePath}: use policies instead of rules`);
@@ -548,6 +678,7 @@ export function parseAgenticOwnersPolicyYaml({
548
678
  if (rules.length === 0) {
549
679
  throw new AgenticOwnersConfigValidationError([`${sourcePath}: policies must not be empty`]);
550
680
  }
681
+ rules.push(...globalOverrides);
551
682
  if (globalExclusions.length > 0) {
552
683
  rules.push(
553
684
  globalExclusionsRule({
@@ -12,12 +12,27 @@ export type AgenticOwnersPathRule = {
12
12
  * no owners, so they never enroll a review.
13
13
  */
14
14
  readonly globalExclusion?: boolean;
15
+ /**
16
+ * True for a root `global_overrides` entry. These rules are not precedence
17
+ * candidates. After a file's winning rule is chosen, a matching override
18
+ * adds its owners to an advisory winner, or becomes the owner when no
19
+ * committed rule owns the file. `self_review` on the override applies to
20
+ * the override's owners either way, and does not extend to the existing
21
+ * winner's owners. Exclusions, always-approve, hard, and notify winners
22
+ * stay unchanged, as do winners owned by a `skip_teams` team and paths
23
+ * listed in `skip_paths`.
24
+ */
25
+ readonly globalOverride?: boolean;
15
26
  /**
16
27
  * Glob patterns relative to the directory containing `.agentic-owners`.
17
28
  * Root-policy paths are relative to the repository root.
18
29
  * Leading `../` segments may address sibling trees but cannot leave the repo.
19
30
  */
20
31
  readonly paths: readonly string[];
32
+ /** Teams whose winning rule a `global_overrides` entry must not change. */
33
+ readonly skipTeams?: readonly string[];
34
+ /** Paths a `global_overrides` entry must not change. */
35
+ readonly skipPaths?: readonly string[];
21
36
  /**
22
37
  * Team slugs (or `org/team` handles) that own these paths. A policy may
23
38
  * list more than one. `team` is the first entry, kept for convenience.
@@ -39,6 +54,14 @@ export type AgenticOwnersPathRule = {
39
54
  readonly mode: AgenticOwnersPolicyMode;
40
55
  readonly humanReviewRequired: boolean;
41
56
  readonly selfReview: boolean;
57
+ /**
58
+ * Owners who may use {@link selfReview}. Absent means every owner on the
59
+ * rule. A merged override lists the winner's owners when that rule sets
60
+ * `self_review`, and the override's owners when the override sets it.
61
+ */
62
+ readonly selfReviewTeams?: readonly string[];
63
+ /** User owners who may use {@link selfReview}. See {@link selfReviewTeams}. */
64
+ readonly selfReviewUsers?: readonly string[];
42
65
  };
43
66
 
44
67
  export type AgenticOwnersRepoConfig = {