@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
|
@@ -18,15 +18,6 @@
|
|
|
18
18
|
* scoped to; the backend swaps in the tenant's Bitbucket credential and
|
|
19
19
|
* picks the upstream (Cloud 2.0 or the DC host's 1.0) per tenant.
|
|
20
20
|
*/
|
|
21
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
21
|
export const DEFAULT_BITBUCKET_CLOUD_API_BASE_URL = "https://api.bitbucket.org/2.0";
|
|
31
22
|
/** Header the SCM proxy reads to scope a Bitbucket call to one repo. */
|
|
32
23
|
export const CURSOR_BITBUCKET_REPOS_HEADER = "x-cursor-bitbucket-repos";
|
|
@@ -42,7 +33,7 @@ export class BitbucketApiError extends Error {
|
|
|
42
33
|
}
|
|
43
34
|
}
|
|
44
35
|
function envValue(value) {
|
|
45
|
-
const trimmed = value
|
|
36
|
+
const trimmed = value?.trim();
|
|
46
37
|
return trimmed === undefined || trimmed === "" ? undefined : trimmed;
|
|
47
38
|
}
|
|
48
39
|
/** `BITBUCKET_TOKEN` when set. */
|
|
@@ -56,8 +47,7 @@ export function envBitbucketToken(env = process.env) {
|
|
|
56
47
|
* read from a delivery payload.
|
|
57
48
|
*/
|
|
58
49
|
export function bitbucketApiBaseUrl(input) {
|
|
59
|
-
|
|
60
|
-
const fromEnv = envValue(((_a = input.env) !== null && _a !== void 0 ? _a : process.env).BITBUCKET_API_BASE_URL);
|
|
50
|
+
const fromEnv = envValue((input.env ?? process.env).BITBUCKET_API_BASE_URL);
|
|
61
51
|
if (fromEnv !== undefined) {
|
|
62
52
|
return fromEnv.replace(/\/+$/, "");
|
|
63
53
|
}
|
|
@@ -68,7 +58,7 @@ export function bitbucketApiBaseUrl(input) {
|
|
|
68
58
|
try {
|
|
69
59
|
return `${new URL(input.repoHtmlUrl).origin}/rest/api/1.0`;
|
|
70
60
|
}
|
|
71
|
-
catch
|
|
61
|
+
catch {
|
|
72
62
|
// no usable host
|
|
73
63
|
}
|
|
74
64
|
}
|
|
@@ -88,20 +78,20 @@ function buildQuery(query) {
|
|
|
88
78
|
return encoded === "" ? "" : `?${encoded}`;
|
|
89
79
|
}
|
|
90
80
|
export function createBitbucketClient(options = {}) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const fetchImpl = (_c = options.fetch) !== null && _c !== void 0 ? _c : fetch;
|
|
94
|
-
const apiBaseUrl = (_e = (_d = (_a = options.proxy) === null || _a === void 0 ? void 0 : _a.apiBaseUrl) !== null && _d !== void 0 ? _d : options.apiBaseUrl) !== null && _e !== void 0 ? _e : envValue(process.env.BITBUCKET_API_BASE_URL);
|
|
81
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
82
|
+
const apiBaseUrl = options.proxy?.apiBaseUrl ?? options.apiBaseUrl ?? envValue(process.env.BITBUCKET_API_BASE_URL);
|
|
95
83
|
if (apiBaseUrl === undefined || apiBaseUrl.trim() === "") {
|
|
96
84
|
throw new Error("bitbucketChannel: no Bitbucket API base URL (pass apiBaseUrl, set BITBUCKET_API_BASE_URL, or serve with --cursor-scm-proxy and cursorAccount).");
|
|
97
85
|
}
|
|
98
86
|
const base = apiBaseUrl.replace(/\/+$/, "");
|
|
99
|
-
const repo =
|
|
100
|
-
const authHeaders = () =>
|
|
101
|
-
var _a, _b;
|
|
87
|
+
const repo = options.repo?.trim().replace(/^\/+|\/+$/g, "");
|
|
88
|
+
const authHeaders = async () => {
|
|
102
89
|
if (options.proxy !== undefined) {
|
|
103
|
-
const headers =
|
|
104
|
-
|
|
90
|
+
const headers = {
|
|
91
|
+
authorization: `Bearer ${await options.proxy.getApiKey()}`,
|
|
92
|
+
...options.proxy.headers,
|
|
93
|
+
};
|
|
94
|
+
if ((headers[CURSOR_BITBUCKET_REPOS_HEADER] ?? "").trim() === "" &&
|
|
105
95
|
repo !== undefined &&
|
|
106
96
|
repo !== "") {
|
|
107
97
|
headers[CURSOR_BITBUCKET_REPOS_HEADER] = repo.toLowerCase();
|
|
@@ -109,45 +99,46 @@ export function createBitbucketClient(options = {}) {
|
|
|
109
99
|
return headers;
|
|
110
100
|
}
|
|
111
101
|
const token = typeof options.token === "function"
|
|
112
|
-
?
|
|
113
|
-
: (
|
|
102
|
+
? await options.token()
|
|
103
|
+
: (options.token ?? envBitbucketToken());
|
|
114
104
|
if (token === undefined || token === "") {
|
|
115
105
|
throw new Error("bitbucketChannel: no Bitbucket credential available (pass token, set BITBUCKET_TOKEN, or serve with --cursor-scm-proxy and cursorAccount).");
|
|
116
106
|
}
|
|
117
107
|
return { authorization: `Bearer ${token}` };
|
|
118
|
-
}
|
|
108
|
+
};
|
|
119
109
|
return {
|
|
120
110
|
apiBaseUrl: base,
|
|
121
|
-
request(input) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
parsed = text;
|
|
139
|
-
}
|
|
111
|
+
async request(input) {
|
|
112
|
+
const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
|
|
113
|
+
const accept = input.accept ?? "application/json";
|
|
114
|
+
const response = await fetchImpl(`${base}${path}${buildQuery(input.query)}`, {
|
|
115
|
+
method: input.method,
|
|
116
|
+
headers: {
|
|
117
|
+
...(await authHeaders()),
|
|
118
|
+
accept,
|
|
119
|
+
...(input.body === undefined ? {} : { "content-type": "application/json" }),
|
|
120
|
+
},
|
|
121
|
+
body: input.body === undefined ? undefined : JSON.stringify(input.body),
|
|
122
|
+
});
|
|
123
|
+
const text = await response.text();
|
|
124
|
+
let parsed = text;
|
|
125
|
+
if (accept === "application/json") {
|
|
126
|
+
try {
|
|
127
|
+
parsed = text === "" ? undefined : JSON.parse(text);
|
|
140
128
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
body: parsed,
|
|
144
|
-
method: input.method,
|
|
145
|
-
path,
|
|
146
|
-
status: response.status,
|
|
147
|
-
});
|
|
129
|
+
catch {
|
|
130
|
+
parsed = text;
|
|
148
131
|
}
|
|
149
|
-
|
|
150
|
-
|
|
132
|
+
}
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new BitbucketApiError({
|
|
135
|
+
body: parsed,
|
|
136
|
+
method: input.method,
|
|
137
|
+
path,
|
|
138
|
+
status: response.status,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return parsed;
|
|
151
142
|
},
|
|
152
143
|
};
|
|
153
144
|
}
|
|
@@ -163,15 +154,16 @@ function num(value) {
|
|
|
163
154
|
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
164
155
|
}
|
|
165
156
|
function errorStatus(error) {
|
|
166
|
-
|
|
167
|
-
return num((_a = asRecord(error)) === null || _a === void 0 ? void 0 : _a.status);
|
|
157
|
+
return num(asRecord(error)?.status);
|
|
168
158
|
}
|
|
169
159
|
function bitbucketAuthorUsername(raw) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
160
|
+
const author = asRecord(asRecord(raw)?.author);
|
|
161
|
+
const user = asRecord(author?.user);
|
|
162
|
+
return (str(author?.nickname) ??
|
|
163
|
+
str(user?.name) ??
|
|
164
|
+
str(user?.slug) ??
|
|
165
|
+
str(author?.display_name) ??
|
|
166
|
+
str(user?.displayName));
|
|
175
167
|
}
|
|
176
168
|
const GIT_PATH_ESCAPES = {
|
|
177
169
|
a: "\u0007",
|
|
@@ -185,7 +177,6 @@ const GIT_PATH_ESCAPES = {
|
|
|
185
177
|
'"': '"',
|
|
186
178
|
};
|
|
187
179
|
function unescapeGitPath(path, quoted) {
|
|
188
|
-
var _a, _b;
|
|
189
180
|
if (!quoted) {
|
|
190
181
|
return path;
|
|
191
182
|
}
|
|
@@ -211,8 +202,8 @@ function unescapeGitPath(path, quoted) {
|
|
|
211
202
|
continue;
|
|
212
203
|
}
|
|
213
204
|
flush();
|
|
214
|
-
const next =
|
|
215
|
-
output +=
|
|
205
|
+
const next = path[index + 1] ?? "";
|
|
206
|
+
output += GIT_PATH_ESCAPES[next] ?? next;
|
|
216
207
|
index += 1;
|
|
217
208
|
}
|
|
218
209
|
flush();
|
|
@@ -220,21 +211,20 @@ function unescapeGitPath(path, quoted) {
|
|
|
220
211
|
}
|
|
221
212
|
/** Split a Git-style unified diff into normalized changed files. */
|
|
222
213
|
export function splitBitbucketUnifiedDiff(diff) {
|
|
223
|
-
var _a, _b, _c, _d;
|
|
224
214
|
const files = [];
|
|
225
215
|
const sections = diff.split(/^(?=diff --git )/m).filter(Boolean);
|
|
226
216
|
for (const section of sections) {
|
|
227
217
|
const lines = section.replace(/\n$/, "").split("\n");
|
|
228
|
-
const header = /^diff --git ("?)a\/(.+?)\1 ("?)b\/(.+?)\3$/.exec(
|
|
218
|
+
const header = /^diff --git ("?)a\/(.+?)\1 ("?)b\/(.+?)\3$/.exec(lines[0] ?? "");
|
|
229
219
|
if (header === null) {
|
|
230
220
|
continue;
|
|
231
221
|
}
|
|
232
|
-
const oldPath = unescapeGitPath(
|
|
233
|
-
const newPath = unescapeGitPath(
|
|
222
|
+
const oldPath = unescapeGitPath(header[2] ?? "", header[1] !== "");
|
|
223
|
+
const newPath = unescapeGitPath(header[4] ?? "", header[3] !== "");
|
|
234
224
|
let status = "modified";
|
|
235
225
|
let bodyStart = 1;
|
|
236
226
|
for (; bodyStart < lines.length; bodyStart += 1) {
|
|
237
|
-
const line =
|
|
227
|
+
const line = lines[bodyStart] ?? "";
|
|
238
228
|
if (line.startsWith("@@")) {
|
|
239
229
|
break;
|
|
240
230
|
}
|
|
@@ -266,10 +256,10 @@ function encodePath(path) {
|
|
|
266
256
|
.join("/");
|
|
267
257
|
}
|
|
268
258
|
function fallbackUrl(repository) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
259
|
+
return (repository.htmlUrl ??
|
|
260
|
+
(repository.dialect === "cloud"
|
|
261
|
+
? `https://bitbucket.org/${repository.fullName}`
|
|
262
|
+
: "https://cursor.com"));
|
|
273
263
|
}
|
|
274
264
|
/** `/repositories/{workspace}/{slug}` — Bitbucket Cloud 2.0. */
|
|
275
265
|
export function bitbucketCloudRepoPath(repository) {
|
|
@@ -279,28 +269,23 @@ export function bitbucketCloudRepoPath(repository) {
|
|
|
279
269
|
export function bitbucketDataCenterRepoPath(repository) {
|
|
280
270
|
return `/projects/${encodeURIComponent(repository.owner)}/repos/${encodeURIComponent(repository.slug)}`;
|
|
281
271
|
}
|
|
282
|
-
export function expandBitbucketCloudCommitSha(bitbucket, repository, sha, onError) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return sha;
|
|
298
|
-
}
|
|
299
|
-
});
|
|
272
|
+
export async function expandBitbucketCloudCommitSha(bitbucket, repository, sha, onError) {
|
|
273
|
+
if (sha === undefined || !/^[0-9a-f]{7,39}$/i.test(sha)) {
|
|
274
|
+
return sha;
|
|
275
|
+
}
|
|
276
|
+
try {
|
|
277
|
+
const commit = await bitbucket.request({
|
|
278
|
+
method: "GET",
|
|
279
|
+
path: `${bitbucketCloudRepoPath(repository)}/commit/${encodeURIComponent(sha)}`,
|
|
280
|
+
});
|
|
281
|
+
return /^[0-9a-f]{40}$/i.test(commit.hash ?? "") ? commit.hash : sha;
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
onError?.(error);
|
|
285
|
+
return sha;
|
|
286
|
+
}
|
|
300
287
|
}
|
|
301
288
|
function bitbucketPullRequestFromRaw(raw, id, htmlUrl) {
|
|
302
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
303
|
-
var _j, _k, _l, _m;
|
|
304
289
|
const source = asRecord(raw.source);
|
|
305
290
|
const destination = asRecord(raw.destination);
|
|
306
291
|
return {
|
|
@@ -310,10 +295,10 @@ function bitbucketPullRequestFromRaw(raw, id, htmlUrl) {
|
|
|
310
295
|
state: str(raw.state),
|
|
311
296
|
draft: typeof raw.draft === "boolean" ? raw.draft : undefined,
|
|
312
297
|
authorUsername: bitbucketAuthorUsername(raw),
|
|
313
|
-
sourceBranch:
|
|
314
|
-
targetBranch:
|
|
315
|
-
headSha:
|
|
316
|
-
baseSha:
|
|
298
|
+
sourceBranch: str(asRecord(source?.branch)?.name) ?? str(asRecord(raw.fromRef)?.displayId),
|
|
299
|
+
targetBranch: str(asRecord(destination?.branch)?.name) ?? str(asRecord(raw.toRef)?.displayId),
|
|
300
|
+
headSha: str(asRecord(source?.commit)?.hash) ?? str(asRecord(raw.fromRef)?.latestCommit),
|
|
301
|
+
baseSha: str(asRecord(destination?.commit)?.hash) ?? str(asRecord(raw.toRef)?.latestCommit),
|
|
317
302
|
htmlUrl,
|
|
318
303
|
raw,
|
|
319
304
|
};
|
|
@@ -323,18 +308,17 @@ export function createBitbucketPullRequestReadApi(bitbucket, options = {}) {
|
|
|
323
308
|
const repo = repository.dialect === "cloud"
|
|
324
309
|
? bitbucketCloudRepoPath(repository)
|
|
325
310
|
: bitbucketDataCenterRepoPath(repository);
|
|
326
|
-
const cloudPullRequestFromActivity = (id) =>
|
|
327
|
-
var _a;
|
|
311
|
+
const cloudPullRequestFromActivity = async (id) => {
|
|
328
312
|
let path = `${repo}/pullrequests/${id}/activity`;
|
|
329
313
|
let query = { pagelen: 50 };
|
|
330
314
|
for (let page = 0; page < 20; page += 1) {
|
|
331
|
-
const response =
|
|
315
|
+
const response = await bitbucket.request({
|
|
332
316
|
method: "GET",
|
|
333
317
|
path,
|
|
334
318
|
query,
|
|
335
319
|
});
|
|
336
320
|
for (const value of Array.isArray(response.values) ? response.values : []) {
|
|
337
|
-
const update = asRecord(
|
|
321
|
+
const update = asRecord(asRecord(value)?.update);
|
|
338
322
|
if (update !== undefined) {
|
|
339
323
|
return bitbucketPullRequestFromRaw(update, id);
|
|
340
324
|
}
|
|
@@ -349,193 +333,190 @@ export function createBitbucketPullRequestReadApi(bitbucket, options = {}) {
|
|
|
349
333
|
query = Object.fromEntries(nextUrl.searchParams.entries());
|
|
350
334
|
}
|
|
351
335
|
return undefined;
|
|
352
|
-
}
|
|
336
|
+
};
|
|
353
337
|
return {
|
|
354
|
-
getPullRequest(id) {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (repository.dialect !== "cloud" || status === undefined || status < 500) {
|
|
364
|
-
throw error;
|
|
365
|
-
}
|
|
366
|
-
(_a = options.onDiagnostic) === null || _a === void 0 ? void 0 : _a.call(options, { kind: "metadata-fallback", status });
|
|
367
|
-
const fallback = yield cloudPullRequestFromActivity(id);
|
|
368
|
-
if (fallback === undefined) {
|
|
369
|
-
throw error;
|
|
370
|
-
}
|
|
371
|
-
pullRequest = fallback;
|
|
338
|
+
async getPullRequest(id) {
|
|
339
|
+
let pullRequest;
|
|
340
|
+
try {
|
|
341
|
+
pullRequest = await bitbucket.api.getPullRequest(id);
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const status = errorStatus(error);
|
|
345
|
+
if (repository.dialect !== "cloud" || status === undefined || status < 500) {
|
|
346
|
+
throw error;
|
|
372
347
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
348
|
+
options.onDiagnostic?.({ kind: "metadata-fallback", status });
|
|
349
|
+
const fallback = await cloudPullRequestFromActivity(id);
|
|
350
|
+
if (fallback === undefined) {
|
|
351
|
+
throw error;
|
|
376
352
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
353
|
+
pullRequest = fallback;
|
|
354
|
+
}
|
|
355
|
+
const normalized = {
|
|
356
|
+
...pullRequest,
|
|
357
|
+
draft: asRecord(pullRequest.raw)?.draft === true,
|
|
358
|
+
authorUsername: bitbucketAuthorUsername(pullRequest.raw),
|
|
359
|
+
};
|
|
360
|
+
if (repository.dialect !== "cloud") {
|
|
361
|
+
return normalized;
|
|
362
|
+
}
|
|
363
|
+
const [headSha, baseSha] = await Promise.all([
|
|
364
|
+
expandBitbucketCloudCommitSha(bitbucket, repository, pullRequest.headSha, error => pullRequest.headSha === undefined
|
|
365
|
+
? undefined
|
|
366
|
+
: options.onDiagnostic?.({
|
|
367
|
+
kind: "commit-expansion-failed",
|
|
368
|
+
sha: pullRequest.headSha,
|
|
369
|
+
error,
|
|
370
|
+
})),
|
|
371
|
+
expandBitbucketCloudCommitSha(bitbucket, repository, pullRequest.baseSha, error => pullRequest.baseSha === undefined
|
|
372
|
+
? undefined
|
|
373
|
+
: options.onDiagnostic?.({
|
|
374
|
+
kind: "commit-expansion-failed",
|
|
375
|
+
sha: pullRequest.baseSha,
|
|
376
|
+
error,
|
|
377
|
+
})),
|
|
378
|
+
]);
|
|
379
|
+
return { ...normalized, headSha, baseSha };
|
|
395
380
|
},
|
|
396
|
-
getMergeBaseSha(id, base, headSha) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
const commit = yield bitbucket.request({
|
|
400
|
-
method: "GET",
|
|
401
|
-
path: `${repo}/merge-base/${encodeURIComponent(headSha)}..${encodeURIComponent(base)}`,
|
|
402
|
-
});
|
|
403
|
-
return str(commit.hash);
|
|
404
|
-
}
|
|
405
|
-
const commit = yield bitbucket.request({
|
|
381
|
+
async getMergeBaseSha(id, base, headSha) {
|
|
382
|
+
if (repository.dialect === "cloud") {
|
|
383
|
+
const commit = await bitbucket.request({
|
|
406
384
|
method: "GET",
|
|
407
|
-
path: `${repo}/
|
|
385
|
+
path: `${repo}/merge-base/${encodeURIComponent(headSha)}..${encodeURIComponent(base)}`,
|
|
408
386
|
});
|
|
409
|
-
return str(commit.
|
|
387
|
+
return str(commit.hash);
|
|
388
|
+
}
|
|
389
|
+
const commit = await bitbucket.request({
|
|
390
|
+
method: "GET",
|
|
391
|
+
path: `${repo}/pull-requests/${id}/merge-base`,
|
|
410
392
|
});
|
|
393
|
+
return str(commit.id);
|
|
411
394
|
},
|
|
412
|
-
listChangedFiles(id, input) {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
(input === null || input === void 0 ? void 0 : input.headSha) === undefined ||
|
|
426
|
-
comparisonBase === undefined) {
|
|
427
|
-
throw error;
|
|
428
|
-
}
|
|
429
|
-
(_a = options.onDiagnostic) === null || _a === void 0 ? void 0 : _a.call(options, { kind: "diff-fallback", status });
|
|
430
|
-
const diff = yield bitbucket.request({
|
|
431
|
-
method: "GET",
|
|
432
|
-
path: `${repo}/diff/${encodeURIComponent(input.headSha)}..${encodeURIComponent(comparisonBase)}`,
|
|
433
|
-
query: { topic: input.mergeBaseResolved === true ? "false" : "true" },
|
|
434
|
-
accept: "text/plain",
|
|
435
|
-
});
|
|
436
|
-
return splitBitbucketUnifiedDiff(diff);
|
|
395
|
+
async listChangedFiles(id, input) {
|
|
396
|
+
try {
|
|
397
|
+
return splitBitbucketUnifiedDiff(await bitbucket.api.getPullRequestDiff(id));
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
const status = errorStatus(error);
|
|
401
|
+
const comparisonBase = input?.mergeBaseSha ?? input?.baseSha;
|
|
402
|
+
if (repository.dialect !== "cloud" ||
|
|
403
|
+
status === undefined ||
|
|
404
|
+
status < 500 ||
|
|
405
|
+
input?.headSha === undefined ||
|
|
406
|
+
comparisonBase === undefined) {
|
|
407
|
+
throw error;
|
|
437
408
|
}
|
|
438
|
-
|
|
409
|
+
options.onDiagnostic?.({ kind: "diff-fallback", status });
|
|
410
|
+
const diff = await bitbucket.request({
|
|
411
|
+
method: "GET",
|
|
412
|
+
path: `${repo}/diff/${encodeURIComponent(input.headSha)}..${encodeURIComponent(comparisonBase)}`,
|
|
413
|
+
query: { topic: input.mergeBaseResolved === true ? "false" : "true" },
|
|
414
|
+
accept: "text/plain",
|
|
415
|
+
});
|
|
416
|
+
return splitBitbucketUnifiedDiff(diff);
|
|
417
|
+
}
|
|
439
418
|
},
|
|
440
419
|
};
|
|
441
420
|
}
|
|
442
421
|
export function cloudBitbucketApi(client, repository) {
|
|
443
422
|
const repo = bitbucketCloudRepoPath(repository);
|
|
444
423
|
const mapComment = (raw) => {
|
|
445
|
-
|
|
446
|
-
var _c, _d, _e, _f;
|
|
447
|
-
const record = (_c = asRecord(raw)) !== null && _c !== void 0 ? _c : {};
|
|
424
|
+
const record = asRecord(raw) ?? {};
|
|
448
425
|
const inline = asRecord(record.inline);
|
|
449
426
|
return {
|
|
450
|
-
id:
|
|
451
|
-
body:
|
|
452
|
-
authorId: str(
|
|
453
|
-
path: str(inline
|
|
454
|
-
line:
|
|
427
|
+
id: num(record.id) ?? 0,
|
|
428
|
+
body: str(asRecord(record.content)?.raw) ?? "",
|
|
429
|
+
authorId: str(asRecord(record.user)?.uuid),
|
|
430
|
+
path: str(inline?.path),
|
|
431
|
+
line: num(inline?.to) ?? num(inline?.from),
|
|
455
432
|
raw,
|
|
456
433
|
};
|
|
457
434
|
};
|
|
458
435
|
return {
|
|
459
436
|
dialect: "cloud",
|
|
460
437
|
repository,
|
|
461
|
-
getPullRequest(id) {
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
const raw = yield client.request({
|
|
466
|
-
method: "GET",
|
|
467
|
-
path: `${repo}/pullrequests/${id}`,
|
|
468
|
-
});
|
|
469
|
-
const source = asRecord(raw.source);
|
|
470
|
-
const destination = asRecord(raw.destination);
|
|
471
|
-
return {
|
|
472
|
-
id: (_g = num(raw.id)) !== null && _g !== void 0 ? _g : id,
|
|
473
|
-
title: str(raw.title),
|
|
474
|
-
description: str(raw.description),
|
|
475
|
-
state: str(raw.state),
|
|
476
|
-
sourceBranch: str((_a = asRecord(source === null || source === void 0 ? void 0 : source.branch)) === null || _a === void 0 ? void 0 : _a.name),
|
|
477
|
-
targetBranch: str((_b = asRecord(destination === null || destination === void 0 ? void 0 : destination.branch)) === null || _b === void 0 ? void 0 : _b.name),
|
|
478
|
-
headSha: str((_c = asRecord(source === null || source === void 0 ? void 0 : source.commit)) === null || _c === void 0 ? void 0 : _c.hash),
|
|
479
|
-
baseSha: str((_d = asRecord(destination === null || destination === void 0 ? void 0 : destination.commit)) === null || _d === void 0 ? void 0 : _d.hash),
|
|
480
|
-
htmlUrl: str((_f = asRecord((_e = asRecord(raw.links)) === null || _e === void 0 ? void 0 : _e.html)) === null || _f === void 0 ? void 0 : _f.href),
|
|
481
|
-
raw,
|
|
482
|
-
};
|
|
438
|
+
async getPullRequest(id) {
|
|
439
|
+
const raw = await client.request({
|
|
440
|
+
method: "GET",
|
|
441
|
+
path: `${repo}/pullrequests/${id}`,
|
|
483
442
|
});
|
|
443
|
+
const source = asRecord(raw.source);
|
|
444
|
+
const destination = asRecord(raw.destination);
|
|
445
|
+
return {
|
|
446
|
+
id: num(raw.id) ?? id,
|
|
447
|
+
title: str(raw.title),
|
|
448
|
+
description: str(raw.description),
|
|
449
|
+
state: str(raw.state),
|
|
450
|
+
sourceBranch: str(asRecord(source?.branch)?.name),
|
|
451
|
+
targetBranch: str(asRecord(destination?.branch)?.name),
|
|
452
|
+
headSha: str(asRecord(source?.commit)?.hash),
|
|
453
|
+
baseSha: str(asRecord(destination?.commit)?.hash),
|
|
454
|
+
htmlUrl: str(asRecord(asRecord(raw.links)?.html)?.href),
|
|
455
|
+
raw,
|
|
456
|
+
};
|
|
484
457
|
},
|
|
485
458
|
getPullRequestDiff: id => client.request({
|
|
486
459
|
method: "GET",
|
|
487
460
|
path: `${repo}/pullrequests/${id}/diff`,
|
|
488
461
|
accept: "text/plain",
|
|
489
462
|
}),
|
|
490
|
-
listPullRequestComments(id) {
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
comments.push(mapComment(value));
|
|
503
|
-
}
|
|
504
|
-
const next = str(raw.next);
|
|
505
|
-
if (next === undefined) {
|
|
506
|
-
break;
|
|
507
|
-
}
|
|
508
|
-
// `next` is absolute; re-root it under the client base so the proxy
|
|
509
|
-
// (which only forwards paths) keeps working.
|
|
510
|
-
const nextUrl = new URL(next);
|
|
511
|
-
const baseUrl = new URL(`${client.apiBaseUrl}/`);
|
|
512
|
-
page = nextUrl.pathname.startsWith(baseUrl.pathname)
|
|
513
|
-
? nextUrl.pathname.slice(baseUrl.pathname.length - 1)
|
|
514
|
-
: nextUrl.pathname;
|
|
515
|
-
query = Object.fromEntries(nextUrl.searchParams.entries());
|
|
463
|
+
async listPullRequestComments(id) {
|
|
464
|
+
const comments = [];
|
|
465
|
+
let page = `${repo}/pullrequests/${id}/comments`;
|
|
466
|
+
let query = { pagelen: 100 };
|
|
467
|
+
while (page !== undefined) {
|
|
468
|
+
const raw = await client.request({
|
|
469
|
+
method: "GET",
|
|
470
|
+
path: page,
|
|
471
|
+
query,
|
|
472
|
+
});
|
|
473
|
+
for (const value of Array.isArray(raw.values) ? raw.values : []) {
|
|
474
|
+
comments.push(mapComment(value));
|
|
516
475
|
}
|
|
517
|
-
|
|
518
|
-
|
|
476
|
+
const next = str(raw.next);
|
|
477
|
+
if (next === undefined) {
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
// `next` is absolute; re-root it under the client base so the proxy
|
|
481
|
+
// (which only forwards paths) keeps working.
|
|
482
|
+
const nextUrl = new URL(next);
|
|
483
|
+
const baseUrl = new URL(`${client.apiBaseUrl}/`);
|
|
484
|
+
page = nextUrl.pathname.startsWith(baseUrl.pathname)
|
|
485
|
+
? nextUrl.pathname.slice(baseUrl.pathname.length - 1)
|
|
486
|
+
: nextUrl.pathname;
|
|
487
|
+
query = Object.fromEntries(nextUrl.searchParams.entries());
|
|
488
|
+
}
|
|
489
|
+
return comments;
|
|
519
490
|
},
|
|
520
|
-
postPullRequestComment(id, input) {
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
491
|
+
async postPullRequestComment(id, input) {
|
|
492
|
+
const raw = await client.request({
|
|
493
|
+
method: "POST",
|
|
494
|
+
path: `${repo}/pullrequests/${id}/comments`,
|
|
495
|
+
body: {
|
|
496
|
+
content: { raw: input.body },
|
|
497
|
+
...(input.inline === undefined
|
|
526
498
|
? {}
|
|
527
499
|
: {
|
|
528
|
-
inline:
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
500
|
+
inline: {
|
|
501
|
+
path: input.inline.path,
|
|
502
|
+
...(input.inline.line === undefined ? {} : { to: input.inline.line }),
|
|
503
|
+
},
|
|
504
|
+
}),
|
|
505
|
+
},
|
|
532
506
|
});
|
|
507
|
+
return mapComment(raw);
|
|
533
508
|
},
|
|
534
|
-
setBuildStatus: input =>
|
|
509
|
+
setBuildStatus: input => client.request({
|
|
535
510
|
method: "POST",
|
|
536
511
|
path: `${repo}/commit/${encodeURIComponent(input.sha)}/statuses/build`,
|
|
537
|
-
body:
|
|
538
|
-
|
|
512
|
+
body: {
|
|
513
|
+
key: input.key,
|
|
514
|
+
state: input.state,
|
|
515
|
+
name: input.name ?? input.key,
|
|
516
|
+
url: input.url ?? fallbackUrl(repository),
|
|
517
|
+
...(input.description === undefined ? {} : { description: input.description }),
|
|
518
|
+
},
|
|
519
|
+
}),
|
|
539
520
|
getFileAtRef: (path, ref) => client.request({
|
|
540
521
|
method: "GET",
|
|
541
522
|
path: `${repo}/src/${encodeURIComponent(ref)}/${encodePath(path)}`,
|
|
@@ -546,47 +527,41 @@ export function cloudBitbucketApi(client, repository) {
|
|
|
546
527
|
export function dcBitbucketApi(client, repository) {
|
|
547
528
|
const repo = bitbucketDataCenterRepoPath(repository);
|
|
548
529
|
const mapComment = (raw) => {
|
|
549
|
-
|
|
550
|
-
var _b, _c, _d;
|
|
551
|
-
const record = (_b = asRecord(raw)) !== null && _b !== void 0 ? _b : {};
|
|
530
|
+
const record = asRecord(raw) ?? {};
|
|
552
531
|
const anchor = asRecord(record.anchor);
|
|
553
|
-
const authorId = num(
|
|
532
|
+
const authorId = num(asRecord(record.author)?.id);
|
|
554
533
|
return {
|
|
555
|
-
id:
|
|
556
|
-
body:
|
|
534
|
+
id: num(record.id) ?? 0,
|
|
535
|
+
body: str(record.text) ?? "",
|
|
557
536
|
authorId: authorId === undefined ? undefined : String(authorId),
|
|
558
|
-
path: str(anchor
|
|
559
|
-
line: num(anchor
|
|
537
|
+
path: str(anchor?.path),
|
|
538
|
+
line: num(anchor?.line),
|
|
560
539
|
raw,
|
|
561
540
|
};
|
|
562
541
|
};
|
|
563
542
|
return {
|
|
564
543
|
dialect: "data-center",
|
|
565
544
|
repository,
|
|
566
|
-
getPullRequest(id) {
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
const raw = yield client.request({
|
|
571
|
-
method: "GET",
|
|
572
|
-
path: `${repo}/pull-requests/${id}`,
|
|
573
|
-
});
|
|
574
|
-
const fromRef = asRecord(raw.fromRef);
|
|
575
|
-
const toRef = asRecord(raw.toRef);
|
|
576
|
-
const self = (_a = asRecord(raw.links)) === null || _a === void 0 ? void 0 : _a.self;
|
|
577
|
-
return {
|
|
578
|
-
id: (_c = num(raw.id)) !== null && _c !== void 0 ? _c : id,
|
|
579
|
-
title: str(raw.title),
|
|
580
|
-
description: str(raw.description),
|
|
581
|
-
state: str(raw.state),
|
|
582
|
-
sourceBranch: str(fromRef === null || fromRef === void 0 ? void 0 : fromRef.displayId),
|
|
583
|
-
targetBranch: str(toRef === null || toRef === void 0 ? void 0 : toRef.displayId),
|
|
584
|
-
headSha: str(fromRef === null || fromRef === void 0 ? void 0 : fromRef.latestCommit),
|
|
585
|
-
baseSha: str(toRef === null || toRef === void 0 ? void 0 : toRef.latestCommit),
|
|
586
|
-
htmlUrl: Array.isArray(self) ? str((_b = asRecord(self[0])) === null || _b === void 0 ? void 0 : _b.href) : undefined,
|
|
587
|
-
raw,
|
|
588
|
-
};
|
|
545
|
+
async getPullRequest(id) {
|
|
546
|
+
const raw = await client.request({
|
|
547
|
+
method: "GET",
|
|
548
|
+
path: `${repo}/pull-requests/${id}`,
|
|
589
549
|
});
|
|
550
|
+
const fromRef = asRecord(raw.fromRef);
|
|
551
|
+
const toRef = asRecord(raw.toRef);
|
|
552
|
+
const self = asRecord(raw.links)?.self;
|
|
553
|
+
return {
|
|
554
|
+
id: num(raw.id) ?? id,
|
|
555
|
+
title: str(raw.title),
|
|
556
|
+
description: str(raw.description),
|
|
557
|
+
state: str(raw.state),
|
|
558
|
+
sourceBranch: str(fromRef?.displayId),
|
|
559
|
+
targetBranch: str(toRef?.displayId),
|
|
560
|
+
headSha: str(fromRef?.latestCommit),
|
|
561
|
+
baseSha: str(toRef?.latestCommit),
|
|
562
|
+
htmlUrl: Array.isArray(self) ? str(asRecord(self[0])?.href) : undefined,
|
|
563
|
+
raw,
|
|
564
|
+
};
|
|
590
565
|
},
|
|
591
566
|
// `/pull-requests/{id}.diff` streams the raw unified diff; the sibling
|
|
592
567
|
// `/pull-requests/{id}/diff` route returns a JSON `RestDiff` instead.
|
|
@@ -595,59 +570,68 @@ export function dcBitbucketApi(client, repository) {
|
|
|
595
570
|
path: `${repo}/pull-requests/${id}.diff`,
|
|
596
571
|
accept: "text/plain",
|
|
597
572
|
}),
|
|
598
|
-
listPullRequestComments(id) {
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
comments.push(mapComment(activity.comment));
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
const nextStart = num(raw.nextPageStart);
|
|
615
|
-
if (raw.isLastPage !== false || nextStart === undefined) {
|
|
616
|
-
break;
|
|
573
|
+
async listPullRequestComments(id) {
|
|
574
|
+
const comments = [];
|
|
575
|
+
let start = 0;
|
|
576
|
+
for (;;) {
|
|
577
|
+
const raw = await client.request({
|
|
578
|
+
method: "GET",
|
|
579
|
+
path: `${repo}/pull-requests/${id}/activities`,
|
|
580
|
+
query: { limit: 100, start },
|
|
581
|
+
});
|
|
582
|
+
for (const value of Array.isArray(raw.values) ? raw.values : []) {
|
|
583
|
+
const activity = asRecord(value);
|
|
584
|
+
if (activity?.action === "COMMENTED" && activity.comment !== undefined) {
|
|
585
|
+
comments.push(mapComment(activity.comment));
|
|
617
586
|
}
|
|
618
|
-
start = nextStart;
|
|
619
587
|
}
|
|
620
|
-
|
|
621
|
-
|
|
588
|
+
const nextStart = num(raw.nextPageStart);
|
|
589
|
+
if (raw.isLastPage !== false || nextStart === undefined) {
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
start = nextStart;
|
|
593
|
+
}
|
|
594
|
+
return comments;
|
|
622
595
|
},
|
|
623
|
-
postPullRequestComment(id, input) {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
596
|
+
async postPullRequestComment(id, input) {
|
|
597
|
+
const raw = await client.request({
|
|
598
|
+
method: "POST",
|
|
599
|
+
path: `${repo}/pull-requests/${id}/comments`,
|
|
600
|
+
body: {
|
|
601
|
+
text: input.body,
|
|
602
|
+
...(input.inline === undefined
|
|
629
603
|
? {}
|
|
630
604
|
: {
|
|
631
|
-
anchor:
|
|
632
|
-
|
|
633
|
-
:
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
605
|
+
anchor: {
|
|
606
|
+
path: input.inline.path,
|
|
607
|
+
diffType: "EFFECTIVE",
|
|
608
|
+
...(input.inline.line === undefined
|
|
609
|
+
? { fileType: "TO" }
|
|
610
|
+
: {
|
|
611
|
+
line: input.inline.line,
|
|
612
|
+
lineType: "CONTEXT",
|
|
613
|
+
fileType: "TO",
|
|
614
|
+
}),
|
|
615
|
+
},
|
|
616
|
+
}),
|
|
617
|
+
},
|
|
641
618
|
});
|
|
619
|
+
return mapComment(raw);
|
|
642
620
|
},
|
|
643
621
|
// Repository-scoped build status (DC 7.14+), which lives under
|
|
644
622
|
// `rest/api/1.0` so the proxy's single upstream base reaches it; the
|
|
645
623
|
// older `rest/build-status/1.0/commits/{sha}` sits outside that base.
|
|
646
|
-
setBuildStatus: input =>
|
|
624
|
+
setBuildStatus: input => client.request({
|
|
647
625
|
method: "POST",
|
|
648
626
|
path: `${repo}/commits/${encodeURIComponent(input.sha)}/builds`,
|
|
649
|
-
body:
|
|
650
|
-
|
|
627
|
+
body: {
|
|
628
|
+
key: input.key,
|
|
629
|
+
state: input.state === "STOPPED" ? "CANCELLED" : input.state,
|
|
630
|
+
name: input.name ?? input.key,
|
|
631
|
+
url: input.url ?? fallbackUrl(repository),
|
|
632
|
+
...(input.description === undefined ? {} : { description: input.description }),
|
|
633
|
+
},
|
|
634
|
+
}),
|
|
651
635
|
getFileAtRef: (path, ref) => client.request({
|
|
652
636
|
method: "GET",
|
|
653
637
|
path: `${repo}/raw/${encodePath(path)}`,
|