@cursor/july 0.1.101 → 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 +28 -3
- 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/api.d.ts +1 -1
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +3 -1
- package/dist/channels/slack/assistant.d.ts +1 -1
- package/dist/channels/slack/assistant.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.d.ts +3 -2
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +28 -8
- package/dist/channels/slack/eval-directive.d.ts.map +1 -1
- package/dist/channels/slack/eval-directive.js +1 -7
- package/dist/channels/slack/inbound.d.ts +8 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +28 -0
- package/dist/channels/slack/init.d.ts.map +1 -1
- package/dist/channels/slack/init.js +3 -3
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +2 -1
- 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.BASO9Kih.js → app.DW9pXkpL.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.nrl1ifBq.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DwkqxoE0.js → VPLocalSearchBox.CdEIUwDg.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CCil_13e.js → theme.YZMHgPgg.js} +2 -2
- package/dist/docs/assets/{concepts.md.lwAgBIMI.js → concepts.md.DgEcZOfT.js} +1 -1
- package/dist/docs/assets/{concepts.md.lwAgBIMI.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_cloud-agents.md.DS8RIjwx.lean.js +1 -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.D75GWhPl.js +5 -0
- package/dist/docs/assets/{index.md.Bb4k8kUm.lean.js → index.md.D75GWhPl.lean.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.DykHW3qL.js +62 -0
- 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.Bv4KOtlB.js → reference_project-layout.md.DuBu9a96.js} +2 -2
- package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.lean.js → reference_project-layout.md.DuBu9a96.lean.js} +1 -1
- 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_skills.md.BFW9retM.js → reference_skills.md.l2ezAcaN.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.CvAHsdSp.js → reference_tools.md.aGrn99hP.js} +2 -2
- package/dist/docs/assets/skills_framework-map.md.haibFyoB.js +1 -0
- package/dist/docs/assets/{skills_framework-map.md.BTi817yv.lean.js → skills_framework-map.md.haibFyoB.lean.js} +1 -1
- 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 +5 -7
- 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 +35 -0
- package/dist/docs/guides/cloud-agents.md +91 -0
- 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 +11 -12
- 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 +7 -3
- package/dist/docs/llms-full.txt +765 -209
- package/dist/docs/llms.txt +3 -1
- 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 +88 -0
- package/dist/docs/reference/extensions.md +264 -0
- 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 +4 -0
- 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 +6 -6
- package/dist/docs/reference/skills.md +2 -0
- package/dist/docs/reference/subagents.html +5 -5
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/reference/tools.md +3 -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 -0
- 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/cursor-cloud-agents/extension.d.ts +9 -7
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.js +9 -7
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +78 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +286 -0
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts +5 -0
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/inputs.js +4 -0
- package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts +8 -0
- package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +15 -0
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +21 -7
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +26 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +54 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.js +25 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +14 -38
- package/dist/extensions/cursor-cloud-agents/tools/list.js +1 -1
- package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/{follow_up.js → reply.js} +12 -14
- package/dist/extensions.d.ts +54 -17
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +83 -15
- package/dist/files-backends/cursor-hosted.d.ts +0 -8
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +1 -11
- package/dist/files.d.ts +21 -4
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +38 -21
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- 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 +17 -18
- 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 +13 -5
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +30 -15
- 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 +12 -1
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +16 -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 +9 -0
- package/dist/internal/discovery/ab.d.ts.map +1 -0
- package/dist/internal/discovery/ab.js +113 -0
- package/dist/internal/discovery/agent-config.d.ts +35 -0
- package/dist/internal/discovery/agent-config.d.ts.map +1 -0
- package/dist/internal/discovery/agent-config.js +173 -0
- package/dist/internal/discovery/agent.d.ts +16 -0
- package/dist/internal/discovery/agent.d.ts.map +1 -0
- package/dist/internal/discovery/agent.js +255 -0
- package/dist/internal/discovery/channels.d.ts +10 -0
- package/dist/internal/discovery/channels.d.ts.map +1 -0
- package/dist/internal/discovery/channels.js +97 -0
- package/dist/internal/discovery/connections.d.ts +13 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -0
- package/dist/internal/discovery/connections.js +422 -0
- package/dist/internal/discovery/context.d.ts +20 -0
- package/dist/internal/discovery/context.d.ts.map +1 -0
- package/dist/internal/discovery/context.js +30 -0
- package/dist/internal/discovery/cursor-plugin.d.ts +25 -0
- package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -0
- package/dist/internal/discovery/cursor-plugin.js +568 -0
- 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 +28 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -0
- package/dist/internal/discovery/extensions.js +375 -0
- package/dist/internal/discovery/fs.d.ts +15 -0
- package/dist/internal/discovery/fs.d.ts.map +1 -0
- package/dist/internal/discovery/fs.js +115 -0
- package/dist/internal/discovery/hooks.d.ts +7 -0
- package/dist/internal/discovery/hooks.d.ts.map +1 -0
- package/dist/internal/discovery/hooks.js +61 -0
- package/dist/internal/discovery/info.d.ts +6 -0
- package/dist/internal/discovery/info.d.ts.map +1 -0
- package/dist/internal/discovery/info.js +147 -0
- package/dist/internal/discovery/instructions.d.ts +7 -0
- package/dist/internal/discovery/instructions.d.ts.map +1 -0
- package/dist/internal/discovery/instructions.js +95 -0
- package/dist/internal/discovery/modules.d.ts +20 -0
- package/dist/internal/discovery/modules.d.ts.map +1 -0
- package/dist/internal/discovery/modules.js +107 -0
- package/dist/internal/discovery/names.d.ts +12 -0
- package/dist/internal/discovery/names.d.ts.map +1 -0
- package/dist/internal/discovery/names.js +37 -0
- package/dist/internal/discovery/project.d.ts +51 -0
- package/dist/internal/discovery/project.d.ts.map +1 -0
- package/dist/internal/discovery/project.js +293 -0
- package/dist/internal/discovery/runtime.d.ts +34 -0
- package/dist/internal/discovery/runtime.d.ts.map +1 -0
- package/dist/internal/discovery/runtime.js +97 -0
- package/dist/internal/discovery/schedules.d.ts +7 -0
- package/dist/internal/discovery/schedules.d.ts.map +1 -0
- package/dist/internal/discovery/schedules.js +118 -0
- package/dist/internal/discovery/seed-files.d.ts +7 -0
- package/dist/internal/discovery/seed-files.d.ts.map +1 -0
- package/dist/internal/discovery/seed-files.js +41 -0
- package/dist/internal/discovery/services.d.ts +21 -0
- package/dist/internal/discovery/services.d.ts.map +1 -0
- package/dist/internal/discovery/services.js +134 -0
- package/dist/internal/discovery/skills.d.ts +11 -0
- package/dist/internal/discovery/skills.d.ts.map +1 -0
- package/dist/internal/discovery/skills.js +156 -0
- package/dist/internal/discovery/subagent.d.ts +16 -0
- package/dist/internal/discovery/subagent.d.ts.map +1 -0
- package/dist/internal/discovery/subagent.js +128 -0
- package/dist/internal/discovery/tools.d.ts +18 -0
- package/dist/internal/discovery/tools.d.ts.map +1 -0
- package/dist/internal/discovery/tools.js +159 -0
- package/dist/internal/discovery.d.ts +8 -63
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +6 -2504
- 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 +14 -14
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +8 -7
- package/dist/internal/frontmatter.d.ts +11 -3
- package/dist/internal/frontmatter.d.ts.map +1 -1
- package/dist/internal/frontmatter.js +29 -3
- 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/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +37 -20
- package/dist/internal/otel/collector.d.ts +22 -0
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +145 -126
- 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 +8 -10
- package/dist/internal/otel/mcp.d.ts +16 -0
- package/dist/internal/otel/mcp.d.ts.map +1 -0
- package/dist/internal/otel/mcp.js +55 -0
- package/dist/internal/otel/propagation.d.ts +6 -0
- package/dist/internal/otel/propagation.d.ts.map +1 -0
- package/dist/internal/otel/propagation.js +14 -0
- 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 +166 -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 +31 -11
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +208 -102
- package/dist/internal/session-run-log.d.ts +2 -1
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +14 -17
- 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/start-log-store.d.ts +1 -1
- package/dist/internal/start-log-store.d.ts.map +1 -1
- package/dist/internal/start-log-store.js +12 -14
- package/dist/internal/storage-coordinator.d.ts +4 -1
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +15 -13
- 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/tool-catalog.d.ts.map +1 -1
- package/dist/internal/tool-catalog.js +9 -6
- package/dist/internal/turn-cost.d.ts +14 -0
- package/dist/internal/turn-cost.d.ts.map +1 -1
- package/dist/internal/turn-cost.js +41 -9
- package/dist/internal/v2-hosting.d.ts +22 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -0
- package/dist/internal/v2-hosting.js +23 -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 +39 -1
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +118 -1
- 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 +24 -23
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +69 -68
- package/dist/storage.d.ts +2 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/tools.d.ts +9 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +9 -0
- package/dist/types.d.ts +126 -23
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +7 -3
- package/docs/concepts.md +5 -7
- package/docs/design/runtime-abstraction.md +2 -3
- package/docs/evals.md +9 -7
- package/docs/guides/cloud-agents.md +96 -0
- 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 +269 -0
- package/docs/reference/hooks.md +215 -46
- package/docs/reference/playground.md +3 -0
- package/docs/reference/project-layout.md +4 -0
- package/docs/reference/result.md +94 -0
- package/docs/reference/sessions.md +3 -1
- package/docs/reference/skills.md +2 -0
- package/docs/reference/tools.md +3 -2
- package/docs/templates/pr-autofixer.md +0 -3
- package/package.json +29 -10
- package/skills/framework-map/SKILL.md +3 -0
- 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/api.ts +4 -2
- package/src/channels/slack/assistant.ts +1 -1
- package/src/channels/slack/dispatch.ts +27 -2
- package/src/channels/slack/eval-directive.ts +1 -6
- package/src/channels/slack/inbound.ts +37 -0
- package/src/channels/slack/init.ts +6 -3
- package/src/channels/slack/manifest.ts +2 -1
- 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/cursor-cloud-agents/extension.ts +9 -7
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +395 -0
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +5 -0
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +23 -0
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +21 -7
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +19 -0
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +51 -0
- package/src/extensions/cursor-cloud-agents/tools/get.ts +18 -0
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +22 -42
- package/src/extensions/cursor-cloud-agents/tools/list.ts +1 -1
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +34 -0
- package/src/extensions.ts +100 -15
- package/src/files-backends/cursor-hosted.ts +1 -17
- package/src/files.ts +64 -37
- package/src/index.ts +27 -26
- 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 +27 -21
- 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 +41 -20
- 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 +28 -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 +131 -0
- package/src/internal/discovery/agent-config.ts +222 -0
- package/src/internal/discovery/agent.ts +319 -0
- package/src/internal/discovery/channels.ts +105 -0
- package/src/internal/discovery/connections.ts +545 -0
- package/src/internal/discovery/context.ts +46 -0
- package/src/internal/discovery/cursor-plugin.ts +705 -0
- package/src/internal/discovery/extension-overlay.ts +274 -0
- package/src/internal/discovery/extensions.ts +573 -0
- package/src/internal/discovery/fs.ts +108 -0
- package/src/internal/discovery/hooks.ts +63 -0
- package/src/internal/discovery/info.ts +186 -0
- package/src/internal/discovery/instructions.ts +113 -0
- package/src/internal/discovery/modules.ts +113 -0
- package/src/internal/discovery/names.ts +45 -0
- package/src/internal/discovery/project.ts +341 -0
- package/src/internal/discovery/runtime.ts +158 -0
- package/src/internal/discovery/schedules.ts +120 -0
- package/src/internal/discovery/seed-files.ts +37 -0
- package/src/internal/discovery/services.ts +160 -0
- package/src/internal/discovery/skills.ts +186 -0
- package/src/internal/discovery/subagent.ts +136 -0
- package/src/internal/discovery/tools.ts +182 -0
- package/src/internal/discovery.ts +18 -3081
- 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 +14 -14
- package/src/internal/framework-storage-selection.ts +9 -9
- package/src/internal/frontmatter.ts +36 -3
- 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/mcp-host.ts +84 -31
- package/src/internal/otel/collector.ts +200 -165
- package/src/internal/otel/config.ts +10 -14
- package/src/internal/otel/http.ts +16 -13
- package/src/internal/otel/mcp.ts +56 -0
- package/src/internal/otel/propagation.ts +17 -0
- package/src/internal/otel/runtime.ts +242 -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 +274 -81
- package/src/internal/session-run-log.ts +18 -20
- package/src/internal/skills-sync.ts +13 -63
- package/src/internal/sleep.ts +3 -0
- package/src/internal/start-log-store.ts +13 -16
- package/src/internal/storage-coordinator.ts +19 -16
- 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/tool-catalog.ts +9 -6
- package/src/internal/turn-cost.ts +47 -4
- package/src/internal/v2-hosting.ts +38 -0
- package/src/internal/workspace-sync.ts +55 -0
- package/src/internal/workspace.ts +14 -0
- package/src/otel.ts +180 -2
- package/src/result.ts +36 -0
- package/src/storage-backends/cursor-hosted.ts +7 -4
- package/src/storage-protocol.ts +102 -95
- package/src/storage.ts +4 -0
- package/src/tools.ts +18 -0
- package/src/types.ts +146 -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.DbFXINq2.js +0 -1
- package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.CkYbjnAX.lean.js +0 -1
- package/dist/docs/assets/index.md.Bb4k8kUm.js +0 -5
- package/dist/docs/assets/reference_hooks.md.a8BJxMR5.js +0 -14
- package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +0 -1
- package/dist/docs/guides/cloud-runtime.html +0 -35
- package/dist/docs/guides/cloud-runtime.md +0 -115
- package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts +0 -30
- package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts.map +0 -1
- package/dist/extensions/cursor-cloud-agents/lib/cloud.js +0 -45
- package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts +0 -4
- package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts.map +0 -1
- package/dist/extensions/cursor-cloud-agents/tools/status.d.ts +0 -4
- package/dist/extensions/cursor-cloud-agents/tools/status.d.ts.map +0 -1
- package/dist/extensions/cursor-cloud-agents/tools/status.js +0 -41
- 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-BnNN1-EK.js +0 -69
- package/dist/playground/assets/index-DBQCwFp0.css +0 -1
- package/docs/guides/cloud-runtime.md +0 -120
- package/src/continuation.ts +0 -49
- package/src/extensions/cursor-cloud-agents/lib/cloud.ts +0 -79
- package/src/extensions/cursor-cloud-agents/tools/follow_up.ts +0 -29
- package/src/extensions/cursor-cloud-agents/tools/status.ts +0 -39
- 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_github.md.BtPr9GaP.lean.js → guides_github.md.DKYiT9do.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_skills.md.BFW9retM.lean.js → reference_skills.md.l2ezAcaN.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.CvAHsdSp.lean.js → reference_tools.md.aGrn99hP.lean.js} +0 -0
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { readFile } from "node:fs/promises";
|
|
10
|
-
import {
|
|
11
|
-
import { agentStoreKeys, FileConflictError, type FileSink } from "../files.js";
|
|
10
|
+
import { agentStoreKeys, type FileSink } from "../files.js";
|
|
12
11
|
import { STORAGE_KEY_ROOT } from "../storage.js";
|
|
13
12
|
import type { DiscoveredSkill, SkillFileSource } from "../types.js";
|
|
13
|
+
import { mirrorToStore, storeRelPath } from "./store-mirror.js";
|
|
14
14
|
import { buildSkillMd } from "./workspace.js";
|
|
15
15
|
|
|
16
16
|
/** Pre-native layout. Deleted on every sync so a rolled-forward deploy does not leave undiscoverable copies. */
|
|
@@ -22,10 +22,7 @@ function legacySkillsPrefix(agent: string): string {
|
|
|
22
22
|
* Mirror the agent's skills onto the store: write every SKILL.md (with the
|
|
23
23
|
* same generated frontmatter local materialization uses) plus sibling files,
|
|
24
24
|
* and delete keys no authored skill claims so redeploys drop removed skills.
|
|
25
|
-
*
|
|
26
|
-
* Everything loads and validates before the store is touched, and writes
|
|
27
|
-
* land before stale deletes, so a failed sync never leaves a gap a
|
|
28
|
-
* concurrent cloud reader could see.
|
|
25
|
+
* Everything loads and validates before the store is touched.
|
|
29
26
|
*/
|
|
30
27
|
export async function syncSkillsToStore(args: {
|
|
31
28
|
sink: FileSink;
|
|
@@ -42,65 +39,18 @@ export async function syncSkillsToStore(args: {
|
|
|
42
39
|
agentStoreKeys.skillFile(skill.name, relPath, skillsPrefix);
|
|
43
40
|
desired.set(key("SKILL.md"), Buffer.from(buildSkillMd(skill), "utf8"));
|
|
44
41
|
for (const [relPath, source] of Object.entries(skill.files)) {
|
|
45
|
-
desired.set(
|
|
42
|
+
desired.set(
|
|
43
|
+
key(storeRelPath(relPath, "skill file")),
|
|
44
|
+
await sourceBytes(source)
|
|
45
|
+
);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
await
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
args.
|
|
53
|
-
|
|
54
|
-
]);
|
|
55
|
-
await Promise.all(
|
|
56
|
-
[...existing.filter((entry) => !desired.has(entry.key)), ...leftover].map(
|
|
57
|
-
(entry) => args.sink.delete(entry.key)
|
|
58
|
-
)
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Same refusals as local materialization's `resolveInside`: a rel that
|
|
64
|
-
* escapes the skill directory or would not round-trip through the FUSE
|
|
65
|
-
* mount (`..`, `.`, `//`, absolute) fails the sync, exactly as it fails a
|
|
66
|
-
* local turn's workspace write. Backslashes are refused too — the store
|
|
67
|
-
* normalizes `\` to `/` on write, so the stored key would differ from the
|
|
68
|
-
* desired one and the stale pass would delete the file it just wrote.
|
|
69
|
-
*/
|
|
70
|
-
function storeRelPath(relPath: string): string {
|
|
71
|
-
if (
|
|
72
|
-
relPath.includes("\0") ||
|
|
73
|
-
relPath.includes("\\") ||
|
|
74
|
-
posix.isAbsolute(relPath) ||
|
|
75
|
-
relPath.endsWith("/") ||
|
|
76
|
-
relPath.split("/").some((seg) => seg === ".." || seg === ".") ||
|
|
77
|
-
posix.normalize(relPath) !== relPath
|
|
78
|
-
) {
|
|
79
|
-
throw new Error(
|
|
80
|
-
`Refusing skill file path "${relPath}" (must be a normalized relative path)`
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
return relPath;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Last writer wins. A raced conditional put (dual engine pods during a
|
|
88
|
-
* deploy rollover) clears the sink's cached etag, so one retry re-learns
|
|
89
|
-
* the current version and lands.
|
|
90
|
-
*/
|
|
91
|
-
async function putLastWriterWins(
|
|
92
|
-
sink: FileSink,
|
|
93
|
-
key: string,
|
|
94
|
-
body: Uint8Array
|
|
95
|
-
): Promise<void> {
|
|
96
|
-
try {
|
|
97
|
-
await sink.put(key, body);
|
|
98
|
-
} catch (error) {
|
|
99
|
-
if (!(error instanceof FileConflictError)) {
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
await sink.put(key, body);
|
|
103
|
-
}
|
|
48
|
+
await mirrorToStore({
|
|
49
|
+
sink: args.sink,
|
|
50
|
+
prefix: skillsPrefix,
|
|
51
|
+
desired,
|
|
52
|
+
legacyPrefixes: [legacySkillsPrefix(args.agentName)],
|
|
53
|
+
});
|
|
104
54
|
}
|
|
105
55
|
|
|
106
56
|
async function sourceBytes(source: SkillFileSource): Promise<Uint8Array> {
|
|
@@ -8,21 +8,18 @@
|
|
|
8
8
|
* after park/discard.
|
|
9
9
|
*
|
|
10
10
|
* Same flush moments as `hosted-execution.json` and session-runs —
|
|
11
|
-
* see `hosted-execution-flush.ts`. Keys: {@link
|
|
11
|
+
* see `hosted-execution-flush.ts`. Keys: {@link agentSdkStorageKeys.log}.
|
|
12
12
|
* Values are raw UTF-8, not JSON.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import { readFile } from "node:fs/promises";
|
|
16
16
|
import type { FileSink } from "../files.js";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
cursorHostedFiles,
|
|
20
|
-
} from "../files-backends/cursor-hosted.js";
|
|
21
|
-
import { storageKeys } from "../storage-protocol.js";
|
|
17
|
+
import { cursorHostedFiles } from "../files-backends/cursor-hosted.js";
|
|
18
|
+
import { agentSdkStorageKeys } from "../storage-protocol.js";
|
|
22
19
|
import type { AgentProject } from "../types.js";
|
|
23
20
|
import { resolveApiKeySync } from "./cursor/credentials.js";
|
|
24
|
-
import { AGENT_SERVE_GENERATION_ENV_VAR } from "./cursor-relay-core.js";
|
|
25
21
|
import { describeError } from "./describe-error.js";
|
|
22
|
+
import { resolveAgentV2Hosting } from "./v2-hosting.js";
|
|
26
23
|
|
|
27
24
|
/**
|
|
28
25
|
* Last N bytes flushed to the store. Matches the Temporal catch-up cap
|
|
@@ -102,7 +99,7 @@ export function createStartLogStore(input: {
|
|
|
102
99
|
|
|
103
100
|
return {
|
|
104
101
|
async persist(startLogId, contents) {
|
|
105
|
-
const key =
|
|
102
|
+
const key = agentSdkStorageKeys.log(agentName, startLogId);
|
|
106
103
|
const body = tailStartLogText(contents, START_LOG_STORE_MAX_BYTES);
|
|
107
104
|
try {
|
|
108
105
|
await sink.put(key, new TextEncoder().encode(body));
|
|
@@ -114,7 +111,7 @@ export function createStartLogStore(input: {
|
|
|
114
111
|
},
|
|
115
112
|
|
|
116
113
|
async read(startLogId) {
|
|
117
|
-
const key =
|
|
114
|
+
const key = agentSdkStorageKeys.log(agentName, startLogId);
|
|
118
115
|
try {
|
|
119
116
|
const body = await sink.get(key);
|
|
120
117
|
if (body === undefined) {
|
|
@@ -140,17 +137,17 @@ export function selectStartLogStore(input: {
|
|
|
140
137
|
logger?: (line: string) => void;
|
|
141
138
|
env?: Record<string, string | undefined>;
|
|
142
139
|
}): StartLogStore | undefined {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (
|
|
140
|
+
const hosting = resolveAgentV2Hosting({
|
|
141
|
+
architecture: input.project.agent.architecture,
|
|
142
|
+
env: input.env as NodeJS.ProcessEnv | undefined,
|
|
143
|
+
});
|
|
144
|
+
if (hosting.kind !== "cursor-managed") {
|
|
148
145
|
return undefined;
|
|
149
146
|
}
|
|
150
|
-
const envSnapshot = env as NodeJS.ProcessEnv;
|
|
151
147
|
return createStartLogStore({
|
|
152
148
|
sink: cursorHostedFiles({
|
|
153
|
-
resolveStoreSourceId: () =>
|
|
149
|
+
resolveStoreSourceId: () =>
|
|
150
|
+
hosting.resolveStoreIds().frameworkStoreSourceId,
|
|
154
151
|
resolveApiKey: () => resolveApiKeySync()?.apiKey,
|
|
155
152
|
}),
|
|
156
153
|
agentName: input.project.name,
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
type StorageContext,
|
|
32
32
|
type StorageDefinition,
|
|
33
33
|
type StorageEntry,
|
|
34
|
+
type StorageKeys,
|
|
34
35
|
storageKeys,
|
|
35
36
|
} from "../storage.js";
|
|
36
37
|
import { isCursorHostedStorage } from "../storage-backends/cursor-hosted.js";
|
|
@@ -79,7 +80,7 @@ const AB_SNAPSHOT_MIN_INTERVAL_MS = 60_000;
|
|
|
79
80
|
|
|
80
81
|
/** One queued sink call (KV put/delete or a dedicated-table write). */
|
|
81
82
|
interface StorageOp {
|
|
82
|
-
/** Human-readable op label for failure logs, e.g. `put(
|
|
83
|
+
/** Human-readable op label for failure logs, e.g. `put({root}/...)`. */
|
|
83
84
|
label: string;
|
|
84
85
|
run: (ctx: StorageContext) => void | Promise<void>;
|
|
85
86
|
}
|
|
@@ -89,6 +90,8 @@ export interface StorageCoordinatorOptions {
|
|
|
89
90
|
agentName: string;
|
|
90
91
|
projectRoot: string;
|
|
91
92
|
logger: (line: string) => void;
|
|
93
|
+
/** Defaults to the architecture-v1 key contract. */
|
|
94
|
+
keys?: StorageKeys;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
interface SessionBuffer {
|
|
@@ -116,6 +119,7 @@ export class StorageCoordinator
|
|
|
116
119
|
readonly policy: ResolvedStoragePolicy;
|
|
117
120
|
|
|
118
121
|
private readonly definition: StorageDefinition;
|
|
122
|
+
private readonly keys: StorageKeys;
|
|
119
123
|
private readonly agentName: string;
|
|
120
124
|
private readonly projectRoot: string;
|
|
121
125
|
private readonly logger: (line: string) => void;
|
|
@@ -137,6 +141,7 @@ export class StorageCoordinator
|
|
|
137
141
|
|
|
138
142
|
constructor(options: StorageCoordinatorOptions) {
|
|
139
143
|
this.definition = options.definition;
|
|
144
|
+
this.keys = options.keys ?? storageKeys;
|
|
140
145
|
this.policy = resolveStoragePolicy(options.definition.policy);
|
|
141
146
|
this.agentName = options.agentName;
|
|
142
147
|
this.projectRoot = options.projectRoot;
|
|
@@ -215,7 +220,7 @@ export class StorageCoordinator
|
|
|
215
220
|
if (first !== undefined) {
|
|
216
221
|
ops.push(
|
|
217
222
|
this.putOp(
|
|
218
|
-
|
|
223
|
+
this.keys.sessionEvents(this.agentName, sessionId, first.index),
|
|
219
224
|
buffer.events as unknown as JsonValue
|
|
220
225
|
)
|
|
221
226
|
);
|
|
@@ -223,7 +228,7 @@ export class StorageCoordinator
|
|
|
223
228
|
if (buffer.record !== undefined) {
|
|
224
229
|
ops.push(
|
|
225
230
|
this.putOp(
|
|
226
|
-
|
|
231
|
+
this.keys.session(this.agentName, sessionId),
|
|
227
232
|
buffer.record as unknown as JsonValue
|
|
228
233
|
)
|
|
229
234
|
);
|
|
@@ -249,14 +254,14 @@ export class StorageCoordinator
|
|
|
249
254
|
if (previous != null) {
|
|
250
255
|
ops.push(
|
|
251
256
|
this.deleteOp(
|
|
252
|
-
|
|
257
|
+
this.keys.continuation(this.agentName, record.channelId, previous)
|
|
253
258
|
)
|
|
254
259
|
);
|
|
255
260
|
}
|
|
256
261
|
if (next != null) {
|
|
257
262
|
ops.push(
|
|
258
263
|
this.putOp(
|
|
259
|
-
|
|
264
|
+
this.keys.continuation(this.agentName, record.channelId, next),
|
|
260
265
|
{ sessionId: record.sessionId }
|
|
261
266
|
)
|
|
262
267
|
);
|
|
@@ -303,9 +308,7 @@ export class StorageCoordinator
|
|
|
303
308
|
* serve start.
|
|
304
309
|
*/
|
|
305
310
|
async listSessions(): Promise<SessionRecord[]> {
|
|
306
|
-
const entries = await this.tryList(
|
|
307
|
-
storageKeys.sessionPrefix(this.agentName)
|
|
308
|
-
);
|
|
311
|
+
const entries = await this.tryList(this.keys.sessionPrefix(this.agentName));
|
|
309
312
|
return entries
|
|
310
313
|
.map((entry) => entry.value as unknown as SessionRecord)
|
|
311
314
|
.filter((record) => record != null);
|
|
@@ -322,7 +325,7 @@ export class StorageCoordinator
|
|
|
322
325
|
throw new Error("storage sink has no list");
|
|
323
326
|
}
|
|
324
327
|
const entries = await list(
|
|
325
|
-
|
|
328
|
+
this.keys.sessionPrefix(this.agentName),
|
|
326
329
|
this.context("restore")
|
|
327
330
|
);
|
|
328
331
|
if (!Array.isArray(entries)) {
|
|
@@ -345,7 +348,7 @@ export class StorageCoordinator
|
|
|
345
348
|
return undefined;
|
|
346
349
|
}
|
|
347
350
|
const entries = await listNewest(
|
|
348
|
-
|
|
351
|
+
this.keys.sessionPrefix(this.agentName),
|
|
349
352
|
limit,
|
|
350
353
|
this.context("restore")
|
|
351
354
|
);
|
|
@@ -362,7 +365,7 @@ export class StorageCoordinator
|
|
|
362
365
|
*/
|
|
363
366
|
async listSessionEvents(sessionId: string): Promise<SessionEvent[]> {
|
|
364
367
|
const entries = await this.tryList(
|
|
365
|
-
|
|
368
|
+
this.keys.sessionEventsPrefix(this.agentName, sessionId)
|
|
366
369
|
);
|
|
367
370
|
const events: SessionEvent[] = [];
|
|
368
371
|
for (const entry of entries) {
|
|
@@ -389,7 +392,7 @@ export class StorageCoordinator
|
|
|
389
392
|
}
|
|
390
393
|
const ctx = this.context("restore");
|
|
391
394
|
const record = (await get(
|
|
392
|
-
|
|
395
|
+
this.keys.session(this.agentName, sessionId),
|
|
393
396
|
ctx
|
|
394
397
|
)) as SessionRecord | null | undefined;
|
|
395
398
|
if (record == null) {
|
|
@@ -422,7 +425,7 @@ export class StorageCoordinator
|
|
|
422
425
|
}
|
|
423
426
|
const ctx = this.context("restore");
|
|
424
427
|
const pointer = await get(
|
|
425
|
-
|
|
428
|
+
this.keys.continuation(this.agentName, channelId, continuationKey),
|
|
426
429
|
ctx
|
|
427
430
|
);
|
|
428
431
|
if (pointer == null) {
|
|
@@ -482,7 +485,7 @@ export class StorageCoordinator
|
|
|
482
485
|
if (get === undefined) {
|
|
483
486
|
throw new Error("storage get is not configured");
|
|
484
487
|
}
|
|
485
|
-
const key =
|
|
488
|
+
const key = this.keys.kv(this.agentName, authorKey);
|
|
486
489
|
// Preserve stored JSON `null` (distinct from a missing key).
|
|
487
490
|
return await get(key, this.context("restore"));
|
|
488
491
|
}
|
|
@@ -492,13 +495,13 @@ export class StorageCoordinator
|
|
|
492
495
|
* at-most-once delivery queue) so callers observe durable success/failure.
|
|
493
496
|
*/
|
|
494
497
|
async kvPut(authorKey: string, value: JsonValue): Promise<void> {
|
|
495
|
-
const key =
|
|
498
|
+
const key = this.keys.kv(this.agentName, authorKey);
|
|
496
499
|
await this.definition.put(key, value, this.context("policy"));
|
|
497
500
|
}
|
|
498
501
|
|
|
499
502
|
/** Awaited author KV delete. No-op when the sink omits `delete`. */
|
|
500
503
|
async kvDelete(authorKey: string): Promise<void> {
|
|
501
|
-
const key =
|
|
504
|
+
const key = this.keys.kv(this.agentName, authorKey);
|
|
502
505
|
await this.definition.delete?.(key, this.context("policy"));
|
|
503
506
|
}
|
|
504
507
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirror an authored file tree onto an Agent Store prefix. Shared by the
|
|
3
|
+
* skills and workspace seed syncs so both keep the same write-then-sweep
|
|
4
|
+
* discipline and the same path refusals.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { posix } from "node:path";
|
|
8
|
+
import { FileConflictError, type FileSink } from "../files.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Write every `desired` key, then delete keys under `prefix` (and the
|
|
12
|
+
* `legacyPrefixes`) that nothing claims, so a redeploy drops removed files.
|
|
13
|
+
* Writes land before stale deletes, so a failed sync never leaves a gap a
|
|
14
|
+
* concurrent cloud reader could see.
|
|
15
|
+
*/
|
|
16
|
+
export async function mirrorToStore(args: {
|
|
17
|
+
sink: FileSink;
|
|
18
|
+
prefix: string;
|
|
19
|
+
desired: ReadonlyMap<string, Uint8Array>;
|
|
20
|
+
/** Pre-native layouts emptied on every sync so a rolled-forward deploy does not leave undiscoverable copies. */
|
|
21
|
+
legacyPrefixes?: readonly string[];
|
|
22
|
+
}): Promise<void> {
|
|
23
|
+
await Promise.all(
|
|
24
|
+
[...args.desired].map(([key, body]) =>
|
|
25
|
+
putLastWriterWins(args.sink, key, body)
|
|
26
|
+
)
|
|
27
|
+
);
|
|
28
|
+
const listed = await Promise.all(
|
|
29
|
+
[args.prefix, ...(args.legacyPrefixes ?? [])].map((prefix) =>
|
|
30
|
+
args.sink.list(prefix)
|
|
31
|
+
)
|
|
32
|
+
);
|
|
33
|
+
await Promise.all(
|
|
34
|
+
listed
|
|
35
|
+
.flat()
|
|
36
|
+
.filter((entry) => !args.desired.has(entry.key))
|
|
37
|
+
.map((entry) => args.sink.delete(entry.key))
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Same refusals as local materialization's `resolveInside`: a rel that
|
|
43
|
+
* escapes its directory or would not round-trip through the FUSE mount
|
|
44
|
+
* (`..`, `.`, `//`, absolute) fails the sync, exactly as it fails a local
|
|
45
|
+
* turn's workspace write. Backslashes are refused too — the store
|
|
46
|
+
* normalizes `\` to `/` on write, so the stored key would differ from the
|
|
47
|
+
* desired one and the stale pass would delete the file it just wrote.
|
|
48
|
+
*/
|
|
49
|
+
export function storeRelPath(
|
|
50
|
+
relPath: string,
|
|
51
|
+
what: "skill file" | "workspace file"
|
|
52
|
+
): string {
|
|
53
|
+
if (
|
|
54
|
+
relPath.includes("\0") ||
|
|
55
|
+
relPath.includes("\\") ||
|
|
56
|
+
posix.isAbsolute(relPath) ||
|
|
57
|
+
relPath.endsWith("/") ||
|
|
58
|
+
relPath.split("/").some((seg) => seg === ".." || seg === ".") ||
|
|
59
|
+
posix.normalize(relPath) !== relPath
|
|
60
|
+
) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Refusing ${what} path "${relPath}" (must be a normalized relative path)`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
return relPath;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Last writer wins. A raced conditional put (dual engine pods during a
|
|
70
|
+
* deploy rollover) clears the sink's cached etag, so one retry re-learns
|
|
71
|
+
* the current version and lands.
|
|
72
|
+
*/
|
|
73
|
+
async function putLastWriterWins(
|
|
74
|
+
sink: FileSink,
|
|
75
|
+
key: string,
|
|
76
|
+
body: Uint8Array
|
|
77
|
+
): Promise<void> {
|
|
78
|
+
try {
|
|
79
|
+
await sink.put(key, body);
|
|
80
|
+
} catch (error) {
|
|
81
|
+
if (!(error instanceof FileConflictError)) {
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
await sink.put(key, body);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relay-backed Slack posting for managed deployments.
|
|
3
|
+
*
|
|
4
|
+
* On AgentSDK v2 managed deployments the fork never receives a Slack token.
|
|
5
|
+
* The delivery envelope carries the matched automation's configured Slack
|
|
6
|
+
* **channel ids** only (`managedAutomation.slackChannels`, absent when the
|
|
7
|
+
* customer toggled "Send to Slack" off); each post goes through the control
|
|
8
|
+
* plane's Slack relay
|
|
9
|
+
* (`/internal/agent-serve/agent-sdk-slack-relay/:automationUuid`),
|
|
10
|
+
* authenticated with the pod's own `CURSOR_API_KEY`. The relay re-checks
|
|
11
|
+
* that the channel is configured on exactly that automation, renders the
|
|
12
|
+
* markdown, and posts as the Cursor Slack app with the customer's stored
|
|
13
|
+
* workspace token.
|
|
14
|
+
*
|
|
15
|
+
* INTERNAL: first-party multi-tenant deployment plumbing. Deliberately
|
|
16
|
+
* excluded from the published `@cursor/july` npm package (see the `files`
|
|
17
|
+
* whitelist); consumed by internal deployments via relative source imports.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
cursorExternalApiUrl,
|
|
22
|
+
resolveApiKeySync,
|
|
23
|
+
} from "../cursor/credentials.js";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Path prefix of the backend relay route. Must match the mount in
|
|
27
|
+
* `backend/server/src/agentServe/agentServeEndpoints.ts`
|
|
28
|
+
* (`agentSdkSlackRelayRoutes`).
|
|
29
|
+
*/
|
|
30
|
+
export const AGENT_SDK_SLACK_RELAY_PATH_PREFIX =
|
|
31
|
+
"/internal/agent-serve/agent-sdk-slack-relay";
|
|
32
|
+
|
|
33
|
+
/** Mirrors the relay's body bound; longer summaries are truncated client-side. */
|
|
34
|
+
export const AGENT_SDK_SLACK_RELAY_MAX_MESSAGE_CHARS = 12_000;
|
|
35
|
+
|
|
36
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Relay URL scoped to the source managed automation the delivery envelope
|
|
40
|
+
* attributed, so the relay checks the destination against exactly that
|
|
41
|
+
* automation's configured channels.
|
|
42
|
+
*/
|
|
43
|
+
export function relaySlackPostUrl(args: {
|
|
44
|
+
baseUrl: string;
|
|
45
|
+
automationUuid: string;
|
|
46
|
+
}): string {
|
|
47
|
+
const trimmed = args.baseUrl.endsWith("/")
|
|
48
|
+
? args.baseUrl.slice(0, -1)
|
|
49
|
+
: args.baseUrl;
|
|
50
|
+
return `${trimmed}${AGENT_SDK_SLACK_RELAY_PATH_PREFIX}/${encodeURIComponent(args.automationUuid)}`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type RelaySlackPostResult =
|
|
54
|
+
| { ok: true; channel: string; ts?: string; permalink?: string }
|
|
55
|
+
| {
|
|
56
|
+
ok: false;
|
|
57
|
+
channel: string;
|
|
58
|
+
/** HTTP status from the relay, or 0 when the request never completed. */
|
|
59
|
+
status: number;
|
|
60
|
+
error: string;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export interface RelaySlackPostTarget {
|
|
64
|
+
relayBaseUrl: string;
|
|
65
|
+
apiKey: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Pod credential + external API base URL, or undefined off-platform. */
|
|
69
|
+
export function resolveRelaySlackTarget(): RelaySlackPostTarget | undefined {
|
|
70
|
+
const resolved = resolveApiKeySync();
|
|
71
|
+
if (resolved === undefined) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return { relayBaseUrl: cursorExternalApiUrl(), apiKey: resolved.apiKey };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function truncateMessage(message: string): string {
|
|
78
|
+
if (message.length <= AGENT_SDK_SLACK_RELAY_MAX_MESSAGE_CHARS) {
|
|
79
|
+
return message;
|
|
80
|
+
}
|
|
81
|
+
const marker = "\n\n_(truncated)_";
|
|
82
|
+
return `${message.slice(0, AGENT_SDK_SLACK_RELAY_MAX_MESSAGE_CHARS - marker.length)}${marker}`;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function describeError(error: unknown): string {
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
return error.name === "TimeoutError" || error.name === "AbortError"
|
|
88
|
+
? "relay request timed out"
|
|
89
|
+
: error.message;
|
|
90
|
+
}
|
|
91
|
+
return String(error);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Post one markdown message to one configured channel through the relay.
|
|
96
|
+
* Never throws: every failure is a `{ ok: false }` result so product code
|
|
97
|
+
* can log and continue (a Slack outage must not fail the review).
|
|
98
|
+
*/
|
|
99
|
+
export async function postRelaySlackMessage(args: {
|
|
100
|
+
/** Source managed automation uuid from the delivery envelope. */
|
|
101
|
+
automationUuid: string;
|
|
102
|
+
/** Configured channel id (from `managedAutomation.slackChannels`). */
|
|
103
|
+
channel: string;
|
|
104
|
+
/** Markdown body. */
|
|
105
|
+
message: string;
|
|
106
|
+
/** Parent message ts to reply in a thread. */
|
|
107
|
+
threadTs?: string;
|
|
108
|
+
/** Test seam; defaults to the pod credential + external API base URL. */
|
|
109
|
+
resolve?: () => RelaySlackPostTarget | undefined;
|
|
110
|
+
fetchImpl?: typeof fetch;
|
|
111
|
+
timeoutMs?: number;
|
|
112
|
+
}): Promise<RelaySlackPostResult> {
|
|
113
|
+
const channel = args.channel.trim();
|
|
114
|
+
if (channel === "") {
|
|
115
|
+
return { ok: false, channel, status: 0, error: "empty channel" };
|
|
116
|
+
}
|
|
117
|
+
const target = (args.resolve ?? resolveRelaySlackTarget)();
|
|
118
|
+
if (target === undefined) {
|
|
119
|
+
return {
|
|
120
|
+
ok: false,
|
|
121
|
+
channel,
|
|
122
|
+
status: 0,
|
|
123
|
+
error: "no Cursor credential for the Slack relay",
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const fetchImpl = args.fetchImpl ?? fetch;
|
|
127
|
+
const url = relaySlackPostUrl({
|
|
128
|
+
baseUrl: target.relayBaseUrl,
|
|
129
|
+
automationUuid: args.automationUuid,
|
|
130
|
+
});
|
|
131
|
+
let response: Response;
|
|
132
|
+
try {
|
|
133
|
+
response = await fetchImpl(url, {
|
|
134
|
+
method: "POST",
|
|
135
|
+
headers: {
|
|
136
|
+
authorization: `Bearer ${target.apiKey}`,
|
|
137
|
+
"content-type": "application/json",
|
|
138
|
+
accept: "application/json",
|
|
139
|
+
},
|
|
140
|
+
body: JSON.stringify({
|
|
141
|
+
channel,
|
|
142
|
+
message: truncateMessage(args.message),
|
|
143
|
+
...(args.threadTs === undefined ? {} : { threadTs: args.threadTs }),
|
|
144
|
+
}),
|
|
145
|
+
signal: AbortSignal.timeout(args.timeoutMs ?? DEFAULT_TIMEOUT_MS),
|
|
146
|
+
});
|
|
147
|
+
} catch (error) {
|
|
148
|
+
return { ok: false, channel, status: 0, error: describeError(error) };
|
|
149
|
+
}
|
|
150
|
+
let body: unknown;
|
|
151
|
+
try {
|
|
152
|
+
body = await response.json();
|
|
153
|
+
} catch {
|
|
154
|
+
body = undefined;
|
|
155
|
+
}
|
|
156
|
+
const record =
|
|
157
|
+
typeof body === "object" && body !== null && !Array.isArray(body)
|
|
158
|
+
? (body as Record<string, unknown>)
|
|
159
|
+
: {};
|
|
160
|
+
if (!response.ok || record.ok !== true) {
|
|
161
|
+
return {
|
|
162
|
+
ok: false,
|
|
163
|
+
channel,
|
|
164
|
+
status: response.status,
|
|
165
|
+
error:
|
|
166
|
+
typeof record.error === "string" && record.error !== ""
|
|
167
|
+
? record.error
|
|
168
|
+
: `relay responded ${response.status}`,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
ok: true,
|
|
173
|
+
channel: typeof record.channel === "string" ? record.channel : channel,
|
|
174
|
+
...(typeof record.ts === "string" ? { ts: record.ts } : {}),
|
|
175
|
+
...(typeof record.permalink === "string"
|
|
176
|
+
? { permalink: record.permalink }
|
|
177
|
+
: {}),
|
|
178
|
+
};
|
|
179
|
+
}
|