@cursor/july 0.1.99 → 0.1.101
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 +4 -2
- package/dist/bin/agent-serve.js +3 -2
- package/dist/channels/deployments/deployments-channel.d.ts +41 -5
- package/dist/channels/deployments/deployments-channel.d.ts.map +1 -1
- package/dist/channels/deployments/deployments-channel.js +88 -8
- package/dist/channels/deployments/types.d.ts +4 -3
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/github/defaults.d.ts.map +1 -1
- package/dist/channels/github/defaults.js +28 -3
- package/dist/channels/github/progress.d.ts +7 -0
- package/dist/channels/github/progress.d.ts.map +1 -1
- package/dist/channels/origin/defaults.d.ts +43 -0
- package/dist/channels/origin/defaults.d.ts.map +1 -0
- package/dist/channels/origin/defaults.js +111 -0
- package/dist/channels/origin/index.d.ts +2 -0
- package/dist/channels/origin/index.d.ts.map +1 -1
- package/dist/channels/origin/index.js +2 -0
- package/dist/channels/origin/origin-channel.d.ts +2 -1
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +24 -3
- package/dist/channels/origin/state.d.ts +32 -0
- package/dist/channels/origin/state.d.ts.map +1 -0
- package/dist/channels/origin/state.js +23 -0
- package/dist/channels/origin/types.d.ts +23 -1
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/api.d.ts +16 -7
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +31 -14
- package/dist/channels/slack/code-fences.d.ts +17 -0
- package/dist/channels/slack/code-fences.d.ts.map +1 -0
- package/dist/channels/slack/code-fences.js +168 -0
- package/dist/channels/slack/constants.d.ts +6 -0
- package/dist/channels/slack/constants.d.ts.map +1 -1
- package/dist/channels/slack/constants.js +6 -0
- package/dist/channels/slack/defaults.d.ts +9 -4
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +154 -76
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +3 -3
- package/dist/channels/slack/inbound.d.ts +9 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +14 -0
- package/dist/channels/slack/index.d.ts +2 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +2 -0
- package/dist/channels/slack/live-delivery.d.ts +5 -0
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +116 -21
- package/dist/channels/slack/reasoning-card.d.ts +38 -0
- package/dist/channels/slack/reasoning-card.d.ts.map +1 -0
- package/dist/channels/slack/reasoning-card.js +104 -0
- package/dist/channels/slack/redact.d.ts +2 -0
- package/dist/channels/slack/redact.d.ts.map +1 -0
- package/dist/channels/slack/redact.js +5 -0
- package/dist/channels/slack/reply-options.d.ts +40 -0
- package/dist/channels/slack/reply-options.d.ts.map +1 -0
- package/dist/channels/slack/reply-options.js +150 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +8 -4
- package/dist/channels/slack/stream.d.ts +22 -10
- package/dist/channels/slack/stream.d.ts.map +1 -1
- package/dist/channels/slack/stream.js +9 -16
- package/dist/channels/slack/tool-cards.d.ts +22 -0
- package/dist/channels/slack/tool-cards.d.ts.map +1 -0
- package/dist/channels/slack/tool-cards.js +178 -0
- package/dist/channels/slack/types.d.ts +145 -6
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/connections.d.ts +18 -2
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +18 -2
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +6 -6
- package/dist/docs/ab.md +1 -1
- package/dist/docs/assets/{ab.md.DJo5r4R-.js → ab.md.mlVgqvSk.js} +1 -1
- package/dist/docs/assets/{app.BplEAZ3S.js → app.BASO9Kih.js} +1 -1
- package/dist/docs/assets/{building-with-agents.md.DI4mEzlt.js → building-with-agents.md.CUSWxlP_.js} +2 -2
- package/dist/docs/assets/chunks/@localSearchIndexroot.DbFXINq2.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.CHXyv4wP.js → VPLocalSearchBox.DwkqxoE0.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BTcsZmjQ.js → theme.CCil_13e.js} +2 -2
- package/dist/docs/assets/{evals.md.lfJoEVc8.js → evals.md.CPzDAwoH.js} +1 -1
- package/dist/docs/assets/{guides_github.md.Cnh2mL4a.js → guides_github.md.BtPr9GaP.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.CN-6YmTJ.js → guides_mcp-oauth.md.Dp6cDP7f.js} +1 -1
- package/dist/docs/assets/{guides_opentelemetry.md.bmPmkvJu.js → guides_opentelemetry.md.BVTXDCRg.js} +2 -2
- package/dist/docs/assets/{guides_slack.md.VDXQV3ja.js → guides_slack.md.9oHPye9o.js} +19 -3
- package/dist/docs/assets/{guides_slack.md.VDXQV3ja.lean.js → guides_slack.md.9oHPye9o.lean.js} +1 -1
- package/dist/docs/assets/hillclimbing.md.CpTGTCle.js +4 -0
- package/dist/docs/assets/{index.md.CVeRUOeZ.js → index.md.Bb4k8kUm.js} +1 -1
- package/dist/docs/assets/{quickstart.md.Nj_LjW_a.js → quickstart.md.DdQOF7Y8.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.DxldvyIB.js → reference_connections.md.Di6jJAXF.js} +13 -3
- package/dist/docs/assets/{reference_connections.md.DxldvyIB.lean.js → reference_connections.md.Di6jJAXF.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.BEJx9XVj.js → reference_http-api.md.oySXBO8o.js} +1 -1
- package/dist/docs/assets/scaffolding-agents.md.em43xlY1.js +1 -0
- package/dist/docs/assets/skills_ab.md.CsFNatVx.js +26 -0
- package/dist/docs/assets/skills_ab.md.CsFNatVx.lean.js +1 -0
- package/dist/docs/assets/skills_create-agent.md.BVoWPcan.js +8 -0
- package/dist/docs/assets/skills_create-agent.md.BVoWPcan.lean.js +1 -0
- package/dist/docs/assets/skills_debug.md.CDbPhHfg.js +1 -0
- package/dist/docs/assets/skills_debug.md.CDbPhHfg.lean.js +1 -0
- package/dist/docs/assets/skills_evals.md.723kpUmA.js +25 -0
- package/dist/docs/assets/skills_evals.md.723kpUmA.lean.js +1 -0
- package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +1 -0
- package/dist/docs/assets/skills_framework-map.md.BTi817yv.lean.js +1 -0
- package/dist/docs/assets/skills_github.md.D0JahM8c.js +16 -0
- package/dist/docs/assets/skills_github.md.D0JahM8c.lean.js +1 -0
- package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.js +7 -0
- package/dist/docs/assets/skills_hillclimb.md.B_zJerxA.lean.js +1 -0
- package/dist/docs/assets/skills_index.md.DKwIxzGg.js +1 -0
- package/dist/docs/assets/skills_index.md.DKwIxzGg.lean.js +1 -0
- package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.js +18 -0
- package/dist/docs/assets/skills_mcp-auth.md.DGvFP3HE.lean.js +1 -0
- package/dist/docs/assets/skills_otel.md.CgiZryR3.js +8 -0
- package/dist/docs/assets/skills_otel.md.CgiZryR3.lean.js +1 -0
- package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.js +20 -0
- package/dist/docs/assets/skills_setup-slack.md.BBgx8lUz.lean.js +1 -0
- package/dist/docs/assets/{troubleshooting.md.DCiPBhYs.js → troubleshooting.md.Cus_YZga.js} +1 -1
- package/dist/docs/building-with-agents.html +6 -6
- package/dist/docs/building-with-agents.md +14 -11
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/evals.html +6 -6
- package/dist/docs/evals.md +1 -1
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +5 -5
- package/dist/docs/guides/github.md +1 -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/mcp-oauth.md +1 -1
- package/dist/docs/guides/opentelemetry.html +7 -7
- package/dist/docs/guides/opentelemetry.md +2 -2
- package/dist/docs/guides/slack.html +22 -6
- package/dist/docs/guides/slack.md +80 -1
- package/dist/docs/guides/webhooks.html +5 -5
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +6 -6
- package/dist/docs/hillclimbing.md +5 -5
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +1 -1
- package/dist/docs/llms-full.txt +1073 -31
- package/dist/docs/llms.txt +14 -0
- package/dist/docs/quickstart.html +5 -5
- package/dist/docs/quickstart.md +1 -1
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +4 -4
- package/dist/docs/reference/connections.html +17 -7
- package/dist/docs/reference/connections.md +32 -1
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +1 -1
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +4 -4
- package/dist/docs/scaffolding-agents.html +5 -5
- package/dist/docs/scaffolding-agents.md +3 -3
- package/dist/docs/skills/ab.html +52 -0
- package/dist/docs/skills/ab.md +50 -0
- package/dist/docs/skills/create-agent.html +34 -0
- package/dist/docs/skills/create-agent.md +160 -0
- package/dist/docs/skills/debug.html +27 -0
- package/dist/docs/skills/debug.md +36 -0
- package/dist/docs/skills/evals.html +51 -0
- package/dist/docs/skills/evals.md +99 -0
- package/dist/docs/skills/framework-map.html +27 -0
- package/dist/docs/skills/framework-map.md +95 -0
- package/dist/docs/skills/github.html +42 -0
- package/dist/docs/skills/github.md +93 -0
- package/dist/docs/skills/hillclimb.html +33 -0
- package/dist/docs/skills/hillclimb.md +55 -0
- package/dist/docs/skills/index.html +27 -0
- package/dist/docs/skills/index.md +21 -0
- package/dist/docs/skills/mcp-auth.html +44 -0
- package/dist/docs/skills/mcp-auth.md +76 -0
- package/dist/docs/skills/otel.html +34 -0
- package/dist/docs/skills/otel.md +48 -0
- package/dist/docs/skills/setup-slack.html +46 -0
- package/dist/docs/skills/setup-slack.md +141 -0
- 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 +4 -4
- 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 +5 -5
- package/dist/docs/troubleshooting.md +1 -1
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +55 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/extension.js +64 -0
- package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts +30 -0
- package/dist/extensions/cursor-cloud-agents/lib/cloud.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/cloud.js +45 -0
- package/dist/extensions/cursor-cloud-agents/lib/fleet.d.ts +25 -0
- package/dist/extensions/cursor-cloud-agents/lib/fleet.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/fleet.js +85 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts +15 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/repos.js +55 -0
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +27 -0
- package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/follow_up.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/follow_up.js +37 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +83 -0
- package/dist/extensions/cursor-cloud-agents/tools/list.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/list.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/list.js +36 -0
- package/dist/extensions/cursor-cloud-agents/tools/status.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/status.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/status.js +41 -0
- package/dist/extensions.d.ts +49 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +75 -0
- package/dist/files-backends/cursor-hosted.d.ts +6 -0
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +6 -9
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/internal/advertise-tools.d.ts +4 -1
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +20 -1
- package/dist/internal/as-of.d.ts +18 -0
- package/dist/internal/as-of.d.ts.map +1 -1
- package/dist/internal/as-of.js +131 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +66 -21
- package/dist/internal/continuation-identity.d.ts.map +1 -1
- package/dist/internal/continuation-identity.js +3 -1
- package/dist/internal/conversation-mirror.d.ts.map +1 -1
- package/dist/internal/conversation-mirror.js +3 -4
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts +16 -0
- package/dist/internal/cursor/hosted-deployment-secrets.d.ts.map +1 -0
- package/dist/internal/cursor/hosted-deployment-secrets.js +61 -0
- package/dist/internal/cursor/hosted-store-secrets.d.ts +15 -0
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -0
- package/dist/internal/cursor/hosted-store-secrets.js +48 -0
- package/dist/internal/cursor-deployment-relay.d.ts +15 -1
- package/dist/internal/cursor-deployment-relay.d.ts.map +1 -1
- package/dist/internal/cursor-deployment-relay.js +46 -7
- package/dist/internal/deploy-client.d.ts +29 -6
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +61 -19
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +426 -121
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +5 -0
- package/dist/internal/framework-file-storage.d.ts +15 -8
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +70 -10
- package/dist/internal/framework-storage-selection.d.ts +12 -12
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +33 -39
- package/dist/internal/hosted-delivery.d.ts +3 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +19 -32
- package/dist/internal/hosted-execution-diag.d.ts +5 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +5 -0
- package/dist/internal/hosted-execution-flush.d.ts +46 -0
- package/dist/internal/hosted-execution-flush.d.ts.map +1 -0
- package/dist/internal/hosted-execution-flush.js +81 -0
- package/dist/internal/mcp-endpoint.js +1 -0
- package/dist/internal/mcp-host.d.ts +2 -1
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +35 -15
- package/dist/internal/review-comments.d.ts +1 -1
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +4 -4
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +79 -104
- package/dist/internal/session-engine.d.ts +9 -7
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +45 -34
- package/dist/internal/session-run-log.d.ts +5 -4
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +8 -8
- package/dist/internal/start-log-store.d.ts +60 -0
- package/dist/internal/start-log-store.d.ts.map +1 -0
- package/dist/internal/start-log-store.js +151 -0
- package/dist/internal/storage-coordinator.d.ts +0 -6
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +1 -9
- package/dist/internal/tool-policy.d.ts +8 -0
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +19 -7
- package/dist/playground/assets/{index-jzNbJENa.js → index-BnNN1-EK.js} +45 -45
- package/dist/playground/assets/index-DBQCwFp0.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted-v2.d.ts +83 -0
- package/dist/storage-backends/cursor-hosted-v2.d.ts.map +1 -0
- package/dist/storage-backends/cursor-hosted-v2.js +164 -0
- package/dist/storage-backends/cursor-hosted.d.ts +6 -0
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +6 -1
- package/dist/storage-protocol.d.ts +24 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +33 -0
- package/dist/storage.d.ts +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/types.d.ts +123 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -1
- package/docs/README.md +1 -1
- package/docs/ab.md +1 -1
- package/docs/building-with-agents.md +14 -11
- package/docs/evals.md +1 -1
- package/docs/guides/github.md +1 -1
- package/docs/guides/mcp-oauth.md +1 -1
- package/docs/guides/opentelemetry.md +2 -2
- package/docs/guides/slack.md +80 -1
- package/docs/hillclimbing.md +5 -5
- package/docs/quickstart.md +1 -1
- package/docs/reference/connections.md +32 -1
- package/docs/reference/http-api.md +1 -1
- package/docs/scaffolding-agents.md +3 -3
- package/docs/skills/index.md +26 -0
- package/docs/troubleshooting.md +1 -1
- package/package.json +18 -4
- package/src/bin/agent-serve.ts +11 -2
- package/src/channels/deployments/deployments-channel.ts +117 -8
- package/src/channels/deployments/types.ts +4 -3
- package/src/channels/github/defaults.ts +36 -3
- package/src/channels/github/progress.ts +7 -0
- package/src/channels/origin/defaults.ts +143 -0
- package/src/channels/origin/index.ts +2 -0
- package/src/channels/origin/origin-channel.ts +37 -1
- package/src/channels/origin/state.ts +54 -0
- package/src/channels/origin/types.ts +24 -0
- package/src/channels/slack/api.ts +37 -18
- package/src/channels/slack/code-fences.ts +183 -0
- package/src/channels/slack/constants.ts +6 -0
- package/src/channels/slack/defaults.ts +173 -92
- package/src/channels/slack/dispatch.ts +8 -1
- package/src/channels/slack/inbound.ts +17 -0
- package/src/channels/slack/index.ts +2 -0
- package/src/channels/slack/live-delivery.ts +142 -28
- package/src/channels/slack/reasoning-card.ts +140 -0
- package/src/channels/slack/redact.ts +6 -0
- package/src/channels/slack/reply-options.ts +229 -0
- package/src/channels/slack/slack-channel.ts +7 -2
- package/src/channels/slack/stream.ts +31 -24
- package/src/channels/slack/tool-cards.ts +221 -0
- package/src/channels/slack/types.ts +159 -6
- package/src/connections.ts +18 -1
- package/src/extensions/cursor-cloud-agents/extension.ts +118 -0
- package/src/extensions/cursor-cloud-agents/lib/cloud.ts +79 -0
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +109 -0
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +81 -0
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +27 -0
- package/src/extensions/cursor-cloud-agents/tools/follow_up.ts +29 -0
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +84 -0
- package/src/extensions/cursor-cloud-agents/tools/list.ts +31 -0
- package/src/extensions/cursor-cloud-agents/tools/status.ts +39 -0
- package/src/extensions.ts +98 -0
- package/src/files-backends/cursor-hosted.ts +15 -5
- package/src/index.ts +2 -0
- package/src/internal/advertise-tools.ts +37 -12
- package/src/internal/as-of.ts +163 -0
- package/src/internal/cli-deploy.ts +88 -25
- package/src/internal/continuation-identity.ts +3 -1
- package/src/internal/conversation-mirror.ts +3 -8
- package/src/internal/cursor/hosted-deployment-secrets.ts +72 -0
- package/src/internal/cursor/hosted-store-secrets.ts +72 -0
- package/src/internal/cursor-deployment-relay.ts +65 -8
- package/src/internal/deploy-client.ts +83 -28
- package/src/internal/discovery.ts +479 -114
- package/src/internal/distribution.ts +5 -0
- package/src/internal/framework-file-storage.ts +80 -10
- package/src/internal/framework-storage-selection.ts +31 -44
- package/src/internal/hosted-delivery.ts +38 -63
- package/src/internal/hosted-execution-diag.ts +6 -0
- package/src/internal/hosted-execution-flush.ts +142 -0
- package/src/internal/mcp-endpoint.ts +1 -0
- package/src/internal/mcp-host.ts +40 -14
- package/src/internal/review-comments.ts +5 -2
- package/src/internal/server.ts +81 -100
- package/src/internal/session-engine.ts +56 -28
- package/src/internal/session-run-log.ts +8 -12
- package/src/internal/start-log-store.ts +177 -0
- package/src/internal/storage-coordinator.ts +1 -11
- package/src/internal/tool-policy.ts +39 -9
- package/src/storage-backends/cursor-hosted-v2.ts +219 -0
- package/src/storage-backends/cursor-hosted.ts +6 -1
- package/src/storage-protocol.ts +37 -0
- package/src/storage.ts +1 -0
- package/src/types.ts +177 -14
- package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +0 -1
- package/dist/docs/assets/hillclimbing.md.DhESf3OO.js +0 -4
- package/dist/docs/assets/scaffolding-agents.md.D7UUkWw0.js +0 -1
- package/dist/internal/null-kv-storage.d.ts +0 -48
- package/dist/internal/null-kv-storage.d.ts.map +0 -1
- package/dist/internal/null-kv-storage.js +0 -58
- package/dist/playground/assets/index-D7rGZNjy.css +0 -1
- package/src/internal/null-kv-storage.ts +0 -74
- /package/dist/docs/assets/{ab.md.DJo5r4R-.lean.js → ab.md.mlVgqvSk.lean.js} +0 -0
- /package/dist/docs/assets/{building-with-agents.md.DI4mEzlt.lean.js → building-with-agents.md.CUSWxlP_.lean.js} +0 -0
- /package/dist/docs/assets/{evals.md.lfJoEVc8.lean.js → evals.md.CPzDAwoH.lean.js} +0 -0
- /package/dist/docs/assets/{guides_github.md.Cnh2mL4a.lean.js → guides_github.md.BtPr9GaP.lean.js} +0 -0
- /package/dist/docs/assets/{guides_mcp-oauth.md.CN-6YmTJ.lean.js → guides_mcp-oauth.md.Dp6cDP7f.lean.js} +0 -0
- /package/dist/docs/assets/{guides_opentelemetry.md.bmPmkvJu.lean.js → guides_opentelemetry.md.BVTXDCRg.lean.js} +0 -0
- /package/dist/docs/assets/{hillclimbing.md.DhESf3OO.lean.js → hillclimbing.md.CpTGTCle.lean.js} +0 -0
- /package/dist/docs/assets/{index.md.CVeRUOeZ.lean.js → index.md.Bb4k8kUm.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.Nj_LjW_a.lean.js → quickstart.md.DdQOF7Y8.lean.js} +0 -0
- /package/dist/docs/assets/{reference_http-api.md.BEJx9XVj.lean.js → reference_http-api.md.oySXBO8o.lean.js} +0 -0
- /package/dist/docs/assets/{scaffolding-agents.md.D7UUkWw0.lean.js → scaffolding-agents.md.em43xlY1.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.DCiPBhYs.lean.js → troubleshooting.md.Cus_YZga.lean.js} +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who launched which cloud agent. The tools authenticate with the serve
|
|
3
|
+
* host's one Cursor API key, so the host itself must keep every session's
|
|
4
|
+
* cloud agents bound to the principal that launched them: status and
|
|
5
|
+
* follow-ups only reach agents recorded here for the same principal, and
|
|
6
|
+
* the fleet listing is that principal's records, by default narrowed to the
|
|
7
|
+
* session that launched them.
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
const PREFIX = "cloud-agents";
|
|
20
|
+
const fleetSchema = z.array(z.object({
|
|
21
|
+
agentId: z.string(),
|
|
22
|
+
name: z.string().optional(),
|
|
23
|
+
launchedAt: z.string(),
|
|
24
|
+
sessionId: z.string().optional(),
|
|
25
|
+
}));
|
|
26
|
+
const ownerSchema = z.object({ principal: z.string() });
|
|
27
|
+
// `host.kv` has no compare-and-swap, and a model that launches two agents in
|
|
28
|
+
// one turn calls this tool in parallel. Chain the index read-modify-write per
|
|
29
|
+
// principal so neither launch overwrites the other's entry.
|
|
30
|
+
const indexWrites = new Map();
|
|
31
|
+
function withIndexLock(key, task) {
|
|
32
|
+
var _a;
|
|
33
|
+
const run = ((_a = indexWrites.get(key)) !== null && _a !== void 0 ? _a : Promise.resolve()).then(task, task);
|
|
34
|
+
indexWrites.set(key, run);
|
|
35
|
+
return run.finally(() => {
|
|
36
|
+
if (indexWrites.get(key) === run) {
|
|
37
|
+
indexWrites.delete(key);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Unauthenticated sessions (local dev, direct calls) share one principal. */
|
|
42
|
+
export function principalOf(ctx) {
|
|
43
|
+
const auth = ctx.session.auth;
|
|
44
|
+
return auth === null
|
|
45
|
+
? "anonymous"
|
|
46
|
+
: `${auth.principalType}:${auth.principalId}`;
|
|
47
|
+
}
|
|
48
|
+
export function recordLaunch(ctx, agentId, name) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const principal = principalOf(ctx);
|
|
51
|
+
const entry = {
|
|
52
|
+
agentId,
|
|
53
|
+
name,
|
|
54
|
+
launchedAt: new Date().toISOString(),
|
|
55
|
+
sessionId: ctx.session.id,
|
|
56
|
+
};
|
|
57
|
+
yield ctx.host.kv.put(`${PREFIX}/agents/${agentId}`, { principal });
|
|
58
|
+
yield withIndexLock(fleetKey(principal), () => __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const fleet = yield listFleet(ctx);
|
|
60
|
+
yield ctx.host.kv.put(fleetKey(principal), [entry, ...fleet]);
|
|
61
|
+
}));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Refuse agents launched by another principal, or not through the extension. */
|
|
65
|
+
export function assertOwned(ctx, agentId) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const owner = ownerSchema.safeParse(yield ctx.host.kv.get(`${PREFIX}/agents/${agentId}`));
|
|
68
|
+
if (!owner.success || owner.data.principal !== principalOf(ctx)) {
|
|
69
|
+
throw new Error(`Agent ${agentId} was not launched through this extension by this principal; only your own launches can be read or steered.`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/** The caller's launches, newest first: this session's, or every session's. */
|
|
74
|
+
export function listFleet(ctx_1) {
|
|
75
|
+
return __awaiter(this, arguments, void 0, function* (ctx, scope = "all") {
|
|
76
|
+
const fleet = fleetSchema.safeParse(yield ctx.host.kv.get(fleetKey(principalOf(ctx))));
|
|
77
|
+
const entries = fleet.success ? fleet.data : [];
|
|
78
|
+
return scope === "all"
|
|
79
|
+
? entries
|
|
80
|
+
: entries.filter((entry) => entry.sessionId === ctx.session.id);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function fleetKey(principal) {
|
|
84
|
+
return `${PREFIX}/principals/${encodeURIComponent(principal)}`;
|
|
85
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which repositories a launch may target. The model picks `repo` / `ref` /
|
|
3
|
+
* `prUrl` per call, but the author's `cloud.repos` are the allowlist.
|
|
4
|
+
* Model-chosen targets always require that allowlist: an unbound mount
|
|
5
|
+
* (no `cloud.repos`) must not accept an arbitrary URL under the host API
|
|
6
|
+
* key, with or without `envVars`.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentCloudOptions } from "../../../types.js";
|
|
9
|
+
export interface LaunchTarget {
|
|
10
|
+
repo?: string;
|
|
11
|
+
ref?: string;
|
|
12
|
+
prUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function launchRepos(target: LaunchTarget, cloud: AgentCloudOptions): AgentCloudOptions["repos"];
|
|
15
|
+
//# sourceMappingURL=repos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/lib/repos.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,iBAAiB,GACvB,iBAAiB,CAAC,OAAO,CAAC,CAsD5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which repositories a launch may target. The model picks `repo` / `ref` /
|
|
3
|
+
* `prUrl` per call, but the author's `cloud.repos` are the allowlist.
|
|
4
|
+
* Model-chosen targets always require that allowlist: an unbound mount
|
|
5
|
+
* (no `cloud.repos`) must not accept an arbitrary URL under the host API
|
|
6
|
+
* key, with or without `envVars`.
|
|
7
|
+
*/
|
|
8
|
+
import { parsePrUrl } from "../../../internal/scm/pr-url.js";
|
|
9
|
+
export function launchRepos(target, cloud) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
var _c, _d, _e, _f, _g;
|
|
12
|
+
if (target.repo === undefined &&
|
|
13
|
+
target.ref === undefined &&
|
|
14
|
+
target.prUrl === undefined) {
|
|
15
|
+
return cloud.repos;
|
|
16
|
+
}
|
|
17
|
+
const pr = target.prUrl === undefined ? undefined : parsePrUrl(target.prUrl);
|
|
18
|
+
if (target.prUrl !== undefined && (pr === null || pr === void 0 ? void 0 : pr.provider) !== "github") {
|
|
19
|
+
throw new Error(`prUrl must be a GitHub pull request URL: ${target.prUrl}`);
|
|
20
|
+
}
|
|
21
|
+
const prRepo = pr === undefined ? undefined : `https://github.com/${pr.owner}/${pr.repo}`;
|
|
22
|
+
// A lone `ref` needs exactly one configured repository to apply to.
|
|
23
|
+
const configured = (_c = cloud.repos) !== null && _c !== void 0 ? _c : [];
|
|
24
|
+
const url = (_e = (_d = target.repo) !== null && _d !== void 0 ? _d : prRepo) !== null && _e !== void 0 ? _e : (configured.length === 1 ? (_a = configured[0]) === null || _a === void 0 ? void 0 : _a.url : undefined);
|
|
25
|
+
if (url === undefined) {
|
|
26
|
+
throw new Error(configured.length > 1
|
|
27
|
+
? "`repo` is required: this extension configures several repositories."
|
|
28
|
+
: "`repo` is required: this extension has no configured default repository.");
|
|
29
|
+
}
|
|
30
|
+
if (prRepo !== undefined && repoKey(prRepo) !== repoKey(url)) {
|
|
31
|
+
throw new Error(`prUrl ${target.prUrl} is not a pull request of ${url}.`);
|
|
32
|
+
}
|
|
33
|
+
const allowlisted = (_b = cloud.repos) === null || _b === void 0 ? void 0 : _b.some((configured) => repoKey(configured.url) === repoKey(url));
|
|
34
|
+
if (allowlisted !== true) {
|
|
35
|
+
throw new Error(cloud.repos === undefined
|
|
36
|
+
? `Configure cloud.repos before launching against a model-chosen repository (${url}).`
|
|
37
|
+
: `${url} is not one of this extension's configured repositories.`);
|
|
38
|
+
}
|
|
39
|
+
// Keep the matching allowlist entry's branch / PR defaults when the model
|
|
40
|
+
// only names the repository (handoff always passes `repo`). An explicit
|
|
41
|
+
// `ref` clears an inherited `prUrl` so branch and PR targets do not mix.
|
|
42
|
+
const match = configured.find((configuredRepo) => repoKey(configuredRepo.url) === repoKey(url));
|
|
43
|
+
return [
|
|
44
|
+
{
|
|
45
|
+
url,
|
|
46
|
+
startingRef: (_f = target.ref) !== null && _f !== void 0 ? _f : match === null || match === void 0 ? void 0 : match.startingRef,
|
|
47
|
+
prUrl: (_g = target.prUrl) !== null && _g !== void 0 ? _g : (target.ref !== undefined ? undefined : match === null || match === void 0 ? void 0 : match.prUrl),
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
function repoKey(url) {
|
|
52
|
+
const parsed = new URL(url);
|
|
53
|
+
const path = parsed.pathname.replace(/\.git$/, "").replace(/\/+$/, "");
|
|
54
|
+
return `${parsed.hostname}${path}`.toLowerCase();
|
|
55
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Delegate coding work to Cursor cloud agents: when to hand off, how to write the prompt, and how to follow up and check status."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Cloud agent handoff
|
|
6
|
+
|
|
7
|
+
Hand work to a Cursor cloud agent when it needs a repository checkout, a long run, or an isolated machine: implementing a change, running a test suite, opening a pull request. Answer questions and small reads yourself.
|
|
8
|
+
|
|
9
|
+
The tools below are this extension's; they appear under its mount namespace, as `<namespace>__launch` and so on.
|
|
10
|
+
|
|
11
|
+
## Launch
|
|
12
|
+
|
|
13
|
+
Call `launch` with a self-contained prompt: the goal, the repository or pull request, constraints (branch, files to leave alone), and what done looks like (tests pass, PR opened). Pass `ref` or `prUrl` to pick a branch or pull request; `repo` must be one of the configured repositories.
|
|
14
|
+
|
|
15
|
+
The result carries `agentId` (`bc-...`) and a `url`. Report both in full. Never truncate the id.
|
|
16
|
+
|
|
17
|
+
## Follow up
|
|
18
|
+
|
|
19
|
+
Call `follow_up` with the `agentId` to steer an agent you launched or ask for changes on its branch. A busy agent rejects the follow-up: check status and retry once its run has finished. Do not launch a second agent for follow-up work on the same branch.
|
|
20
|
+
|
|
21
|
+
## Check status
|
|
22
|
+
|
|
23
|
+
Call `status` with the `agentId`. The latest run carries `status` (`running`, `finished`, `error`, or `cancelled`), the final `result` text, an `error` message, and any pushed `branches` or pull requests; the agent itself reports `archived`. A run takes minutes: check when asked or when you need the result, not in a tight loop.
|
|
24
|
+
|
|
25
|
+
## Fleet
|
|
26
|
+
|
|
27
|
+
`list` returns the agents launched in this session, newest first; pass `scope: "all"` to include your launches from other sessions. Launch one agent per independent task and give each a descriptive `name`. Agents launched by others are out of reach.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow_up.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/follow_up.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,QAAA,MAAM,SAAS,EAAE,cAkBf,CAAC;eAEY,SAAS"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Agent } from "@cursor/sdk";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { defineTool } from "../../../tools.js";
|
|
13
|
+
import extension from "../extension.js";
|
|
14
|
+
import { agentRef, apiKey } from "../lib/cloud.js";
|
|
15
|
+
import { assertOwned } from "../lib/fleet.js";
|
|
16
|
+
const follow_up = defineTool({
|
|
17
|
+
description: "Send a follow-up prompt to a cloud agent you launched. The agent must be idle; a busy agent rejects the follow-up.",
|
|
18
|
+
effect: "write",
|
|
19
|
+
needsApproval: () => extension.config.needsApproval,
|
|
20
|
+
inputSchema: agentRef.extend({
|
|
21
|
+
prompt: z.string().min(1).describe("The follow-up instruction."),
|
|
22
|
+
}),
|
|
23
|
+
execute(input, ctx) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
yield assertOwned(ctx, input.agentId);
|
|
26
|
+
const agent = yield Agent.resume(input.agentId, { apiKey: apiKey() });
|
|
27
|
+
try {
|
|
28
|
+
const run = yield agent.send(input.prompt);
|
|
29
|
+
return { agentId: input.agentId, runId: run.id, status: run.status };
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
agent.close();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
export default follow_up;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/launch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,QAAA,MAAM,MAAM,EAAE,cAwEZ,CAAC;eAEY,MAAM"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Agent } from "@cursor/sdk";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { defineTool } from "../../../tools.js";
|
|
13
|
+
import extension from "../extension.js";
|
|
14
|
+
import { agentUrl, agentView, apiKey, modelSelection } from "../lib/cloud.js";
|
|
15
|
+
import { recordLaunch } from "../lib/fleet.js";
|
|
16
|
+
import { launchRepos } from "../lib/repos.js";
|
|
17
|
+
const launch = defineTool({
|
|
18
|
+
description: "Launch a Cursor cloud agent on a repository with a self-contained task. Returns the agent id and URL; check progress with the status tool.",
|
|
19
|
+
effect: "write",
|
|
20
|
+
needsApproval: () => extension.config.needsApproval,
|
|
21
|
+
inputSchema: z.object({
|
|
22
|
+
prompt: z
|
|
23
|
+
.string()
|
|
24
|
+
.min(1)
|
|
25
|
+
.describe("Self-contained task: goal, constraints, and what done looks like."),
|
|
26
|
+
repo: z
|
|
27
|
+
.string()
|
|
28
|
+
.url()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("GitHub repository URL, one of the configured repositories. Defaults to the configured repository."),
|
|
31
|
+
ref: z.string().optional().describe("Starting branch or commit."),
|
|
32
|
+
prUrl: z
|
|
33
|
+
.string()
|
|
34
|
+
.url()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Work on this pull request's branch instead of a new one."),
|
|
37
|
+
name: z
|
|
38
|
+
.string()
|
|
39
|
+
.max(100)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Display name; derived from the prompt when omitted."),
|
|
42
|
+
}),
|
|
43
|
+
execute(input, ctx) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
const { cloud } = extension.config;
|
|
46
|
+
const key = apiKey();
|
|
47
|
+
const agent = yield Agent.create({
|
|
48
|
+
apiKey: key,
|
|
49
|
+
model: modelSelection(),
|
|
50
|
+
name: input.name,
|
|
51
|
+
cloud: Object.assign(Object.assign({}, cloud), { repos: launchRepos(input, cloud) }),
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
const run = yield agent.send(input.prompt);
|
|
55
|
+
yield recordLaunch(ctx, agent.agentId, input.name);
|
|
56
|
+
return {
|
|
57
|
+
agentId: agent.agentId,
|
|
58
|
+
runId: run.id,
|
|
59
|
+
status: run.status,
|
|
60
|
+
url: agentUrl(agent.agentId),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// The API can fail after the agent exists (slow admission,
|
|
65
|
+
// post-create checks). The SDK seeded the id unless envVars made
|
|
66
|
+
// the server mint it, so read the agent back and keep the handle;
|
|
67
|
+
// envVars launches have no id to read back and surface the error.
|
|
68
|
+
const info = cloud.envVars === undefined
|
|
69
|
+
? yield Agent.get(agent.agentId, { apiKey: key }).catch(() => undefined)
|
|
70
|
+
: undefined;
|
|
71
|
+
if (info === undefined) {
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
yield recordLaunch(ctx, info.agentId, input.name);
|
|
75
|
+
return Object.assign(Object.assign({}, agentView(info)), { launchError: error instanceof Error ? error.message : String(error) });
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
agent.close();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
export default launch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,QAAA,MAAM,IAAI,EAAE,cAsBV,CAAC;eAEY,IAAI"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { defineTool } from "../../../tools.js";
|
|
12
|
+
import { agentUrl } from "../lib/cloud.js";
|
|
13
|
+
import { listFleet } from "../lib/fleet.js";
|
|
14
|
+
const list = defineTool({
|
|
15
|
+
description: 'List the cloud agents launched in this session, newest first. Pass scope "all" for every agent you launched, in any session.',
|
|
16
|
+
effect: "read",
|
|
17
|
+
inputSchema: z.object({
|
|
18
|
+
scope: z
|
|
19
|
+
.enum(["session", "all"])
|
|
20
|
+
.default("session")
|
|
21
|
+
.describe("session: agents this session launched; all: every agent launched by you, in any session."),
|
|
22
|
+
limit: z.number().int().min(1).max(100).default(20),
|
|
23
|
+
}),
|
|
24
|
+
execute(input, ctx) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
const fleet = yield listFleet(ctx, input.scope);
|
|
27
|
+
return {
|
|
28
|
+
sessionId: ctx.session.id,
|
|
29
|
+
agents: fleet
|
|
30
|
+
.slice(0, input.limit)
|
|
31
|
+
.map((entry) => (Object.assign(Object.assign({}, entry), { url: agentUrl(entry.agentId) }))),
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
export default list;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/extensions/cursor-cloud-agents/tools/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,QAAA,MAAM,MAAM,EAAE,cA6BZ,CAAC;eAEY,MAAM"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Agent } from "@cursor/sdk";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { defineTool } from "../../../tools.js";
|
|
13
|
+
import { agentRef, agentView, apiKey, runView } from "../lib/cloud.js";
|
|
14
|
+
import { assertOwned } from "../lib/fleet.js";
|
|
15
|
+
const status = defineTool({
|
|
16
|
+
description: "Read a cloud agent you launched and its latest run: state, final result text, error, and pushed branches or pull requests.",
|
|
17
|
+
effect: "read",
|
|
18
|
+
inputSchema: agentRef.extend({
|
|
19
|
+
runId: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("A specific run; defaults to the latest."),
|
|
23
|
+
}),
|
|
24
|
+
execute(input, ctx) {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
var _a;
|
|
27
|
+
var _b;
|
|
28
|
+
yield assertOwned(ctx, input.agentId);
|
|
29
|
+
const key = apiKey();
|
|
30
|
+
const cloud = { runtime: "cloud", apiKey: key };
|
|
31
|
+
const info = yield Agent.get(input.agentId, { apiKey: key });
|
|
32
|
+
// The run list carries no result text; fetch the run itself.
|
|
33
|
+
const runId = (_b = input.runId) !== null && _b !== void 0 ? _b : (_a = (yield Agent.listRuns(input.agentId, Object.assign(Object.assign({}, cloud), { limit: 1 }))).items[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
34
|
+
const run = runId === undefined
|
|
35
|
+
? undefined
|
|
36
|
+
: yield Agent.getRun(runId, Object.assign(Object.assign({}, cloud), { agentId: input.agentId }));
|
|
37
|
+
return Object.assign(Object.assign({}, agentView(info)), { run: run === undefined ? undefined : runView(run) });
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
export default status;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extensions — agent-shaped trees an agent mounts under a namespace.
|
|
3
|
+
*
|
|
4
|
+
* An extension is a directory laid out like `agent/`: `extension.ts`
|
|
5
|
+
* declares it, `tools/<name>.ts` and `skills/<name>.md|ts` are its
|
|
6
|
+
* contributions, `lib/` holds shared code.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // extension.ts
|
|
10
|
+
* import { defineExtension } from "@cursor/july/extensions";
|
|
11
|
+
* import { z } from "zod";
|
|
12
|
+
*
|
|
13
|
+
* export default defineExtension({
|
|
14
|
+
* root: import.meta.dirname,
|
|
15
|
+
* description: "CRM lookups.",
|
|
16
|
+
* config: z.object({ apiKey: z.string() }),
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // tools/search.ts
|
|
20
|
+
* import extension from "../extension.js";
|
|
21
|
+
*
|
|
22
|
+
* export default defineTool({
|
|
23
|
+
* description: "Search the CRM.",
|
|
24
|
+
* execute: (input) => search(extension.config.apiKey, input),
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* A consumer mounts it from `agent/extensions/<ns>.ts`; the filename is the
|
|
29
|
+
* namespace, and every contribution is exposed as `<ns>__<name>`
|
|
30
|
+
* (`crm__search`). `__` is reserved for that: an authored `agent/tools/` or
|
|
31
|
+
* `agent/skills/` name may not contain it.
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* // agent/extensions/crm.ts
|
|
35
|
+
* import crm from "@acme/crm";
|
|
36
|
+
*
|
|
37
|
+
* export default crm({ apiKey: process.env.CRM_API_KEY! });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* To adjust a contribution, mount as a directory instead and overlay the
|
|
41
|
+
* slot: `agent/extensions/crm/extension.ts` holds the mount, and
|
|
42
|
+
* `agent/extensions/crm/tools/search.ts` replaces `crm__search` — or removes
|
|
43
|
+
* it with `export default disableTool()`.
|
|
44
|
+
*/
|
|
45
|
+
import type { DisabledToolDefinition, Extension, ExtensionOptions } from "./types.js";
|
|
46
|
+
export type { DisabledToolDefinition, DiscoveredExtension, Extension, ExtensionDeclaration, ExtensionMount, ExtensionOptions, } from "./types.js";
|
|
47
|
+
export declare function defineExtension<TConfig = undefined, TInput = TConfig>(options: ExtensionOptions<TConfig, TInput>): Extension<TConfig, TInput>;
|
|
48
|
+
export declare function disableTool(): DisabledToolDefinition;
|
|
49
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,SAAS,EAET,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,GAAG,OAAO,EACnE,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CA6B5B;AAED,wBAAgB,WAAW,IAAI,sBAAsB,CAEpD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extensions — agent-shaped trees an agent mounts under a namespace.
|
|
3
|
+
*
|
|
4
|
+
* An extension is a directory laid out like `agent/`: `extension.ts`
|
|
5
|
+
* declares it, `tools/<name>.ts` and `skills/<name>.md|ts` are its
|
|
6
|
+
* contributions, `lib/` holds shared code.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // extension.ts
|
|
10
|
+
* import { defineExtension } from "@cursor/july/extensions";
|
|
11
|
+
* import { z } from "zod";
|
|
12
|
+
*
|
|
13
|
+
* export default defineExtension({
|
|
14
|
+
* root: import.meta.dirname,
|
|
15
|
+
* description: "CRM lookups.",
|
|
16
|
+
* config: z.object({ apiKey: z.string() }),
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // tools/search.ts
|
|
20
|
+
* import extension from "../extension.js";
|
|
21
|
+
*
|
|
22
|
+
* export default defineTool({
|
|
23
|
+
* description: "Search the CRM.",
|
|
24
|
+
* execute: (input) => search(extension.config.apiKey, input),
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* A consumer mounts it from `agent/extensions/<ns>.ts`; the filename is the
|
|
29
|
+
* namespace, and every contribution is exposed as `<ns>__<name>`
|
|
30
|
+
* (`crm__search`). `__` is reserved for that: an authored `agent/tools/` or
|
|
31
|
+
* `agent/skills/` name may not contain it.
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* // agent/extensions/crm.ts
|
|
35
|
+
* import crm from "@acme/crm";
|
|
36
|
+
*
|
|
37
|
+
* export default crm({ apiKey: process.env.CRM_API_KEY! });
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* To adjust a contribution, mount as a directory instead and overlay the
|
|
41
|
+
* slot: `agent/extensions/crm/extension.ts` holds the mount, and
|
|
42
|
+
* `agent/extensions/crm/tools/search.ts` replaces `crm__search` — or removes
|
|
43
|
+
* it with `export default disableTool()`.
|
|
44
|
+
*/
|
|
45
|
+
import { brandDefinition } from "./internal/brand.js";
|
|
46
|
+
export function defineExtension(options) {
|
|
47
|
+
let mounted;
|
|
48
|
+
const mount = (config) => {
|
|
49
|
+
const parsed = options.config === undefined
|
|
50
|
+
? config
|
|
51
|
+
: options.config.parse(config);
|
|
52
|
+
mounted = { config: parsed };
|
|
53
|
+
return brandDefinition("extension", {
|
|
54
|
+
extension: handle,
|
|
55
|
+
config: parsed,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
const handle = Object.defineProperties(mount, {
|
|
59
|
+
root: { value: options.root, enumerable: true },
|
|
60
|
+
description: { value: options.description, enumerable: true },
|
|
61
|
+
config: {
|
|
62
|
+
enumerable: true,
|
|
63
|
+
get() {
|
|
64
|
+
if (mounted === undefined) {
|
|
65
|
+
throw new Error(`Extension at ${options.root} read its config before an agent mounted it. Mount it from agent/extensions/<ns>.ts; the mount runs before the tree loads.`);
|
|
66
|
+
}
|
|
67
|
+
return mounted.config;
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return handle;
|
|
72
|
+
}
|
|
73
|
+
export function disableTool() {
|
|
74
|
+
return brandDefinition("disabled-tool", {});
|
|
75
|
+
}
|
|
@@ -101,6 +101,12 @@ export interface CursorHostedFilesOptions {
|
|
|
101
101
|
resolveApiKey?: () => string | undefined;
|
|
102
102
|
/** File store to address (default: `AGENT_SERVE_STORE_SOURCE_ID`). */
|
|
103
103
|
storeSourceId?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Lazy store source id, re-resolved on every call and preferred over
|
|
106
|
+
* {@link storeSourceId} — freeze bind drops ids into `/run/cursor/secrets`
|
|
107
|
+
* after serve start without restarting July.
|
|
108
|
+
*/
|
|
109
|
+
resolveStoreSourceId?: () => string | undefined;
|
|
104
110
|
/** Test seam; defaults to global fetch. */
|
|
105
111
|
fetch?: typeof fetch;
|
|
106
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-hosted.d.ts","sourceRoot":"","sources":["../../src/files-backends/cursor-hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor-hosted.d.ts","sourceRoot":"","sources":["../../src/files-backends/cursor-hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAerB;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,gCACjB,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6CAA6C,0CACjB,CAAC;AAgB1C;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,SAAS,CAEpB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAYT;AAED,MAAM,WAAW,wBAAwB;IACvC,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACzC,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChD,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAuCD,KAAK,kBAAkB,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG;IAChD,gFAAgF;IAChF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;CACrD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,kBAAkB,CAwXpB"}
|
|
@@ -53,6 +53,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
53
53
|
};
|
|
54
54
|
import { createHash } from "node:crypto";
|
|
55
55
|
import { FileConflictError, } from "../files.js";
|
|
56
|
+
import { resolveDeploymentStoreSourceIdSync, resolveFrameworkStoreSourceIdSync, } from "../internal/cursor/hosted-store-secrets.js";
|
|
56
57
|
import { createAgentStorePresignedUrlValidatorForBackend } from "./agent-store-presigned-url.js";
|
|
57
58
|
/**
|
|
58
59
|
* Same default as the hosted storage backend, inlined so this entrypoint does
|
|
@@ -102,9 +103,7 @@ const MAX_LIST_WALK_PAGES = 1000;
|
|
|
102
103
|
* loudly when the sink is used.
|
|
103
104
|
*/
|
|
104
105
|
export function isCursorHostedFilesAvailable(env = process.env) {
|
|
105
|
-
|
|
106
|
-
const sourceId = (_a = env[AGENT_SERVE_STORE_SOURCE_ID_ENV_VAR]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
107
|
-
return sourceId !== undefined && sourceId !== "";
|
|
106
|
+
return resolveDeploymentStoreSourceIdSync(env) !== undefined;
|
|
108
107
|
}
|
|
109
108
|
/**
|
|
110
109
|
* The framework-level store's source id, or `undefined` when the deployment
|
|
@@ -114,9 +113,7 @@ export function isCursorHostedFilesAvailable(env = process.env) {
|
|
|
114
113
|
* credential must fail loudly at use, not silently deselect the store.
|
|
115
114
|
*/
|
|
116
115
|
export function cursorFrameworkStoreSourceId(env = process.env) {
|
|
117
|
-
|
|
118
|
-
const sourceId = (_a = env[AGENT_SERVE_FRAMEWORK_STORE_SOURCE_ID_ENV_VAR]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
119
|
-
return sourceId === undefined || sourceId === "" ? undefined : sourceId;
|
|
116
|
+
return resolveFrameworkStoreSourceIdSync(env);
|
|
120
117
|
}
|
|
121
118
|
/**
|
|
122
119
|
* Local `serve`/`run` with a personal `CURSOR_API_KEY` can address
|
|
@@ -523,9 +520,9 @@ function fetchImpl(options) {
|
|
|
523
520
|
* address, and writing somewhere else silently is worse than not writing.
|
|
524
521
|
*/
|
|
525
522
|
function resolveStoreSourceId(options) {
|
|
526
|
-
var _a;
|
|
527
|
-
var
|
|
528
|
-
const id = (
|
|
523
|
+
var _a, _b;
|
|
524
|
+
var _c, _d;
|
|
525
|
+
const id = (_b = ((_d = (_c = (_a = options.resolveStoreSourceId) === null || _a === void 0 ? void 0 : _a.call(options)) !== null && _c !== void 0 ? _c : options.storeSourceId) !== null && _d !== void 0 ? _d : resolveDeploymentStoreSourceIdSync(process.env))) === null || _b === void 0 ? void 0 : _b.trim();
|
|
529
526
|
if (id === undefined || id === "") {
|
|
530
527
|
throw new Error(`cursorHostedFiles requires ${AGENT_SERVE_STORE_SOURCE_ID_ENV_VAR} (set on Cursor-managed deployments)`);
|
|
531
528
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { allowAll, bearerAuth, DELETE, defineChannel, GET, httpChannel, localDev
|
|
|
20
20
|
export { defineConnection } from "./connections.js";
|
|
21
21
|
export type { ContinuationBuiltin, ContinuationClaim, ContinuationIdentity, ContinuationSelector, ConversationType, MailboxContinuation, ParsedContinuation, } from "./continuation.js";
|
|
22
22
|
export { BUILTINS, bindMailboxContinuationSend, CONTINUATION_SELECTORS, continuationSource, defaultContinuationSelector, extractContinuation, formatConversationKey, handshakeContinuation, isContinuationSelector, mintClaim, normalizeIdentity, parseContinuationSelector, resolveContinuation, resolveV2Key, stampMailboxContinuation, V2EngineError, } from "./continuation.js";
|
|
23
|
+
export { defineExtension, disableTool } from "./extensions.js";
|
|
23
24
|
export { defineHook } from "./hooks.js";
|
|
24
25
|
export { InvalidAsOfError, VacuousTimeArgsError, } from "./internal/as-of.js";
|
|
25
26
|
export type { LoadAgentProjectOptions } from "./internal/discovery.js";
|
|
@@ -44,7 +45,7 @@ export type { DurableSessionRecord, DurableSessionSummary, StorageABTable, Stora
|
|
|
44
45
|
export { defineStorage, isDurableSessionRecordKey, parseDurableSessionRecord, STORAGE_KEY_ROOT, storageKeys, summarizeDurableSessionRecord, } from "./storage.js";
|
|
45
46
|
export { defineTool } from "./tools.js";
|
|
46
47
|
export type * from "./types.js";
|
|
47
|
-
export { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, DIRECT_TOOL_CALL_CHANNEL_ID, isCursorAccountTransport, isPeerConnectionTransport, isSymbolicConnectionTransport, isToolEffect, MAX_RUNNING_TURNS_LIMIT, normalizeConnectionEffects, normalizeCursorAccountServers, supportsKvCas, } from "./types.js";
|
|
48
|
+
export { cursorAccountServersHasMixedWildcard, DEFAULT_MODEL, DIRECT_TOOL_CALL_CHANNEL_ID, isCursorAccountTransport, isPeerConnectionTransport, isSymbolicConnectionTransport, isToolEffect, MAX_RUNNING_TURNS_LIMIT, normalizeConnectionEffects, normalizeConnectionTools, normalizeCursorAccountServers, supportsKvCas, } from "./types.js";
|
|
48
49
|
/**
|
|
49
50
|
* Runtime config for an agent — authored at `agent/agent.ts` (the root
|
|
50
51
|
* agent) or `agent/subagents/<id>/agent.ts` (a subagent). Set
|