@cursor/bdk 0.2.9 → 0.2.10
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/dist/artifacts.js +3 -5
- package/dist/bin/agent-serve.js +803 -812
- package/dist/channels/bitbucket/api.js +305 -321
- package/dist/channels/bitbucket/binding.js +97 -61
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +15 -1
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-channel.js +95 -42
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +11 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -1
- package/dist/channels/bitbucket/bitbucket-webhook.js +214 -204
- package/dist/channels/bitbucket/checks.js +9 -21
- package/dist/channels/bitbucket/cursor-account.js +1 -1
- package/dist/channels/bitbucket/defaults.js +14 -4
- package/dist/channels/bitbucket/events.js +1 -2
- package/dist/channels/bitbucket/index.d.ts +6 -2
- package/dist/channels/bitbucket/index.d.ts.map +1 -1
- package/dist/channels/bitbucket/index.js +6 -2
- package/dist/channels/bitbucket/replay.js +80 -56
- package/dist/channels/bitbucket/state.js +16 -7
- package/dist/channels/bitbucket/types.d.ts +11 -2
- package/dist/channels/bitbucket/types.d.ts.map +1 -1
- package/dist/channels/checks.js +18 -28
- package/dist/channels/deployments/deployments-channel.js +26 -34
- package/dist/channels/github/api.js +216 -210
- package/dist/channels/github/auth.d.ts +5 -1
- package/dist/channels/github/auth.d.ts.map +1 -1
- package/dist/channels/github/auth.js +157 -174
- package/dist/channels/github/binding.js +48 -39
- package/dist/channels/github/checks.js +9 -14
- package/dist/channels/github/cursor-account.js +6 -11
- package/dist/channels/github/defaults.js +105 -130
- package/dist/channels/github/forward.js +13 -17
- package/dist/channels/github/github-channel.d.ts +43 -2
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +1228 -958
- package/dist/channels/github/progress.js +145 -146
- package/dist/channels/github/replay.js +30 -39
- package/dist/channels/github/state.js +40 -16
- package/dist/channels/github/types.d.ts +30 -6
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.js +100 -114
- package/dist/channels/gitlab/binding.js +52 -33
- package/dist/channels/gitlab/checks.js +28 -29
- package/dist/channels/gitlab/cursor-account.js +1 -1
- package/dist/channels/gitlab/defaults.js +9 -3
- package/dist/channels/gitlab/gitlab-channel.d.ts +16 -1
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-channel.js +95 -42
- package/dist/channels/gitlab/gitlab-webhook.d.ts +10 -1
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -1
- package/dist/channels/gitlab/gitlab-webhook.js +282 -249
- package/dist/channels/gitlab/index.d.ts +6 -2
- package/dist/channels/gitlab/index.d.ts.map +1 -1
- package/dist/channels/gitlab/index.js +6 -2
- package/dist/channels/gitlab/replay.js +50 -27
- package/dist/channels/gitlab/state.js +14 -6
- package/dist/channels/gitlab/types.d.ts +13 -2
- package/dist/channels/gitlab/types.d.ts.map +1 -1
- package/dist/channels/origin/api.js +100 -116
- package/dist/channels/origin/binding.js +15 -16
- package/dist/channels/origin/checks.js +30 -28
- package/dist/channels/origin/defaults.js +50 -65
- package/dist/channels/origin/origin-channel.js +266 -272
- package/dist/channels/origin/origin-webhook.js +70 -88
- package/dist/channels/origin/reactions.js +9 -21
- package/dist/channels/origin/state.js +13 -5
- package/dist/channels/slack/agentic-delivery.js +426 -478
- package/dist/channels/slack/agentic-posted.js +9 -10
- package/dist/channels/slack/agentic-signals.js +2 -3
- package/dist/channels/slack/api.js +417 -427
- package/dist/channels/slack/approvals.js +1 -1
- package/dist/channels/slack/assistant.js +37 -47
- package/dist/channels/slack/attachments.js +188 -206
- package/dist/channels/slack/auth.js +8 -6
- package/dist/channels/slack/bot-mentions.js +31 -45
- package/dist/channels/slack/channel-watch.js +42 -48
- package/dist/channels/slack/cli-project.js +112 -137
- package/dist/channels/slack/code-fences.js +3 -5
- package/dist/channels/slack/constants.js +2 -2
- package/dist/channels/slack/credentials.js +23 -38
- package/dist/channels/slack/defaults.js +292 -331
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +533 -460
- package/dist/channels/slack/doctor.js +200 -214
- package/dist/channels/slack/eval-directive.js +79 -96
- package/dist/channels/slack/event-id-dedupe.js +1 -1
- package/dist/channels/slack/external-policy.js +26 -39
- package/dist/channels/slack/footer.js +28 -41
- package/dist/channels/slack/inbound.d.ts +1 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +50 -31
- package/dist/channels/slack/init.d.ts +1 -5
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +42 -59
- package/dist/channels/slack/interactive.d.ts +9 -3
- package/dist/channels/slack/interactive.d.ts.map +1 -1
- package/dist/channels/slack/interactive.js +160 -162
- package/dist/channels/slack/links.js +1 -2
- package/dist/channels/slack/live-delivery.js +172 -190
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +44 -23
- package/dist/channels/slack/message-body.js +2 -2
- package/dist/channels/slack/nudge-carrier.js +30 -42
- package/dist/channels/slack/nudge-store.js +164 -191
- package/dist/channels/slack/paint-start.js +66 -81
- package/dist/channels/slack/placeholder.js +123 -152
- package/dist/channels/slack/pr-ref.js +1 -1
- package/dist/channels/slack/progress-delivery.js +65 -78
- package/dist/channels/slack/reasoning-card.js +36 -49
- package/dist/channels/slack/recording-sink.js +12 -24
- package/dist/channels/slack/reply-options.js +7 -12
- package/dist/channels/slack/self-identity.js +27 -35
- package/dist/channels/slack/sender-name.d.ts +12 -3
- package/dist/channels/slack/sender-name.d.ts.map +1 -1
- package/dist/channels/slack/sender-name.js +57 -61
- package/dist/channels/slack/setup.js +2 -4
- package/dist/channels/slack/slack-channel.d.ts +6 -4
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +441 -308
- package/dist/channels/slack/socket-mode.js +38 -52
- package/dist/channels/slack/thread-context.js +143 -160
- package/dist/channels/slack/tool-approval-events.js +149 -166
- package/dist/channels/slack/tool-cards.js +6 -11
- package/dist/channels/slack/tool-chip.js +1 -2
- package/dist/channels/slack/types.d.ts +15 -17
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels/slack/upload.js +84 -97
- package/dist/channels/slack/user-info.js +27 -41
- package/dist/channels.js +9 -20
- package/dist/dashboard-session-url.js +3 -4
- package/dist/docs/404.html +2 -2
- package/dist/docs/assets/{app.BNhEdGa8.js → app.DXI7bwox.js} +4 -4
- package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.js → building-with-agents.md.Df87rAe1.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.CtLtpWcx.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DIdUV1Ph.js → VPLocalSearchBox.BrbO5mEe.js} +1 -1
- package/dist/docs/assets/chunks/{arc.lELI4_SR.js → arc.BOG1yms8.js} +1 -1
- package/dist/docs/assets/chunks/{architectureDiagram-Q4EWVU46.iCMdvuoM.js → architectureDiagram-Q4EWVU46.C0hsMZnZ.js} +1 -1
- package/dist/docs/assets/chunks/{baseUniq.C1-nDJBf.js → baseUniq.H044KjKs.js} +1 -1
- package/dist/docs/assets/chunks/{blockDiagram-DXYQGD6D.ClemzBox.js → blockDiagram-DXYQGD6D.BsRW6GoB.js} +1 -1
- package/dist/docs/assets/chunks/{c4Diagram-AHTNJAMY.BqTak6cR.js → c4Diagram-AHTNJAMY.B9HV5PFR.js} +1 -1
- package/dist/docs/assets/chunks/channel.CBwrU9rP.js +1 -0
- package/dist/docs/assets/chunks/{chunk-4BX2VUAB.CUS3qs_R.js → chunk-4BX2VUAB.CPoT_ajl.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-4TB4RGXK.dz5fdHcl.js → chunk-4TB4RGXK.DZBwWuCL.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-55IACEB6.D6BEBmve.js → chunk-55IACEB6.CZ3yTiyq.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-EDXVE4YY.B5uK4ID9.js → chunk-EDXVE4YY.6DfvHSd8.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-FMBD7UC4.PgOJgNQs.js → chunk-FMBD7UC4.CpBj8HfK.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-OYMX7WX6.CvkTrCii.js → chunk-OYMX7WX6.BdKo8YqS.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-QZHKN3VN.BnSfKYsB.js → chunk-QZHKN3VN.BnXNyxJx.js} +1 -1
- package/dist/docs/assets/chunks/{chunk-YZCP3GAM.MZH6v5UC.js → chunk-YZCP3GAM.Cg1OcF8G.js} +1 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.CbC_mrvB.js +1 -0
- package/dist/docs/assets/chunks/clone.BTvFyY1a.js +1 -0
- package/dist/docs/assets/chunks/{cose-bilkent-S5V4N54A.BBbw_YZi.js → cose-bilkent-S5V4N54A.1SP8al9c.js} +1 -1
- package/dist/docs/assets/chunks/{dagre-KV5264BT.CNJB2l7E.js → dagre-KV5264BT.DS1L6hJt.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-5BDNPKRD.BQzlnFfq.js → diagram-5BDNPKRD.ChsausbG.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-G4DWMVQ6.DkgqqZMz.js → diagram-G4DWMVQ6.3XsptNWj.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-MMDJMWI5.DIT8L7H_.js → diagram-MMDJMWI5.DPA9Dk_P.js} +1 -1
- package/dist/docs/assets/chunks/{diagram-TYMM5635.3xLPZWGJ.js → diagram-TYMM5635.BVswXWrB.js} +1 -1
- package/dist/docs/assets/chunks/{erDiagram-SMLLAGMA.5_IHz8jF.js → erDiagram-SMLLAGMA.BSak5OSP.js} +1 -1
- package/dist/docs/assets/chunks/{flowDiagram-DWJPFMVM.BGUCXz8A.js → flowDiagram-DWJPFMVM.CQgN4TTz.js} +1 -1
- package/dist/docs/assets/chunks/{ganttDiagram-T4ZO3ILL.DbfFavS1.js → ganttDiagram-T4ZO3ILL.GrT0kA4a.js} +1 -1
- package/dist/docs/assets/chunks/{gitGraphDiagram-UUTBAWPF.D2yKdeNW.js → gitGraphDiagram-UUTBAWPF.CdS7Ucll.js} +1 -1
- package/dist/docs/assets/chunks/{graph.CSCxwHba.js → graph.BVqKRmRo.js} +1 -1
- package/dist/docs/assets/chunks/{infoDiagram-42DDH7IO.FDeb6xHY.js → infoDiagram-42DDH7IO.C3C9FRto.js} +1 -1
- package/dist/docs/assets/chunks/{ishikawaDiagram-UXIWVN3A.DbeYs9VL.js → ishikawaDiagram-UXIWVN3A.2FuAh_Zj.js} +1 -1
- package/dist/docs/assets/chunks/{journeyDiagram-VCZTEJTY.CWjKINpx.js → journeyDiagram-VCZTEJTY.CaHMfK4b.js} +1 -1
- package/dist/docs/assets/chunks/{kanban-definition-6JOO6SKY.B4FrAlwz.js → kanban-definition-6JOO6SKY.CjhIUwcA.js} +1 -1
- package/dist/docs/assets/chunks/{layout.DFGxQ9ab.js → layout.CGU3gfSf.js} +1 -1
- package/dist/docs/assets/chunks/{linear.BmjZ-G59.js → linear.DaihpW_n.js} +1 -1
- package/dist/docs/assets/chunks/{min.DZSxulMW.js → min.BS-j8kHQ.js} +1 -1
- package/dist/docs/assets/chunks/{mindmap-definition-QFDTVHPH.CHLi3-aN.js → mindmap-definition-QFDTVHPH.BVJ1Bbnk.js} +1 -1
- package/dist/docs/assets/chunks/{pieDiagram-DEJITSTG.DteG-CkU.js → pieDiagram-DEJITSTG.Cz1WIv9r.js} +1 -1
- package/dist/docs/assets/chunks/{quadrantDiagram-34T5L4WZ.D458ipN3.js → quadrantDiagram-34T5L4WZ.DKLFxcjy.js} +1 -1
- package/dist/docs/assets/chunks/{requirementDiagram-MS252O5E.DcFgUxst.js → requirementDiagram-MS252O5E.BHegiK7x.js} +1 -1
- package/dist/docs/assets/chunks/{sankeyDiagram-XADWPNL6.BwQAMmSA.js → sankeyDiagram-XADWPNL6.DYkY6yPc.js} +1 -1
- package/dist/docs/assets/chunks/{sequenceDiagram-FGHM5R23.B_Xdsrh9.js → sequenceDiagram-FGHM5R23.DYQ1QUrI.js} +1 -1
- package/dist/docs/assets/chunks/{stateDiagram-FHFEXIEX.CdfDW6-C.js → stateDiagram-FHFEXIEX.Iru8BsFo.js} +1 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.BYXl4LW6.js +1 -0
- package/dist/docs/assets/chunks/{theme.sfdL3srp.js → theme.DaplWQhQ.js} +2 -2
- package/dist/docs/assets/chunks/{timeline-definition-GMOUNBTQ.56-4hXaC.js → timeline-definition-GMOUNBTQ.BwFA8hiX.js} +1 -1
- package/dist/docs/assets/chunks/{vennDiagram-DHZGUBPP.CvZSQBO7.js → vennDiagram-DHZGUBPP.CZ60W1C_.js} +1 -1
- package/dist/docs/assets/chunks/{wardley-RL74JXVD.C9qc8k39.js → wardley-RL74JXVD.iXazD3Z7.js} +1 -1
- package/dist/docs/assets/chunks/{wardleyDiagram-NUSXRM2D.D9s0nihi.js → wardleyDiagram-NUSXRM2D.B69D2r8-.js} +1 -1
- package/dist/docs/assets/chunks/{xychartDiagram-5P7HB3ND.BVJSpYrC.js → xychartDiagram-5P7HB3ND.CLPZEIU9.js} +1 -1
- package/dist/docs/assets/{deployment.md.BdqTiGdc.js → deployment.md.BYuEcDBv.js} +2 -2
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.js → guides_bitbucket.md.CKUayYtD.js} +3 -3
- package/dist/docs/assets/{guides_bitbucket.md.BB6fqD-M.lean.js → guides_bitbucket.md.CKUayYtD.lean.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.js → guides_github.md.TuNiZAOQ.js} +4 -4
- package/dist/docs/assets/{guides_github.md.Cr1Xlf-m.lean.js → guides_github.md.TuNiZAOQ.lean.js} +1 -1
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.js → guides_gitlab.md.CtNI4fSH.js} +4 -4
- package/dist/docs/assets/{guides_gitlab.md.CMpmFi4M.lean.js → guides_gitlab.md.CtNI4fSH.lean.js} +1 -1
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.js +7 -0
- package/dist/docs/assets/guides_migrate.md.sCAvvlC6.lean.js +1 -0
- package/dist/docs/assets/{reference_cli.md.GwugN3n-.js → reference_cli.md.dYCAL2lB.js} +4 -3
- package/dist/docs/assets/reference_cli.md.dYCAL2lB.lean.js +1 -0
- package/dist/docs/assets/{reference_skills.md.ClkMoQsV.js → reference_skills.md.C0guGcH0.js} +3 -3
- package/dist/docs/assets/troubleshooting.md.x-GBa7wN.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.Bscj6ODe.lean.js → troubleshooting.md.x-GBa7wN.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +37 -37
- package/dist/docs/building-with-agents.md +2 -0
- package/dist/docs/deployment.html +38 -38
- package/dist/docs/deployment.md +7 -0
- package/dist/docs/evals.html +36 -36
- package/dist/docs/guides/agent-to-agent.html +35 -35
- package/dist/docs/guides/bitbucket.html +38 -38
- package/dist/docs/guides/bitbucket.md +9 -1
- package/dist/docs/guides/cloud-agents.html +35 -35
- package/dist/docs/guides/convert-automation.html +35 -35
- package/dist/docs/guides/github.html +39 -39
- package/dist/docs/guides/github.md +20 -4
- package/dist/docs/guides/gitlab.html +38 -38
- package/dist/docs/guides/gitlab.md +9 -1
- package/dist/docs/guides/grokbot-agents.html +35 -35
- package/dist/docs/guides/hooks.html +35 -35
- package/dist/docs/guides/improve.html +35 -35
- package/dist/docs/guides/jev.html +35 -35
- package/dist/docs/guides/mcp-oauth.html +35 -35
- package/dist/docs/guides/migrate.html +66 -0
- package/dist/docs/guides/migrate.md +122 -0
- package/dist/docs/guides/opentelemetry.html +35 -35
- package/dist/docs/guides/slack.html +35 -35
- package/dist/docs/guides/webhooks.html +35 -35
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +35 -35
- package/dist/docs/index.html +35 -35
- package/dist/docs/llms-full.txt +214 -6
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +35 -35
- package/dist/docs/reference/agent-config.html +35 -35
- package/dist/docs/reference/artifacts.html +35 -35
- package/dist/docs/reference/channels.html +35 -35
- package/dist/docs/reference/cli.html +39 -38
- package/dist/docs/reference/cli.md +39 -0
- package/dist/docs/reference/connections.html +35 -35
- package/dist/docs/reference/evals.html +35 -35
- package/dist/docs/reference/extensions.html +35 -35
- package/dist/docs/reference/hooks.html +35 -35
- package/dist/docs/reference/http-api.html +35 -35
- package/dist/docs/reference/instructions.html +35 -35
- package/dist/docs/reference/playground.html +35 -35
- package/dist/docs/reference/project-layout.html +35 -35
- package/dist/docs/reference/prompt.html +35 -35
- package/dist/docs/reference/schedules.html +35 -35
- package/dist/docs/reference/sessions.html +35 -35
- package/dist/docs/reference/skills.html +38 -38
- package/dist/docs/reference/subagents.html +35 -35
- package/dist/docs/reference/tools.html +35 -35
- package/dist/docs/templates/agentic-owners.html +35 -35
- package/dist/docs/templates/grokbot-agents.html +35 -35
- package/dist/docs/templates/security-reviewer.html +35 -35
- package/dist/docs/templates/thermo-quality-review.html +35 -35
- package/dist/docs/templates/thermo-review.html +35 -35
- package/dist/docs/templates/triage.html +35 -35
- package/dist/docs/troubleshooting.html +36 -36
- package/dist/docs/troubleshooting.md +1 -0
- package/dist/evals/assertions.js +20 -34
- package/dist/evals/expect.js +3 -6
- package/dist/evals/judge.js +5 -8
- package/dist/evals/loaders.js +45 -62
- package/dist/evals/matchers.js +2 -3
- package/dist/evals/reporters.js +43 -67
- package/dist/evals/results.js +1 -1
- package/dist/evals/run-facts.js +5 -6
- package/dist/evals.js +27 -15
- package/dist/extensions/cursor-cloud-agents/extension.js +4 -1
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +100 -126
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +22 -38
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +8 -10
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +2 -3
- package/dist/extensions/cursor-cloud-agents/lib/watch.js +52 -66
- package/dist/extensions/cursor-cloud-agents/reminders/cloud-agent-stop-watch.js +29 -40
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +6 -17
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +25 -36
- package/dist/extensions/cursor-cloud-agents/tools/get.js +3 -14
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +13 -21
- package/dist/extensions/cursor-cloud-agents/tools/list.js +8 -19
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/extension.js +4 -1
- package/dist/extensions/cursor-grokbot-agents/lib/agents.js +3 -3
- package/dist/extensions/cursor-grokbot-agents/lib/backend.js +53 -73
- package/dist/extensions/cursor-grokbot-agents/lib/contacts.js +10 -23
- package/dist/extensions/cursor-grokbot-agents/lib/conversation.js +112 -132
- package/dist/extensions/cursor-grokbot-agents/lib/lock.js +1 -2
- package/dist/extensions/cursor-grokbot-agents/tools/ask.js +5 -16
- package/dist/extensions/cursor-grokbot-agents/tools/check.js +4 -15
- package/dist/extensions/cursor-grokbot-agents/tools/interrupt.js +2 -13
- package/dist/extensions/cursor-grokbot-agents/tools/list.js +11 -23
- package/dist/extensions/jev/extension.js +3 -3
- package/dist/extensions/jev/lib/evaluate.js +43 -60
- package/dist/extensions/jev/tools/evaluate.js +6 -17
- package/dist/extensions/slack-communication/tools/post-file.js +1 -1
- package/dist/extensions.js +3 -5
- package/dist/files-backends/cursor-hosted.js +504 -523
- package/dist/files-backends/local-fs.js +72 -134
- package/dist/files.js +3 -3
- package/dist/filesystem.js +562 -861
- package/dist/index.js +16 -35
- package/dist/internal/advertise-tools.js +74 -86
- package/dist/internal/artifacts-store.js +298 -361
- package/dist/internal/as-of.js +2 -4
- package/dist/internal/authored-alias-hooks.js +6 -4
- package/dist/internal/authored-loaders.js +37 -52
- package/dist/internal/bounded-int.js +1 -2
- package/dist/internal/bounded.js +13 -24
- package/dist/internal/brand.js +1 -1
- package/dist/internal/browser-origin-guard.js +4 -4
- package/dist/internal/builtin-tools/artifacts.js +15 -27
- package/dist/internal/builtin-tools/index.js +2 -3
- package/dist/internal/builtin-tools/reminders.js +33 -52
- package/dist/internal/channel-architecture.d.ts +21 -0
- package/dist/internal/channel-architecture.d.ts.map +1 -0
- package/dist/internal/channel-architecture.js +41 -0
- package/dist/internal/channel-dispatch.js +3 -4
- package/dist/internal/channel-route-dispatch.js +40 -51
- package/dist/internal/channel-state.js +1 -1
- package/dist/internal/chat-client.js +319 -340
- package/dist/internal/cli-ax.js +1262 -1294
- package/dist/internal/cli-bitbucket.js +244 -272
- package/dist/internal/cli-convert-automation.js +137 -151
- package/dist/internal/cli-cursor.js +126 -147
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1457 -1507
- package/dist/internal/cli-docs.js +130 -147
- package/dist/internal/cli-github.js +437 -476
- package/dist/internal/cli-gitlab.js +259 -288
- package/dist/internal/cli-images.js +266 -334
- package/dist/internal/cli-manifest.js +25 -37
- package/dist/internal/cli-mcp-oauth.js +228 -247
- package/dist/internal/cli-mcp.js +358 -383
- package/dist/internal/cli-migrate.js +73 -90
- package/dist/internal/cli-skills.js +35 -47
- package/dist/internal/cli-slack-manual.d.ts +0 -1
- package/dist/internal/cli-slack-manual.d.ts.map +1 -1
- package/dist/internal/cli-slack-manual.js +175 -204
- package/dist/internal/cli-slack.d.ts +1 -1
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +416 -456
- package/dist/internal/cloud-merge.js +7 -3
- package/dist/internal/cloud-turn-cost.js +8 -1
- package/dist/internal/connection-env.js +5 -6
- package/dist/internal/continuation-channel.js +10 -7
- package/dist/internal/continuation-identity.js +85 -67
- package/dist/internal/conversation-mirror.js +112 -131
- package/dist/internal/convert-automation/convert-workflow.js +21 -31
- package/dist/internal/cron.js +3 -3
- package/dist/internal/cursor/account-mcp.js +147 -146
- package/dist/internal/cursor/backend-client.js +290 -320
- package/dist/internal/cursor/bound-secret-file.js +3 -3
- package/dist/internal/cursor/credentials.js +127 -142
- package/dist/internal/cursor/cursor-api-transport.js +4 -8
- package/dist/internal/cursor/github-credentials.js +91 -108
- package/dist/internal/cursor/hosted-bound-secrets.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.js +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +5 -9
- package/dist/internal/cursor/session-token.js +36 -48
- package/dist/internal/cursor/store-api-client.js +77 -92
- package/dist/internal/cursor-account-mcp-auth.js +132 -149
- package/dist/internal/cursor-agent-template.js +1 -1
- package/dist/internal/cursor-deployment-relay.js +33 -54
- package/dist/internal/cursor-event-relay.js +65 -59
- package/dist/internal/cursor-relay-core.js +258 -286
- package/dist/internal/deferred-channel-session.js +3 -12
- package/dist/internal/deploy-client.js +410 -475
- package/dist/internal/deploy-manifest.d.ts +17 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +71 -21
- package/dist/internal/deploy-source.js +31 -43
- package/dist/internal/discovery/agent-config.js +45 -59
- package/dist/internal/discovery/agent.js +276 -280
- package/dist/internal/discovery/channels.js +67 -80
- package/dist/internal/discovery/connections.js +286 -296
- package/dist/internal/discovery/context.js +2 -13
- package/dist/internal/discovery/cursor-plugin.js +223 -259
- package/dist/internal/discovery/extension-overlay.js +104 -131
- package/dist/internal/discovery/extensions.js +276 -281
- package/dist/internal/discovery/fs.js +56 -79
- package/dist/internal/discovery/hooks.js +39 -50
- package/dist/internal/discovery/info.js +17 -19
- package/dist/internal/discovery/instructions.js +58 -71
- package/dist/internal/discovery/modules.js +45 -58
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +192 -215
- package/dist/internal/discovery/reminders.js +41 -52
- package/dist/internal/discovery/runtime.js +1 -1
- package/dist/internal/discovery/schedules.js +71 -82
- package/dist/internal/discovery/seed-files.js +21 -32
- package/dist/internal/discovery/services.js +74 -96
- package/dist/internal/discovery/skills.js +77 -94
- package/dist/internal/discovery/subagent.js +79 -95
- package/dist/internal/discovery/tools.js +12 -23
- package/dist/internal/distribution.js +2 -2
- package/dist/internal/docs-site.js +30 -45
- package/dist/internal/duration.js +1 -1
- package/dist/internal/env-file.js +48 -64
- package/dist/internal/eval-judge-model.js +17 -28
- package/dist/internal/eval-run-store.js +265 -254
- package/dist/internal/eval-runner.d.ts +8 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +406 -408
- package/dist/internal/eval-transport.d.ts +24 -0
- package/dist/internal/eval-transport.d.ts.map +1 -0
- package/dist/internal/eval-transport.js +22 -0
- package/dist/internal/evals-client.js +242 -246
- package/dist/internal/event-log.js +72 -120
- package/dist/internal/event-mapper.js +30 -31
- package/dist/internal/factory-resource-channel.js +16 -30
- package/dist/internal/filesystem/errors.js +6 -6
- package/dist/internal/filesystem/format.js +10 -13
- package/dist/internal/filesystem/merge.js +52 -94
- package/dist/internal/filesystem/nearest.js +15 -27
- package/dist/internal/filesystem/scratch.js +65 -85
- package/dist/internal/filesystem/tools.js +221 -241
- package/dist/internal/filesystem/walk.js +76 -143
- package/dist/internal/framework-file-storage.js +118 -139
- package/dist/internal/framework-storage-selection.js +21 -13
- package/dist/internal/frontmatter.js +4 -6
- package/dist/internal/github-fanout.js +50 -64
- package/dist/internal/guest-network.js +96 -109
- package/dist/internal/handleAgentServeTrigger.js +121 -126
- package/dist/internal/host-files.js +73 -88
- package/dist/internal/host-kv.js +21 -36
- package/dist/internal/host-otel.js +22 -19
- package/dist/internal/host-platforms.js +49 -63
- package/dist/internal/hosted-catch-protocol.d.ts +1 -0
- package/dist/internal/hosted-catch-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-catch-protocol.js +1 -0
- package/dist/internal/hosted-catch.d.ts +5 -3
- package/dist/internal/hosted-catch.d.ts.map +1 -1
- package/dist/internal/hosted-catch.js +84 -93
- package/dist/internal/hosted-delivery-protocol.js +32 -8
- package/dist/internal/hosted-delivery.d.ts +13 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +614 -584
- package/dist/internal/hosted-eval-cases.d.ts +21 -0
- package/dist/internal/hosted-eval-cases.d.ts.map +1 -0
- package/dist/internal/hosted-eval-cases.js +162 -0
- package/dist/internal/hosted-execution-diag.js +38 -30
- package/dist/internal/hosted-execution-flush.js +75 -66
- package/dist/internal/hosted-execution-latency.js +16 -8
- package/dist/internal/hosted-managed-automation.js +2 -2
- package/dist/internal/hosting.js +2 -3
- package/dist/internal/http-channel-define.js +4 -1
- package/dist/internal/http-channel.js +101 -112
- package/dist/internal/http-control-plane-session.d.ts +18 -1
- package/dist/internal/http-control-plane-session.d.ts.map +1 -1
- package/dist/internal/http-control-plane-session.js +66 -32
- package/dist/internal/incoming-headers-to-fetch.js +1 -2
- package/dist/internal/init-interview.js +73 -93
- package/dist/internal/init-project.js +182 -214
- package/dist/internal/init-scaffold.js +10 -21
- package/dist/internal/inline-stdio-mcp.js +80 -86
- package/dist/internal/install-cursor-skills.js +231 -273
- package/dist/internal/legacy-command-guard.js +18 -31
- package/dist/internal/listen-port.js +34 -45
- package/dist/internal/local-control-plane.js +293 -307
- package/dist/internal/local-env.js +1 -1
- package/dist/internal/local-ingress.js +15 -9
- package/dist/internal/log-ring.js +1 -2
- package/dist/internal/logs-client.js +207 -227
- package/dist/internal/map-pool.js +24 -38
- package/dist/internal/mcp-endpoint.js +204 -180
- package/dist/internal/mcp-host.js +165 -168
- package/dist/internal/mcp-oauth-on-demand.js +170 -207
- package/dist/internal/mcp-oauth-persist.js +15 -29
- package/dist/internal/mcp-oauth.js +209 -266
- package/dist/internal/named-webhook-secret.d.ts +39 -0
- package/dist/internal/named-webhook-secret.d.ts.map +1 -0
- package/dist/internal/named-webhook-secret.js +47 -0
- package/dist/internal/open-browser.js +2 -3
- package/dist/internal/otel/collector.js +104 -68
- package/dist/internal/otel/config.js +24 -37
- package/dist/internal/otel/http.js +5 -7
- package/dist/internal/otel/mcp.js +3 -12
- package/dist/internal/otel/runtime.js +69 -83
- package/dist/internal/package-inline-stdio.js +57 -65
- package/dist/internal/peer-connections.js +9 -5
- package/dist/internal/platform-schedule-sync.js +39 -54
- package/dist/internal/platform-timers.js +176 -210
- package/dist/internal/playground/static.js +1 -2
- package/dist/internal/playground/toolchain.js +37 -53
- package/dist/internal/playground-proxy.js +230 -270
- package/dist/internal/process-memory-telemetry.js +33 -51
- package/dist/internal/prompt-context.js +3 -6
- package/dist/internal/reminder-control-plane-protocol.js +46 -13
- package/dist/internal/reminder-runner.js +770 -785
- package/dist/internal/reminder-schedule.js +1 -1
- package/dist/internal/reminder-store.js +57 -78
- package/dist/internal/request-error-status.js +1 -3
- package/dist/internal/request-headers.js +2 -2
- package/dist/internal/resolve-prod-target.js +119 -135
- package/dist/internal/resolved-connections.js +16 -6
- package/dist/internal/run-client.js +221 -229
- package/dist/internal/runtime-dispatch-runner.js +18 -43
- package/dist/internal/schedule-runner.js +49 -58
- package/dist/internal/scm/pr-url.js +7 -6
- package/dist/internal/sdk-runner.js +388 -363
- package/dist/internal/serve-restart.js +26 -39
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +1283 -1244
- package/dist/internal/session-cost.js +7 -9
- package/dist/internal/session-engine.d.ts +3 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +2801 -2777
- package/dist/internal/session-links.js +12 -16
- package/dist/internal/session-run-log.js +134 -82
- package/dist/internal/session-store.js +133 -164
- package/dist/internal/sessions-client.js +97 -118
- package/dist/internal/skill-catalog.js +18 -23
- package/dist/internal/skills-sync.js +16 -30
- package/dist/internal/slack-provision-client.js +90 -116
- package/dist/internal/start-log-store.js +48 -67
- package/dist/internal/steering.js +1 -2
- package/dist/internal/storage-coordinator.js +160 -196
- package/dist/internal/store-mirror.js +16 -30
- package/dist/internal/stream-progress.js +6 -8
- package/dist/internal/terminal-style.js +3 -4
- package/dist/internal/testing/scm-continuation-fixtures.js +6 -2
- package/dist/internal/testing/slack-continuation-fixtures.d.ts +26 -0
- package/dist/internal/testing/slack-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/slack-continuation-fixtures.js +136 -0
- package/dist/internal/tool-catalog.js +11 -5
- package/dist/internal/tool-result.js +1 -1
- package/dist/internal/trajectory.js +19 -22
- package/dist/internal/turn-cost.js +52 -62
- package/dist/internal/turn-governor.js +5 -8
- package/dist/internal/turn-lease-store.js +85 -105
- package/dist/internal/turn-outbox.js +28 -43
- package/dist/internal/update-check.js +231 -259
- package/dist/internal/v2-hosting.js +1 -2
- package/dist/internal/workspace-sync.js +25 -41
- package/dist/internal/workspace.js +111 -139
- package/dist/kv/memory-kv.js +27 -51
- package/dist/memory.js +106 -148
- package/dist/otel.js +5 -8
- package/dist/playground/assets/index-DXm_VXAQ.css +1 -0
- package/dist/playground/assets/{index-Co4CUVTQ.js → index-JekUQERK.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/prompt.js +2 -4
- package/dist/storage-backends/cursor-hosted-v2.js +53 -83
- package/dist/storage-backends/cursor-hosted.js +105 -145
- package/dist/storage-backends/file-kv.js +100 -128
- package/dist/storage-protocol.js +3 -5
- package/dist/storage.js +17 -26
- package/dist/types.d.ts +68 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +20 -18
- package/docs/building-with-agents.md +2 -0
- package/docs/deployment.md +7 -0
- package/docs/guides/bitbucket.md +9 -1
- package/docs/guides/github.md +20 -4
- package/docs/guides/gitlab.md +9 -1
- package/docs/guides/migrate.md +127 -0
- package/docs/reference/cli.md +39 -0
- package/docs/troubleshooting.md +1 -0
- package/package.json +1 -1
- package/skills/debug/SKILL.md +1 -0
- package/skills/github/SKILL.md +23 -0
- package/skills/migrate-v2/SKILL.md +51 -10
- package/dist/docs/assets/chunks/@localSearchIndexroot.BJ8UZggu.js +0 -1
- package/dist/docs/assets/chunks/channel.BTJ5J9FI.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-6PBFFD2Q.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/classDiagram-v2-HSJHXN6E.D4BZ3cVV.js +0 -1
- package/dist/docs/assets/chunks/clone.62tX-O-1.js +0 -1
- package/dist/docs/assets/chunks/stateDiagram-v2-QKLJ7IA2.DkTs1aEU.js +0 -1
- package/dist/docs/assets/reference_cli.md.GwugN3n-.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.Bscj6ODe.js +0 -1
- package/dist/playground/assets/index-C1g_PTTZ.css +0 -1
- /package/dist/docs/assets/{building-with-agents.md.BPjPFxFg.lean.js → building-with-agents.md.Df87rAe1.lean.js} +0 -0
- /package/dist/docs/assets/{deployment.md.BdqTiGdc.lean.js → deployment.md.BYuEcDBv.lean.js} +0 -0
- /package/dist/docs/assets/{reference_skills.md.ClkMoQsV.lean.js → reference_skills.md.C0guGcH0.lean.js} +0 -0
|
@@ -24,21 +24,20 @@ export function buildBitbucketBinding(input) {
|
|
|
24
24
|
let client;
|
|
25
25
|
let api;
|
|
26
26
|
const getClient = () => {
|
|
27
|
-
|
|
28
|
-
client !== null && client !== void 0 ? client : (client = createBitbucketClient({
|
|
27
|
+
client ??= createBitbucketClient({
|
|
29
28
|
proxy: input.proxy,
|
|
30
29
|
token: input.token,
|
|
31
30
|
// Never derive the credentialed host from the delivery's repository
|
|
32
31
|
// link: a signed-but-forged payload must not choose where the token
|
|
33
32
|
// goes. Data Center deploys set BITBUCKET_API_BASE_URL / apiBaseUrl.
|
|
34
|
-
apiBaseUrl:
|
|
33
|
+
apiBaseUrl: input.apiBaseUrl ?? bitbucketApiBaseUrl({ dialect: input.repository.dialect }),
|
|
35
34
|
repo: input.repository.fullName,
|
|
36
35
|
fetch: input.fetch,
|
|
37
|
-
})
|
|
36
|
+
});
|
|
38
37
|
return client;
|
|
39
38
|
};
|
|
40
39
|
const getApi = () => {
|
|
41
|
-
api
|
|
40
|
+
api ??= createBitbucketApi(getClient(), input.repository);
|
|
42
41
|
return api;
|
|
43
42
|
};
|
|
44
43
|
return {
|
|
@@ -48,7 +47,7 @@ export function buildBitbucketBinding(input) {
|
|
|
48
47
|
},
|
|
49
48
|
request: request => getClient().request(request),
|
|
50
49
|
setBuildStatus: status => getApi().setBuildStatus(status),
|
|
51
|
-
createCheck: check => createBitbucketCheck(
|
|
50
|
+
createCheck: check => createBitbucketCheck({ ...check, bitbucket: getApi() }),
|
|
52
51
|
};
|
|
53
52
|
}
|
|
54
53
|
export function asRecord(value) {
|
|
@@ -73,22 +72,20 @@ function asBoolean(value) {
|
|
|
73
72
|
}
|
|
74
73
|
/** Data Center `links.self[0].href`; Cloud `links.html.href`. */
|
|
75
74
|
function linkHref(links) {
|
|
76
|
-
var _a, _b, _c;
|
|
77
75
|
const record = asRecord(links);
|
|
78
|
-
const html = asNonEmptyString(
|
|
76
|
+
const html = asNonEmptyString(asRecord(record?.html)?.href);
|
|
79
77
|
if (html !== undefined) {
|
|
80
78
|
return html;
|
|
81
79
|
}
|
|
82
|
-
const self = record
|
|
80
|
+
const self = record?.self;
|
|
83
81
|
if (Array.isArray(self)) {
|
|
84
|
-
return asNonEmptyString(
|
|
82
|
+
return asNonEmptyString(asRecord(self[0])?.href);
|
|
85
83
|
}
|
|
86
|
-
return asNonEmptyString(
|
|
84
|
+
return asNonEmptyString(asRecord(self)?.href);
|
|
87
85
|
}
|
|
88
86
|
/** The pull-request record under either dialect's key. */
|
|
89
87
|
export function bitbucketPullRequestRecord(payload) {
|
|
90
|
-
|
|
91
|
-
return (_a = asRecord(payload.pullrequest)) !== null && _a !== void 0 ? _a : asRecord(payload.pullRequest);
|
|
88
|
+
return asRecord(payload.pullrequest) ?? asRecord(payload.pullRequest);
|
|
92
89
|
}
|
|
93
90
|
/**
|
|
94
91
|
* Cloud bodies carry `pullrequest` / `repository.full_name`; Data Center
|
|
@@ -96,16 +93,14 @@ export function bitbucketPullRequestRecord(payload) {
|
|
|
96
93
|
* default to Cloud, the dialect the hosted ingress normalizes toward.
|
|
97
94
|
*/
|
|
98
95
|
export function bitbucketDialectOf(payload) {
|
|
99
|
-
var _a;
|
|
100
96
|
if (asRecord(payload.pullRequest) !== undefined ||
|
|
101
97
|
asNonEmptyString(payload.eventKey) !== undefined ||
|
|
102
|
-
asRecord(
|
|
98
|
+
asRecord(asRecord(payload.repository)?.project) !== undefined) {
|
|
103
99
|
return "data-center";
|
|
104
100
|
}
|
|
105
101
|
return "cloud";
|
|
106
102
|
}
|
|
107
103
|
function repositoryFromRecord(dialect, repository) {
|
|
108
|
-
var _a;
|
|
109
104
|
if (repository === undefined) {
|
|
110
105
|
return undefined;
|
|
111
106
|
}
|
|
@@ -117,52 +112,67 @@ function repositoryFromRecord(dialect, repository) {
|
|
|
117
112
|
return undefined;
|
|
118
113
|
}
|
|
119
114
|
const uuid = asNonEmptyString(repository.uuid);
|
|
120
|
-
return
|
|
115
|
+
return {
|
|
116
|
+
dialect,
|
|
121
117
|
fullName,
|
|
122
|
-
owner,
|
|
118
|
+
owner,
|
|
119
|
+
slug: rest.join("/"),
|
|
120
|
+
...(uuid === undefined ? {} : { uuid }),
|
|
121
|
+
...(htmlUrl === undefined ? {} : { htmlUrl }),
|
|
122
|
+
};
|
|
123
123
|
}
|
|
124
|
-
const projectKey = asNonEmptyString(
|
|
124
|
+
const projectKey = asNonEmptyString(asRecord(repository.project)?.key);
|
|
125
125
|
const slug = asNonEmptyString(repository.slug);
|
|
126
126
|
if (projectKey === undefined || slug === undefined) {
|
|
127
127
|
return undefined;
|
|
128
128
|
}
|
|
129
129
|
const id = asPositiveInt(repository.id);
|
|
130
|
-
return
|
|
130
|
+
return {
|
|
131
|
+
dialect,
|
|
132
|
+
fullName: `${projectKey}/${slug}`,
|
|
133
|
+
owner: projectKey,
|
|
134
|
+
slug,
|
|
135
|
+
...(id === undefined ? {} : { id }),
|
|
136
|
+
...(htmlUrl === undefined ? {} : { htmlUrl }),
|
|
137
|
+
};
|
|
131
138
|
}
|
|
132
139
|
/**
|
|
133
140
|
* Repository the delivery is about. Top-level `repository` (Cloud always;
|
|
134
141
|
* DC on `repo:*`), else the DC pull request's `toRef.repository`.
|
|
135
142
|
*/
|
|
136
143
|
export function bitbucketRepositoryFromPayload(payload) {
|
|
137
|
-
var _a, _b;
|
|
138
|
-
var _c;
|
|
139
144
|
const dialect = bitbucketDialectOf(payload);
|
|
140
|
-
return (
|
|
145
|
+
return (repositoryFromRecord(dialect, asRecord(payload.repository)) ??
|
|
146
|
+
repositoryFromRecord(dialect, asRecord(asRecord(bitbucketPullRequestRecord(payload)?.toRef)?.repository)));
|
|
141
147
|
}
|
|
142
148
|
/** Cloud `{uuid, display_name, nickname}` or DC `{id, name, displayName}`. */
|
|
143
149
|
export function bitbucketUser(value) {
|
|
144
|
-
var _a, _b, _c, _d, _e;
|
|
145
150
|
const record = asRecord(value);
|
|
146
151
|
if (record === undefined) {
|
|
147
152
|
return undefined;
|
|
148
153
|
}
|
|
149
154
|
// DC wraps PR authors as `{ user: {...}, role, approved }`.
|
|
150
|
-
const user =
|
|
151
|
-
const id =
|
|
155
|
+
const user = asRecord(record.user) ?? record;
|
|
156
|
+
const id = asNonEmptyString(user.uuid) ??
|
|
157
|
+
asNonEmptyString(user.account_id) ??
|
|
158
|
+
(asPositiveInt(user.id) === undefined ? undefined : String(asPositiveInt(user.id)));
|
|
152
159
|
if (id === undefined) {
|
|
153
160
|
return undefined;
|
|
154
161
|
}
|
|
155
|
-
const displayName =
|
|
156
|
-
const username =
|
|
157
|
-
return
|
|
162
|
+
const displayName = asNonEmptyString(user.display_name) ?? asNonEmptyString(user.displayName);
|
|
163
|
+
const username = asNonEmptyString(user.nickname) ?? asNonEmptyString(user.name);
|
|
164
|
+
return {
|
|
165
|
+
id,
|
|
166
|
+
...(displayName === undefined ? {} : { displayName }),
|
|
167
|
+
...(username === undefined ? {} : { username }),
|
|
168
|
+
};
|
|
158
169
|
}
|
|
159
170
|
export function bitbucketPullRequestUrl(repository, id, explicit) {
|
|
160
|
-
var _a;
|
|
161
171
|
if (explicit !== undefined) {
|
|
162
172
|
return explicit;
|
|
163
173
|
}
|
|
164
174
|
if (repository.dialect === "cloud") {
|
|
165
|
-
return `${
|
|
175
|
+
return `${repository.htmlUrl ?? `https://bitbucket.org/${repository.fullName}`}/pull-requests/${id}`;
|
|
166
176
|
}
|
|
167
177
|
return repository.htmlUrl === undefined
|
|
168
178
|
? `projects/${repository.owner}/repos/${repository.slug}/pull-requests/${id}`
|
|
@@ -189,10 +199,8 @@ export function bitbucketDraftMarkedReady(payload, draft) {
|
|
|
189
199
|
* the Cloud-normalized event key (`pullrequest:created` → `created`).
|
|
190
200
|
*/
|
|
191
201
|
export function bitbucketPullRequestFromPayload(repository, payload, action) {
|
|
192
|
-
var _a, _b, _c;
|
|
193
|
-
var _d, _e, _f;
|
|
194
202
|
const record = bitbucketPullRequestRecord(payload);
|
|
195
|
-
const id = asPositiveInt(record
|
|
203
|
+
const id = asPositiveInt(record?.id);
|
|
196
204
|
if (record === undefined || id === undefined) {
|
|
197
205
|
return undefined;
|
|
198
206
|
}
|
|
@@ -205,46 +213,64 @@ export function bitbucketPullRequestFromPayload(repository, payload, action) {
|
|
|
205
213
|
const destination = asRecord(record.destination);
|
|
206
214
|
const fromRef = asRecord(record.fromRef);
|
|
207
215
|
const toRef = asRecord(record.toRef);
|
|
208
|
-
const sourceBranch =
|
|
209
|
-
const targetBranch =
|
|
210
|
-
const headSha =
|
|
216
|
+
const sourceBranch = asNonEmptyString(asRecord(source?.branch)?.name) ?? asNonEmptyString(fromRef?.displayId);
|
|
217
|
+
const targetBranch = asNonEmptyString(asRecord(destination?.branch)?.name) ?? asNonEmptyString(toRef?.displayId);
|
|
218
|
+
const headSha = asNonEmptyString(asRecord(source?.commit)?.hash) ?? asNonEmptyString(fromRef?.latestCommit);
|
|
211
219
|
const previousHeadSha = asNonEmptyString(payload.previousFromHash);
|
|
212
220
|
const author = bitbucketUser(record.author);
|
|
213
221
|
const title = asNonEmptyString(record.title);
|
|
214
222
|
const state = asNonEmptyString(record.state);
|
|
215
223
|
const draft = asBoolean(record.draft);
|
|
216
|
-
return
|
|
217
|
-
|
|
224
|
+
return {
|
|
225
|
+
action,
|
|
226
|
+
id,
|
|
227
|
+
...(title === undefined ? {} : { title }),
|
|
228
|
+
...(description === undefined ? {} : { description }),
|
|
229
|
+
...(state === undefined ? {} : { state }),
|
|
230
|
+
...(draft === undefined ? {} : { draft }),
|
|
231
|
+
...(sourceBranch === undefined ? {} : { sourceBranch }),
|
|
232
|
+
...(targetBranch === undefined ? {} : { targetBranch }),
|
|
233
|
+
...(headSha === undefined ? {} : { headSha }),
|
|
234
|
+
...(previousHeadSha === undefined ? {} : { previousHeadSha }),
|
|
235
|
+
...(author === undefined ? {} : { author }),
|
|
236
|
+
htmlUrl: bitbucketPullRequestUrl(repository, id, linkHref(record.links)),
|
|
237
|
+
};
|
|
218
238
|
}
|
|
219
239
|
/** Cloud `comment.content.raw` / DC `comment.text`. */
|
|
220
240
|
export function bitbucketCommentFromPayload(payload) {
|
|
221
|
-
var _a, _b;
|
|
222
|
-
var _c;
|
|
223
241
|
const comment = asRecord(payload.comment);
|
|
224
|
-
const id = asPositiveInt(comment
|
|
225
|
-
const body = typeof
|
|
226
|
-
?
|
|
227
|
-
: typeof
|
|
242
|
+
const id = asPositiveInt(comment?.id);
|
|
243
|
+
const body = typeof asRecord(comment?.content)?.raw === "string"
|
|
244
|
+
? asRecord(comment?.content)?.raw
|
|
245
|
+
: typeof comment?.text === "string"
|
|
228
246
|
? comment.text
|
|
229
247
|
: undefined;
|
|
230
248
|
if (comment === undefined || id === undefined || body === undefined) {
|
|
231
249
|
return undefined;
|
|
232
250
|
}
|
|
233
|
-
const author = bitbucketUser(
|
|
251
|
+
const author = bitbucketUser(comment.user ?? comment.author);
|
|
234
252
|
const htmlUrl = linkHref(comment.links);
|
|
235
253
|
const inlineRecord = asRecord(comment.inline);
|
|
236
254
|
const inline = inlineRecord === undefined
|
|
237
255
|
? undefined
|
|
238
|
-
:
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
256
|
+
: {
|
|
257
|
+
...(asNonEmptyString(inlineRecord.path) === undefined
|
|
258
|
+
? {}
|
|
259
|
+
: { path: asNonEmptyString(inlineRecord.path) }),
|
|
260
|
+
...(typeof inlineRecord.to === "number" ? { to: inlineRecord.to } : {}),
|
|
261
|
+
...(typeof inlineRecord.from === "number" ? { from: inlineRecord.from } : {}),
|
|
262
|
+
};
|
|
263
|
+
return {
|
|
264
|
+
id,
|
|
265
|
+
body,
|
|
266
|
+
...(author === undefined ? {} : { author }),
|
|
267
|
+
...(htmlUrl === undefined ? {} : { htmlUrl }),
|
|
268
|
+
...(inline === undefined ? {} : { inline }),
|
|
269
|
+
};
|
|
243
270
|
}
|
|
244
271
|
/** Cloud `push.changes[]` (`new`/`old` targets) or DC `changes[]` (`toHash`/`fromHash`). */
|
|
245
272
|
export function bitbucketPushFromPayload(payload) {
|
|
246
|
-
|
|
247
|
-
const cloudChanges = (_a = asRecord(payload.push)) === null || _a === void 0 ? void 0 : _a.changes;
|
|
273
|
+
const cloudChanges = asRecord(payload.push)?.changes;
|
|
248
274
|
const changes = Array.isArray(cloudChanges)
|
|
249
275
|
? cloudChanges
|
|
250
276
|
: Array.isArray(payload.changes)
|
|
@@ -255,8 +281,6 @@ export function bitbucketPushFromPayload(payload) {
|
|
|
255
281
|
}
|
|
256
282
|
return {
|
|
257
283
|
changes: changes.flatMap(entry => {
|
|
258
|
-
var _a, _b, _c;
|
|
259
|
-
var _d, _e, _f, _g, _h, _j, _k, _l;
|
|
260
284
|
const change = asRecord(entry);
|
|
261
285
|
if (change === undefined) {
|
|
262
286
|
return [];
|
|
@@ -264,13 +288,25 @@ export function bitbucketPushFromPayload(payload) {
|
|
|
264
288
|
const next = asRecord(change.new);
|
|
265
289
|
const previous = asRecord(change.old);
|
|
266
290
|
const ref = asRecord(change.ref);
|
|
267
|
-
const name =
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const
|
|
271
|
-
|
|
291
|
+
const name = asNonEmptyString(next?.name) ??
|
|
292
|
+
asNonEmptyString(previous?.name) ??
|
|
293
|
+
asNonEmptyString(ref?.displayId);
|
|
294
|
+
const refId = asNonEmptyString(change.refId) ??
|
|
295
|
+
asNonEmptyString(ref?.id) ??
|
|
296
|
+
(name === undefined ? undefined : `refs/heads/${name}`);
|
|
297
|
+
const type = asNonEmptyString(next?.type) ??
|
|
298
|
+
asNonEmptyString(previous?.type) ??
|
|
299
|
+
asNonEmptyString(ref?.type)?.toLowerCase();
|
|
300
|
+
const before = asNonEmptyString(asRecord(previous?.target)?.hash) ?? asNonEmptyString(change.fromHash);
|
|
301
|
+
const after = asNonEmptyString(asRecord(next?.target)?.hash) ?? asNonEmptyString(change.toHash);
|
|
272
302
|
return [
|
|
273
|
-
|
|
303
|
+
{
|
|
304
|
+
...(refId === undefined ? {} : { ref: refId }),
|
|
305
|
+
...(name === undefined ? {} : { name }),
|
|
306
|
+
...(before === undefined ? {} : { before }),
|
|
307
|
+
...(after === undefined ? {} : { after }),
|
|
308
|
+
...(type === undefined ? {} : { type }),
|
|
309
|
+
},
|
|
274
310
|
];
|
|
275
311
|
}),
|
|
276
312
|
};
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AuthPolicy, type ChannelDefinition } from "../../types.js";
|
|
2
2
|
import { type BitbucketChannelState } from "./state.js";
|
|
3
3
|
import type { BitbucketChannelOptions } from "./types.js";
|
|
4
4
|
export declare function getBitbucketChannelOptions(definition: object): BitbucketChannelOptions | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Why a `bitbucketChannel` cannot deploy onto architecture v2 as authored,
|
|
7
|
+
* or `undefined` when it can: v2 needs a named `webhookSecret` so the
|
|
8
|
+
* control plane can verify `X-Hub-Signature` before any compute starts.
|
|
9
|
+
*/
|
|
10
|
+
export declare function bitbucketChannelArchitectureError(definition: object): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The route policy for a Bitbucket webhook whose secret is named: verify
|
|
13
|
+
* `X-Hub-Signature` under the env var / deployment secret `secretName`.
|
|
14
|
+
* Being an {@link hmacSignatureAuth} policy, `deploy` writes it into the
|
|
15
|
+
* manifest, so on Cursor hosting the control plane runs the same check at
|
|
16
|
+
* ingestion and refuses a bad signature before any compute starts.
|
|
17
|
+
*/
|
|
18
|
+
export declare function bitbucketWebhookSignatureAuth(secretName: string): AuthPolicy;
|
|
5
19
|
export declare function bitbucketChannel(options?: BitbucketChannelOptions): ChannelDefinition<BitbucketChannelState>;
|
|
6
20
|
/** Minimal mount shape shared by `serve` / the `bitbucket` CLI. */
|
|
7
21
|
export interface BitbucketAgentMountLike {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/bitbucket-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bitbucket-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/bitbucket-channel.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAe,MAAM,gBAAgB,CAAC;AAetF,OAAO,EAAE,KAAK,qBAAqB,EAA8B,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;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAM5E;AAyBD,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,iBAAiB,CAAC,qBAAqB,CAAC,CA4F1C;AAED,mEAAmE;AACnE,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,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,CAAC,uBAAuB,CAAC,GAC7C,sBAAsB,EAAE,CAkB1B"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { z } from "zod";
|
|
11
|
-
import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST } from "../../channels.js";
|
|
2
|
+
import { allowAll, defineChannel, hmacSignatureAuth, localDevStrict, loopbackOnly, POST, } from "../../channels.js";
|
|
12
3
|
import { withPropagatingBackgroundErrors } from "../../internal/channel-dispatch.js";
|
|
13
4
|
import { normalizeIdentity } from "../../internal/continuation-identity.js";
|
|
14
5
|
import { isDevMode } from "../../internal/dev-mode.js";
|
|
15
6
|
import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
|
|
16
|
-
import {
|
|
7
|
+
import { replayCatchRequest } from "../../internal/hosted-catch.js";
|
|
8
|
+
import { AGENT_SDK_CATCH_EVENT_TYPE } from "../../internal/hosted-catch-protocol.js";
|
|
9
|
+
import { envSecretRef, namedWebhookSecretArchitectureError, } from "../../internal/named-webhook-secret.js";
|
|
10
|
+
import { isSecretRef } from "../../types.js";
|
|
11
|
+
import { BITBUCKET_SIGNATURE_HEADER, BITBUCKET_SIGNATURE_PREFIX, BITBUCKET_WEBHOOK_SECRET_ENV, dispatchBitbucketWebhook, handleBitbucketWebhookRequest, parseBitbucketWebhookPayload, } from "./bitbucket-webhook.js";
|
|
17
12
|
import { createPendingCursorBitbucketCredentials, parseCursorBitbucketRepoScope, registerBitbucketCursorAccountRuntime, } from "./cursor-account.js";
|
|
18
13
|
import { BITBUCKET_CHANNEL_KIND, deriveBitbucketWebhookEvents } from "./events.js";
|
|
19
14
|
import { emptyBitbucketChannelState } from "./state.js";
|
|
@@ -21,21 +16,65 @@ const bitbucketChannelOptionsByDefinition = new WeakMap();
|
|
|
21
16
|
export function getBitbucketChannelOptions(definition) {
|
|
22
17
|
return bitbucketChannelOptionsByDefinition.get(definition);
|
|
23
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Why a `bitbucketChannel` cannot deploy onto architecture v2 as authored,
|
|
21
|
+
* or `undefined` when it can: v2 needs a named `webhookSecret` so the
|
|
22
|
+
* control plane can verify `X-Hub-Signature` before any compute starts.
|
|
23
|
+
*/
|
|
24
|
+
export function bitbucketChannelArchitectureError(definition) {
|
|
25
|
+
const options = getBitbucketChannelOptions(definition);
|
|
26
|
+
if (options === undefined) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return namedWebhookSecretArchitectureError({
|
|
30
|
+
option: "bitbucketChannel webhookSecret",
|
|
31
|
+
webhookSecret: options.webhookSecret,
|
|
32
|
+
envName: BITBUCKET_WEBHOOK_SECRET_ENV,
|
|
33
|
+
verifies: "X-Hub-Signature",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The route policy for a Bitbucket webhook whose secret is named: verify
|
|
38
|
+
* `X-Hub-Signature` under the env var / deployment secret `secretName`.
|
|
39
|
+
* Being an {@link hmacSignatureAuth} policy, `deploy` writes it into the
|
|
40
|
+
* manifest, so on Cursor hosting the control plane runs the same check at
|
|
41
|
+
* ingestion and refuses a bad signature before any compute starts.
|
|
42
|
+
*/
|
|
43
|
+
export function bitbucketWebhookSignatureAuth(secretName) {
|
|
44
|
+
return hmacSignatureAuth({
|
|
45
|
+
header: BITBUCKET_SIGNATURE_HEADER,
|
|
46
|
+
secret: secretName,
|
|
47
|
+
prefix: BITBUCKET_SIGNATURE_PREFIX,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Default route auth for the resolved webhook secret:
|
|
52
|
+
*
|
|
53
|
+
* - A named secret makes the HMAC the route policy itself
|
|
54
|
+
* ({@link bitbucketWebhookSignatureAuth}), which is also what makes the
|
|
55
|
+
* channel catchable on the control plane.
|
|
56
|
+
* - A literal or getter secret keeps the HMAC inside the handler, so the
|
|
57
|
+
* route admits everything (allowAll) and the handler is the request auth.
|
|
58
|
+
* - No secret: prod stays loopback-strict; `--dev` admits loopback only.
|
|
59
|
+
* `isDevMode()` is read per request: channel modules construct at import.
|
|
60
|
+
*/
|
|
61
|
+
function defaultBitbucketRouteAuth(webhookSecret) {
|
|
62
|
+
if (webhookSecret === undefined) {
|
|
63
|
+
return [(request, info) => (isDevMode() ? loopbackOnly() : localDevStrict())(request, info)];
|
|
64
|
+
}
|
|
65
|
+
if (isSecretRef(webhookSecret)) {
|
|
66
|
+
return [bitbucketWebhookSignatureAuth(webhookSecret.secretName)];
|
|
67
|
+
}
|
|
68
|
+
return [allowAll()];
|
|
69
|
+
}
|
|
24
70
|
export function bitbucketChannel(options = {}) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
(request, info) => (resolveBitbucketWebhookSecret(options) !== undefined
|
|
33
|
-
? allowAll()
|
|
34
|
-
: isDevMode()
|
|
35
|
-
? loopbackOnly()
|
|
36
|
-
: localDevStrict())(request, info),
|
|
37
|
-
];
|
|
38
|
-
const channelOptions = Object.assign({}, options);
|
|
71
|
+
const routePath = options.path ?? "/";
|
|
72
|
+
// The env fallback is named, not read, so it deploys like an authored
|
|
73
|
+
// `{ secretName: "BITBUCKET_WEBHOOK_SECRET" }` and the handler resolves
|
|
74
|
+
// the same name per request.
|
|
75
|
+
const webhookSecret = options.webhookSecret ?? envSecretRef(BITBUCKET_WEBHOOK_SECRET_ENV);
|
|
76
|
+
const auth = options.auth ?? defaultBitbucketRouteAuth(webhookSecret);
|
|
77
|
+
const channelOptions = { ...options, webhookSecret };
|
|
39
78
|
if (channelOptions.continuation !== undefined) {
|
|
40
79
|
channelOptions.continuation = normalizeIdentity(channelOptions.continuation, BITBUCKET_CHANNEL_KIND);
|
|
41
80
|
}
|
|
@@ -49,11 +88,11 @@ export function bitbucketChannel(options = {}) {
|
|
|
49
88
|
? parseCursorBitbucketRepoScope(options.cursorAccount.repos)
|
|
50
89
|
: undefined,
|
|
51
90
|
};
|
|
52
|
-
const proxy = () => cursorAccount
|
|
91
|
+
const proxy = () => cursorAccount?.credentials.getProxyTransport();
|
|
53
92
|
const definition = defineChannel({
|
|
54
93
|
auth,
|
|
55
94
|
state: emptyBitbucketChannelState(),
|
|
56
|
-
events:
|
|
95
|
+
events: options.events ?? {},
|
|
57
96
|
onStart: options.onStart,
|
|
58
97
|
onStop: options.onStop,
|
|
59
98
|
meta: {
|
|
@@ -64,25 +103,40 @@ export function bitbucketChannel(options = {}) {
|
|
|
64
103
|
POST(routePath, {
|
|
65
104
|
bodySchema: z.unknown(),
|
|
66
105
|
description: "Bitbucket webhook ingress",
|
|
67
|
-
handler: (request, args) =>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
proxy,
|
|
73
|
-
});
|
|
106
|
+
handler: async (request, args) => handleBitbucketWebhookRequest({
|
|
107
|
+
options: channelOptions,
|
|
108
|
+
request,
|
|
109
|
+
args,
|
|
110
|
+
proxy,
|
|
74
111
|
}),
|
|
75
112
|
}),
|
|
76
113
|
],
|
|
77
114
|
});
|
|
78
115
|
bitbucketChannelOptionsByDefinition.set(definition, channelOptions);
|
|
79
116
|
if (cursorAccount !== undefined) {
|
|
80
|
-
registerBitbucketCursorAccountRuntime(definition,
|
|
117
|
+
registerBitbucketCursorAccountRuntime(definition, {
|
|
118
|
+
options: channelOptions,
|
|
119
|
+
...cursorAccount,
|
|
120
|
+
});
|
|
81
121
|
}
|
|
82
122
|
attachHostedAdmissionAdapter(definition, {
|
|
83
123
|
kind: BITBUCKET_CHANNEL_KIND,
|
|
84
124
|
prepareArgs: withPropagatingBackgroundErrors,
|
|
85
|
-
dispatch:
|
|
125
|
+
dispatch: async ({ channelId, eventType, payload, deliveryId, args }) => {
|
|
126
|
+
// A named-secret catch is an http.request envelope the control plane
|
|
127
|
+
// already verified with the deployment secret. Replay it into the
|
|
128
|
+
// route handler, which verifies X-Hub-Signature a second time.
|
|
129
|
+
// Cursor-account deliveries carry a Bitbucket event key and stay on
|
|
130
|
+
// dispatchBitbucketWebhook.
|
|
131
|
+
if (eventType === AGENT_SDK_CATCH_EVENT_TYPE) {
|
|
132
|
+
return replayCatchRequest({
|
|
133
|
+
channelId: channelId ?? BITBUCKET_CHANNEL_KIND,
|
|
134
|
+
deliveryId,
|
|
135
|
+
routes: definition.routes ?? [],
|
|
136
|
+
payload,
|
|
137
|
+
args,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
86
140
|
const delivery = parseBitbucketWebhookPayload(payload, eventType);
|
|
87
141
|
if (delivery === null) {
|
|
88
142
|
return Response.json({ ok: false, error: "invalid_bitbucket_payload" }, { status: 400 });
|
|
@@ -94,25 +148,24 @@ export function bitbucketChannel(options = {}) {
|
|
|
94
148
|
args,
|
|
95
149
|
proxy,
|
|
96
150
|
});
|
|
97
|
-
}
|
|
151
|
+
},
|
|
98
152
|
});
|
|
99
153
|
return definition;
|
|
100
154
|
}
|
|
101
155
|
export function findBitbucketChannelTargets(mounts) {
|
|
102
|
-
var _a, _b, _c;
|
|
103
156
|
const targets = [];
|
|
104
157
|
for (const { slug, project } of mounts) {
|
|
105
158
|
for (const channel of project.channels) {
|
|
106
159
|
const meta = channel.definition.meta;
|
|
107
|
-
if (
|
|
160
|
+
if (meta?.kind !== BITBUCKET_CHANNEL_KIND) {
|
|
108
161
|
continue;
|
|
109
162
|
}
|
|
110
|
-
const postRoute = (
|
|
163
|
+
const postRoute = (channel.definition.routes ?? []).find(route => route.method === "POST");
|
|
111
164
|
targets.push({
|
|
112
165
|
slug,
|
|
113
166
|
channelId: channel.id,
|
|
114
|
-
routePath:
|
|
115
|
-
events: [...(
|
|
167
|
+
routePath: postRoute?.path ?? "/",
|
|
168
|
+
events: [...(meta.bitbucketWebhookEvents ?? [])],
|
|
116
169
|
});
|
|
117
170
|
}
|
|
118
171
|
}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import type { ChannelHandlerArgs } from "../../types.js";
|
|
2
2
|
import type { BitbucketProxyTransport } from "./api.js";
|
|
3
3
|
import type { BitbucketChannelOptions, BitbucketEventContext, BitbucketWebhookDelivery } from "./types.js";
|
|
4
|
+
/** Env var / deployment secret an omitted `webhookSecret` falls back to. */
|
|
5
|
+
export declare const BITBUCKET_WEBHOOK_SECRET_ENV = "BITBUCKET_WEBHOOK_SECRET";
|
|
6
|
+
/** Header both dialects sign deliveries with; `sha256=<hex hmac of the raw body>`. */
|
|
7
|
+
export declare const BITBUCKET_SIGNATURE_HEADER = "x-hub-signature";
|
|
8
|
+
export declare const BITBUCKET_SIGNATURE_PREFIX = "sha256=";
|
|
4
9
|
/** `BITBUCKET_WEBHOOK_SECRET` fallback for {@link BitbucketChannelOptions.webhookSecret}. */
|
|
5
10
|
export declare function envBitbucketWebhookSecret(): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The secret's value for the handler's own signature check. A named secret
|
|
13
|
+
* resolves from the environment (locally the shell's, hosted the bound
|
|
14
|
+
* deployment secrets); an unset field falls back to
|
|
15
|
+
* `BITBUCKET_WEBHOOK_SECRET`.
|
|
16
|
+
*/
|
|
6
17
|
export declare function resolveBitbucketWebhookSecret(options: Pick<BitbucketChannelOptions, "webhookSecret">): string | undefined;
|
|
7
18
|
/** The `X-Hub-Signature` value Bitbucket sends for a raw body. */
|
|
8
19
|
export declare function signBitbucketWebhookBody(rawBody: string | Buffer, secret: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket-webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/bitbucket-webhook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bitbucket-webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/bitbucket-webhook.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAqB,kBAAkB,EAAa,MAAM,gBAAgB,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAyBxD,OAAO,KAAK,EACV,uBAAuB,EAEvB,qBAAqB,EAGrB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,oBAAoB,CAAC;AAC5D,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD,6FAA6F;AAC7F,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAG9D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GACtD,MAAM,GAAG,SAAS,CAEpB;AAID,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAWT;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,wBAAwB,GAAG,IAAI,CA2BjC;AAyED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,wBAAwB,GACjC,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI,CAyBjF;AAwGD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,OAAO,EAAE,uBAAuB,CAAC;IACjC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;CACnD,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgHpB;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE,uBAAuB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,qEAAqE;IACrE,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;CACnD,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwCpB"}
|