@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
|
@@ -27,6 +27,10 @@ export const CONTINUATION_SELECTORS = [
|
|
|
27
27
|
"origin.pr/v1",
|
|
28
28
|
"origin.pr/v2",
|
|
29
29
|
"origin.none/v2",
|
|
30
|
+
"gitlab.mr/v2",
|
|
31
|
+
"gitlab.none/v2",
|
|
32
|
+
"bitbucket.pr/v2",
|
|
33
|
+
"bitbucket.none/v2",
|
|
30
34
|
"deployments.none/v1",
|
|
31
35
|
"deployments.none/v2",
|
|
32
36
|
"deployments.deployment/v2",
|
|
@@ -62,6 +66,9 @@ export const BUILTINS = [
|
|
|
62
66
|
{
|
|
63
67
|
type: "origin-pr",
|
|
64
68
|
kind: "origin",
|
|
69
|
+
// Public webhook deliveries carry `pullRequest.number` + repository
|
|
70
|
+
// (`owner.slug` / `name`); keep in lockstep with the control plane's
|
|
71
|
+
// `conversation/origin.ts`.
|
|
65
72
|
events: [
|
|
66
73
|
"pull_request.created",
|
|
67
74
|
"pull_request.published",
|
|
@@ -71,9 +78,34 @@ export const BUILTINS = [
|
|
|
71
78
|
"pull_request.merged",
|
|
72
79
|
"pull_request.comment.created",
|
|
73
80
|
"pull_request.review.submitted",
|
|
81
|
+
"pull_request.metadata.updated",
|
|
74
82
|
],
|
|
75
83
|
format: "origin-pr:{fullName}#{number}",
|
|
76
84
|
},
|
|
85
|
+
{
|
|
86
|
+
type: "gitlab-mr",
|
|
87
|
+
kind: "gitlab",
|
|
88
|
+
// GitLab `object_kind`s that carry a merge request: `note` only when
|
|
89
|
+
// `noteable_type` is MergeRequest, `pipeline` only with `merge_request`.
|
|
90
|
+
events: ["merge_request", "note", "pipeline"],
|
|
91
|
+
format: "gitlab-mr:{fullName}!{number}",
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: "bitbucket-pr",
|
|
95
|
+
kind: "bitbucket",
|
|
96
|
+
// Cloud vocabulary; Data Center keys are normalized before the stamp.
|
|
97
|
+
events: [
|
|
98
|
+
"pullrequest:created",
|
|
99
|
+
"pullrequest:updated",
|
|
100
|
+
"pullrequest:approved",
|
|
101
|
+
"pullrequest:unapproved",
|
|
102
|
+
"pullrequest:changes_request_created",
|
|
103
|
+
"pullrequest:fulfilled",
|
|
104
|
+
"pullrequest:rejected",
|
|
105
|
+
"pullrequest:comment_created",
|
|
106
|
+
],
|
|
107
|
+
format: "bitbucket-pr:{fullName}#{number}",
|
|
108
|
+
},
|
|
77
109
|
{
|
|
78
110
|
type: "deployment",
|
|
79
111
|
kind: "deployments",
|
|
@@ -101,6 +133,10 @@ const SELECTOR_FIELDS = {
|
|
|
101
133
|
"origin.pr/v1": { version: 1, type: "origin-pr", kind: "origin" },
|
|
102
134
|
"origin.pr/v2": { version: 2, type: "origin-pr", kind: "origin" },
|
|
103
135
|
"origin.none/v2": { version: 2, type: "none", kind: "origin" },
|
|
136
|
+
"gitlab.mr/v2": { version: 2, type: "gitlab-mr", kind: "gitlab" },
|
|
137
|
+
"gitlab.none/v2": { version: 2, type: "none", kind: "gitlab" },
|
|
138
|
+
"bitbucket.pr/v2": { version: 2, type: "bitbucket-pr", kind: "bitbucket" },
|
|
139
|
+
"bitbucket.none/v2": { version: 2, type: "none", kind: "bitbucket" },
|
|
104
140
|
"deployments.none/v1": { version: 1, type: "none", kind: "deployments" },
|
|
105
141
|
"deployments.none/v2": { version: 2, type: "none", kind: "deployments" },
|
|
106
142
|
"deployments.deployment/v2": {
|
|
@@ -111,7 +147,7 @@ const SELECTOR_FIELDS = {
|
|
|
111
147
|
"none/v1": { version: 1, type: "none", kind: "http" },
|
|
112
148
|
"none/v2": { version: 2, type: "none", kind: "http" },
|
|
113
149
|
};
|
|
114
|
-
|
|
150
|
+
function isContinuationSelector(value) {
|
|
115
151
|
return Object.hasOwn(SELECTOR_FIELDS, value);
|
|
116
152
|
}
|
|
117
153
|
export function defaultContinuationSelector(kind, version = "v1", eventTypes) {
|
|
@@ -136,12 +172,26 @@ export function defaultContinuationSelector(kind, version = "v1", eventTypes) {
|
|
|
136
172
|
return "slack.thread/v2";
|
|
137
173
|
case "origin":
|
|
138
174
|
return originV2Default(eventTypes);
|
|
175
|
+
case "gitlab":
|
|
176
|
+
return membershipOrNone(eventTypes, "gitlab-mr", "gitlab.mr/v2", "gitlab.none/v2");
|
|
177
|
+
case "bitbucket":
|
|
178
|
+
return membershipOrNone(eventTypes, "bitbucket-pr", "bitbucket.pr/v2", "bitbucket.none/v2");
|
|
139
179
|
case "deployments":
|
|
140
180
|
return deploymentsV2Default(eventTypes);
|
|
141
181
|
default:
|
|
142
182
|
return "none/v2";
|
|
143
183
|
}
|
|
144
184
|
}
|
|
185
|
+
/** Typed selector when every declared event is in the type's membership. */
|
|
186
|
+
function membershipOrNone(eventTypes, type, typed, none) {
|
|
187
|
+
var _a;
|
|
188
|
+
var _b;
|
|
189
|
+
const allowed = new Set((_b = (_a = builtinForType(type)) === null || _a === void 0 ? void 0 : _a.events) !== null && _b !== void 0 ? _b : []);
|
|
190
|
+
if ((eventTypes !== null && eventTypes !== void 0 ? eventTypes : []).some((event) => !allowed.has(event))) {
|
|
191
|
+
return none;
|
|
192
|
+
}
|
|
193
|
+
return typed;
|
|
194
|
+
}
|
|
145
195
|
function githubV2Default(eventTypes) {
|
|
146
196
|
var _a, _b;
|
|
147
197
|
var _c, _d;
|
|
@@ -166,6 +216,38 @@ function originV2Default(eventTypes) {
|
|
|
166
216
|
}
|
|
167
217
|
return "origin.pr/v2";
|
|
168
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Omitted `/v2` default became type `none` because a declared event sits
|
|
221
|
+
* outside the kind's typed membership. Validate warns; handshake stays
|
|
222
|
+
* silent on omitted selectors (type `none` is always admitted).
|
|
223
|
+
*/
|
|
224
|
+
export function omittedV2MembershipDowngrade(kind, eventTypes) {
|
|
225
|
+
const events = eventTypes !== null && eventTypes !== void 0 ? eventTypes : [];
|
|
226
|
+
if (events.length === 0) {
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
const selector = defaultContinuationSelector(kind, "v2", events);
|
|
230
|
+
const parsed = parseContinuationSelector(selector);
|
|
231
|
+
if (parsed === undefined || parsed.type !== "none") {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
const typed = kind === "github"
|
|
235
|
+
? builtinForType("pr")
|
|
236
|
+
: kind === "origin"
|
|
237
|
+
? builtinForType("origin-pr")
|
|
238
|
+
: kind === "deployments"
|
|
239
|
+
? builtinForType("deployment")
|
|
240
|
+
: undefined;
|
|
241
|
+
if (typed === undefined) {
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
const allowed = new Set(typed.events);
|
|
245
|
+
const unexpected = events.filter((event) => !allowed.has(event));
|
|
246
|
+
if (unexpected.length === 0) {
|
|
247
|
+
return undefined;
|
|
248
|
+
}
|
|
249
|
+
return { selector, unexpected };
|
|
250
|
+
}
|
|
169
251
|
function deploymentsV2Default(eventTypes) {
|
|
170
252
|
var _a;
|
|
171
253
|
var _b;
|
|
@@ -182,7 +264,7 @@ export function parseContinuationSelector(selector) {
|
|
|
182
264
|
}
|
|
183
265
|
return Object.assign({ selector }, SELECTOR_FIELDS[selector]);
|
|
184
266
|
}
|
|
185
|
-
|
|
267
|
+
function resolveContinuation(raw, kind) {
|
|
186
268
|
const selector = raw !== null && raw !== void 0 ? raw : defaultContinuationSelector(kind);
|
|
187
269
|
const parsed = parseContinuationSelector(selector);
|
|
188
270
|
if (parsed === undefined) {
|
|
@@ -201,13 +283,13 @@ export function continuationSource(identity, kind) {
|
|
|
201
283
|
export function isV2DurableContinuationKey(key) {
|
|
202
284
|
return key.startsWith("cont:") || key.startsWith("evt:");
|
|
203
285
|
}
|
|
204
|
-
|
|
286
|
+
function newEvtKey() {
|
|
205
287
|
return `evt:${randomBytes(16).toString("hex")}`;
|
|
206
288
|
}
|
|
207
|
-
|
|
289
|
+
function builtinForType(type) {
|
|
208
290
|
return BUILTINS.find((builtin) => builtin.type === type);
|
|
209
291
|
}
|
|
210
|
-
|
|
292
|
+
function formatConversationKey(type, fields) {
|
|
211
293
|
switch (type) {
|
|
212
294
|
case "pr":
|
|
213
295
|
return `github-pr:${fields.fullName}#${fields.number}`;
|
|
@@ -215,6 +297,10 @@ export function formatConversationKey(type, fields) {
|
|
|
215
297
|
return `github-issue:${fields.fullName}#${fields.number}`;
|
|
216
298
|
case "origin-pr":
|
|
217
299
|
return `origin-pr:${fields.fullName}#${fields.number}`;
|
|
300
|
+
case "gitlab-mr":
|
|
301
|
+
return `gitlab-mr:${fields.fullName}!${fields.number}`;
|
|
302
|
+
case "bitbucket-pr":
|
|
303
|
+
return `bitbucket-pr:${fields.fullName}#${fields.number}`;
|
|
218
304
|
case "thread":
|
|
219
305
|
return `${fields.channelId}:${fields.threadTs}`;
|
|
220
306
|
case "deployment":
|
|
@@ -239,7 +325,9 @@ export function mintClaim(claim) {
|
|
|
239
325
|
}
|
|
240
326
|
case "pr":
|
|
241
327
|
case "issue":
|
|
242
|
-
case "origin-pr":
|
|
328
|
+
case "origin-pr":
|
|
329
|
+
case "gitlab-mr":
|
|
330
|
+
case "bitbucket-pr": {
|
|
243
331
|
const resource = claim.resource;
|
|
244
332
|
const fullName = "fullName" in resource
|
|
245
333
|
? resource.fullName
|
|
@@ -250,8 +338,14 @@ export function mintClaim(claim) {
|
|
|
250
338
|
if (fullName === undefined || number === undefined) {
|
|
251
339
|
throw new V2EngineError(`v2: ${claim.type} claim requires repository and number`);
|
|
252
340
|
}
|
|
341
|
+
// GitLab paths and Bitbucket project keys arrive in API-native casing;
|
|
342
|
+
// the webhook extractors lowercase them, so the claim must too or the
|
|
343
|
+
// two mint different keys for the same MR / PR.
|
|
344
|
+
const caseFolded = claim.type === "gitlab-mr" || claim.type === "bitbucket-pr"
|
|
345
|
+
? fullName.toLowerCase()
|
|
346
|
+
: fullName;
|
|
253
347
|
return `cont:${formatConversationKey(claim.type, {
|
|
254
|
-
fullName,
|
|
348
|
+
fullName: caseFolded,
|
|
255
349
|
number,
|
|
256
350
|
})}`;
|
|
257
351
|
}
|
|
@@ -319,6 +413,10 @@ export function extractContinuation(type, eventName, payload) {
|
|
|
319
413
|
return extractSlack(payload);
|
|
320
414
|
case "origin-pr":
|
|
321
415
|
return extractOrigin(payload);
|
|
416
|
+
case "gitlab-mr":
|
|
417
|
+
return extractGitlab(eventName, payload);
|
|
418
|
+
case "bitbucket-pr":
|
|
419
|
+
return extractBitbucket(payload);
|
|
322
420
|
case "deployment":
|
|
323
421
|
return extractDeployment(payload);
|
|
324
422
|
}
|
|
@@ -475,6 +573,83 @@ function originExtractRecord(payload) {
|
|
|
475
573
|
}
|
|
476
574
|
return record;
|
|
477
575
|
}
|
|
576
|
+
/**
|
|
577
|
+
* GitLab merge request identity: `project.path_with_namespace` (nested
|
|
578
|
+
* groups keep their slashes; lowercased like the scope key) plus the MR
|
|
579
|
+
* `iid`. `merge_request` reads `object_attributes.iid`; `note` binds only
|
|
580
|
+
* MR notes (`noteable_type: "MergeRequest"`); `pipeline` binds only when
|
|
581
|
+
* the payload carries a `merge_request`.
|
|
582
|
+
*/
|
|
583
|
+
function extractGitlab(eventName, payload) {
|
|
584
|
+
var _a, _b, _c, _d, _e, _f;
|
|
585
|
+
const record = asRecord(payload);
|
|
586
|
+
if (record === undefined) {
|
|
587
|
+
return undefined;
|
|
588
|
+
}
|
|
589
|
+
const fullName = (_b = nonEmpty((_a = asRecord(record.project)) === null || _a === void 0 ? void 0 : _a.path_with_namespace)) === null || _b === void 0 ? void 0 : _b.toLowerCase();
|
|
590
|
+
if (fullName === undefined) {
|
|
591
|
+
return undefined;
|
|
592
|
+
}
|
|
593
|
+
let number;
|
|
594
|
+
switch (eventName) {
|
|
595
|
+
case "merge_request":
|
|
596
|
+
number = positiveInt((_c = asRecord(record.object_attributes)) === null || _c === void 0 ? void 0 : _c.iid);
|
|
597
|
+
break;
|
|
598
|
+
case "note":
|
|
599
|
+
if (((_d = asRecord(record.object_attributes)) === null || _d === void 0 ? void 0 : _d.noteable_type) !== "MergeRequest") {
|
|
600
|
+
return undefined;
|
|
601
|
+
}
|
|
602
|
+
number = positiveInt((_e = asRecord(record.merge_request)) === null || _e === void 0 ? void 0 : _e.iid);
|
|
603
|
+
break;
|
|
604
|
+
case "pipeline":
|
|
605
|
+
number = positiveInt((_f = asRecord(record.merge_request)) === null || _f === void 0 ? void 0 : _f.iid);
|
|
606
|
+
break;
|
|
607
|
+
default:
|
|
608
|
+
return undefined;
|
|
609
|
+
}
|
|
610
|
+
if (number === undefined) {
|
|
611
|
+
return undefined;
|
|
612
|
+
}
|
|
613
|
+
return `cont:${formatConversationKey("gitlab-mr", { fullName, number })}`;
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Bitbucket pull request identity from either dialect. Cloud payloads carry
|
|
617
|
+
* `repository.full_name` + `pullrequest.id`; Data Center payloads carry
|
|
618
|
+
* `pullRequest.id` and the repo under `pullRequest.toRef.repository`
|
|
619
|
+
* (`project.key/slug`). Lowercased so a Cloud/DC pair for one logical PR
|
|
620
|
+
* shares a key.
|
|
621
|
+
*/
|
|
622
|
+
function extractBitbucket(payload) {
|
|
623
|
+
var _a;
|
|
624
|
+
var _b, _c;
|
|
625
|
+
const record = asRecord(payload);
|
|
626
|
+
if (record === undefined) {
|
|
627
|
+
return undefined;
|
|
628
|
+
}
|
|
629
|
+
const pullRequest = (_b = asRecord(record.pullrequest)) !== null && _b !== void 0 ? _b : asRecord(record.pullRequest);
|
|
630
|
+
const number = positiveInt(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.id);
|
|
631
|
+
const fullName = bitbucketFullName((_c = asRecord(record.repository)) !== null && _c !== void 0 ? _c : asRecord((_a = asRecord(pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.toRef)) === null || _a === void 0 ? void 0 : _a.repository));
|
|
632
|
+
if (number === undefined || fullName === undefined) {
|
|
633
|
+
return undefined;
|
|
634
|
+
}
|
|
635
|
+
return `cont:${formatConversationKey("bitbucket-pr", { fullName, number })}`;
|
|
636
|
+
}
|
|
637
|
+
function bitbucketFullName(repository) {
|
|
638
|
+
var _a;
|
|
639
|
+
if (repository === undefined) {
|
|
640
|
+
return undefined;
|
|
641
|
+
}
|
|
642
|
+
const cloud = nonEmpty(repository.full_name);
|
|
643
|
+
if (cloud !== undefined) {
|
|
644
|
+
return cloud.toLowerCase();
|
|
645
|
+
}
|
|
646
|
+
const projectKey = nonEmpty((_a = asRecord(repository.project)) === null || _a === void 0 ? void 0 : _a.key);
|
|
647
|
+
const slug = nonEmpty(repository.slug);
|
|
648
|
+
if (projectKey === undefined || slug === undefined) {
|
|
649
|
+
return undefined;
|
|
650
|
+
}
|
|
651
|
+
return `${projectKey}/${slug}`.toLowerCase();
|
|
652
|
+
}
|
|
478
653
|
function extractDeployment(payload) {
|
|
479
654
|
const record = asRecord(payload);
|
|
480
655
|
const deploymentId = nonEmpty(record === null || record === void 0 ? void 0 : record.deploymentId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/conversation-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAYD,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,kEAAkE;AAClE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,kBAAkB,CA6MpB;AA6ED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,kBAAkB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"conversation-mirror.d.ts","sourceRoot":"","sources":["../../src/internal/conversation-mirror.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAsB,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAYD,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,QAAQ,CAAC;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,kEAAkE;AAClE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,kBAAkB,CA6MpB;AA6ED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,GAAG,kBAAkB,GAAG,SAAS,CAqBjC"}
|
|
@@ -298,9 +298,10 @@ export function selectConversationMirror(input) {
|
|
|
298
298
|
return createConversationMirror({
|
|
299
299
|
sink: cursorHostedFiles({
|
|
300
300
|
resolveStoreSourceId: () => hosting.resolveStoreIds().frameworkStoreSourceId,
|
|
301
|
-
// Full chain (env → key file → stored login): frozen
|
|
302
|
-
// unsigned and
|
|
303
|
-
// is constructed.
|
|
301
|
+
// Full chain (env → key file → stored login), resolved lazily: frozen
|
|
302
|
+
// engines listen unsigned and only gain a credential at task time,
|
|
303
|
+
// after this sink is constructed. Hosted deliveries have consumed the
|
|
304
|
+
// bind file into CURSOR_API_KEY by then, so this resolves from env.
|
|
304
305
|
resolveApiKey: () => { var _a; return (_a = resolveApiKeySync()) === null || _a === void 0 ? void 0 : _a.apiKey; },
|
|
305
306
|
}),
|
|
306
307
|
agentName: input.project.name,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Types for `convertWorkflow` — the pure automation → agentsdk project
|
|
3
|
-
* converter behind `agent-
|
|
3
|
+
* converter behind `agent-sdk convert-automation`.
|
|
4
4
|
*
|
|
5
5
|
* The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
|
|
6
6
|
* enum value names as strings) produced by the backend export endpoint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Types for `convertWorkflow` — the pure automation → agentsdk project
|
|
3
|
-
* converter behind `agent-
|
|
3
|
+
* converter behind `agent-sdk convert-automation`.
|
|
4
4
|
*
|
|
5
5
|
* The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
|
|
6
6
|
* enum value names as strings) produced by the backend export endpoint
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-mcp.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/account-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EAEX,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"account-mcp.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/account-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextpro
|
|
|
28
28
|
import { bearerAuth } from "../../channels.js";
|
|
29
29
|
import { isCursorAccountTransport } from "../../types.js";
|
|
30
30
|
import { probeConnectorAuthUrls } from "../cursor-account-mcp-auth.js";
|
|
31
|
+
import { describeError } from "../describe-error.js";
|
|
31
32
|
import { LOG_PREFIX } from "../distribution.js";
|
|
32
33
|
import { handleStatelessMcpRequest } from "../mcp-endpoint.js";
|
|
33
34
|
import { isLoopbackAddress } from "../net.js";
|
|
@@ -384,9 +385,6 @@ function buildCatalog(servers) {
|
|
|
384
385
|
function trimTrailingSlash(url) {
|
|
385
386
|
return url.endsWith("/") ? url.slice(0, -1) : url;
|
|
386
387
|
}
|
|
387
|
-
function describeError(error) {
|
|
388
|
-
return error instanceof Error ? error.message : String(error);
|
|
389
|
-
}
|
|
390
388
|
const MAX_ERROR_DETAIL_CHARS = 72;
|
|
391
389
|
function truncateDetail(detail) {
|
|
392
390
|
const trimmed = detail.trim();
|
|
@@ -89,9 +89,10 @@ export interface CursorBackendClientOptions {
|
|
|
89
89
|
backendUrl: string;
|
|
90
90
|
apiKey: string;
|
|
91
91
|
/**
|
|
92
|
-
* Re-
|
|
93
|
-
* unsigned and
|
|
94
|
-
*
|
|
92
|
+
* Re-resolve the key on each authenticated call. Hosted freeze listens
|
|
93
|
+
* unsigned and only gains a credential at task time (hosted deliveries
|
|
94
|
+
* consume the bind file into `CURSOR_API_KEY` before authored work); a
|
|
95
|
+
* constructor-frozen key would miss that bind.
|
|
95
96
|
*/
|
|
96
97
|
getApiKey?: () => string;
|
|
97
98
|
logger?: (line: string) => void;
|
|
@@ -165,7 +166,7 @@ export declare class CursorBackendClient {
|
|
|
165
166
|
}
|
|
166
167
|
/**
|
|
167
168
|
* Mint a named user API key from a short-lived login session token. Used
|
|
168
|
-
* exactly once per `agent-
|
|
169
|
+
* exactly once per `agent-sdk login`; the session token is then discarded.
|
|
169
170
|
*/
|
|
170
171
|
export declare function createUserApiKeyWithSessionToken(args: {
|
|
171
172
|
backendUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/backend-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"backend-client.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/backend-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
24
24
|
};
|
|
25
25
|
import { randomUUID } from "node:crypto";
|
|
26
26
|
import { z } from "zod";
|
|
27
|
+
import { describeError } from "../describe-error.js";
|
|
28
|
+
import { CLI_COMMAND_NAME as CLI } from "../distribution.js";
|
|
27
29
|
import { boundedToolAnnotations } from "../mcp-host.js";
|
|
28
30
|
import { CURSOR_SESSION_EXCHANGE_PATH, CursorSessionExchangeError, exchangeCursorApiKeyForSession, SESSION_TOKEN_EXPIRY_LEEWAY_MS, } from "./session-token.js";
|
|
29
31
|
const CLIENT_VERSION = "agent-serve-0.1.0";
|
|
@@ -415,7 +417,7 @@ export class CursorBackendClient {
|
|
|
415
417
|
throw new CursorBackendError("Cursor API key exchange returned no access token.");
|
|
416
418
|
}
|
|
417
419
|
throw new CursorBackendError(error.status === 401
|
|
418
|
-
?
|
|
420
|
+
? `The Cursor API key was rejected. Run \`${CLI} login\` again or update CURSOR_API_KEY.`
|
|
419
421
|
: `Cursor API key exchange failed (${error.status}).`, error.status);
|
|
420
422
|
}
|
|
421
423
|
throw error;
|
|
@@ -429,7 +431,7 @@ export class CursorBackendClient {
|
|
|
429
431
|
}
|
|
430
432
|
/**
|
|
431
433
|
* Mint a named user API key from a short-lived login session token. Used
|
|
432
|
-
* exactly once per `agent-
|
|
434
|
+
* exactly once per `agent-sdk login`; the session token is then discarded.
|
|
433
435
|
*/
|
|
434
436
|
export function createUserApiKeyWithSessionToken(args) {
|
|
435
437
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -624,7 +626,7 @@ const MAX_GITHUB_TOKEN_RETRY_AFTER_MS = 60 * 60000;
|
|
|
624
626
|
function describeGithubTokenHttpFailure(status, bodyText) {
|
|
625
627
|
const detail = githubTokenErrorFromBody(bodyText);
|
|
626
628
|
if (status === 401) {
|
|
627
|
-
return `The Cursor API key was rejected${detail === undefined ? "" : `: ${detail}`}. Run
|
|
629
|
+
return `The Cursor API key was rejected${detail === undefined ? "" : `: ${detail}`}. Run \`${CLI} login\` again or update CURSOR_API_KEY.`;
|
|
628
630
|
}
|
|
629
631
|
if (detail !== undefined) {
|
|
630
632
|
return detail;
|
|
@@ -654,9 +656,6 @@ function retryAfterMsFromResponse(response) {
|
|
|
654
656
|
}
|
|
655
657
|
return Math.min(retryAfter * 1000, MAX_GITHUB_TOKEN_RETRY_AFTER_MS);
|
|
656
658
|
}
|
|
657
|
-
function describeError(error) {
|
|
658
|
-
return error instanceof Error ? error.message : String(error);
|
|
659
|
-
}
|
|
660
659
|
/** Release undici/fetch connection slots on responses we will not parse. */
|
|
661
660
|
function drainResponseBody(response) {
|
|
662
661
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destroying a hosted v2 task-bind secret file after its value is in
|
|
3
|
+
* `process.env`.
|
|
4
|
+
*
|
|
5
|
+
* The bind files under `/run/cursor/secrets/` are an IPC channel, not a
|
|
6
|
+
* credential store: the control plane cannot set another process's
|
|
7
|
+
* environment, so it drops the value on tmpfs and July copies it into
|
|
8
|
+
* `process.env` before anything authored runs. Once that copy succeeds the
|
|
9
|
+
* on-disk value is pure liability — authored agent code runs in this pod and
|
|
10
|
+
* can read any world-readable path.
|
|
11
|
+
*
|
|
12
|
+
* Unlink is preferred. It is not always available: pod-daemon writes the
|
|
13
|
+
* files as root, and removing a directory entry needs write permission on
|
|
14
|
+
* `/run/cursor/secrets`, which is root-owned. Making that directory writable
|
|
15
|
+
* by the guest is not the fix — untrusted guest code could then plant a
|
|
16
|
+
* symlink that the next root-side bind write would follow. The binder instead
|
|
17
|
+
* relaxes the two secret files themselves so the guest can truncate them, and
|
|
18
|
+
* this module falls back to a zero-length overwrite. Both readers treat an
|
|
19
|
+
* empty bind file as unsigned.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* What happened to a bind file. Only `readable` is a failure: the secret
|
|
23
|
+
* survived the consume and callers must not run authored code.
|
|
24
|
+
*/
|
|
25
|
+
export type BoundSecretFileDisposal =
|
|
26
|
+
/** Nothing recoverable was there — missing, empty, or unreadable already. */
|
|
27
|
+
{
|
|
28
|
+
state: "absent";
|
|
29
|
+
}
|
|
30
|
+
/** Directory entry removed. */
|
|
31
|
+
| {
|
|
32
|
+
state: "unlinked";
|
|
33
|
+
}
|
|
34
|
+
/** Truncated to zero length and fsynced; an empty file remains. */
|
|
35
|
+
| {
|
|
36
|
+
state: "wiped";
|
|
37
|
+
}
|
|
38
|
+
/** Still recoverable by a later `readFile`. */
|
|
39
|
+
| {
|
|
40
|
+
state: "readable";
|
|
41
|
+
reason: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Whether a later `readFile` of this path could still recover a secret.
|
|
45
|
+
* A read failure counts as unrecoverable: this process just read the file
|
|
46
|
+
* during hydrate, so losing access to it means the content is gone.
|
|
47
|
+
*/
|
|
48
|
+
export declare function boundSecretFileIsReadable(path: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Remove a bind file's contents from disk, preferring unlink over an empty
|
|
51
|
+
* leftover. Callers must have already copied the value into `process.env`:
|
|
52
|
+
* this is destructive and there is no second bind until the control plane
|
|
53
|
+
* rewrites the file before the next hosted request.
|
|
54
|
+
*/
|
|
55
|
+
export declare function destroyBoundSecretFile(path: string): BoundSecretFileDisposal;
|
|
56
|
+
//# sourceMappingURL=bound-secret-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bound-secret-file.d.ts","sourceRoot":"","sources":["../../../src/internal/cursor/bound-secret-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH;;;GAGG;AACH,MAAM,MAAM,uBAAuB;AACjC,6EAA6E;AAC3E;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE;AACrB,+BAA+B;GAC7B;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE;AACvB,mEAAmE;GACjE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE;AACpB,+CAA+C;GAC7C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAM/D;AAOD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAuC5E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destroying a hosted v2 task-bind secret file after its value is in
|
|
3
|
+
* `process.env`.
|
|
4
|
+
*
|
|
5
|
+
* The bind files under `/run/cursor/secrets/` are an IPC channel, not a
|
|
6
|
+
* credential store: the control plane cannot set another process's
|
|
7
|
+
* environment, so it drops the value on tmpfs and July copies it into
|
|
8
|
+
* `process.env` before anything authored runs. Once that copy succeeds the
|
|
9
|
+
* on-disk value is pure liability — authored agent code runs in this pod and
|
|
10
|
+
* can read any world-readable path.
|
|
11
|
+
*
|
|
12
|
+
* Unlink is preferred. It is not always available: pod-daemon writes the
|
|
13
|
+
* files as root, and removing a directory entry needs write permission on
|
|
14
|
+
* `/run/cursor/secrets`, which is root-owned. Making that directory writable
|
|
15
|
+
* by the guest is not the fix — untrusted guest code could then plant a
|
|
16
|
+
* symlink that the next root-side bind write would follow. The binder instead
|
|
17
|
+
* relaxes the two secret files themselves so the guest can truncate them, and
|
|
18
|
+
* this module falls back to a zero-length overwrite. Both readers treat an
|
|
19
|
+
* empty bind file as unsigned.
|
|
20
|
+
*/
|
|
21
|
+
import { closeSync, fsyncSync, ftruncateSync, openSync, readFileSync, unlinkSync, } from "node:fs";
|
|
22
|
+
/**
|
|
23
|
+
* Whether a later `readFile` of this path could still recover a secret.
|
|
24
|
+
* A read failure counts as unrecoverable: this process just read the file
|
|
25
|
+
* during hydrate, so losing access to it means the content is gone.
|
|
26
|
+
*/
|
|
27
|
+
export function boundSecretFileIsReadable(path) {
|
|
28
|
+
try {
|
|
29
|
+
return readFileSync(path, "utf8").trim() !== "";
|
|
30
|
+
}
|
|
31
|
+
catch (_a) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function errorReason(error) {
|
|
36
|
+
const code = error === null || error === void 0 ? void 0 : error.code;
|
|
37
|
+
return typeof code === "string" ? code : "unknown";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove a bind file's contents from disk, preferring unlink over an empty
|
|
41
|
+
* leftover. Callers must have already copied the value into `process.env`:
|
|
42
|
+
* this is destructive and there is no second bind until the control plane
|
|
43
|
+
* rewrites the file before the next hosted request.
|
|
44
|
+
*/
|
|
45
|
+
export function destroyBoundSecretFile(path) {
|
|
46
|
+
if (!boundSecretFileIsReadable(path)) {
|
|
47
|
+
// Nothing recoverable, so nothing to fail over. Still try to clear the
|
|
48
|
+
// empty leftover: whether that succeeds does not change the disposal,
|
|
49
|
+
// because there is no secret here either way.
|
|
50
|
+
try {
|
|
51
|
+
unlinkSync(path);
|
|
52
|
+
}
|
|
53
|
+
catch (_a) {
|
|
54
|
+
// Already gone, or a directory the guest cannot write. Both are fine.
|
|
55
|
+
}
|
|
56
|
+
return { state: "absent" };
|
|
57
|
+
}
|
|
58
|
+
let unlinkReason;
|
|
59
|
+
try {
|
|
60
|
+
unlinkSync(path);
|
|
61
|
+
if (!boundSecretFileIsReadable(path)) {
|
|
62
|
+
return { state: "unlinked" };
|
|
63
|
+
}
|
|
64
|
+
unlinkReason = "recreated";
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
unlinkReason = errorReason(error);
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const fd = openSync(path, "r+");
|
|
71
|
+
try {
|
|
72
|
+
ftruncateSync(fd, 0);
|
|
73
|
+
fsyncSync(fd);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
closeSync(fd);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
state: "readable",
|
|
82
|
+
reason: `unlink ${unlinkReason}, truncate ${errorReason(error)}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return boundSecretFileIsReadable(path)
|
|
86
|
+
? { state: "readable", reason: `unlink ${unlinkReason}, truncate no-op` }
|
|
87
|
+
: { state: "wiped" };
|
|
88
|
+
}
|