@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.
- package/AGENTS.md +1 -0
- package/dist/artifacts.d.ts +1 -1
- package/dist/artifacts.js +1 -1
- package/dist/bin/agent-serve.d.ts +1 -1
- package/dist/bin/agent-serve.js +48 -12
- package/dist/channels/bitbucket/bitbucket-channel.js +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +3 -2
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +14 -9
- package/dist/channels/change-monitors/change-monitors-channel.js +1 -1
- package/dist/channels/deployments/deployments-channel.js +1 -1
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +10 -19
- package/dist/channels/gitlab/gitlab-channel.js +1 -1
- package/dist/channels/issues/issues-channel.js +1 -1
- package/dist/channels/origin/origin-channel.js +1 -1
- package/dist/channels/pagerduty/api.d.ts +74 -0
- package/dist/channels/pagerduty/api.d.ts.map +1 -0
- package/dist/channels/pagerduty/api.js +101 -0
- package/dist/channels/pagerduty/defaults.d.ts +42 -0
- package/dist/channels/pagerduty/defaults.d.ts.map +1 -0
- package/dist/channels/pagerduty/defaults.js +132 -0
- package/dist/channels/pagerduty/events.d.ts +24 -0
- package/dist/channels/pagerduty/events.d.ts.map +1 -0
- package/dist/channels/pagerduty/events.js +38 -0
- package/dist/channels/pagerduty/index.d.ts +31 -0
- package/dist/channels/pagerduty/index.d.ts.map +1 -0
- package/dist/channels/pagerduty/index.js +30 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts +64 -0
- package/dist/channels/pagerduty/pagerduty-channel.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-channel.js +195 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts +70 -0
- package/dist/channels/pagerduty/pagerduty-webhook.d.ts.map +1 -0
- package/dist/channels/pagerduty/pagerduty-webhook.js +280 -0
- package/dist/channels/pagerduty/payload.d.ts +33 -0
- package/dist/channels/pagerduty/payload.d.ts.map +1 -0
- package/dist/channels/pagerduty/payload.js +150 -0
- package/dist/channels/pagerduty/replay.d.ts +35 -0
- package/dist/channels/pagerduty/replay.d.ts.map +1 -0
- package/dist/channels/pagerduty/replay.js +115 -0
- package/dist/channels/pagerduty/secrets.d.ts +16 -0
- package/dist/channels/pagerduty/secrets.d.ts.map +1 -0
- package/dist/channels/pagerduty/secrets.js +23 -0
- package/dist/channels/pagerduty/self-user.d.ts +51 -0
- package/dist/channels/pagerduty/self-user.d.ts.map +1 -0
- package/dist/channels/pagerduty/self-user.js +157 -0
- package/dist/channels/pagerduty/state.d.ts +31 -0
- package/dist/channels/pagerduty/state.d.ts.map +1 -0
- package/dist/channels/pagerduty/state.js +30 -0
- package/dist/channels/pagerduty/types.d.ts +217 -0
- package/dist/channels/pagerduty/types.d.ts.map +1 -0
- package/dist/channels/pagerduty/types.js +1 -0
- package/dist/channels/runs/runs-channel.js +1 -1
- package/dist/channels/slack/tool-approval-events.js +5 -5
- package/dist/channels.d.ts +14 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +24 -9
- package/dist/docs/404.html +3 -3
- package/dist/docs/assets/{app.AXQcJZaf.js → app.BjS1QEI4.js} +4 -4
- package/dist/docs/assets/chunks/@localSearchIndexroot.oGqZumnJ.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.hlZ2vmun.js → VPLocalSearchBox.BOuvjb5Y.js} +2 -2
- package/dist/docs/assets/chunks/{arc.9KNWdH-l.js → arc.3WR6Jf-y.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.BfGzkBHI.js → architectureDiagram-Q4EWVU46.Dtb6Dqh6.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.Btk8-2Rs.js → baseUniq.BUyrgrZE.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.BmHm9OH5.js → blockDiagram-DXYQGD6D.BVLV_voZ.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.9POrbDHJ.js → c4Diagram-AHTNJAMY.jXJ1q70M.js} +1 -1
- package/dist/docs/assets/chunks/channel.Dt4aweTm.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.YWZVSM6S.js → chunk-4BX2VUAB.zz1SMBvK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.Cxr_SFgw.js → chunk-4TB4RGXK.CzYKuv3I.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.DtiJyPlD.js → chunk-55IACEB6.C7_tcJZD.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.b5gNHJPH.js → chunk-EDXVE4YY.DeTwQPVO.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.DmN9yA_M.js → chunk-FMBD7UC4.DhMTl7ut.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.Dfm3xgV5.js → chunk-OYMX7WX6.Me7f5hEp.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.sXNxDcJA.js → chunk-QZHKN3VN.D0E0Bb6g.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.DgBnDUV7.js → chunk-YZCP3GAM.CdOOBFYL.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.DGUHZs6j.js +1 -0
- package/dist/docs/assets/chunks/clone.DWf3k0Z0.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.D18MEcoN.js → cose-bilkent-S5V4N54A.BNbGESzN.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CSf3tihh.js → dagre-KV5264BT.zU7Lu_xJ.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.cbfzAfoC.js → diagram-5BDNPKRD.B9qOdE5h.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.6i6P3uu9.js → diagram-G4DWMVQ6.D8X-sf77.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.B9HAIfN6.js → diagram-MMDJMWI5.CW7MvMlE.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.B9baAjUv.js → diagram-TYMM5635.J489G0Nd.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.DaBmX_GN.js → erDiagram-SMLLAGMA.BkW7tGfs.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.CJqQJjkb.js → flowDiagram-DWJPFMVM.jc9iWORD.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.CIXBLQhC.js → ganttDiagram-T4ZO3ILL.B-UQfd9E.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.CDgentto.js → gitGraphDiagram-UUTBAWPF.DFzrTSlJ.js} +1 -1
- package/dist/docs/assets/chunks/{graph.BWHn6JBQ.js → graph.C5IB6_e_.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.d9VU_ts_.js → infoDiagram-42DDH7IO.DwF0-c8L.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.BNO79Prj.js → ishikawaDiagram-UXIWVN3A.fBaTqzE7.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CPgUTM1R.js → journeyDiagram-VCZTEJTY.CM8gDVJy.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.idl0Eoe1.js → kanban-definition-6JOO6SKY.YiD1p0LB.js} +1 -1
- package/dist/docs/assets/chunks/{layout.BY7DIMr6.js → layout.6Um-DVJT.js} +1 -1
- package/dist/docs/assets/chunks/{linear.DYaUDrHd.js → linear.DcTeg4Hn.js} +1 -1
- package/dist/docs/assets/chunks/{min.V6MWb1UC.js → min.CIxkY8Fe.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.BRlJXuFS.js → mindmap-definition-QFDTVHPH.D4QM_voR.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.BIhkDLcB.js → pieDiagram-DEJITSTG.nmB309G1.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.Bw-_VEL3.js → quadrantDiagram-34T5L4WZ.D1HtZR3C.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DolEGwxw.js → requirementDiagram-MS252O5E.CZgQWob-.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.hMM-8BhN.js → sankeyDiagram-XADWPNL6.DtiBfU-P.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.Bg_CRVDy.js → sequenceDiagram-FGHM5R23.Cld4gDSt.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.DNWdl34_.js → stateDiagram-FHFEXIEX.DatP823_.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.C0571l4D.js +1 -0
- package/dist/docs/assets/chunks/{theme.CBW1oolh.js → theme.D5jbBys7.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.Cr1wJ1mB.js → timeline-definition-GMOUNBTQ.DwQLI2be.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.BltDV9j7.js → vennDiagram-DHZGUBPP.a5yMfnsa.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.BWPaUhOs.js → wardley-RL74JXVD.B-FXivgT.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.nsADqCCo.js → wardleyDiagram-NUSXRM2D.Dz--Opy3.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.CCwbO3dK.js → xychartDiagram-5P7HB3ND.Dl8w8TeT.js} +1 -1
- package/dist/docs/assets/{deployment.md.CtSJ6sF9.js → deployment.md.3MMWuPeV.js} +5 -5
- package/dist/docs/assets/{deployment.md.CtSJ6sF9.lean.js → deployment.md.3MMWuPeV.lean.js} +1 -1
- package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.js → guides_cloud-agents.md.BzbzcOyj.js} +2 -2
- package/dist/docs/assets/{guides_cloud-agents.md.CBK7W0-O.lean.js → guides_cloud-agents.md.BzbzcOyj.lean.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.js → guides_opentelemetry.md.DBQtp7_V.js} +13 -5
- package/dist/docs/assets/{guides_opentelemetry.md.ByW1Fs7b.lean.js → guides_opentelemetry.md.DBQtp7_V.lean.js} +1 -1
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.js +60 -0
- package/dist/docs/assets/guides_pagerduty.md.BHXMcMtx.lean.js +1 -0
- package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.js → reference_agent-config.md.IplwL25I.js} +1 -2
- package/dist/docs/assets/{reference_agent-config.md.DYA6ge6t.lean.js → reference_agent-config.md.IplwL25I.lean.js} +1 -1
- package/dist/docs/assets/{reference_channels.md.DYg0CLud.js → reference_channels.md.Bxaa020x.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.js → reference_cli.md.1o_TqKdt.js} +7 -2
- package/dist/docs/assets/{reference_cli.md.DB7Llw3T.lean.js → reference_cli.md.1o_TqKdt.lean.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.OUacPetl.js → reference_extensions.md.DKxTuCIw.js} +11 -8
- package/dist/docs/assets/{reference_extensions.md.OUacPetl.lean.js → reference_extensions.md.DKxTuCIw.lean.js} +1 -1
- package/dist/docs/assets/{reference_instructions.md.DrcHZXig.js → reference_instructions.md.BYMVxAkw.js} +4 -4
- package/dist/docs/assets/{reference_instructions.md.DrcHZXig.lean.js → reference_instructions.md.BYMVxAkw.lean.js} +1 -1
- package/dist/docs/assets/{reference_schedules.md.BqWnJES4.js → reference_schedules.md.03Ryy9ca.js} +3 -3
- package/dist/docs/assets/{reference_tools.md.08XR7lIl.js → reference_tools.md.-6pypsWt.js} +1 -1
- package/dist/docs/assets/{style.Dwls12uf.css → style.nMsabY-V.css} +1 -1
- package/dist/docs/assets/templates_agentic-owners.md.CTEnR0jp.js +13 -0
- package/dist/docs/assets/{templates_agentic-owners.md.CvmABtia.lean.js → templates_agentic-owners.md.CTEnR0jp.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/deployment.html +42 -42
- package/dist/docs/deployment.md +9 -4
- package/dist/docs/evals.html +37 -37
- package/dist/docs/guides/agent-to-agent.html +37 -37
- package/dist/docs/guides/bitbucket.html +37 -37
- package/dist/docs/guides/cloud-agents.html +38 -38
- package/dist/docs/guides/cloud-agents.md +1 -0
- package/dist/docs/guides/convert-automation.html +37 -37
- package/dist/docs/guides/export-grokbot.html +37 -37
- package/dist/docs/guides/github.html +37 -37
- package/dist/docs/guides/gitlab.html +37 -37
- package/dist/docs/guides/grokbot-agents.html +37 -37
- package/dist/docs/guides/hooks.html +37 -37
- package/dist/docs/guides/improve.html +37 -37
- package/dist/docs/guides/jev.html +37 -37
- package/dist/docs/guides/mcp-oauth.html +37 -37
- package/dist/docs/guides/migrate.html +37 -37
- package/dist/docs/guides/opentelemetry.html +49 -41
- package/dist/docs/guides/opentelemetry.md +54 -3
- package/dist/docs/guides/pagerduty.html +119 -0
- package/dist/docs/guides/pagerduty.md +336 -0
- package/dist/docs/guides/slack.html +37 -37
- package/dist/docs/guides/webhooks.html +37 -37
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +37 -37
- package/dist/docs/index.html +37 -37
- package/dist/docs/llms-full.txt +510 -42
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +37 -37
- package/dist/docs/reference/agent-config.html +38 -39
- package/dist/docs/reference/agent-config.md +0 -1
- package/dist/docs/reference/artifacts.html +37 -37
- package/dist/docs/reference/channels.html +38 -38
- package/dist/docs/reference/channels.md +2 -1
- package/dist/docs/reference/cli.html +43 -38
- package/dist/docs/reference/cli.md +27 -0
- package/dist/docs/reference/connections.html +37 -37
- package/dist/docs/reference/evals.html +37 -37
- package/dist/docs/reference/extensions.html +47 -44
- package/dist/docs/reference/extensions.md +15 -9
- package/dist/docs/reference/hooks.html +37 -37
- package/dist/docs/reference/http-api.html +37 -37
- package/dist/docs/reference/instructions.html +40 -40
- package/dist/docs/reference/instructions.md +5 -1
- package/dist/docs/reference/memory.html +37 -37
- package/dist/docs/reference/playground.html +36 -36
- package/dist/docs/reference/project-layout.html +37 -37
- package/dist/docs/reference/prompt.html +37 -37
- package/dist/docs/reference/schedules.html +40 -40
- package/dist/docs/reference/sessions.html +36 -36
- package/dist/docs/reference/skills.html +37 -37
- package/dist/docs/reference/subagents.html +37 -37
- package/dist/docs/reference/tools.html +39 -39
- package/dist/docs/reference/tools.md +1 -0
- package/dist/docs/templates/agentic-owners.html +42 -43
- package/dist/docs/templates/agentic-owners.md +55 -23
- package/dist/docs/templates/grokbot-agents.html +37 -37
- package/dist/docs/templates/security-reviewer.html +37 -37
- package/dist/docs/templates/thermo-quality-review.html +37 -37
- package/dist/docs/templates/thermo-review.html +37 -37
- package/dist/docs/templates/triage.html +37 -37
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +2 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +2 -1
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/extension.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.d.ts.map +1 -1
- package/dist/extensions/cursor-grokbot-agents/lib/inputs.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +1 -1
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +1 -1
- package/dist/extensions/improve/extension.js +1 -1
- package/dist/extensions/jev/extension.js +1 -1
- package/dist/extensions/jev/tools/evaluate.js +1 -1
- package/dist/extensions/slack-communication/extension.js +1 -1
- package/dist/extensions/slack-communication/tools/delete-message.js +1 -1
- package/dist/extensions/slack-communication/tools/edit-message.js +1 -1
- package/dist/extensions/slack-communication/tools/post-card.js +1 -1
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions/slack-communication/tools/post-update.js +1 -1
- package/dist/extensions/slack-communication/tools/react.js +1 -1
- package/dist/extensions/slack-communication/tools/set-status.js +1 -1
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +1 -1
- package/dist/internal/approval-gate.d.ts +4 -2
- package/dist/internal/approval-gate.d.ts.map +1 -1
- package/dist/internal/approval-gate.js +2 -1
- package/dist/internal/builtin-tools/artifacts.d.ts.map +1 -1
- package/dist/internal/builtin-tools/artifacts.js +46 -13
- package/dist/internal/builtin-tools/reminders.js +1 -1
- package/dist/internal/channel-architecture.d.ts +1 -1
- package/dist/internal/channel-architecture.d.ts.map +1 -1
- package/dist/internal/channel-architecture.js +4 -2
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +21 -12
- package/dist/internal/cli-pagerduty.d.ts +32 -0
- package/dist/internal/cli-pagerduty.d.ts.map +1 -0
- package/dist/internal/cli-pagerduty.js +242 -0
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +7 -0
- package/dist/internal/continuation-identity.d.ts +11 -3
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +83 -0
- package/dist/internal/convert-automation/convert-workflow.js +1 -1
- package/dist/internal/convert-grokbot/answers.js +1 -1
- package/dist/internal/convert-grokbot/recipe.d.ts +1 -1
- package/dist/internal/convert-grokbot/recipe.d.ts.map +1 -1
- package/dist/internal/convert-grokbot/recipe.js +1 -1
- package/dist/internal/cursor/backend-client.d.ts +1 -1
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/credentials.d.ts +1 -1
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +1 -1
- package/dist/internal/deploy-client.js +1 -1
- package/dist/internal/deploy-manifest.d.ts +11 -4
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +19 -6
- package/dist/internal/discovery/agent-config.d.ts.map +1 -1
- package/dist/internal/discovery/agent-config.js +10 -10
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +10 -10
- package/dist/internal/discovery/channels.d.ts.map +1 -1
- package/dist/internal/discovery/channels.js +20 -16
- package/dist/internal/discovery/context.d.ts +16 -0
- package/dist/internal/discovery/context.d.ts.map +1 -1
- package/dist/internal/discovery/context.js +66 -0
- package/dist/internal/discovery/cursor-plugin.js +1 -1
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -1
- package/dist/internal/discovery/extension-overlay.js +2 -6
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +3 -0
- package/dist/internal/discovery/instructions.d.ts.map +1 -1
- package/dist/internal/discovery/instructions.js +3 -6
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +3 -6
- package/dist/internal/discovery/project.d.ts +6 -0
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +27 -5
- package/dist/internal/discovery/runtime.d.ts.map +1 -1
- package/dist/internal/discovery/runtime.js +8 -8
- package/dist/internal/discovery.d.ts +1 -1
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +1 -1
- package/dist/internal/expected-delivery-failure.d.ts.map +1 -1
- package/dist/internal/expected-delivery-failure.js +6 -0
- package/dist/internal/factory-resource-channel.d.ts +1 -1
- package/dist/internal/factory-resource-channel.d.ts.map +1 -1
- package/dist/internal/filesystem/sdk-schemas.d.ts +1 -1
- package/dist/internal/filesystem/sdk-schemas.d.ts.map +1 -1
- package/dist/internal/filesystem/sdk-schemas.js +5 -4
- package/dist/internal/filesystem/tools.js +1 -1
- package/dist/internal/hmac-secret-values.d.ts +48 -0
- package/dist/internal/hmac-secret-values.d.ts.map +1 -0
- package/dist/internal/hmac-secret-values.js +68 -0
- package/dist/internal/host-otel.d.ts +2 -1
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/host-otel.js +20 -6
- package/dist/internal/host-platforms.d.ts.map +1 -1
- package/dist/internal/host-platforms.js +8 -2
- package/dist/internal/hosted-delivery-protocol.d.ts +4 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.d.ts +7 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +19 -17
- package/dist/internal/hosting.d.ts +6 -0
- package/dist/internal/hosting.d.ts.map +1 -1
- package/dist/internal/hosting.js +9 -0
- package/dist/internal/init-scaffold.js +1 -1
- package/dist/internal/interview/agent-questions.d.ts +1 -1
- package/dist/internal/interview/agent-questions.d.ts.map +1 -1
- package/dist/internal/interview/agent-questions.js +1 -1
- package/dist/internal/interview/question.d.ts +1 -1
- package/dist/internal/interview/question.d.ts.map +1 -1
- package/dist/internal/interview/question.js +1 -1
- package/dist/internal/json-schema.d.ts +7 -7
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +14 -17
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +50 -19
- package/dist/internal/otel/config.d.ts +10 -1
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +47 -10
- package/dist/internal/otel/http.d.ts +1 -1
- package/dist/internal/otel/http.d.ts.map +1 -1
- package/dist/internal/otel/http.js +1 -1
- package/dist/internal/otel/runtime.d.ts +17 -14
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +203 -237
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +21 -5
- package/dist/internal/process-memory-telemetry.d.ts +1 -1
- package/dist/internal/process-memory-telemetry.d.ts.map +1 -1
- package/dist/internal/process-memory-telemetry.js +1 -1
- package/dist/internal/sdk-runner.d.ts +2 -3
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +30 -6
- package/dist/internal/secret-alternatives.d.ts +11 -0
- package/dist/internal/secret-alternatives.d.ts.map +1 -0
- package/dist/internal/secret-alternatives.js +13 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +27 -15
- package/dist/internal/session-engine.d.ts +9 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +30 -4
- package/dist/internal/slack-provision-client.js +1 -1
- package/dist/internal/sqlite-experimental-warning.d.ts +2 -0
- package/dist/internal/sqlite-experimental-warning.d.ts.map +1 -0
- package/dist/internal/sqlite-experimental-warning.js +22 -0
- package/dist/internal/store-api-protocol.d.ts +1 -1
- package/dist/internal/store-api-protocol.d.ts.map +1 -1
- package/dist/internal/store-api-protocol.js +1 -1
- package/dist/internal/testing/conversation-identity-vectors.d.ts +6 -1
- package/dist/internal/testing/conversation-identity-vectors.d.ts.map +1 -1
- package/dist/internal/testing/conversation-identity-vectors.js +34 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts +38 -0
- package/dist/internal/testing/hmac-secret-vectors.d.ts.map +1 -0
- package/dist/internal/testing/hmac-secret-vectors.js +89 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts +42 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/pagerduty-continuation-fixtures.js +175 -0
- package/dist/internal/update-check.d.ts +1 -1
- package/dist/internal/update-check.d.ts.map +1 -1
- package/dist/internal/update-check.js +1 -1
- package/dist/internal/zod-schema.d.ts +14 -0
- package/dist/internal/zod-schema.d.ts.map +1 -0
- package/dist/internal/zod-schema.js +22 -0
- package/dist/otel.d.ts +1 -2
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +0 -1
- package/dist/playground/assets/cursor-icons-16-DmHBTm1-.woff2 +0 -0
- package/dist/playground/assets/index-BdMwybMt.css +1 -0
- package/dist/playground/assets/index-CHk6O92d.js +62 -0
- package/dist/playground/index.html +2 -2
- package/dist/tools.d.ts +14 -11
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +4 -3
- package/dist/types.d.ts +67 -16
- package/dist/types.d.ts.map +1 -1
- package/docs/deployment.md +9 -4
- package/docs/guides/cloud-agents.md +1 -0
- package/docs/guides/opentelemetry.md +54 -3
- package/docs/guides/pagerduty.md +341 -0
- package/docs/reference/agent-config.md +0 -1
- package/docs/reference/channels.md +2 -1
- package/docs/reference/cli.md +27 -0
- package/docs/reference/extensions.md +15 -9
- package/docs/reference/instructions.md +5 -1
- package/docs/reference/tools.md +1 -0
- package/docs/templates/agentic-owners.md +55 -23
- package/package.json +24 -19
- package/skills/migrate-v2/SKILL.md +1 -1
- package/skills/otel/SKILL.md +24 -7
- package/templates/agentic-owners/README.md +6 -1
- package/templates/agentic-owners/bot/lib/owners/decision.ts +31 -5
- package/templates/agentic-owners/bot/lib/owners/globalOverride.ts +60 -0
- package/templates/agentic-owners/bot/lib/owners/match.ts +85 -19
- package/templates/agentic-owners/bot/lib/owners/parse.ts +133 -2
- package/templates/agentic-owners/bot/lib/owners/types.ts +23 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.B3j7LFef.js +0 -1
- package/dist/docs/assets/chunks/channel.RoCpi7X1.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.oxdmwwqk.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.oxdmwwqk.js +0 -1
- package/dist/docs/assets/chunks/clone.BkguoIMm.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.7W-btjJ2.js +0 -1
- package/dist/docs/assets/templates_agentic-owners.md.CvmABtia.js +0 -14
- package/dist/playground/assets/cursor-icons-16-gwXtdAvu.woff2 +0 -0
- package/dist/playground/assets/index-BtsbIqV9.css +0 -1
- package/dist/playground/assets/index-CD8VRa25.js +0 -71
- /package/dist/docs/assets/{reference_channels.md.DYg0CLud.lean.js → reference_channels.md.Bxaa020x.lean.js} +0 -0
- /package/dist/docs/assets/{reference_schedules.md.BqWnJES4.lean.js → reference_schedules.md.03Ryy9ca.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.08XR7lIl.lean.js → reference_tools.md.-6pypsWt.lean.js} +0 -0
|
@@ -8,13 +8,13 @@ description: "Scaffold the agent, commit .agentic-owners policies, and let it ri
|
|
|
8
8
|
This agent reviews every pull request in your repository. It risk-tiers
|
|
9
9
|
the diff, requests the owning team or user as reviewers, and approves
|
|
10
10
|
what your policy allows. Ownership rules live in
|
|
11
|
-
`.agentic-owners/policy.yml` files committed at any depth of the repo
|
|
12
|
-
|
|
13
|
-
from the PR's base ref so a PR cannot exempt itself.
|
|
11
|
+
`.agentic-owners/policy.yml` files committed at any depth of the repo.
|
|
12
|
+
The closest policy to a changed file wins, and policies are always read
|
|
13
|
+
from the PR's base ref, so a PR cannot exempt itself.
|
|
14
14
|
|
|
15
15
|
## Scaffold
|
|
16
16
|
|
|
17
|
-
```
|
|
17
|
+
```bash
|
|
18
18
|
bdk init ./owners-agent --template agentic-owners
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -23,21 +23,23 @@ on PATH.
|
|
|
23
23
|
|
|
24
24
|
## Log in and run
|
|
25
25
|
|
|
26
|
-
Set your repositories in `bot/lib/config.ts` (`repos: ["
|
|
26
|
+
Set your repositories in `bot/lib/config.ts` (`repos: ["acme/api"]`),
|
|
27
27
|
then:
|
|
28
28
|
|
|
29
|
-
```
|
|
29
|
+
```bash
|
|
30
30
|
cd owners-agent
|
|
31
31
|
bdk login
|
|
32
32
|
bdk dev
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
PR events stream through your Cursor account. No webhook or GitHub App
|
|
36
|
-
setup.
|
|
36
|
+
setup. The agent reviews a PR when it is opened, reopened, pushed to,
|
|
37
|
+
marked ready for review, or retargeted to another base. Draft PRs wait
|
|
38
|
+
until they are ready. Open a PR, or replay a real one (this also works
|
|
37
39
|
with `repos` empty):
|
|
38
40
|
|
|
39
|
-
```
|
|
40
|
-
bdk github replay https://github.com/
|
|
41
|
+
```bash
|
|
42
|
+
bdk github replay https://github.com/acme/api/pull/123 --dir .
|
|
41
43
|
```
|
|
42
44
|
|
|
43
45
|
Deploy with `bdk deploy`.
|
|
@@ -49,37 +51,67 @@ low risk approve, medium and above hold with a comment. Route reviews by
|
|
|
49
51
|
committing policies:
|
|
50
52
|
|
|
51
53
|
```yaml
|
|
52
|
-
# .agentic-owners/policy.yml
|
|
53
|
-
# paths are repo-root-relative globs, wherever the policy file lives.
|
|
54
|
+
# .agentic-owners/policy.yml at any depth; the closest policy wins.
|
|
54
55
|
version: 1
|
|
55
56
|
policies:
|
|
56
57
|
- paths: ["docs/**"]
|
|
57
58
|
always_approve: true
|
|
58
59
|
- paths: ["src/api/**"]
|
|
59
|
-
team:
|
|
60
|
+
team: platform # bare slug in the repo's org; or acme/platform, or user: alice
|
|
60
61
|
prompt: api-review.md # optional extra rubric, same directory
|
|
61
62
|
- paths: ["src/billing/**"]
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
users: [alice, bob]
|
|
64
|
+
mode: hard # the agent never approves; a person must
|
|
64
65
|
```
|
|
65
66
|
|
|
66
|
-
`
|
|
67
|
-
|
|
67
|
+
`paths` are globs relative to the directory that holds the
|
|
68
|
+
`.agentic-owners/` folder, so a root policy sees repo-relative paths and
|
|
69
|
+
`src/.agentic-owners/policy.yml` matches `api/**` against
|
|
70
|
+
`src/api/**`. Leading `../` segments reach a sibling tree. A path cannot
|
|
71
|
+
escape the repo.
|
|
72
|
+
|
|
73
|
+
| Key | Meaning |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| `paths` | Globs relative to the policy's directory. Required. |
|
|
76
|
+
| `team` / `teams` | Owner teams. A bare slug resolves in the repo's org. An `org/team` handle names a team directly. |
|
|
77
|
+
| `user` / `users` | Owner GitHub logins, without `@`. |
|
|
78
|
+
| `prompt` | Markdown filename in the same directory, added to the rubric for matching PRs. |
|
|
79
|
+
| `mode` | `advisory` (default): low risk approves. `hard`: a person must approve. `notify`: the rule never blocks and its owners are not requested. |
|
|
80
|
+
| `human_review_required` | `true` is the older spelling of `mode: hard`. |
|
|
81
|
+
| `self_review` | A listed `user:` owner's own PRs clear this rule. |
|
|
82
|
+
| `always_approve` | Satisfied at every risk tier. Cannot combine with owners, `prompt`, `mode`, `self_review`, or `human_review_required`. |
|
|
83
|
+
|
|
84
|
+
A rule without owners must set `always_approve: true`.
|
|
85
|
+
`global_exclusions` in the root policy opts paths out entirely. The
|
|
86
|
+
agent rejects `delegated_automations`: nothing in this template consumes
|
|
87
|
+
automation approvals.
|
|
68
88
|
|
|
69
89
|
## What one review does
|
|
70
90
|
|
|
71
91
|
One model turn per PR head assesses the host-fetched diff against the
|
|
72
|
-
base rubric plus any matched rule prompts, then records a
|
|
92
|
+
base rubric plus any matched rule prompts, then records a risk tier of
|
|
93
|
+
`very_low`, `low`, `medium`, `medium_high`, or `high` with
|
|
73
94
|
`record_review`. The host recomputes the policy from trusted state and
|
|
74
95
|
applies the deterministic decision:
|
|
75
96
|
|
|
76
|
-
- **Approve** when
|
|
77
|
-
|
|
97
|
+
- **Approve** when every matched rule is `always_approve` or `notify`,
|
|
98
|
+
or when the tier is very low or low and every matched `hard` rule is
|
|
99
|
+
cleared by an owner-author with `self_review`. At medium and above,
|
|
100
|
+
the agent approves only when the author's `self_review` covers every
|
|
101
|
+
rule that can require review.
|
|
78
102
|
- **Request reviewers** otherwise: the policy owners (max 2, never the
|
|
79
103
|
author), plus one status comment the agent keeps updated in place.
|
|
80
104
|
|
|
105
|
+
An approval binds to the head SHA, and a later hold dismisses the
|
|
106
|
+
agent's earlier approvals. The agent also holds when the PR edits
|
|
107
|
+
`.agentic-owners/` or `CODEOWNERS`, when the diff is empty or truncated,
|
|
108
|
+
or when GitHub capped the changed-file list. `self_review` never clears
|
|
109
|
+
a governance edit.
|
|
110
|
+
|
|
81
111
|
The model never writes to GitHub. A broken policy file fails closed with
|
|
82
|
-
a comment listing the validation issues.
|
|
112
|
+
a comment listing the validation issues. Team membership is not
|
|
113
|
+
resolved, because repo-scoped credentials cannot read org teams, so
|
|
114
|
+
`self_review` applies to `user:` owners only.
|
|
83
115
|
|
|
84
116
|
## Rubric
|
|
85
117
|
|
|
@@ -91,9 +123,9 @@ next to the policy that names them. The next review reads both.
|
|
|
91
123
|
|
|
92
124
|
Use the three smoke reviews as a local exercise:
|
|
93
125
|
|
|
94
|
-
```
|
|
126
|
+
```bash
|
|
95
127
|
bdk eval
|
|
96
128
|
```
|
|
97
129
|
|
|
98
|
-
|
|
99
|
-
sessions skip GitHub writes.
|
|
130
|
+
The cases are a docs-only change, an auth deletion, and a prompt
|
|
131
|
+
injection. Eval sessions skip GitHub writes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cursor/bdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.25",
|
|
4
4
|
"description": "Build, test, and deploy BDK bots and agents as code on Cursor's agent harness.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"repository": {
|
|
@@ -141,6 +141,13 @@
|
|
|
141
141
|
"import": "./dist/channels/bitbucket/index.js",
|
|
142
142
|
"default": "./dist/channels/bitbucket/index.js"
|
|
143
143
|
},
|
|
144
|
+
"./channels/pagerduty": {
|
|
145
|
+
"anysphere-source": "./src/channels/pagerduty/index.ts",
|
|
146
|
+
"bun": "./dist/channels/pagerduty/index.js",
|
|
147
|
+
"types": "./dist/channels/pagerduty/index.d.ts",
|
|
148
|
+
"import": "./dist/channels/pagerduty/index.js",
|
|
149
|
+
"default": "./dist/channels/pagerduty/index.js"
|
|
150
|
+
},
|
|
144
151
|
"./channels/deployments": {
|
|
145
152
|
"anysphere-source": "./src/channels/deployments/index.ts",
|
|
146
153
|
"types": "./dist/channels/deployments/index.d.ts",
|
|
@@ -329,17 +336,14 @@
|
|
|
329
336
|
"ms": "^2.1.3",
|
|
330
337
|
"proper-lockfile": "^4.1.2",
|
|
331
338
|
"slackify-markdown": "^5.0.0",
|
|
332
|
-
"tsx": "
|
|
333
|
-
"zod": "^3.25.
|
|
334
|
-
|
|
339
|
+
"tsx": "4.23.15",
|
|
340
|
+
"zod-to-json-schema": "^3.25.2"
|
|
341
|
+
},
|
|
342
|
+
"peerDependencies": {
|
|
343
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
335
344
|
},
|
|
336
345
|
"devDependencies": {
|
|
337
346
|
"@braintree/sanitize-url": "7.1.2",
|
|
338
|
-
"@cursor/sdk-darwin-arm64": "1.0.37",
|
|
339
|
-
"@cursor/sdk-darwin-x64": "1.0.37",
|
|
340
|
-
"@cursor/sdk-linux-arm64": "1.0.37",
|
|
341
|
-
"@cursor/sdk-linux-x64": "1.0.37",
|
|
342
|
-
"@cursor/sdk-win32-x64": "1.0.37",
|
|
343
347
|
"@stylexswc/rs-compiler": "^0.18.0",
|
|
344
348
|
"@tanstack/react-virtual": "3.13.23",
|
|
345
349
|
"@types/js-yaml": "4.0.9",
|
|
@@ -347,33 +351,34 @@
|
|
|
347
351
|
"@types/node": "22.14.1",
|
|
348
352
|
"@types/pg": "^8.16.0",
|
|
349
353
|
"@types/proper-lockfile": "^4.1.4",
|
|
350
|
-
"@types/react": "
|
|
351
|
-
"@types/react-dom": "
|
|
354
|
+
"@types/react": "19.3.0",
|
|
355
|
+
"@types/react-dom": "19.3.0",
|
|
352
356
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
353
|
-
"@vitejs/plugin-react": "
|
|
357
|
+
"@vitejs/plugin-react": "6.1.2",
|
|
354
358
|
"cytoscape": "3.33.3",
|
|
355
359
|
"cytoscape-cose-bilkent": "4.1.0",
|
|
356
360
|
"dayjs": "1.11.20",
|
|
357
361
|
"mermaid": "^11.14.0",
|
|
358
362
|
"pg": "^8.18.0",
|
|
359
363
|
"pretty-ms": "^9.2.0",
|
|
360
|
-
"react": "
|
|
361
|
-
"react-dom": "
|
|
364
|
+
"react": "19.3.0",
|
|
365
|
+
"react-dom": "19.3.0",
|
|
362
366
|
"react-markdown": "^10.1.0",
|
|
363
367
|
"rehype-highlight": "^7.0.2",
|
|
364
368
|
"remark-gfm": "^4.0.1",
|
|
365
369
|
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
366
|
-
"vite": "
|
|
370
|
+
"vite": "8.3.1",
|
|
367
371
|
"vitepress": "1.6.4",
|
|
368
372
|
"vitepress-plugin-mermaid": "^2.0.17",
|
|
369
|
-
"vitest": "
|
|
373
|
+
"vitest": "5.0.3",
|
|
370
374
|
"yaml": "^2.4.2",
|
|
375
|
+
"zod": "4.6.5",
|
|
371
376
|
"zustand": "^5.0.9",
|
|
372
377
|
"@anysphere/agent-exec": "1.0.0",
|
|
378
|
+
"@anysphere/agent-store-sync": "1.0.0",
|
|
373
379
|
"@anysphere/proto": "1.0.0",
|
|
374
380
|
"@anysphere/context": "1.0.0",
|
|
375
|
-
"@anysphere/ui": "1.0.0"
|
|
376
|
-
"@anysphere/agent-store-sync": "1.0.0"
|
|
381
|
+
"@anysphere/ui": "1.0.0"
|
|
377
382
|
},
|
|
378
383
|
"scripts": {
|
|
379
384
|
"build": "tsc -p tsconfig.build.json && node scripts/bundle-publish-shims.mjs && node scripts/copy-extension-assets.mjs && pnpm run build:playground && pnpm run docs:build",
|
|
@@ -396,4 +401,4 @@
|
|
|
396
401
|
"smoke-publish": "node scripts/smoke-publish-artifact.mjs",
|
|
397
402
|
"publish-check": "pnpm run build && pnpm run verify-publish && pnpm run smoke-publish"
|
|
398
403
|
}
|
|
399
|
-
}
|
|
404
|
+
}
|
|
@@ -393,5 +393,5 @@ After the deploy is running:
|
|
|
393
393
|
`bdk session <ses_...> --prod --slug <slug>` until the latest run
|
|
394
394
|
finishes.
|
|
395
395
|
|
|
396
|
-
The
|
|
396
|
+
The deploy skill (`skills/deploy/SKILL.md`) covers deploys with an attached
|
|
397
397
|
service account.
|
package/skills/otel/SKILL.md
CHANGED
|
@@ -22,10 +22,26 @@ Public surface (use one of these):
|
|
|
22
22
|
2. `serve(dir, { otel: { … } })`. `otel: false` disables env and
|
|
23
23
|
authored config.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
`
|
|
25
|
+
Metrics use delta temporality by default. For Grafana Cloud, set
|
|
26
|
+
`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=cumulative`.
|
|
27
|
+
|
|
28
|
+
`bot/otel.ts` is factory-only. Import `defineOtel` from
|
|
29
|
+
`@cursor/bdk/internal/otel` only in a Cursor factory agent.
|
|
30
|
+
A customer agent uses the environment variables above.
|
|
31
|
+
|
|
32
|
+
Hosted agents:
|
|
33
|
+
|
|
34
|
+
- Set `OTEL_EXPORTER_OTLP_ENDPOINT` and
|
|
35
|
+
`OTEL_EXPORTER_OTLP_HEADERS` with `bdk secrets set`. Add the
|
|
36
|
+
collector host to `hosting.egressDomains`.
|
|
37
|
+
- Header values are URL-encoded (`Authorization=Basic%20...`).
|
|
38
|
+
- A new header from `bdk secrets set` applies on the next export.
|
|
39
|
+
You do not redeploy for a token change.
|
|
40
|
+
- BDK logs an error when an exporter host is not in
|
|
41
|
+
`hosting.egressDomains`.
|
|
42
|
+
- Spans and metrics from before the first request are not exported.
|
|
43
|
+
- If the OpenTelemetry config fails, BDK logs the error and the
|
|
44
|
+
request still completes.
|
|
29
45
|
|
|
30
46
|
| Signal | Default |
|
|
31
47
|
| --- | --- |
|
|
@@ -34,9 +50,10 @@ customer agent. Hosted secrets can arrive after startup; env and
|
|
|
34
50
|
| Logs | off (`logs: true` or `OTEL_LOGS_EXPORTER=otlp`) |
|
|
35
51
|
|
|
36
52
|
Prompt text and tool payloads stay off the wire unless you set
|
|
37
|
-
`OTEL_LOG_USER_PROMPTS` / `OTEL_LOG_TOOL_CONTENT`. A failed tool
|
|
38
|
-
span status
|
|
39
|
-
exporters when the process already has a
|
|
53
|
+
`OTEL_LOG_USER_PROMPTS` / `OTEL_LOG_TOOL_CONTENT`. A failed tool's
|
|
54
|
+
span status and its `action.result` log include a short failure
|
|
55
|
+
reason. BDK keeps its own exporters when the process already has a
|
|
56
|
+
provider.
|
|
40
57
|
|
|
41
58
|
## Custom metrics
|
|
42
59
|
|
|
@@ -51,7 +51,12 @@ policies:
|
|
|
51
51
|
`self_review: true` lets a listed `user:` owner's own PRs auto-approve
|
|
52
52
|
(team membership is not resolved with repo-scoped credentials, so team
|
|
53
53
|
ownership stays fail-closed for authors). `global_exclusions` (root
|
|
54
|
-
policy only) opts paths out entirely.
|
|
54
|
+
policy only) opts paths out entirely. `global_overrides` (root policy
|
|
55
|
+
only, `self_review: true` required) let their owners self-review a file
|
|
56
|
+
whose advisory winner they do not own. They add no owners and leave a file
|
|
57
|
+
with no owner unowned. They leave exclusions, always-approve, hard, and
|
|
58
|
+
notify winners unchanged, and they skip a `skip_teams` team or a
|
|
59
|
+
`skip_paths` path.
|
|
55
60
|
|
|
56
61
|
## What the agent does
|
|
57
62
|
|
|
@@ -140,16 +140,42 @@ export function authorOwnsRule(
|
|
|
140
140
|
return rule.users.some((user) => normalizeHandle(user) === handle);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Whether the author may clear `rule` by self-review. A merged override
|
|
145
|
+
* records who may self-review in `selfReviewTeams` / `selfReviewUsers`:
|
|
146
|
+
* the winner's owners when that rule sets `self_review`, and the override's
|
|
147
|
+
* owners when the override sets it.
|
|
148
|
+
*/
|
|
149
|
+
export function authorMaySelfReview(
|
|
150
|
+
rule: AgenticOwnersPathRule,
|
|
151
|
+
author: ApprovalAuthor | undefined,
|
|
152
|
+
): boolean {
|
|
153
|
+
if (!rule.selfReview) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
if (rule.selfReviewTeams === undefined && rule.selfReviewUsers === undefined) {
|
|
157
|
+
return authorOwnsRule(rule, author);
|
|
158
|
+
}
|
|
159
|
+
return authorOwnsRule(
|
|
160
|
+
{
|
|
161
|
+
...rule,
|
|
162
|
+
teams: rule.selfReviewTeams ?? [],
|
|
163
|
+
users: rule.selfReviewUsers ?? [],
|
|
164
|
+
},
|
|
165
|
+
author,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
143
169
|
/**
|
|
144
170
|
* The first matched rule (closest-match order is preserved) for which the author
|
|
145
|
-
*
|
|
146
|
-
*
|
|
171
|
+
* may self-review — the rule that authorizes the author to approve their own
|
|
172
|
+
* change. Undefined when none applies.
|
|
147
173
|
*/
|
|
148
174
|
function selfReviewRuleForAuthor(
|
|
149
175
|
matchedRules: readonly AgenticOwnersPathRule[],
|
|
150
176
|
author: ApprovalAuthor | undefined,
|
|
151
177
|
): AgenticOwnersPathRule | undefined {
|
|
152
|
-
return matchedRules.find((rule) =>
|
|
178
|
+
return matchedRules.find((rule) => authorMaySelfReview(rule, author));
|
|
153
179
|
}
|
|
154
180
|
|
|
155
181
|
/**
|
|
@@ -180,7 +206,7 @@ export function authorSelfReviewCoversMatchedRules(
|
|
|
180
206
|
);
|
|
181
207
|
return (
|
|
182
208
|
reviewCapableRules.length > 0 &&
|
|
183
|
-
reviewCapableRules.every((rule) =>
|
|
209
|
+
reviewCapableRules.every((rule) => authorMaySelfReview(rule, author))
|
|
184
210
|
);
|
|
185
211
|
}
|
|
186
212
|
|
|
@@ -384,7 +410,7 @@ function baseApprovalVerdict(input: {
|
|
|
384
410
|
// owner self_review on that same rule. Low-risk auto-approve never clears a
|
|
385
411
|
// hard gate without self_review.
|
|
386
412
|
const blockingHardGate = reviewRequiredRules.find(
|
|
387
|
-
(rule) => ruleIsHardGate(rule) && !(rule
|
|
413
|
+
(rule) => ruleIsHardGate(rule) && !authorMaySelfReview(rule, author),
|
|
388
414
|
);
|
|
389
415
|
if (blockingHardGate !== undefined) {
|
|
390
416
|
return requestVerdict("a matched policy requires human review");
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Vendored from the Agentic Owners policy core; see README.md in this
|
|
2
|
+
// directory. Precedence must stay identical to the source's.
|
|
3
|
+
|
|
4
|
+
import type { AgenticOwnersPathRule } from "./types.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Winners a root `global_overrides` entry must not change: owner-clearing
|
|
8
|
+
* carve-outs, hard gates, and notify rules.
|
|
9
|
+
*/
|
|
10
|
+
export function blocksGlobalOverride(rule: AgenticOwnersPathRule): boolean {
|
|
11
|
+
return (
|
|
12
|
+
rule.globalExclusion === true ||
|
|
13
|
+
rule.alwaysApprove ||
|
|
14
|
+
rule.mode === "hard" ||
|
|
15
|
+
rule.humanReviewRequired ||
|
|
16
|
+
rule.mode === "notify"
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function unionOwners(lists: readonly (readonly string[])[]): string[] {
|
|
21
|
+
return [...new Set(lists.flat())];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function selfReviewOwners(rule: AgenticOwnersPathRule): {
|
|
25
|
+
readonly selfReviewTeams: readonly string[];
|
|
26
|
+
readonly selfReviewUsers: readonly string[];
|
|
27
|
+
} {
|
|
28
|
+
return {
|
|
29
|
+
selfReviewTeams: rule.selfReviewTeams ?? rule.teams,
|
|
30
|
+
selfReviewUsers: rule.selfReviewUsers ?? rule.users,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Let override owners clear a file the winner owns by self-review. The
|
|
36
|
+
* winner's owners, reviewers, and lane are unchanged, so an author outside the
|
|
37
|
+
* override needs exactly the review they would without it. The winner's
|
|
38
|
+
* owners self-review only when the winner sets `self_review`. An override
|
|
39
|
+
* whose `self_review` a policy edit withheld grants nothing.
|
|
40
|
+
*/
|
|
41
|
+
export function mergeGlobalOverride(
|
|
42
|
+
winner: AgenticOwnersPathRule,
|
|
43
|
+
overrides: readonly AgenticOwnersPathRule[],
|
|
44
|
+
): AgenticOwnersPathRule {
|
|
45
|
+
const granting = overrides.filter((rule) => rule.selfReview);
|
|
46
|
+
if (granting.length === 0) {
|
|
47
|
+
return winner;
|
|
48
|
+
}
|
|
49
|
+
const selfReviewers = winner.selfReview ? [winner, ...granting] : granting;
|
|
50
|
+
return {
|
|
51
|
+
...winner,
|
|
52
|
+
selfReview: true,
|
|
53
|
+
selfReviewTeams: unionOwners(
|
|
54
|
+
selfReviewers.map((rule) => selfReviewOwners(rule).selfReviewTeams),
|
|
55
|
+
),
|
|
56
|
+
selfReviewUsers: unionOwners(
|
|
57
|
+
selfReviewers.map((rule) => selfReviewOwners(rule).selfReviewUsers),
|
|
58
|
+
),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -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
|
|
120
|
-
filepath,
|
|
121
|
-
rules,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
let winner:
|
|
127
|
-
|
|
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 (
|
|
132
|
-
|
|
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 =
|
|
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
|
-
|
|
179
|
-
|
|
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
|
-
|
|
202
|
-
|
|
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 {
|