@cursor/july 0.1.102 → 0.1.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +34 -32
- package/README.md +10 -12
- package/dist/ab.d.ts +1 -1
- package/dist/ab.js +1 -1
- package/dist/bin/agent-serve.d.ts +12 -12
- package/dist/bin/agent-serve.js +114 -36
- package/dist/channels/bitbucket/api.d.ts +176 -0
- package/dist/channels/bitbucket/api.d.ts.map +1 -0
- package/dist/channels/bitbucket/api.js +419 -0
- package/dist/channels/bitbucket/binding.d.ts +71 -0
- package/dist/channels/bitbucket/binding.d.ts.map +1 -0
- package/dist/channels/bitbucket/binding.js +269 -0
- package/dist/channels/bitbucket/bitbucket-channel.d.ts +33 -0
- package/dist/channels/bitbucket/bitbucket-channel.d.ts.map +1 -0
- package/dist/channels/bitbucket/bitbucket-channel.js +120 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts +61 -0
- package/dist/channels/bitbucket/bitbucket-webhook.d.ts.map +1 -0
- package/dist/channels/bitbucket/bitbucket-webhook.js +394 -0
- package/dist/channels/bitbucket/checks.d.ts +67 -0
- package/dist/channels/bitbucket/checks.d.ts.map +1 -0
- package/dist/channels/bitbucket/checks.js +102 -0
- package/dist/channels/bitbucket/cursor-account.d.ts +37 -0
- package/dist/channels/bitbucket/cursor-account.d.ts.map +1 -0
- package/dist/channels/bitbucket/cursor-account.js +65 -0
- package/dist/channels/bitbucket/defaults.d.ts +26 -0
- package/dist/channels/bitbucket/defaults.d.ts.map +1 -0
- package/dist/channels/bitbucket/defaults.js +73 -0
- package/dist/channels/bitbucket/events.d.ts +22 -0
- package/dist/channels/bitbucket/events.d.ts.map +1 -0
- package/dist/channels/bitbucket/events.js +64 -0
- package/dist/channels/bitbucket/index.d.ts +34 -0
- package/dist/channels/bitbucket/index.d.ts.map +1 -0
- package/dist/channels/bitbucket/index.js +33 -0
- package/dist/channels/bitbucket/replay.d.ts +63 -0
- package/dist/channels/bitbucket/replay.d.ts.map +1 -0
- package/dist/channels/bitbucket/replay.js +304 -0
- package/dist/channels/bitbucket/state.d.ts +35 -0
- package/dist/channels/bitbucket/state.d.ts.map +1 -0
- package/dist/channels/bitbucket/state.js +21 -0
- package/dist/channels/bitbucket/types.d.ts +229 -0
- package/dist/channels/bitbucket/types.d.ts.map +1 -0
- package/dist/channels/bitbucket/types.js +1 -0
- package/dist/channels/deployments/deployments-channel.d.ts +22 -14
- package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
- package/dist/channels/deployments/deployments-channel.js +25 -27
- package/dist/channels/deployments/types.d.ts +12 -6
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/github/binding.d.ts +6 -0
- package/dist/channels/github/binding.d.ts.map +1 -1
- package/dist/channels/github/binding.js +3 -3
- package/dist/channels/github/cursor-account.d.ts +7 -3
- package/dist/channels/github/cursor-account.d.ts.map +1 -1
- package/dist/channels/github/cursor-account.js +10 -6
- package/dist/channels/github/events.d.ts +1 -1
- package/dist/channels/github/events.js +1 -1
- package/dist/channels/github/forward.d.ts +1 -1
- package/dist/channels/github/forward.d.ts.map +1 -1
- package/dist/channels/github/forward.js +3 -2
- package/dist/channels/github/github-channel.d.ts +29 -39
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +68 -101
- package/dist/channels/github/replay.d.ts +1 -1
- package/dist/channels/github/replay.js +1 -1
- package/dist/channels/github/state.d.ts +2 -0
- package/dist/channels/github/state.d.ts.map +1 -1
- package/dist/channels/github/state.js +14 -11
- package/dist/channels/github/types.d.ts +2 -4
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/gitlab/api.d.ts +91 -0
- package/dist/channels/gitlab/api.d.ts.map +1 -0
- package/dist/channels/gitlab/api.js +150 -0
- package/dist/channels/gitlab/binding.d.ts +58 -0
- package/dist/channels/gitlab/binding.d.ts.map +1 -0
- package/dist/channels/gitlab/binding.js +139 -0
- package/dist/channels/gitlab/checks.d.ts +110 -0
- package/dist/channels/gitlab/checks.d.ts.map +1 -0
- package/dist/channels/gitlab/checks.js +126 -0
- package/dist/channels/gitlab/cursor-account.d.ts +36 -0
- package/dist/channels/gitlab/cursor-account.d.ts.map +1 -0
- package/dist/channels/gitlab/cursor-account.js +65 -0
- package/dist/channels/gitlab/defaults.d.ts +25 -0
- package/dist/channels/gitlab/defaults.d.ts.map +1 -0
- package/dist/channels/gitlab/defaults.js +60 -0
- package/dist/channels/gitlab/events.d.ts +12 -0
- package/dist/channels/gitlab/events.d.ts.map +1 -0
- package/dist/channels/gitlab/events.js +28 -0
- package/dist/channels/gitlab/gitlab-channel.d.ts +33 -0
- package/dist/channels/gitlab/gitlab-channel.d.ts.map +1 -0
- package/dist/channels/gitlab/gitlab-channel.js +120 -0
- package/dist/channels/gitlab/gitlab-webhook.d.ts +45 -0
- package/dist/channels/gitlab/gitlab-webhook.d.ts.map +1 -0
- package/dist/channels/gitlab/gitlab-webhook.js +397 -0
- package/dist/channels/gitlab/index.d.ts +31 -0
- package/dist/channels/gitlab/index.d.ts.map +1 -0
- package/dist/channels/gitlab/index.js +30 -0
- package/dist/channels/gitlab/replay.d.ts +105 -0
- package/dist/channels/gitlab/replay.d.ts.map +1 -0
- package/dist/channels/gitlab/replay.js +206 -0
- package/dist/channels/gitlab/state.d.ts +33 -0
- package/dist/channels/gitlab/state.d.ts.map +1 -0
- package/dist/channels/gitlab/state.js +23 -0
- package/dist/channels/gitlab/types.d.ts +214 -0
- package/dist/channels/gitlab/types.d.ts.map +1 -0
- package/dist/channels/gitlab/types.js +1 -0
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +4 -2
- package/dist/channels/origin/origin-channel.d.ts +4 -9
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +8 -48
- package/dist/channels/origin/types.d.ts +20 -2
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.js +1 -7
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +3 -3
- package/dist/channels/slack/setup.d.ts +1 -1
- package/dist/channels/slack/setup.d.ts.map +1 -1
- package/dist/channels/slack/setup.js +6 -13
- package/dist/channels/slack/types.d.ts +1 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/channels.d.ts +1 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/connections.d.ts +1 -1
- package/dist/connections.js +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.CLA03RCz.js → app.DW9pXkpL.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.ifxv-cJV.js → VPLocalSearchBox.CdEIUwDg.js} +1 -1
- package/dist/docs/assets/chunks/{theme.DWCwM6p-.js → theme.YZMHgPgg.js} +2 -2
- package/dist/docs/assets/concepts.md.DgEcZOfT.js +1 -0
- package/dist/docs/assets/{concepts.md.rPzW2HZN.lean.js → concepts.md.DgEcZOfT.lean.js} +1 -1
- package/dist/docs/assets/{evals.md.CPzDAwoH.js → evals.md.CbMoebP1.js} +1 -1
- package/dist/docs/assets/guides_cloud-agents.md.DS8RIjwx.js +9 -0
- package/dist/docs/assets/{guides_github.md.BtPr9GaP.js → guides_github.md.DKYiT9do.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.js → guides_opentelemetry.md.COh9jFVg.js} +7 -8
- package/dist/docs/assets/{guides_opentelemetry.md.BVTXDCRg.lean.js → guides_opentelemetry.md.COh9jFVg.lean.js} +1 -1
- package/dist/docs/assets/{index.md.Kiht7ell.js → index.md.D75GWhPl.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.js → reference_agent-config.md.CHNpiyp4.js} +3 -3
- package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.js → reference_channels.md.Dz8Cnudp.js} +2 -2
- package/dist/docs/assets/{reference_channels.md.Cd2f2iyV.lean.js → reference_channels.md.Dz8Cnudp.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.DfoeyvL0.js → reference_cli.md.CJNc_xYK.js} +1 -1
- package/dist/docs/assets/{reference_extensions.md.9WQMZe1l.js → reference_extensions.md.DykHW3qL.js} +11 -5
- package/dist/docs/assets/reference_extensions.md.DykHW3qL.lean.js +1 -0
- package/dist/docs/assets/reference_hooks.md.Ddt5DdgJ.js +73 -0
- package/dist/docs/assets/{reference_hooks.md.a8BJxMR5.lean.js → reference_hooks.md.Ddt5DdgJ.lean.js} +1 -1
- package/dist/docs/assets/{reference_playground.md.DnX5nL-B.js → reference_playground.md.4myJPxrf.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.js → reference_project-layout.md.DuBu9a96.js} +2 -2
- package/dist/docs/assets/reference_result.md.BK5SxDrf.js +19 -0
- package/dist/docs/assets/reference_result.md.BK5SxDrf.lean.js +1 -0
- package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.js → reference_sessions.md.CueyOHSL.js} +1 -1
- package/dist/docs/assets/{reference_sessions.md.NxFP_CAC.lean.js → reference_sessions.md.CueyOHSL.lean.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.B1up2r9W.js → reference_tools.md.aGrn99hP.js} +1 -1
- package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
- package/dist/docs/assets/{skills_otel.md.CgiZryR3.js → skills_otel.md.CqhobH3B.js} +3 -3
- package/dist/docs/assets/{skills_otel.md.CgiZryR3.lean.js → skills_otel.md.CqhobH3B.lean.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.js → templates_pr-autofixer.md.Bds_XWcV.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.x5zl6-GT.lean.js → templates_pr-autofixer.md.Bds_XWcV.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/concepts.md +2 -4
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/design/runtime-abstraction.md +2 -3
- package/dist/docs/evals.html +6 -6
- package/dist/docs/evals.md +9 -7
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-agents.html +6 -6
- package/dist/docs/guides/cloud-agents.md +4 -6
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +6 -6
- package/dist/docs/guides/github.md +0 -1
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +5 -5
- package/dist/docs/guides/opentelemetry.html +10 -11
- package/dist/docs/guides/opentelemetry.md +41 -17
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +2 -2
- package/dist/docs/llms-full.txt +501 -262
- package/dist/docs/llms.txt +2 -2
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +8 -8
- package/dist/docs/reference/agent-config.md +6 -10
- package/dist/docs/reference/artifacts.html +5 -5
- package/dist/docs/reference/channels.html +6 -6
- package/dist/docs/reference/channels.md +18 -8
- package/dist/docs/reference/cli.html +5 -5
- package/dist/docs/reference/cli.md +3 -4
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/extensions.html +16 -10
- package/dist/docs/reference/extensions.md +86 -22
- package/dist/docs/reference/hooks.html +69 -10
- package/dist/docs/reference/hooks.md +215 -46
- package/dist/docs/reference/http-api.html +4 -4
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +5 -5
- package/dist/docs/reference/playground.md +3 -0
- package/dist/docs/reference/project-layout.html +6 -6
- package/dist/docs/reference/project-layout.md +2 -1
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/result.html +45 -0
- package/dist/docs/reference/result.md +89 -0
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/sessions.md +3 -1
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +5 -5
- package/dist/docs/reference/tools.md +1 -2
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/skills/ab.html +4 -4
- package/dist/docs/skills/create-agent.html +4 -4
- package/dist/docs/skills/debug.html +4 -4
- package/dist/docs/skills/evals.html +4 -4
- package/dist/docs/skills/framework-map.html +5 -5
- package/dist/docs/skills/framework-map.md +3 -1
- package/dist/docs/skills/github.html +4 -4
- package/dist/docs/skills/hillclimb.html +4 -4
- package/dist/docs/skills/index.html +4 -4
- package/dist/docs/skills/mcp-auth.html +4 -4
- package/dist/docs/skills/otel.html +7 -7
- package/dist/docs/skills/otel.md +8 -3
- package/dist/docs/skills/setup-slack.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +6 -6
- package/dist/docs/templates/pr-autofixer.md +0 -3
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +4 -4
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/evals.d.ts +1 -1
- package/dist/evals.d.ts.map +1 -1
- package/dist/extensions.d.ts +20 -7
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +36 -5
- package/dist/files.d.ts +16 -3
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +16 -3
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/internal/ab-snapshot.d.ts.map +1 -1
- package/dist/internal/ab-snapshot.js +0 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +1 -3
- package/dist/internal/authored-alias-hooks.d.ts +4 -13
- package/dist/internal/authored-alias-hooks.d.ts.map +1 -1
- package/dist/internal/authored-alias-hooks.js +4 -20
- package/dist/internal/authored-loaders.d.ts +2 -3
- package/dist/internal/authored-loaders.d.ts.map +1 -1
- package/dist/internal/authored-loaders.js +6 -20
- package/dist/internal/channel-dispatch.d.ts +43 -0
- package/dist/internal/channel-dispatch.d.ts.map +1 -0
- package/dist/internal/channel-dispatch.js +77 -0
- package/dist/internal/chat-client.d.ts +1 -1
- package/dist/internal/chat-client.js +1 -1
- package/dist/internal/cli-ax.d.ts +5 -5
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +5 -5
- package/dist/internal/cli-bitbucket.d.ts +33 -0
- package/dist/internal/cli-bitbucket.d.ts.map +1 -0
- package/dist/internal/cli-bitbucket.js +359 -0
- package/dist/internal/cli-convert-automation.d.ts +1 -1
- package/dist/internal/cli-convert-automation.js +2 -2
- package/dist/internal/cli-cursor.d.ts +1 -1
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +2 -4
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +2 -6
- package/dist/internal/cli-github.d.ts +1 -1
- package/dist/internal/cli-github.js +3 -3
- package/dist/internal/cli-gitlab.d.ts +37 -0
- package/dist/internal/cli-gitlab.d.ts.map +1 -0
- package/dist/internal/cli-gitlab.js +380 -0
- package/dist/internal/cli-mcp.d.ts.map +1 -1
- package/dist/internal/cli-mcp.js +2 -6
- 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 +2 -4
- package/dist/internal/continuation-channel.d.ts +14 -0
- package/dist/internal/continuation-channel.d.ts.map +1 -1
- package/dist/internal/continuation-channel.js +56 -3
- package/dist/internal/continuation-identity.d.ts +14 -15
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +182 -7
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +4 -3
- package/dist/internal/convert-automation/types.d.ts +1 -1
- package/dist/internal/convert-automation/types.js +1 -1
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +1 -3
- package/dist/internal/cursor/backend-client.d.ts +5 -4
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +5 -6
- package/dist/internal/cursor/bound-secret-file.d.ts +56 -0
- package/dist/internal/cursor/bound-secret-file.d.ts.map +1 -0
- package/dist/internal/cursor/bound-secret-file.js +88 -0
- package/dist/internal/cursor/credentials.d.ts +39 -5
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +58 -8
- package/dist/internal/cursor/hosted-bound-secrets.d.ts +41 -0
- package/dist/internal/cursor/hosted-bound-secrets.d.ts.map +1 -0
- package/dist/internal/cursor/hosted-bound-secrets.js +54 -0
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts +19 -5
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-deployment-secrets.js +29 -9
- package/dist/internal/cursor/hosted-store-secrets.d.ts +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +1 -1
- package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +2 -4
- package/dist/internal/cursor-deployment-relay.d.ts +6 -2
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +13 -9
- package/dist/internal/deploy-manifest.d.ts +1 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +1 -1
- package/dist/internal/discovery/ab.d.ts +1 -1
- package/dist/internal/discovery/ab.d.ts.map +1 -1
- package/dist/internal/discovery/ab.js +21 -9
- package/dist/internal/discovery/agent.d.ts +6 -1
- package/dist/internal/discovery/agent.d.ts.map +1 -1
- package/dist/internal/discovery/agent.js +65 -116
- package/dist/internal/discovery/channels.d.ts +1 -1
- package/dist/internal/discovery/channels.d.ts.map +1 -1
- package/dist/internal/discovery/channels.js +14 -14
- package/dist/internal/discovery/connections.d.ts +1 -5
- package/dist/internal/discovery/connections.d.ts.map +1 -1
- package/dist/internal/discovery/connections.js +30 -44
- package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -1
- package/dist/internal/discovery/cursor-plugin.js +1 -3
- package/dist/internal/discovery/extension-overlay.d.ts +32 -0
- package/dist/internal/discovery/extension-overlay.d.ts.map +1 -0
- package/dist/internal/discovery/extension-overlay.js +191 -0
- package/dist/internal/discovery/extensions.d.ts +11 -2
- package/dist/internal/discovery/extensions.d.ts.map +1 -1
- package/dist/internal/discovery/extensions.js +211 -74
- package/dist/internal/discovery/hooks.d.ts +1 -1
- package/dist/internal/discovery/hooks.d.ts.map +1 -1
- package/dist/internal/discovery/hooks.js +15 -2
- package/dist/internal/discovery/info.d.ts.map +1 -1
- package/dist/internal/discovery/info.js +7 -1
- package/dist/internal/discovery/modules.d.ts.map +1 -1
- package/dist/internal/discovery/modules.js +8 -2
- package/dist/internal/discovery/names.d.ts +1 -1
- package/dist/internal/discovery/names.d.ts.map +1 -1
- package/dist/internal/discovery/names.js +1 -0
- package/dist/internal/discovery/project.d.ts +0 -2
- package/dist/internal/discovery/project.d.ts.map +1 -1
- package/dist/internal/discovery/project.js +64 -10
- package/dist/internal/discovery/runtime.d.ts.map +1 -1
- package/dist/internal/discovery/runtime.js +1 -2
- package/dist/internal/discovery/schedules.d.ts +1 -1
- package/dist/internal/discovery/schedules.d.ts.map +1 -1
- package/dist/internal/discovery/schedules.js +23 -2
- package/dist/internal/discovery/services.d.ts +6 -2
- package/dist/internal/discovery/services.d.ts.map +1 -1
- package/dist/internal/discovery/services.js +31 -1
- package/dist/internal/discovery/skills.d.ts +1 -6
- package/dist/internal/discovery/skills.d.ts.map +1 -1
- package/dist/internal/discovery/skills.js +8 -3
- package/dist/internal/discovery/subagent.d.ts +3 -0
- package/dist/internal/discovery/subagent.d.ts.map +1 -1
- package/dist/internal/discovery/subagent.js +109 -0
- package/dist/internal/discovery.d.ts +1 -2
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +1 -2
- package/dist/internal/distribution.d.ts +10 -27
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +25 -73
- package/dist/internal/docs-site.js +1 -1
- package/dist/internal/eval-run-store.d.ts +0 -1
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.d.ts +8 -0
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +8 -8
- package/dist/internal/github-fanout.d.ts +1 -1
- package/dist/internal/github-fanout.js +1 -1
- package/dist/internal/guest-network.d.ts +101 -0
- package/dist/internal/guest-network.d.ts.map +1 -0
- package/dist/internal/guest-network.js +304 -0
- package/dist/internal/host-otel.d.ts +3 -3
- package/dist/internal/host-otel.d.ts.map +1 -1
- package/dist/internal/host-otel.js +8 -4
- package/dist/internal/hosted-admission-adapter.d.ts +8 -7
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.d.ts +6 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +18 -5
- package/dist/internal/hosted-delivery.d.ts +18 -0
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +248 -118
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +1 -3
- package/dist/internal/init-interview.d.ts.map +1 -1
- package/dist/internal/init-interview.js +1 -3
- package/dist/internal/init-project.d.ts +2 -2
- package/dist/internal/init-project.js +2 -2
- package/dist/internal/inline-stdio-define-stub.d.ts +1 -1
- package/dist/internal/inline-stdio-define-stub.d.ts.map +1 -1
- package/dist/internal/inline-stdio-define-stub.js +1 -1
- package/dist/internal/is-record.d.ts +2 -0
- package/dist/internal/is-record.d.ts.map +1 -0
- package/dist/internal/is-record.js +3 -0
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +18 -10
- package/dist/internal/local-control-plane.d.ts +1 -2
- package/dist/internal/local-control-plane.d.ts.map +1 -1
- package/dist/internal/local-control-plane.js +3 -20
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +1 -3
- package/dist/internal/otel/collector.d.ts +12 -3
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +77 -125
- package/dist/internal/otel/config.d.ts +0 -2
- package/dist/internal/otel/config.d.ts.map +1 -1
- package/dist/internal/otel/config.js +17 -20
- package/dist/internal/otel/http.d.ts +2 -0
- package/dist/internal/otel/http.d.ts.map +1 -1
- package/dist/internal/otel/http.js +7 -1
- package/dist/internal/otel/mcp.d.ts.map +1 -1
- package/dist/internal/otel/mcp.js +3 -16
- package/dist/internal/otel/runtime.d.ts +26 -1
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +164 -15
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +3 -11
- package/dist/internal/playground/toolchain.d.ts +1 -1
- package/dist/internal/playground/toolchain.d.ts.map +1 -1
- package/dist/internal/playground/toolchain.js +1 -1
- package/dist/internal/request-error-status.d.ts +12 -0
- package/dist/internal/request-error-status.d.ts.map +1 -0
- package/dist/internal/request-error-status.js +52 -0
- package/dist/internal/resolve-prod-target.d.ts +1 -1
- package/dist/internal/resolve-prod-target.d.ts.map +1 -1
- package/dist/internal/resolve-prod-target.js +3 -7
- package/dist/internal/result-output.d.ts +18 -0
- package/dist/internal/result-output.d.ts.map +1 -0
- package/dist/internal/result-output.js +33 -0
- package/dist/internal/run-client.d.ts +2 -2
- package/dist/internal/run-client.js +2 -2
- package/dist/internal/runtime-dispatch-runner.d.ts +1 -11
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +2 -15
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +3 -6
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +110 -35
- package/dist/internal/session-cost.d.ts +3 -3
- package/dist/internal/session-cost.d.ts.map +1 -1
- package/dist/internal/session-cost.js +3 -3
- package/dist/internal/session-engine.d.ts +26 -11
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +146 -76
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +1 -3
- package/dist/internal/skills-sync.d.ts +1 -4
- package/dist/internal/skills-sync.d.ts.map +1 -1
- package/dist/internal/skills-sync.js +10 -50
- package/dist/internal/sleep.d.ts +2 -0
- package/dist/internal/sleep.d.ts.map +1 -0
- package/dist/internal/sleep.js +3 -0
- package/dist/internal/store-mirror.d.ts +29 -0
- package/dist/internal/store-mirror.d.ts.map +1 -0
- package/dist/internal/store-mirror.js +70 -0
- package/dist/internal/tenant-slack/relay.d.ts +73 -0
- package/dist/internal/tenant-slack/relay.d.ts.map +1 -0
- package/dist/internal/tenant-slack/relay.js +138 -0
- package/dist/internal/testing/scm-continuation-fixtures.d.ts +33 -0
- package/dist/internal/testing/scm-continuation-fixtures.d.ts.map +1 -0
- package/dist/internal/testing/scm-continuation-fixtures.js +253 -0
- package/dist/internal/workspace-sync.d.ts +22 -0
- package/dist/internal/workspace-sync.d.ts.map +1 -0
- package/dist/internal/workspace-sync.js +49 -0
- package/dist/internal/workspace.d.ts +7 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +13 -0
- package/dist/otel.d.ts +23 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +93 -2
- package/dist/playground/assets/index-59KvgREd.js +67 -0
- package/dist/playground/assets/index-MbMxXg-y.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/result.d.ts +24 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +27 -0
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +7 -4
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +1 -3
- package/dist/types.d.ts +90 -23
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +2 -2
- package/docs/concepts.md +2 -4
- package/docs/design/runtime-abstraction.md +2 -3
- package/docs/evals.md +9 -7
- package/docs/guides/cloud-agents.md +4 -6
- package/docs/guides/github.md +0 -1
- package/docs/guides/opentelemetry.md +41 -17
- package/docs/reference/agent-config.md +6 -10
- package/docs/reference/channels.md +18 -8
- package/docs/reference/cli.md +3 -4
- package/docs/reference/extensions.md +87 -23
- package/docs/reference/hooks.md +215 -46
- package/docs/reference/playground.md +3 -0
- package/docs/reference/project-layout.md +2 -1
- package/docs/reference/result.md +94 -0
- package/docs/reference/sessions.md +3 -1
- package/docs/reference/tools.md +1 -2
- package/docs/templates/pr-autofixer.md +0 -3
- package/package.json +29 -10
- package/skills/framework-map/SKILL.md +3 -1
- package/skills/otel/SKILL.md +8 -3
- package/src/ab.ts +1 -1
- package/src/bin/agent-serve.ts +121 -21
- package/src/channels/bitbucket/api.ts +623 -0
- package/src/channels/bitbucket/binding.ts +414 -0
- package/src/channels/bitbucket/bitbucket-channel.ts +182 -0
- package/src/channels/bitbucket/bitbucket-webhook.ts +576 -0
- package/src/channels/bitbucket/checks.ts +154 -0
- package/src/channels/bitbucket/cursor-account.ts +117 -0
- package/src/channels/bitbucket/defaults.ts +110 -0
- package/src/channels/bitbucket/events.ts +84 -0
- package/src/channels/bitbucket/index.ts +49 -0
- package/src/channels/bitbucket/replay.ts +439 -0
- package/src/channels/bitbucket/state.ts +59 -0
- package/src/channels/bitbucket/types.ts +266 -0
- package/src/channels/deployments/deployments-channel.ts +25 -43
- package/src/channels/deployments/types.ts +12 -6
- package/src/channels/github/binding.ts +8 -1
- package/src/channels/github/cursor-account.ts +17 -6
- package/src/channels/github/events.ts +1 -1
- package/src/channels/github/forward.ts +3 -2
- package/src/channels/github/github-channel.ts +74 -221
- package/src/channels/github/replay.ts +1 -1
- package/src/channels/github/state.ts +6 -0
- package/src/channels/github/types.ts +2 -5
- package/src/channels/gitlab/api.ts +228 -0
- package/src/channels/gitlab/binding.ts +233 -0
- package/src/channels/gitlab/checks.ts +243 -0
- package/src/channels/gitlab/cursor-account.ts +114 -0
- package/src/channels/gitlab/defaults.ts +93 -0
- package/src/channels/gitlab/events.ts +44 -0
- package/src/channels/gitlab/gitlab-channel.ts +176 -0
- package/src/channels/gitlab/gitlab-webhook.ts +555 -0
- package/src/channels/gitlab/index.ts +43 -0
- package/src/channels/gitlab/replay.ts +347 -0
- package/src/channels/gitlab/state.ts +55 -0
- package/src/channels/gitlab/types.ts +263 -0
- package/src/channels/origin/api.ts +4 -2
- package/src/channels/origin/origin-channel.ts +19 -94
- package/src/channels/origin/types.ts +23 -2
- package/src/channels/slack/eval-directive.ts +1 -6
- package/src/channels/slack/init.ts +6 -3
- package/src/channels/slack/setup.ts +7 -6
- package/src/channels/slack/types.ts +1 -1
- package/src/channels.ts +0 -1
- package/src/client.ts +1 -1
- package/src/connections.ts +1 -1
- package/src/evals.ts +1 -1
- package/src/extensions.ts +47 -5
- package/src/files.ts +21 -3
- package/src/index.ts +20 -28
- package/src/internal/ab-snapshot.ts +0 -3
- package/src/internal/advertise-tools.ts +1 -4
- package/src/internal/authored-alias-hooks.ts +4 -21
- package/src/internal/authored-loaders.ts +6 -23
- package/src/internal/channel-dispatch.ts +160 -0
- package/src/internal/chat-client.ts +1 -1
- package/src/internal/cli-ax.ts +5 -5
- package/src/internal/cli-bitbucket.ts +477 -0
- package/src/internal/cli-convert-automation.ts +7 -7
- package/src/internal/cli-cursor.ts +2 -5
- package/src/internal/cli-deploy.ts +2 -8
- package/src/internal/cli-github.ts +3 -3
- package/src/internal/cli-gitlab.ts +485 -0
- package/src/internal/cli-mcp.ts +2 -7
- package/src/internal/cli-slack.ts +2 -5
- package/src/internal/continuation-channel.ts +82 -1
- package/src/internal/continuation-identity.ts +229 -11
- package/src/internal/conversation-mirror.ts +4 -3
- package/src/internal/convert-automation/types.ts +1 -1
- package/src/internal/cursor/account-mcp.ts +1 -4
- package/src/internal/cursor/backend-client.ts +9 -10
- package/src/internal/cursor/bound-secret-file.ts +108 -0
- package/src/internal/cursor/credentials.ts +75 -10
- package/src/internal/cursor/hosted-bound-secrets.ts +75 -0
- package/src/internal/cursor/hosted-deployment-secrets.ts +42 -11
- package/src/internal/cursor/hosted-store-secrets.ts +1 -1
- package/src/internal/cursor-account-mcp-auth.ts +2 -5
- package/src/internal/cursor-deployment-relay.ts +11 -7
- package/src/internal/deploy-manifest.ts +4 -2
- package/src/internal/discovery/ab.ts +29 -9
- package/src/internal/discovery/agent.ts +94 -135
- package/src/internal/discovery/channels.ts +15 -13
- package/src/internal/discovery/connections.ts +55 -50
- package/src/internal/discovery/cursor-plugin.ts +1 -4
- package/src/internal/discovery/extension-overlay.ts +274 -0
- package/src/internal/discovery/extensions.ts +330 -105
- package/src/internal/discovery/hooks.ts +20 -2
- package/src/internal/discovery/info.ts +7 -0
- package/src/internal/discovery/modules.ts +8 -2
- package/src/internal/discovery/names.ts +2 -1
- package/src/internal/discovery/project.ts +80 -9
- package/src/internal/discovery/runtime.ts +1 -2
- package/src/internal/discovery/schedules.ts +28 -2
- package/src/internal/discovery/services.ts +37 -1
- package/src/internal/discovery/skills.ts +13 -3
- package/src/internal/discovery/subagent.ts +107 -0
- package/src/internal/discovery.ts +0 -2
- package/src/internal/distribution.ts +35 -83
- package/src/internal/docs-site.ts +1 -1
- package/src/internal/eval-run-store.ts +0 -7
- package/src/internal/eval-runner.ts +0 -1
- package/src/internal/framework-file-storage.ts +8 -8
- package/src/internal/github-fanout.ts +1 -1
- package/src/internal/guest-network.ts +383 -0
- package/src/internal/host-otel.ts +8 -4
- package/src/internal/hosted-admission-adapter.ts +8 -8
- package/src/internal/hosted-delivery-protocol.ts +26 -1
- package/src/internal/hosted-delivery.ts +376 -192
- package/src/internal/http-channel.ts +1 -4
- package/src/internal/init-interview.ts +1 -4
- package/src/internal/init-project.ts +2 -2
- package/src/internal/inline-stdio-define-stub.ts +1 -1
- package/src/internal/is-record.ts +3 -0
- package/src/internal/json-schema.ts +19 -10
- package/src/internal/local-control-plane.ts +5 -24
- package/src/internal/mcp-endpoint.ts +1 -4
- package/src/internal/otel/collector.ts +94 -159
- package/src/internal/otel/config.ts +10 -14
- package/src/internal/otel/http.ts +14 -1
- package/src/internal/otel/mcp.ts +3 -16
- package/src/internal/otel/runtime.ts +240 -25
- package/src/internal/package-inline-stdio.ts +3 -12
- package/src/internal/playground/toolchain.ts +1 -1
- package/src/internal/request-error-status.ts +72 -0
- package/src/internal/resolve-prod-target.ts +3 -8
- package/src/internal/result-output.ts +34 -0
- package/src/internal/run-client.ts +2 -2
- package/src/internal/runtime-dispatch-runner.ts +3 -21
- package/src/internal/sdk-runner.ts +3 -7
- package/src/internal/server.ts +153 -44
- package/src/internal/session-cost.ts +3 -3
- package/src/internal/session-engine.ts +182 -74
- package/src/internal/session-run-log.ts +1 -4
- package/src/internal/skills-sync.ts +13 -63
- package/src/internal/sleep.ts +3 -0
- package/src/internal/store-mirror.ts +86 -0
- package/src/internal/tenant-slack/relay.ts +179 -0
- package/src/internal/testing/scm-continuation-fixtures.ts +286 -0
- package/src/internal/workspace-sync.ts +55 -0
- package/src/internal/workspace.ts +14 -0
- package/src/otel.ts +143 -3
- package/src/result.ts +36 -0
- package/src/storage-backends/cursor-hosted.ts +7 -4
- package/src/storage-protocol.ts +1 -4
- package/src/types.ts +105 -34
- package/templates/triage/agent/lib/types.ts +0 -2
- package/dist/continuation.d.ts +0 -20
- package/dist/continuation.d.ts.map +0 -1
- package/dist/continuation.js +0 -18
- package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +0 -1
- package/dist/docs/assets/concepts.md.rPzW2HZN.js +0 -1
- package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BRirbRAN.lean.js +0 -1
- package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +0 -1
- package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
- package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +0 -1
- package/dist/docs/guides/cloud-runtime.html +0 -35
- package/dist/docs/guides/cloud-runtime.md +0 -117
- package/dist/internal/convert-automation/index.d.ts +0 -3
- package/dist/internal/convert-automation/index.d.ts.map +0 -1
- package/dist/internal/convert-automation/index.js +0 -1
- package/dist/internal/grokbot/runner.d.ts +0 -64
- package/dist/internal/grokbot/runner.d.ts.map +0 -1
- package/dist/internal/grokbot/runner.js +0 -282
- package/dist/internal/managed-delivery.d.ts +0 -80
- package/dist/internal/managed-delivery.d.ts.map +0 -1
- package/dist/internal/managed-delivery.js +0 -86
- package/dist/internal/review-comments.d.ts +0 -370
- package/dist/internal/review-comments.d.ts.map +0 -1
- package/dist/internal/review-comments.js +0 -921
- package/dist/internal/shallow-clone.d.ts +0 -176
- package/dist/internal/shallow-clone.d.ts.map +0 -1
- package/dist/internal/shallow-clone.js +0 -419
- package/dist/playground/assets/index-B6C9S9nG.css +0 -1
- package/dist/playground/assets/index-ZqNoT8Ie.js +0 -69
- package/docs/guides/cloud-runtime.md +0 -122
- package/src/continuation.ts +0 -49
- package/src/internal/convert-automation/index.ts +0 -10
- package/src/internal/grokbot/runner.ts +0 -370
- package/src/internal/managed-delivery.ts +0 -125
- package/src/internal/review-comments.ts +0 -1363
- package/src/internal/shallow-clone.ts +0 -609
- /package/dist/docs/assets/{evals.md.CPzDAwoH.lean.js → evals.md.CbMoebP1.lean.js} +0 -0
- /package/dist/docs/assets/{guides_cloud-agents.md.DumwWXba.lean.js → guides_cloud-agents.md.DS8RIjwx.lean.js} +0 -0
- /package/dist/docs/assets/{guides_github.md.BtPr9GaP.lean.js → guides_github.md.DKYiT9do.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.Kiht7ell.lean.js → index.md.D75GWhPl.lean.js} +0 -0
- /package/dist/docs/assets/{reference_agent-config.md.BHeYMgme.lean.js → reference_agent-config.md.CHNpiyp4.lean.js} +0 -0
- /package/dist/docs/assets/{reference_cli.md.DfoeyvL0.lean.js → reference_cli.md.CJNc_xYK.lean.js} +0 -0
- /package/dist/docs/assets/{reference_playground.md.DnX5nL-B.lean.js → reference_playground.md.4myJPxrf.lean.js} +0 -0
- /package/dist/docs/assets/{reference_project-layout.md.CA6QP6Lw.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.B1up2r9W.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
- /package/dist/docs/assets/{skills_framework-map.md.DDa4MeEW.lean.js → skills_framework-map.md.haibFyoB.lean.js} +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitbucket REST client for the Bitbucket channel — the `createGitLabClient`
|
|
3
|
+
* analogue, with one `BitbucketApi` facade implemented twice: Cloud 2.0
|
|
4
|
+
* (`https://api.bitbucket.org/2.0/repositories/{workspace}/{slug}/…`) and
|
|
5
|
+
* Data Center 1.0 (`<host>/rest/api/1.0/projects/{KEY}/repos/{slug}/…`).
|
|
6
|
+
* The dialect comes from the delivery payload shape, never a round trip.
|
|
7
|
+
*
|
|
8
|
+
* Two transports:
|
|
9
|
+
*
|
|
10
|
+
* - **Direct**: `Authorization: Bearer` with a repository / workspace /
|
|
11
|
+
* HTTP access token from options or `BITBUCKET_TOKEN`. The base defaults
|
|
12
|
+
* to `BITBUCKET_API_BASE_URL`, else api.bitbucket.org (Cloud). Data Center
|
|
13
|
+
* deploys must configure one; `ctx.bitbucket` never derives the host from
|
|
14
|
+
* the webhook payload — only the replay CLI passes a user-supplied repo URL.
|
|
15
|
+
* - **Proxy** (`--cursor-scm-proxy` with `cursorAccount`): the backend
|
|
16
|
+
* forwarder at `/v0/bitbucket-proxy`. Calls carry the Cursor API key as
|
|
17
|
+
* the bearer plus `x-cursor-bitbucket-repos` naming the repo the call is
|
|
18
|
+
* scoped to; the backend swaps in the tenant's Bitbucket credential and
|
|
19
|
+
* picks the upstream (Cloud 2.0 or the DC host's 1.0) per tenant.
|
|
20
|
+
*/
|
|
21
|
+
import type { BitbucketDialect, BitbucketRepositoryRef } from "./types.js";
|
|
22
|
+
export declare const DEFAULT_BITBUCKET_CLOUD_API_BASE_URL = "https://api.bitbucket.org/2.0";
|
|
23
|
+
/** Header the SCM proxy reads to scope a Bitbucket call to one repo. */
|
|
24
|
+
export declare const CURSOR_BITBUCKET_REPOS_HEADER = "x-cursor-bitbucket-repos";
|
|
25
|
+
export type BitbucketApiMethod = "DELETE" | "GET" | "PATCH" | "POST" | "PUT";
|
|
26
|
+
/** Normalized Bitbucket REST failure — the `GitLabApiError` analogue. */
|
|
27
|
+
export declare class BitbucketApiError extends Error {
|
|
28
|
+
readonly body: unknown;
|
|
29
|
+
readonly method: string;
|
|
30
|
+
readonly path: string;
|
|
31
|
+
readonly status: number;
|
|
32
|
+
constructor(input: {
|
|
33
|
+
body: unknown;
|
|
34
|
+
method: string;
|
|
35
|
+
path: string;
|
|
36
|
+
status: number;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export type BitbucketTokenProvider = () => Promise<string> | string;
|
|
40
|
+
/** Backend SCM-proxy transport bound by the serve host in proxy mode. */
|
|
41
|
+
export interface BitbucketProxyTransport {
|
|
42
|
+
/** `/v0/bitbucket-proxy` base, see `resolveCursorBitbucketProxyUrl`. */
|
|
43
|
+
apiBaseUrl: string;
|
|
44
|
+
/** Cursor API key sent as the bearer; the proxy swaps in the Bitbucket token. */
|
|
45
|
+
getApiKey: () => Promise<string>;
|
|
46
|
+
/** Static headers added to every call (repo scope when declared). */
|
|
47
|
+
headers?: Readonly<Record<string, string>>;
|
|
48
|
+
}
|
|
49
|
+
export interface BitbucketClientOptions {
|
|
50
|
+
/**
|
|
51
|
+
* REST base, e.g. `https://bitbucket.example.com/rest/api/1.0`. Falls back
|
|
52
|
+
* to `BITBUCKET_API_BASE_URL`.
|
|
53
|
+
*/
|
|
54
|
+
apiBaseUrl?: string;
|
|
55
|
+
/** Access token or provider for direct calls. Falls back to `BITBUCKET_TOKEN`. */
|
|
56
|
+
token?: string | BitbucketTokenProvider;
|
|
57
|
+
/** Route through the Cursor SCM proxy instead of calling Bitbucket directly. */
|
|
58
|
+
proxy?: BitbucketProxyTransport;
|
|
59
|
+
/**
|
|
60
|
+
* Repo (`workspace/slug` or `PROJECT/slug`) every call is scoped to.
|
|
61
|
+
* Proxy mode sends it as `x-cursor-bitbucket-repos` when no static header
|
|
62
|
+
* names one.
|
|
63
|
+
*/
|
|
64
|
+
repo?: string;
|
|
65
|
+
/** Injectable fetch for tests. */
|
|
66
|
+
fetch?: typeof fetch;
|
|
67
|
+
}
|
|
68
|
+
export interface BitbucketRequestInput {
|
|
69
|
+
method: BitbucketApiMethod;
|
|
70
|
+
/** Path under the API base, e.g. `/repositories/acme/widgets/pullrequests/7`. */
|
|
71
|
+
path: string;
|
|
72
|
+
query?: Record<string, string | number | boolean | undefined>;
|
|
73
|
+
body?: unknown;
|
|
74
|
+
/**
|
|
75
|
+
* `Accept` header. `application/json` (default) parses the body; anything
|
|
76
|
+
* else (`text/plain` for diffs and raw files) returns the body text.
|
|
77
|
+
*/
|
|
78
|
+
accept?: string;
|
|
79
|
+
}
|
|
80
|
+
/** Minimal authenticated Bitbucket REST client. */
|
|
81
|
+
export interface BitbucketClient {
|
|
82
|
+
readonly apiBaseUrl: string;
|
|
83
|
+
/** Call a Bitbucket REST path. Throws {@link BitbucketApiError} on non-2xx. */
|
|
84
|
+
request<T = unknown>(input: BitbucketRequestInput): Promise<T>;
|
|
85
|
+
}
|
|
86
|
+
/** `BITBUCKET_TOKEN` when set. */
|
|
87
|
+
export declare function envBitbucketToken(env?: NodeJS.ProcessEnv): string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* REST base for direct calls: `BITBUCKET_API_BASE_URL`, else api.bitbucket.org
|
|
90
|
+
* 2.0 for Cloud, else `/rest/api/1.0` on `repoHtmlUrl`'s origin. Callers must
|
|
91
|
+
* only pass a `repoHtmlUrl` the operator supplied (the replay CLI), never one
|
|
92
|
+
* read from a delivery payload.
|
|
93
|
+
*/
|
|
94
|
+
export declare function bitbucketApiBaseUrl(input: {
|
|
95
|
+
dialect: BitbucketDialect;
|
|
96
|
+
repoHtmlUrl?: string;
|
|
97
|
+
env?: NodeJS.ProcessEnv;
|
|
98
|
+
}): string | undefined;
|
|
99
|
+
export declare function createBitbucketClient(options?: BitbucketClientOptions): BitbucketClient;
|
|
100
|
+
/** Build-status states shared by both dialects (DC `STOPPED` → `CANCELLED`). */
|
|
101
|
+
export type BitbucketBuildStatusState = "INPROGRESS" | "SUCCESSFUL" | "FAILED" | "STOPPED";
|
|
102
|
+
export interface BitbucketBuildStatusInput {
|
|
103
|
+
sha: string;
|
|
104
|
+
/** Stable key per status row (`cursor/security-review`). */
|
|
105
|
+
key: string;
|
|
106
|
+
state: BitbucketBuildStatusState;
|
|
107
|
+
/** Display name; defaults to {@link key}. */
|
|
108
|
+
name?: string;
|
|
109
|
+
/** "Details" link. Both dialects require one; falls back to the repo URL. */
|
|
110
|
+
url?: string;
|
|
111
|
+
description?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface BitbucketPullRequestCommentInput {
|
|
114
|
+
body: string;
|
|
115
|
+
/**
|
|
116
|
+
* Anchor the comment to a file line. Cloud posts `inline`; Data Center
|
|
117
|
+
* posts an `anchor` on the destination side. Omit for a top-level comment.
|
|
118
|
+
*/
|
|
119
|
+
inline?: {
|
|
120
|
+
path: string;
|
|
121
|
+
line?: number;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** Comment as returned by either dialect, minimally normalized. */
|
|
125
|
+
export interface BitbucketApiComment {
|
|
126
|
+
id: number;
|
|
127
|
+
body: string;
|
|
128
|
+
authorId?: string;
|
|
129
|
+
path?: string;
|
|
130
|
+
line?: number;
|
|
131
|
+
raw: unknown;
|
|
132
|
+
}
|
|
133
|
+
/** Pull request as returned by either dialect, minimally normalized. */
|
|
134
|
+
export interface BitbucketApiPullRequest {
|
|
135
|
+
id: number;
|
|
136
|
+
title?: string;
|
|
137
|
+
description?: string;
|
|
138
|
+
state?: string;
|
|
139
|
+
sourceBranch?: string;
|
|
140
|
+
targetBranch?: string;
|
|
141
|
+
headSha?: string;
|
|
142
|
+
baseSha?: string;
|
|
143
|
+
htmlUrl?: string;
|
|
144
|
+
raw: unknown;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The handful of operations review products need, implemented once per
|
|
148
|
+
* dialect. `ctx.bitbucket.api` is the repo-bound instance.
|
|
149
|
+
*/
|
|
150
|
+
export interface BitbucketApi {
|
|
151
|
+
readonly dialect: BitbucketDialect;
|
|
152
|
+
readonly repository: BitbucketRepositoryRef;
|
|
153
|
+
getPullRequest(id: number): Promise<BitbucketApiPullRequest>;
|
|
154
|
+
/** Unified diff of the pull request (`text/plain`). */
|
|
155
|
+
getPullRequestDiff(id: number): Promise<string>;
|
|
156
|
+
listPullRequestComments(id: number): Promise<BitbucketApiComment[]>;
|
|
157
|
+
postPullRequestComment(id: number, input: BitbucketPullRequestCommentInput): Promise<BitbucketApiComment>;
|
|
158
|
+
setBuildStatus(input: BitbucketBuildStatusInput): Promise<unknown>;
|
|
159
|
+
/** Raw file contents at `ref` (branch, tag, or SHA). */
|
|
160
|
+
getFileAtRef(path: string, ref: string): Promise<string>;
|
|
161
|
+
}
|
|
162
|
+
/** `/repositories/{workspace}/{slug}` — Bitbucket Cloud 2.0. */
|
|
163
|
+
export declare function bitbucketCloudRepoPath(repository: {
|
|
164
|
+
owner: string;
|
|
165
|
+
slug: string;
|
|
166
|
+
}): string;
|
|
167
|
+
/** `/projects/{KEY}/repos/{slug}` — Bitbucket Data Center 1.0. */
|
|
168
|
+
export declare function bitbucketDataCenterRepoPath(repository: {
|
|
169
|
+
owner: string;
|
|
170
|
+
slug: string;
|
|
171
|
+
}): string;
|
|
172
|
+
export declare function cloudBitbucketApi(client: BitbucketClient, repository: BitbucketRepositoryRef): BitbucketApi;
|
|
173
|
+
export declare function dcBitbucketApi(client: BitbucketClient, repository: BitbucketRepositoryRef): BitbucketApi;
|
|
174
|
+
/** Pick the dialect implementation for `repository.dialect`. */
|
|
175
|
+
export declare function createBitbucketApi(client: BitbucketClient, repository: BitbucketRepositoryRef): BitbucketApi;
|
|
176
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/channels/bitbucket/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bitbucket REST client for the Bitbucket channel — the `createGitLabClient`
|
|
3
|
+
* analogue, with one `BitbucketApi` facade implemented twice: Cloud 2.0
|
|
4
|
+
* (`https://api.bitbucket.org/2.0/repositories/{workspace}/{slug}/…`) and
|
|
5
|
+
* Data Center 1.0 (`<host>/rest/api/1.0/projects/{KEY}/repos/{slug}/…`).
|
|
6
|
+
* The dialect comes from the delivery payload shape, never a round trip.
|
|
7
|
+
*
|
|
8
|
+
* Two transports:
|
|
9
|
+
*
|
|
10
|
+
* - **Direct**: `Authorization: Bearer` with a repository / workspace /
|
|
11
|
+
* HTTP access token from options or `BITBUCKET_TOKEN`. The base defaults
|
|
12
|
+
* to `BITBUCKET_API_BASE_URL`, else api.bitbucket.org (Cloud). Data Center
|
|
13
|
+
* deploys must configure one; `ctx.bitbucket` never derives the host from
|
|
14
|
+
* the webhook payload — only the replay CLI passes a user-supplied repo URL.
|
|
15
|
+
* - **Proxy** (`--cursor-scm-proxy` with `cursorAccount`): the backend
|
|
16
|
+
* forwarder at `/v0/bitbucket-proxy`. Calls carry the Cursor API key as
|
|
17
|
+
* the bearer plus `x-cursor-bitbucket-repos` naming the repo the call is
|
|
18
|
+
* scoped to; the backend swaps in the tenant's Bitbucket credential and
|
|
19
|
+
* picks the upstream (Cloud 2.0 or the DC host's 1.0) per tenant.
|
|
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
|
+
export const DEFAULT_BITBUCKET_CLOUD_API_BASE_URL = "https://api.bitbucket.org/2.0";
|
|
31
|
+
/** Header the SCM proxy reads to scope a Bitbucket call to one repo. */
|
|
32
|
+
export const CURSOR_BITBUCKET_REPOS_HEADER = "x-cursor-bitbucket-repos";
|
|
33
|
+
/** Normalized Bitbucket REST failure — the `GitLabApiError` analogue. */
|
|
34
|
+
export class BitbucketApiError extends Error {
|
|
35
|
+
constructor(input) {
|
|
36
|
+
super(`Bitbucket ${input.method} ${input.path} failed with HTTP ${input.status}.`);
|
|
37
|
+
this.name = "BitbucketApiError";
|
|
38
|
+
this.body = input.body;
|
|
39
|
+
this.method = input.method;
|
|
40
|
+
this.path = input.path;
|
|
41
|
+
this.status = input.status;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function envValue(value) {
|
|
45
|
+
const trimmed = value === null || value === void 0 ? void 0 : value.trim();
|
|
46
|
+
return trimmed === undefined || trimmed === "" ? undefined : trimmed;
|
|
47
|
+
}
|
|
48
|
+
/** `BITBUCKET_TOKEN` when set. */
|
|
49
|
+
export function envBitbucketToken(env = process.env) {
|
|
50
|
+
return envValue(env.BITBUCKET_TOKEN);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* REST base for direct calls: `BITBUCKET_API_BASE_URL`, else api.bitbucket.org
|
|
54
|
+
* 2.0 for Cloud, else `/rest/api/1.0` on `repoHtmlUrl`'s origin. Callers must
|
|
55
|
+
* only pass a `repoHtmlUrl` the operator supplied (the replay CLI), never one
|
|
56
|
+
* read from a delivery payload.
|
|
57
|
+
*/
|
|
58
|
+
export function bitbucketApiBaseUrl(input) {
|
|
59
|
+
var _a;
|
|
60
|
+
const fromEnv = envValue(((_a = input.env) !== null && _a !== void 0 ? _a : process.env).BITBUCKET_API_BASE_URL);
|
|
61
|
+
if (fromEnv !== undefined) {
|
|
62
|
+
return fromEnv.replace(/\/+$/, "");
|
|
63
|
+
}
|
|
64
|
+
if (input.dialect === "cloud") {
|
|
65
|
+
return DEFAULT_BITBUCKET_CLOUD_API_BASE_URL;
|
|
66
|
+
}
|
|
67
|
+
if (input.repoHtmlUrl !== undefined) {
|
|
68
|
+
try {
|
|
69
|
+
return `${new URL(input.repoHtmlUrl).origin}/rest/api/1.0`;
|
|
70
|
+
}
|
|
71
|
+
catch (_b) {
|
|
72
|
+
// no usable host
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
function buildQuery(query) {
|
|
78
|
+
if (query === undefined) {
|
|
79
|
+
return "";
|
|
80
|
+
}
|
|
81
|
+
const params = new URLSearchParams();
|
|
82
|
+
for (const [key, value] of Object.entries(query)) {
|
|
83
|
+
if (value !== undefined) {
|
|
84
|
+
params.set(key, String(value));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const encoded = params.toString();
|
|
88
|
+
return encoded === "" ? "" : `?${encoded}`;
|
|
89
|
+
}
|
|
90
|
+
export function createBitbucketClient(options = {}) {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
var _c, _d, _e;
|
|
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);
|
|
95
|
+
if (apiBaseUrl === undefined || apiBaseUrl.trim() === "") {
|
|
96
|
+
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
|
+
}
|
|
98
|
+
const base = apiBaseUrl.replace(/\/+$/, "");
|
|
99
|
+
const repo = (_b = options.repo) === null || _b === void 0 ? void 0 : _b.trim().replace(/^\/+|\/+$/g, "");
|
|
100
|
+
const authHeaders = () => __awaiter(this, void 0, void 0, function* () {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
if (options.proxy !== undefined) {
|
|
103
|
+
const headers = Object.assign({ authorization: `Bearer ${yield options.proxy.getApiKey()}` }, options.proxy.headers);
|
|
104
|
+
if (((_a = headers[CURSOR_BITBUCKET_REPOS_HEADER]) !== null && _a !== void 0 ? _a : "").trim() === "" &&
|
|
105
|
+
repo !== undefined &&
|
|
106
|
+
repo !== "") {
|
|
107
|
+
headers[CURSOR_BITBUCKET_REPOS_HEADER] = repo.toLowerCase();
|
|
108
|
+
}
|
|
109
|
+
return headers;
|
|
110
|
+
}
|
|
111
|
+
const token = typeof options.token === "function"
|
|
112
|
+
? yield options.token()
|
|
113
|
+
: ((_b = options.token) !== null && _b !== void 0 ? _b : envBitbucketToken());
|
|
114
|
+
if (token === undefined || token === "") {
|
|
115
|
+
throw new Error("bitbucketChannel: no Bitbucket credential available (pass token, set BITBUCKET_TOKEN, or serve with --cursor-scm-proxy and cursorAccount).");
|
|
116
|
+
}
|
|
117
|
+
return { authorization: `Bearer ${token}` };
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
apiBaseUrl: base,
|
|
121
|
+
request(input) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
var _a;
|
|
124
|
+
const path = input.path.startsWith("/") ? input.path : `/${input.path}`;
|
|
125
|
+
const accept = (_a = input.accept) !== null && _a !== void 0 ? _a : "application/json";
|
|
126
|
+
const response = yield fetchImpl(`${base}${path}${buildQuery(input.query)}`, {
|
|
127
|
+
method: input.method,
|
|
128
|
+
headers: Object.assign(Object.assign(Object.assign({}, (yield authHeaders())), { accept }), (input.body === undefined
|
|
129
|
+
? {}
|
|
130
|
+
: { "content-type": "application/json" })),
|
|
131
|
+
body: input.body === undefined ? undefined : JSON.stringify(input.body),
|
|
132
|
+
});
|
|
133
|
+
const text = yield response.text();
|
|
134
|
+
let parsed = text;
|
|
135
|
+
if (accept === "application/json") {
|
|
136
|
+
try {
|
|
137
|
+
parsed = text === "" ? undefined : JSON.parse(text);
|
|
138
|
+
}
|
|
139
|
+
catch (_b) {
|
|
140
|
+
parsed = text;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (!response.ok) {
|
|
144
|
+
throw new BitbucketApiError({
|
|
145
|
+
body: parsed,
|
|
146
|
+
method: input.method,
|
|
147
|
+
path,
|
|
148
|
+
status: response.status,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return parsed;
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function asRecord(value) {
|
|
157
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
158
|
+
? value
|
|
159
|
+
: undefined;
|
|
160
|
+
}
|
|
161
|
+
function str(value) {
|
|
162
|
+
return typeof value === "string" && value !== "" ? value : undefined;
|
|
163
|
+
}
|
|
164
|
+
function num(value) {
|
|
165
|
+
return typeof value === "number" && Number.isFinite(value)
|
|
166
|
+
? value
|
|
167
|
+
: undefined;
|
|
168
|
+
}
|
|
169
|
+
function encodePath(path) {
|
|
170
|
+
return path
|
|
171
|
+
.split("/")
|
|
172
|
+
.filter((segment) => segment !== "")
|
|
173
|
+
.map((segment) => encodeURIComponent(segment))
|
|
174
|
+
.join("/");
|
|
175
|
+
}
|
|
176
|
+
function fallbackUrl(repository) {
|
|
177
|
+
var _a;
|
|
178
|
+
return ((_a = repository.htmlUrl) !== null && _a !== void 0 ? _a : (repository.dialect === "cloud"
|
|
179
|
+
? `https://bitbucket.org/${repository.fullName}`
|
|
180
|
+
: "https://cursor.com"));
|
|
181
|
+
}
|
|
182
|
+
/** `/repositories/{workspace}/{slug}` — Bitbucket Cloud 2.0. */
|
|
183
|
+
export function bitbucketCloudRepoPath(repository) {
|
|
184
|
+
return `/repositories/${encodeURIComponent(repository.owner)}/${encodeURIComponent(repository.slug)}`;
|
|
185
|
+
}
|
|
186
|
+
/** `/projects/{KEY}/repos/{slug}` — Bitbucket Data Center 1.0. */
|
|
187
|
+
export function bitbucketDataCenterRepoPath(repository) {
|
|
188
|
+
return `/projects/${encodeURIComponent(repository.owner)}/repos/${encodeURIComponent(repository.slug)}`;
|
|
189
|
+
}
|
|
190
|
+
export function cloudBitbucketApi(client, repository) {
|
|
191
|
+
const repo = bitbucketCloudRepoPath(repository);
|
|
192
|
+
const mapComment = (raw) => {
|
|
193
|
+
var _a, _b;
|
|
194
|
+
var _c, _d, _e, _f;
|
|
195
|
+
const record = (_c = asRecord(raw)) !== null && _c !== void 0 ? _c : {};
|
|
196
|
+
const inline = asRecord(record.inline);
|
|
197
|
+
return {
|
|
198
|
+
id: (_d = num(record.id)) !== null && _d !== void 0 ? _d : 0,
|
|
199
|
+
body: (_e = str((_a = asRecord(record.content)) === null || _a === void 0 ? void 0 : _a.raw)) !== null && _e !== void 0 ? _e : "",
|
|
200
|
+
authorId: str((_b = asRecord(record.user)) === null || _b === void 0 ? void 0 : _b.uuid),
|
|
201
|
+
path: str(inline === null || inline === void 0 ? void 0 : inline.path),
|
|
202
|
+
line: (_f = num(inline === null || inline === void 0 ? void 0 : inline.to)) !== null && _f !== void 0 ? _f : num(inline === null || inline === void 0 ? void 0 : inline.from),
|
|
203
|
+
raw,
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
return {
|
|
207
|
+
dialect: "cloud",
|
|
208
|
+
repository,
|
|
209
|
+
getPullRequest(id) {
|
|
210
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
+
var _a, _b, _c, _d, _e, _f;
|
|
212
|
+
var _g;
|
|
213
|
+
const raw = yield client.request({
|
|
214
|
+
method: "GET",
|
|
215
|
+
path: `${repo}/pullrequests/${id}`,
|
|
216
|
+
});
|
|
217
|
+
const source = asRecord(raw.source);
|
|
218
|
+
const destination = asRecord(raw.destination);
|
|
219
|
+
return {
|
|
220
|
+
id: (_g = num(raw.id)) !== null && _g !== void 0 ? _g : id,
|
|
221
|
+
title: str(raw.title),
|
|
222
|
+
description: str(raw.description),
|
|
223
|
+
state: str(raw.state),
|
|
224
|
+
sourceBranch: str((_a = asRecord(source === null || source === void 0 ? void 0 : source.branch)) === null || _a === void 0 ? void 0 : _a.name),
|
|
225
|
+
targetBranch: str((_b = asRecord(destination === null || destination === void 0 ? void 0 : destination.branch)) === null || _b === void 0 ? void 0 : _b.name),
|
|
226
|
+
headSha: str((_c = asRecord(source === null || source === void 0 ? void 0 : source.commit)) === null || _c === void 0 ? void 0 : _c.hash),
|
|
227
|
+
baseSha: str((_d = asRecord(destination === null || destination === void 0 ? void 0 : destination.commit)) === null || _d === void 0 ? void 0 : _d.hash),
|
|
228
|
+
htmlUrl: str((_f = asRecord((_e = asRecord(raw.links)) === null || _e === void 0 ? void 0 : _e.html)) === null || _f === void 0 ? void 0 : _f.href),
|
|
229
|
+
raw,
|
|
230
|
+
};
|
|
231
|
+
});
|
|
232
|
+
},
|
|
233
|
+
getPullRequestDiff: (id) => client.request({
|
|
234
|
+
method: "GET",
|
|
235
|
+
path: `${repo}/pullrequests/${id}/diff`,
|
|
236
|
+
accept: "text/plain",
|
|
237
|
+
}),
|
|
238
|
+
listPullRequestComments(id) {
|
|
239
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
240
|
+
const comments = [];
|
|
241
|
+
let page = `${repo}/pullrequests/${id}/comments`;
|
|
242
|
+
let query = { pagelen: 100 };
|
|
243
|
+
while (page !== undefined) {
|
|
244
|
+
const raw = yield client.request({
|
|
245
|
+
method: "GET",
|
|
246
|
+
path: page,
|
|
247
|
+
query,
|
|
248
|
+
});
|
|
249
|
+
for (const value of Array.isArray(raw.values) ? raw.values : []) {
|
|
250
|
+
comments.push(mapComment(value));
|
|
251
|
+
}
|
|
252
|
+
const next = str(raw.next);
|
|
253
|
+
if (next === undefined) {
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
// `next` is absolute; re-root it under the client base so the proxy
|
|
257
|
+
// (which only forwards paths) keeps working.
|
|
258
|
+
const nextUrl = new URL(next);
|
|
259
|
+
const baseUrl = new URL(`${client.apiBaseUrl}/`);
|
|
260
|
+
page = nextUrl.pathname.startsWith(baseUrl.pathname)
|
|
261
|
+
? nextUrl.pathname.slice(baseUrl.pathname.length - 1)
|
|
262
|
+
: nextUrl.pathname;
|
|
263
|
+
query = Object.fromEntries(nextUrl.searchParams.entries());
|
|
264
|
+
}
|
|
265
|
+
return comments;
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
postPullRequestComment(id, input) {
|
|
269
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
270
|
+
const raw = yield client.request({
|
|
271
|
+
method: "POST",
|
|
272
|
+
path: `${repo}/pullrequests/${id}/comments`,
|
|
273
|
+
body: Object.assign({ content: { raw: input.body } }, (input.inline === undefined
|
|
274
|
+
? {}
|
|
275
|
+
: {
|
|
276
|
+
inline: Object.assign({ path: input.inline.path }, (input.inline.line === undefined
|
|
277
|
+
? {}
|
|
278
|
+
: { to: input.inline.line })),
|
|
279
|
+
})),
|
|
280
|
+
});
|
|
281
|
+
return mapComment(raw);
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
setBuildStatus: (input) => { var _a, _b; return client.request({
|
|
285
|
+
method: "POST",
|
|
286
|
+
path: `${repo}/commit/${encodeURIComponent(input.sha)}/statuses/build`,
|
|
287
|
+
body: Object.assign({ key: input.key, state: input.state, name: (_a = input.name) !== null && _a !== void 0 ? _a : input.key, url: (_b = input.url) !== null && _b !== void 0 ? _b : fallbackUrl(repository) }, (input.description === undefined
|
|
288
|
+
? {}
|
|
289
|
+
: { description: input.description })),
|
|
290
|
+
}); },
|
|
291
|
+
getFileAtRef: (path, ref) => client.request({
|
|
292
|
+
method: "GET",
|
|
293
|
+
path: `${repo}/src/${encodeURIComponent(ref)}/${encodePath(path)}`,
|
|
294
|
+
accept: "text/plain",
|
|
295
|
+
}),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
export function dcBitbucketApi(client, repository) {
|
|
299
|
+
const repo = bitbucketDataCenterRepoPath(repository);
|
|
300
|
+
const mapComment = (raw) => {
|
|
301
|
+
var _a;
|
|
302
|
+
var _b, _c, _d;
|
|
303
|
+
const record = (_b = asRecord(raw)) !== null && _b !== void 0 ? _b : {};
|
|
304
|
+
const anchor = asRecord(record.anchor);
|
|
305
|
+
const authorId = num((_a = asRecord(record.author)) === null || _a === void 0 ? void 0 : _a.id);
|
|
306
|
+
return {
|
|
307
|
+
id: (_c = num(record.id)) !== null && _c !== void 0 ? _c : 0,
|
|
308
|
+
body: (_d = str(record.text)) !== null && _d !== void 0 ? _d : "",
|
|
309
|
+
authorId: authorId === undefined ? undefined : String(authorId),
|
|
310
|
+
path: str(anchor === null || anchor === void 0 ? void 0 : anchor.path),
|
|
311
|
+
line: num(anchor === null || anchor === void 0 ? void 0 : anchor.line),
|
|
312
|
+
raw,
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
return {
|
|
316
|
+
dialect: "data-center",
|
|
317
|
+
repository,
|
|
318
|
+
getPullRequest(id) {
|
|
319
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
320
|
+
var _a, _b;
|
|
321
|
+
var _c;
|
|
322
|
+
const raw = yield client.request({
|
|
323
|
+
method: "GET",
|
|
324
|
+
path: `${repo}/pull-requests/${id}`,
|
|
325
|
+
});
|
|
326
|
+
const fromRef = asRecord(raw.fromRef);
|
|
327
|
+
const toRef = asRecord(raw.toRef);
|
|
328
|
+
const self = (_a = asRecord(raw.links)) === null || _a === void 0 ? void 0 : _a.self;
|
|
329
|
+
return {
|
|
330
|
+
id: (_c = num(raw.id)) !== null && _c !== void 0 ? _c : id,
|
|
331
|
+
title: str(raw.title),
|
|
332
|
+
description: str(raw.description),
|
|
333
|
+
state: str(raw.state),
|
|
334
|
+
sourceBranch: str(fromRef === null || fromRef === void 0 ? void 0 : fromRef.displayId),
|
|
335
|
+
targetBranch: str(toRef === null || toRef === void 0 ? void 0 : toRef.displayId),
|
|
336
|
+
headSha: str(fromRef === null || fromRef === void 0 ? void 0 : fromRef.latestCommit),
|
|
337
|
+
baseSha: str(toRef === null || toRef === void 0 ? void 0 : toRef.latestCommit),
|
|
338
|
+
htmlUrl: Array.isArray(self) ? str((_b = asRecord(self[0])) === null || _b === void 0 ? void 0 : _b.href) : undefined,
|
|
339
|
+
raw,
|
|
340
|
+
};
|
|
341
|
+
});
|
|
342
|
+
},
|
|
343
|
+
// `/pull-requests/{id}.diff` streams the raw unified diff; the sibling
|
|
344
|
+
// `/pull-requests/{id}/diff` route returns a JSON `RestDiff` instead.
|
|
345
|
+
getPullRequestDiff: (id) => client.request({
|
|
346
|
+
method: "GET",
|
|
347
|
+
path: `${repo}/pull-requests/${id}.diff`,
|
|
348
|
+
accept: "text/plain",
|
|
349
|
+
}),
|
|
350
|
+
listPullRequestComments(id) {
|
|
351
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
352
|
+
const comments = [];
|
|
353
|
+
let start = 0;
|
|
354
|
+
for (;;) {
|
|
355
|
+
const raw = yield client.request({
|
|
356
|
+
method: "GET",
|
|
357
|
+
path: `${repo}/pull-requests/${id}/activities`,
|
|
358
|
+
query: { limit: 100, start },
|
|
359
|
+
});
|
|
360
|
+
for (const value of Array.isArray(raw.values) ? raw.values : []) {
|
|
361
|
+
const activity = asRecord(value);
|
|
362
|
+
if ((activity === null || activity === void 0 ? void 0 : activity.action) === "COMMENTED" &&
|
|
363
|
+
activity.comment !== undefined) {
|
|
364
|
+
comments.push(mapComment(activity.comment));
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
const nextStart = num(raw.nextPageStart);
|
|
368
|
+
if (raw.isLastPage !== false || nextStart === undefined) {
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
start = nextStart;
|
|
372
|
+
}
|
|
373
|
+
return comments;
|
|
374
|
+
});
|
|
375
|
+
},
|
|
376
|
+
postPullRequestComment(id, input) {
|
|
377
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
378
|
+
const raw = yield client.request({
|
|
379
|
+
method: "POST",
|
|
380
|
+
path: `${repo}/pull-requests/${id}/comments`,
|
|
381
|
+
body: Object.assign({ text: input.body }, (input.inline === undefined
|
|
382
|
+
? {}
|
|
383
|
+
: {
|
|
384
|
+
anchor: Object.assign({ path: input.inline.path, diffType: "EFFECTIVE" }, (input.inline.line === undefined
|
|
385
|
+
? { fileType: "TO" }
|
|
386
|
+
: {
|
|
387
|
+
line: input.inline.line,
|
|
388
|
+
lineType: "CONTEXT",
|
|
389
|
+
fileType: "TO",
|
|
390
|
+
})),
|
|
391
|
+
})),
|
|
392
|
+
});
|
|
393
|
+
return mapComment(raw);
|
|
394
|
+
});
|
|
395
|
+
},
|
|
396
|
+
// Repository-scoped build status (DC 7.14+), which lives under
|
|
397
|
+
// `rest/api/1.0` so the proxy's single upstream base reaches it; the
|
|
398
|
+
// older `rest/build-status/1.0/commits/{sha}` sits outside that base.
|
|
399
|
+
setBuildStatus: (input) => { var _a, _b; return client.request({
|
|
400
|
+
method: "POST",
|
|
401
|
+
path: `${repo}/commits/${encodeURIComponent(input.sha)}/builds`,
|
|
402
|
+
body: Object.assign({ key: input.key, state: input.state === "STOPPED" ? "CANCELLED" : input.state, name: (_a = input.name) !== null && _a !== void 0 ? _a : input.key, url: (_b = input.url) !== null && _b !== void 0 ? _b : fallbackUrl(repository) }, (input.description === undefined
|
|
403
|
+
? {}
|
|
404
|
+
: { description: input.description })),
|
|
405
|
+
}); },
|
|
406
|
+
getFileAtRef: (path, ref) => client.request({
|
|
407
|
+
method: "GET",
|
|
408
|
+
path: `${repo}/raw/${encodePath(path)}`,
|
|
409
|
+
query: { at: ref },
|
|
410
|
+
accept: "text/plain",
|
|
411
|
+
}),
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
/** Pick the dialect implementation for `repository.dialect`. */
|
|
415
|
+
export function createBitbucketApi(client, repository) {
|
|
416
|
+
return repository.dialect === "cloud"
|
|
417
|
+
? cloudBitbucketApi(client, repository)
|
|
418
|
+
: dcBitbucketApi(client, repository);
|
|
419
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository / pull-request binding parsed from a Bitbucket webhook payload,
|
|
3
|
+
* normalized across the two dialects.
|
|
4
|
+
*
|
|
5
|
+
* Cloud: top-level `repository` (`full_name`, `uuid`, `links.html.href`),
|
|
6
|
+
* `pullrequest` (`source.branch.name`, `source.commit.hash`, `links.html`),
|
|
7
|
+
* `comment.content.raw`, `push.changes[].new.target.hash`.
|
|
8
|
+
*
|
|
9
|
+
* Data Center: `pullRequest` (`fromRef.displayId`, `fromRef.latestCommit`,
|
|
10
|
+
* repo under `toRef.repository` as `project.key` + `slug`), `comment.text`,
|
|
11
|
+
* top-level `changes[].toHash` on `repo:refs_changed`, and `previousFromHash`
|
|
12
|
+
* on `pr:from_ref_updated`.
|
|
13
|
+
*/
|
|
14
|
+
import { type BitbucketApi, type BitbucketBuildStatusInput, type BitbucketProxyTransport, type BitbucketRequestInput, type BitbucketTokenProvider } from "./api.js";
|
|
15
|
+
import { type BitbucketCheck, type BitbucketCheckCreateInput } from "./checks.js";
|
|
16
|
+
import type { BitbucketDialect, BitbucketPullRequestComment, BitbucketPullRequestEvent, BitbucketPush, BitbucketRepositoryRef, BitbucketUser } from "./types.js";
|
|
17
|
+
/** Bitbucket operations exposed to hooks (`ctx.bitbucket`), bound to the repo. */
|
|
18
|
+
export interface BitbucketHandle {
|
|
19
|
+
repository: BitbucketRepositoryRef;
|
|
20
|
+
/** Dialect-specific REST facade (PR, diff, comments, build status, files). */
|
|
21
|
+
readonly api: BitbucketApi;
|
|
22
|
+
/** Call a raw REST path under the dialect's base. Throws `BitbucketApiError`. */
|
|
23
|
+
request<T = unknown>(input: BitbucketRequestInput): Promise<T>;
|
|
24
|
+
/** Post a build status on the bound repo. */
|
|
25
|
+
setBuildStatus(input: BitbucketBuildStatusInput): Promise<unknown>;
|
|
26
|
+
/** Open a build status through the shared check lifecycle. */
|
|
27
|
+
createCheck(input: Omit<BitbucketCheckCreateInput, "bitbucket">): Promise<BitbucketCheck>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build `ctx.bitbucket` for one delivery. Lazy: no credential is resolved
|
|
31
|
+
* until the first call, so channels without outbound Bitbucket access still
|
|
32
|
+
* dispatch. Proxy mode (`cursorAccount` + `--cursor-scm-proxy`) wins when
|
|
33
|
+
* the host bound a transport; otherwise direct access with `token` /
|
|
34
|
+
* `BITBUCKET_TOKEN` against the dialect's API base.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildBitbucketBinding(input: {
|
|
37
|
+
repository: BitbucketRepositoryRef;
|
|
38
|
+
proxy?: BitbucketProxyTransport;
|
|
39
|
+
token?: string | BitbucketTokenProvider;
|
|
40
|
+
apiBaseUrl?: string;
|
|
41
|
+
fetch?: typeof fetch;
|
|
42
|
+
}): BitbucketHandle;
|
|
43
|
+
export declare function asRecord(value: unknown): Record<string, unknown> | undefined;
|
|
44
|
+
export declare function asNonEmptyString(value: unknown): string | undefined;
|
|
45
|
+
export declare function asPositiveInt(value: unknown): number | undefined;
|
|
46
|
+
/** The pull-request record under either dialect's key. */
|
|
47
|
+
export declare function bitbucketPullRequestRecord(payload: Record<string, unknown>): Record<string, unknown> | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Cloud bodies carry `pullrequest` / `repository.full_name`; Data Center
|
|
50
|
+
* bodies carry `pullRequest` / `repository.project.key`. Unknown shapes
|
|
51
|
+
* default to Cloud, the dialect the hosted ingress normalizes toward.
|
|
52
|
+
*/
|
|
53
|
+
export declare function bitbucketDialectOf(payload: Record<string, unknown>): BitbucketDialect;
|
|
54
|
+
/**
|
|
55
|
+
* Repository the delivery is about. Top-level `repository` (Cloud always;
|
|
56
|
+
* DC on `repo:*`), else the DC pull request's `toRef.repository`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function bitbucketRepositoryFromPayload(payload: Record<string, unknown>): BitbucketRepositoryRef | undefined;
|
|
59
|
+
/** Cloud `{uuid, display_name, nickname}` or DC `{id, name, displayName}`. */
|
|
60
|
+
export declare function bitbucketUser(value: unknown): BitbucketUser | undefined;
|
|
61
|
+
export declare function bitbucketPullRequestUrl(repository: BitbucketRepositoryRef, id: number, explicit?: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Normalize the pull request from either dialect. `action` is the suffix of
|
|
64
|
+
* the Cloud-normalized event key (`pullrequest:created` → `created`).
|
|
65
|
+
*/
|
|
66
|
+
export declare function bitbucketPullRequestFromPayload(repository: BitbucketRepositoryRef, payload: Record<string, unknown>, action: string): BitbucketPullRequestEvent | undefined;
|
|
67
|
+
/** Cloud `comment.content.raw` / DC `comment.text`. */
|
|
68
|
+
export declare function bitbucketCommentFromPayload(payload: Record<string, unknown>): BitbucketPullRequestComment | undefined;
|
|
69
|
+
/** Cloud `push.changes[]` (`new`/`old` targets) or DC `changes[]` (`toHash`/`fromHash`). */
|
|
70
|
+
export declare function bitbucketPushFromPayload(payload: Record<string, unknown>): BitbucketPush | undefined;
|
|
71
|
+
//# sourceMappingURL=binding.d.ts.map
|