@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
package/AGENTS.md
CHANGED
|
@@ -223,8 +223,10 @@ shared `SLACK_*` vars (`slackChannel()` / `slack create --no-prefix`).
|
|
|
223
223
|
Channel watching is `engagement.channelPosts`. Tool approvals are
|
|
224
224
|
`toolApprovals` / `interactivity`.
|
|
225
225
|
|
|
226
|
-
|
|
227
|
-
|
|
226
|
+
Replies default to `reply: { mode: "post" }` (status chip while the turn
|
|
227
|
+
runs, one message at the end); `reply: { mode: "stream" }` streams the answer
|
|
228
|
+
with optional `toolCards` / `reasoningCard`. Suggested prompts default on.
|
|
229
|
+
Guided skill: `skills/setup-slack/SKILL.md`.
|
|
228
230
|
|
|
229
231
|
## Playground UI (Vite + React)
|
|
230
232
|
|
package/dist/bin/agent-serve.js
CHANGED
|
@@ -390,8 +390,8 @@ Options:
|
|
|
390
390
|
--all deploy: every child agent under a multi-agent --dir
|
|
391
391
|
(skips the interactive picker; mutually exclusive with
|
|
392
392
|
--slug).
|
|
393
|
-
--cursor-events-repo deploy: repo (owner/name)
|
|
394
|
-
|
|
393
|
+
--cursor-events-repo deploy: repo (owner/name) the deployed agent
|
|
394
|
+
watches (repeatable).
|
|
395
395
|
--allow-domain deploy: egress domain the engine pod may reach
|
|
396
396
|
(repeatable; unioned with hosting.egressDomains from the
|
|
397
397
|
agent manifest). Repo-backed deploys only.
|
|
@@ -1001,6 +1001,7 @@ function main(argv) {
|
|
|
1001
1001
|
}
|
|
1002
1002
|
lines.push(section("tools", info.tools.map((t) => `${t.name} — ${t.description}`)));
|
|
1003
1003
|
lines.push(section("skills", info.skills.map((s) => `${s.name} — ${s.description}`)));
|
|
1004
|
+
lines.push(section("extensions", info.extensions.map((e) => `${e.name} — ${[...e.tools, ...e.skills].join(", ") || "(nothing contributed)"}`)));
|
|
1004
1005
|
lines.push(section("MCP connections", info.connections.map((c) => `${c.name} — ${c.transport}`)));
|
|
1005
1006
|
lines.push(section("subagents", info.subagents.map((s) => { var _a; return `${s.name} — ${(_a = s.description) !== null && _a !== void 0 ? _a : ""}`; })));
|
|
1006
1007
|
lines.push(section("channels", info.channels.map((c) => `${c.id}: ${c.routes.map((r) => `${r.method} ${r.url}`).join(", ") ||
|
|
@@ -8,20 +8,49 @@ export declare function getDeploymentsChannelOptions(definition: object): Deploy
|
|
|
8
8
|
/**
|
|
9
9
|
* Events a {@link deploymentsChannel} dispatches on, unioned from its
|
|
10
10
|
* subscriptions. Published as `meta.deploymentEventTypes` so the deploy
|
|
11
|
-
* manifest can extract `eventTypes`.
|
|
12
|
-
*
|
|
11
|
+
* manifest can extract `eventTypes`.
|
|
12
|
+
*
|
|
13
|
+
* A channel with no resolved subscriptions declares the full event set:
|
|
14
|
+
* deploy sources usually come from env vars read at module load, and the
|
|
15
|
+
* hosted freeze bakes hermetically (no customer env/secrets), so deriving
|
|
16
|
+
* `[]` there would leave the manifest without event types and no
|
|
17
|
+
* subscription edge could ever materialize (invariant 26). Capability is
|
|
18
|
+
* the channel's code shape — `onEvent` handles any deployment event —
|
|
19
|
+
* while sources/environments/event narrowing are runtime subscription
|
|
20
|
+
* config; the hosted-admission adapter re-applies them before authored
|
|
21
|
+
* code runs. Inertness is still guaranteed by scope: a deploy that names
|
|
22
|
+
* no deploy sources binds no edges.
|
|
13
23
|
*/
|
|
14
24
|
export declare function deriveDeploymentEventTypes(options: Pick<DeploymentsChannelOptions, "deploySourceUris" | "events">): string[];
|
|
15
25
|
/**
|
|
16
|
-
* Core deployment-event dispatch, used by the channel's replay route
|
|
17
|
-
*
|
|
18
|
-
* subscriptions is the caller's decision.
|
|
26
|
+
* Core deployment-event dispatch, used by the channel's replay route, the
|
|
27
|
+
* serve host's relay fan-out, and the hosted-admission adapter. Whether the
|
|
28
|
+
* event matches this channel's subscriptions is the caller's decision.
|
|
19
29
|
*/
|
|
20
30
|
export declare function dispatchDeploymentEvent(input: {
|
|
21
31
|
options: DeploymentsChannelOptions;
|
|
22
32
|
event: DeploymentEvent;
|
|
23
33
|
args: ChannelHandlerArgs;
|
|
24
34
|
}): Promise<Response>;
|
|
35
|
+
export type DeploymentsDispatchOutcome = "skip" | "task";
|
|
36
|
+
export declare function getDeploymentsDispatchOutcome(response: Response): DeploymentsDispatchOutcome | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Whether this channel admits the event on a hosted pod. The hosted
|
|
39
|
+
* control plane fans out on `(deploy_source, eventType, team)` edges only —
|
|
40
|
+
* environments are not edge identity — so this is where the environment
|
|
41
|
+
* filter (and a stale-edge guard for sources/events) lives, mirroring what
|
|
42
|
+
* the v1 relay does before `onEvent`.
|
|
43
|
+
*
|
|
44
|
+
* A channel with NO resolved subscriptions admits everything the control
|
|
45
|
+
* plane delivered: deploy sources usually come from env vars read at
|
|
46
|
+
* module load, and the hosted freeze bakes hermetically (no customer env),
|
|
47
|
+
* so on a restored pod an env-configured channel resolves empty — the
|
|
48
|
+
* deploy-time edges (bound from the watched repositories) already carry
|
|
49
|
+
* the customer's scope, and refusing here would silently drop every
|
|
50
|
+
* delivery. Same posture as {@link deriveDeploymentEventTypes}: authored
|
|
51
|
+
* subscriptions narrow; an unconfigured channel defers to the deploy scope.
|
|
52
|
+
*/
|
|
53
|
+
export declare function deploymentEventMatchesChannel(options: DeploymentsChannelOptions, event: DeploymentEvent): boolean;
|
|
25
54
|
/**
|
|
26
55
|
* Deployment events channel.
|
|
27
56
|
*
|
|
@@ -44,6 +73,13 @@ export declare function dispatchDeploymentEvent(input: {
|
|
|
44
73
|
* have. Nothing is pushed to this deployment and no shared secret exists on
|
|
45
74
|
* either side.
|
|
46
75
|
*
|
|
76
|
+
* Hosted v2 deployments do not poll: the control plane fans verified factory
|
|
77
|
+
* deployment events out on `deploy_source` subscription edges — derived from
|
|
78
|
+
* the deploy's watched `repositories`, since factory records deploy sources
|
|
79
|
+
* as Origin repo URLs — and delivers through hosted admission. The attached
|
|
80
|
+
* adapter re-applies this channel's subscription filter — environments are
|
|
81
|
+
* not edge identity — and skips before authored code runs.
|
|
82
|
+
*
|
|
47
83
|
* The route on this channel exists for local replay (`agent-sdk` and tests):
|
|
48
84
|
* POST an event body and it runs the same `onEvent`.
|
|
49
85
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/deployments/deployments-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deployments-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/deployments/deployments-channel.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,YAAY,CAAC;AAqBpB;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,GACjB,yBAAyB,GAAG,SAAS,CAEvC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,kBAAkB,GAAG,QAAQ,CAAC,GACtE,MAAM,EAAE,CAYV;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,yBAAyB,CAAC;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAapB;AAED,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,CAAC;AAezD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,GACjB,0BAA0B,GAAG,SAAS,CAExC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,eAAe,GACrB,OAAO,CAUT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,yBAAyB,GACjC,iBAAiB,CA4DnB"}
|
|
@@ -9,7 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { defineChannel, localDevStrict, POST } from "../../channels.js";
|
|
12
|
-
import { resolveDeploymentSubscriptions } from "../../internal/cursor-deployment-relay.js";
|
|
12
|
+
import { deploymentEventMatches, resolveDeploymentSubscriptions, } from "../../internal/cursor-deployment-relay.js";
|
|
13
|
+
import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
|
|
13
14
|
import { bindLocalIngressSend } from "../../internal/local-ingress.js";
|
|
14
15
|
import { DEPLOYMENT_EVENT_TYPES, DEPLOYMENTS_CHANNEL_KIND, } from "./types.js";
|
|
15
16
|
const deploymentEventSchema = z.object({
|
|
@@ -36,12 +37,26 @@ export function getDeploymentsChannelOptions(definition) {
|
|
|
36
37
|
/**
|
|
37
38
|
* Events a {@link deploymentsChannel} dispatches on, unioned from its
|
|
38
39
|
* subscriptions. Published as `meta.deploymentEventTypes` so the deploy
|
|
39
|
-
* manifest can extract `eventTypes`.
|
|
40
|
-
*
|
|
40
|
+
* manifest can extract `eventTypes`.
|
|
41
|
+
*
|
|
42
|
+
* A channel with no resolved subscriptions declares the full event set:
|
|
43
|
+
* deploy sources usually come from env vars read at module load, and the
|
|
44
|
+
* hosted freeze bakes hermetically (no customer env/secrets), so deriving
|
|
45
|
+
* `[]` there would leave the manifest without event types and no
|
|
46
|
+
* subscription edge could ever materialize (invariant 26). Capability is
|
|
47
|
+
* the channel's code shape — `onEvent` handles any deployment event —
|
|
48
|
+
* while sources/environments/event narrowing are runtime subscription
|
|
49
|
+
* config; the hosted-admission adapter re-applies them before authored
|
|
50
|
+
* code runs. Inertness is still guaranteed by scope: a deploy that names
|
|
51
|
+
* no deploy sources binds no edges.
|
|
41
52
|
*/
|
|
42
53
|
export function deriveDeploymentEventTypes(options) {
|
|
54
|
+
const subscriptions = resolveDeploymentSubscriptions(options);
|
|
55
|
+
if (subscriptions.length === 0) {
|
|
56
|
+
return [...DEPLOYMENT_EVENT_TYPES].sort();
|
|
57
|
+
}
|
|
43
58
|
const events = new Set();
|
|
44
|
-
for (const subscription of
|
|
59
|
+
for (const subscription of subscriptions) {
|
|
45
60
|
for (const event of subscription.events) {
|
|
46
61
|
events.add(event);
|
|
47
62
|
}
|
|
@@ -49,9 +64,9 @@ export function deriveDeploymentEventTypes(options) {
|
|
|
49
64
|
return [...events].sort();
|
|
50
65
|
}
|
|
51
66
|
/**
|
|
52
|
-
* Core deployment-event dispatch, used by the channel's replay route
|
|
53
|
-
*
|
|
54
|
-
* subscriptions is the caller's decision.
|
|
67
|
+
* Core deployment-event dispatch, used by the channel's replay route, the
|
|
68
|
+
* serve host's relay fan-out, and the hosted-admission adapter. Whether the
|
|
69
|
+
* event matches this channel's subscriptions is the caller's decision.
|
|
55
70
|
*/
|
|
56
71
|
export function dispatchDeploymentEvent(input) {
|
|
57
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -61,9 +76,43 @@ export function dispatchDeploymentEvent(input) {
|
|
|
61
76
|
eventType: input.event.eventType,
|
|
62
77
|
payload: input.event,
|
|
63
78
|
}));
|
|
64
|
-
|
|
79
|
+
// "task": authored `onEvent` ran to completion without a captured send.
|
|
80
|
+
// Hosted admission only consults this when no send was captured.
|
|
81
|
+
return withDispatchOutcome(Response.json({ ok: true }), "task");
|
|
65
82
|
});
|
|
66
83
|
}
|
|
84
|
+
const dispatchOutcomeByResponse = new WeakMap();
|
|
85
|
+
function withDispatchOutcome(response, outcome) {
|
|
86
|
+
dispatchOutcomeByResponse.set(response, outcome);
|
|
87
|
+
return response;
|
|
88
|
+
}
|
|
89
|
+
export function getDeploymentsDispatchOutcome(response) {
|
|
90
|
+
return dispatchOutcomeByResponse.get(response);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Whether this channel admits the event on a hosted pod. The hosted
|
|
94
|
+
* control plane fans out on `(deploy_source, eventType, team)` edges only —
|
|
95
|
+
* environments are not edge identity — so this is where the environment
|
|
96
|
+
* filter (and a stale-edge guard for sources/events) lives, mirroring what
|
|
97
|
+
* the v1 relay does before `onEvent`.
|
|
98
|
+
*
|
|
99
|
+
* A channel with NO resolved subscriptions admits everything the control
|
|
100
|
+
* plane delivered: deploy sources usually come from env vars read at
|
|
101
|
+
* module load, and the hosted freeze bakes hermetically (no customer env),
|
|
102
|
+
* so on a restored pod an env-configured channel resolves empty — the
|
|
103
|
+
* deploy-time edges (bound from the watched repositories) already carry
|
|
104
|
+
* the customer's scope, and refusing here would silently drop every
|
|
105
|
+
* delivery. Same posture as {@link deriveDeploymentEventTypes}: authored
|
|
106
|
+
* subscriptions narrow; an unconfigured channel defers to the deploy scope.
|
|
107
|
+
*/
|
|
108
|
+
export function deploymentEventMatchesChannel(options, event) {
|
|
109
|
+
const subscriptions = resolveDeploymentSubscriptions(options);
|
|
110
|
+
if (subscriptions.length === 0) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
return subscriptions.some((subscription) => subscription.deploySourceUri === event.deploySourceUri.toLowerCase() &&
|
|
114
|
+
deploymentEventMatches(subscription, event));
|
|
115
|
+
}
|
|
67
116
|
/**
|
|
68
117
|
* Deployment events channel.
|
|
69
118
|
*
|
|
@@ -86,6 +135,13 @@ export function dispatchDeploymentEvent(input) {
|
|
|
86
135
|
* have. Nothing is pushed to this deployment and no shared secret exists on
|
|
87
136
|
* either side.
|
|
88
137
|
*
|
|
138
|
+
* Hosted v2 deployments do not poll: the control plane fans verified factory
|
|
139
|
+
* deployment events out on `deploy_source` subscription edges — derived from
|
|
140
|
+
* the deploy's watched `repositories`, since factory records deploy sources
|
|
141
|
+
* as Origin repo URLs — and delivers through hosted admission. The attached
|
|
142
|
+
* adapter re-applies this channel's subscription filter — environments are
|
|
143
|
+
* not edge identity — and skips before authored code runs.
|
|
144
|
+
*
|
|
89
145
|
* The route on this channel exists for local replay (`agent-sdk` and tests):
|
|
90
146
|
* POST an event body and it runs the same `onEvent`.
|
|
91
147
|
*/
|
|
@@ -113,5 +169,29 @@ export function deploymentsChannel(options) {
|
|
|
113
169
|
}),
|
|
114
170
|
] }));
|
|
115
171
|
deploymentsChannelOptionsByDefinition.set(definition, options);
|
|
172
|
+
// Hosted v2 delivery: the control plane admits a deployments mailbox item
|
|
173
|
+
// (deploy_source edge match) and posts the claim-checked factory envelope
|
|
174
|
+
// here. Environments are not edge identity, so non-matching environments
|
|
175
|
+
// (and stale-edge sources/events) are filtered to `skip` before authored
|
|
176
|
+
// code runs — the same pre-`onEvent` filter the v1 relay applies.
|
|
177
|
+
attachHostedAdmissionAdapter(definition, {
|
|
178
|
+
kind: DEPLOYMENTS_CHANNEL_KIND,
|
|
179
|
+
dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ payload, args }) {
|
|
180
|
+
const parsed = deploymentEventSchema.safeParse(payload);
|
|
181
|
+
if (!parsed.success) {
|
|
182
|
+
return Response.json({ ok: false, error: "invalid_deployment_event" }, { status: 400 });
|
|
183
|
+
}
|
|
184
|
+
const event = parsed.data;
|
|
185
|
+
if (!deploymentEventMatchesChannel(options, event)) {
|
|
186
|
+
return withDispatchOutcome(Response.json({
|
|
187
|
+
ok: true,
|
|
188
|
+
skipped: true,
|
|
189
|
+
reason: "subscription_mismatch",
|
|
190
|
+
}), "skip");
|
|
191
|
+
}
|
|
192
|
+
return dispatchDeploymentEvent({ options, event, args });
|
|
193
|
+
}),
|
|
194
|
+
getOutcome: (response) => getDeploymentsDispatchOutcome(response),
|
|
195
|
+
});
|
|
116
196
|
return definition;
|
|
117
197
|
}
|
|
@@ -44,9 +44,10 @@ export interface DeploymentsChannelOptions {
|
|
|
44
44
|
* and then receives nothing. A bare string takes the default environment and
|
|
45
45
|
* event filters.
|
|
46
46
|
*
|
|
47
|
-
* There is no team-wide subscription: every deploy source is named.
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* There is no team-wide subscription: every deploy source is named. An
|
|
48
|
+
* empty list is how a consumer *deregisters*, so it cannot also mean
|
|
49
|
+
* "everything". A live array that starts empty and is filled later is
|
|
50
|
+
* re-read on each registration heartbeat.
|
|
50
51
|
*/
|
|
51
52
|
deploySourceUris: readonly (string | DeploymentSubscription)[];
|
|
52
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/deployments/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,YACjC,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,CACX,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/deployments/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,YACjC,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,CACX,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC;;;;;;;;;;;;OAYG;IACH,gBAAgB,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IAC/D;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,6EAA6E;IAC7E,OAAO,EAAE,CACP,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAChC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACrC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/github/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,+BAAgC,SAAQ,mBAAmB;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,oBAAoB,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/github/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,+BAAgC,SAAQ,mBAAmB;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,oBAAoB,CAAC,kBAAkB,CAAC,CA2G1C"}
|
|
@@ -18,11 +18,18 @@ import { applyGitHubProgress } from "./progress.js";
|
|
|
18
18
|
* `message.completed`, and a short error comment on turn/session failure.
|
|
19
19
|
*/
|
|
20
20
|
export function buildDefaultGitHubEvents(options = {}) {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
var _c;
|
|
21
23
|
const deliverReplies = options.deliverReplies !== false;
|
|
24
|
+
const requiredSuccessfulTools = new Set((_c = (_b = (_a = options.progress) === null || _a === void 0 ? void 0 : _a.requireSuccessfulTools) === null || _b === void 0 ? void 0 : _b.map((toolName) => toolName.trim()).filter((toolName) => toolName !== "")) !== null && _c !== void 0 ? _c : []);
|
|
25
|
+
const toolOutcomesBySession = new Map();
|
|
22
26
|
return {
|
|
23
|
-
"turn.started"(
|
|
27
|
+
"turn.started"(event, channel) {
|
|
24
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
29
|
var _a;
|
|
30
|
+
if (requiredSuccessfulTools.size > 0) {
|
|
31
|
+
toolOutcomesBySession.set(event.sessionId, new Map());
|
|
32
|
+
}
|
|
26
33
|
yield applyGitHubProgress({
|
|
27
34
|
phase: "pending",
|
|
28
35
|
channel,
|
|
@@ -46,10 +53,26 @@ export function buildDefaultGitHubEvents(options = {}) {
|
|
|
46
53
|
}
|
|
47
54
|
});
|
|
48
55
|
},
|
|
49
|
-
"
|
|
56
|
+
"action.result"(event) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
var _a;
|
|
59
|
+
if (event.data.parentCallId !== undefined ||
|
|
60
|
+
!requiredSuccessfulTools.has(event.data.toolName)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const outcomes = (_a = toolOutcomesBySession.get(event.sessionId)) !== null && _a !== void 0 ? _a : new Map();
|
|
64
|
+
outcomes.set(event.data.toolName, !event.data.isError && event.data.stubbed !== true);
|
|
65
|
+
toolOutcomesBySession.set(event.sessionId, outcomes);
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
"turn.completed"(event, channel) {
|
|
50
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const outcomes = toolOutcomesBySession.get(event.sessionId);
|
|
71
|
+
const pipelineSucceeded = requiredSuccessfulTools.size === 0 ||
|
|
72
|
+
[...requiredSuccessfulTools].every((toolName) => (outcomes === null || outcomes === void 0 ? void 0 : outcomes.get(toolName)) === true);
|
|
73
|
+
toolOutcomesBySession.delete(event.sessionId);
|
|
51
74
|
yield applyGitHubProgress({
|
|
52
|
-
phase: "success",
|
|
75
|
+
phase: pipelineSucceeded ? "success" : "failure",
|
|
53
76
|
channel,
|
|
54
77
|
options,
|
|
55
78
|
});
|
|
@@ -80,6 +103,7 @@ export function buildDefaultGitHubEvents(options = {}) {
|
|
|
80
103
|
},
|
|
81
104
|
"turn.failed"(event, channel) {
|
|
82
105
|
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
toolOutcomesBySession.delete(event.sessionId);
|
|
83
107
|
yield applyGitHubProgress({
|
|
84
108
|
phase: "failure",
|
|
85
109
|
channel,
|
|
@@ -90,6 +114,7 @@ export function buildDefaultGitHubEvents(options = {}) {
|
|
|
90
114
|
},
|
|
91
115
|
"session.failed"(event, channel) {
|
|
92
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
toolOutcomesBySession.delete(event.sessionId);
|
|
93
118
|
yield applyGitHubProgress({
|
|
94
119
|
phase: "failure",
|
|
95
120
|
channel,
|
|
@@ -17,6 +17,13 @@ export type GitHubBannerProgress = GitHubProgressPhaseCopy;
|
|
|
17
17
|
export interface GitHubProgressConfig {
|
|
18
18
|
/** When false, skip the eyes reaction on turn.started. Defaults to true. */
|
|
19
19
|
reactions?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Top-level tools that must each finish successfully before a completed
|
|
22
|
+
* turn is reported as successful. A missing, stubbed, or ultimately failed
|
|
23
|
+
* tool reports failure instead. Later successful retries replace an earlier
|
|
24
|
+
* failure for the same tool.
|
|
25
|
+
*/
|
|
26
|
+
requireSuccessfulTools?: readonly string[];
|
|
20
27
|
/**
|
|
21
28
|
* Opt-in Checks API run on the PR head. Omit or `false` keeps today's
|
|
22
29
|
* behavior (no check from default events). With `cursorAccount`, enabling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/channels/github/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,0BAA0B,CAAC;IAClD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,0BAA0B,GAAG,IAAI,CAKnC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,oBAAoB,GAAG,IAAI,CAK7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAaT;AAuBD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhB"}
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/channels/github/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKrD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,0BAA0B,CAAC;IAClD;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,0BAA0B,GAAG,IAAI,CAKnC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GACzC,oBAAoB,GAAG,IAAI,CAK7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAaT;AAuBD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default stream-event handlers for the Origin channel: reply delivery.
|
|
3
|
+
*
|
|
4
|
+
* The GitHub channel posts completed assistant messages back to the PR via
|
|
5
|
+
* `buildDefaultGitHubEvents`; this is the Origin analogue. Outbound
|
|
6
|
+
* credentials resolve exactly like `ctx.origin` in hooks (see
|
|
7
|
+
* ./binding.ts): channel app credentials / `ORIGIN_APP_*` env when
|
|
8
|
+
* configured, otherwise — for `cursorAccount` channels — the Cursor-account
|
|
9
|
+
* session exchange, which on hosted v2 acts as the deployment
|
|
10
|
+
* service-account principal. The `agent-serve` SA scope allowlist includes
|
|
11
|
+
* `repository:pull_requests:reviews:write`, the scope
|
|
12
|
+
* `CreatePullRequestComment` checks, so no extra grant is needed.
|
|
13
|
+
*/
|
|
14
|
+
import type { ChannelEventHandlers } from "../../types.js";
|
|
15
|
+
import { buildOriginBinding } from "./binding.js";
|
|
16
|
+
import type { OriginChannelState } from "./state.js";
|
|
17
|
+
import type { OriginAppOptions } from "./types.js";
|
|
18
|
+
/** Hidden marker on outbound Origin comments so consumers can spot them. */
|
|
19
|
+
export declare const ORIGIN_OUTBOUND_MARKER = "<!-- agent-serve-origin -->";
|
|
20
|
+
export declare function formatOriginOutboundComment(body: string): string;
|
|
21
|
+
export interface BuildDefaultOriginEventsOptions {
|
|
22
|
+
/** Force the signed-in Cursor account / deployment SA credential path. */
|
|
23
|
+
cursorAccount?: boolean | {
|
|
24
|
+
repos: readonly string[];
|
|
25
|
+
};
|
|
26
|
+
/** Channel-authored outbound app credentials / API base. */
|
|
27
|
+
app?: OriginAppOptions;
|
|
28
|
+
/**
|
|
29
|
+
* When false, skip posting completed assistant messages (and failure
|
|
30
|
+
* notices) back to the Origin pull request. Defaults to true.
|
|
31
|
+
*/
|
|
32
|
+
deliverReplies?: boolean;
|
|
33
|
+
/** Injectable binding builder for tests. */
|
|
34
|
+
buildBinding?: typeof buildOriginBinding;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Built-in delivery: post assistant text on `message.completed`, and a
|
|
38
|
+
* short error comment on turn/session failure. Every post soft-fails so a
|
|
39
|
+
* missing outbound credential (or an Origin refusal) never crashes the
|
|
40
|
+
* session — the GitHub defaults' posture.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildDefaultOriginEvents(options?: BuildDefaultOriginEventsOptions): ChannelEventHandlers<OriginChannelState>;
|
|
43
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,MAAM,WAAW,+BAA+B;IAC9C,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,GAAG;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IACvD,4DAA4D;IAC5D,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,kBAAkB,CAAC;CAC1C;AA4CD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,oBAAoB,CAAC,kBAAkB,CAAC,CA0B1C"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default stream-event handlers for the Origin channel: reply delivery.
|
|
3
|
+
*
|
|
4
|
+
* The GitHub channel posts completed assistant messages back to the PR via
|
|
5
|
+
* `buildDefaultGitHubEvents`; this is the Origin analogue. Outbound
|
|
6
|
+
* credentials resolve exactly like `ctx.origin` in hooks (see
|
|
7
|
+
* ./binding.ts): channel app credentials / `ORIGIN_APP_*` env when
|
|
8
|
+
* configured, otherwise — for `cursorAccount` channels — the Cursor-account
|
|
9
|
+
* session exchange, which on hosted v2 acts as the deployment
|
|
10
|
+
* service-account principal. The `agent-serve` SA scope allowlist includes
|
|
11
|
+
* `repository:pull_requests:reviews:write`, the scope
|
|
12
|
+
* `CreatePullRequestComment` checks, so no extra grant is needed.
|
|
13
|
+
*/
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
import { buildOriginBinding } from "./binding.js";
|
|
24
|
+
/** Hidden marker on outbound Origin comments so consumers can spot them. */
|
|
25
|
+
export const ORIGIN_OUTBOUND_MARKER = "<!-- agent-serve-origin -->";
|
|
26
|
+
export function formatOriginOutboundComment(body) {
|
|
27
|
+
if (body.includes(ORIGIN_OUTBOUND_MARKER)) {
|
|
28
|
+
return body;
|
|
29
|
+
}
|
|
30
|
+
return `${body.trimEnd()}\n\n${ORIGIN_OUTBOUND_MARKER}`;
|
|
31
|
+
}
|
|
32
|
+
function bindingForState(options, state) {
|
|
33
|
+
var _a;
|
|
34
|
+
const build = (_a = options.buildBinding) !== null && _a !== void 0 ? _a : buildOriginBinding;
|
|
35
|
+
return build(Object.assign(Object.assign({ repository: {
|
|
36
|
+
owner: state.owner,
|
|
37
|
+
name: state.repo,
|
|
38
|
+
fullName: `${state.owner}/${state.repo}`,
|
|
39
|
+
} }, (state.installationId === null
|
|
40
|
+
? {}
|
|
41
|
+
: { installationId: state.installationId })), { cursorAccount: options.cursorAccount !== undefined && options.cursorAccount !== false, app: options.app }));
|
|
42
|
+
}
|
|
43
|
+
function postPullRequestComment(options, state, body) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
if (state.owner === "" ||
|
|
46
|
+
state.repo === "" ||
|
|
47
|
+
state.pullRequestNumber === null) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const origin = bindingForState(options, state);
|
|
51
|
+
yield origin.request({
|
|
52
|
+
method: "POST",
|
|
53
|
+
path: `/v1/origin/repos/${encodeURIComponent(state.owner)}/${encodeURIComponent(state.repo)}/pulls/${state.pullRequestNumber}/comments`,
|
|
54
|
+
body: { body: formatOriginOutboundComment(body) },
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Built-in delivery: post assistant text on `message.completed`, and a
|
|
60
|
+
* short error comment on turn/session failure. Every post soft-fails so a
|
|
61
|
+
* missing outbound credential (or an Origin refusal) never crashes the
|
|
62
|
+
* session — the GitHub defaults' posture.
|
|
63
|
+
*/
|
|
64
|
+
export function buildDefaultOriginEvents(options = {}) {
|
|
65
|
+
const deliverReplies = options.deliverReplies !== false;
|
|
66
|
+
return {
|
|
67
|
+
"message.completed"(event, channel) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (!deliverReplies) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (event.data.finishReason === "tool_call" || event.data.text === "") {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
yield postPullRequestComment(options, channel.state, event.data.text);
|
|
77
|
+
}
|
|
78
|
+
catch (_a) {
|
|
79
|
+
// Soft-fail delivery so a missing credential does not crash the session.
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
"turn.failed"(_event, channel) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
yield postFailure(options, channel, deliverReplies);
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
"session.failed"(_event, channel) {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
yield postFailure(options, channel, deliverReplies);
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function postFailure(options, channel, deliverReplies) {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
if (!deliverReplies) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
yield postPullRequestComment(options, channel.state, [
|
|
102
|
+
"I hit an error while handling your request.",
|
|
103
|
+
"",
|
|
104
|
+
"Please try again, or reach out if it keeps failing.",
|
|
105
|
+
].join("\n"));
|
|
106
|
+
}
|
|
107
|
+
catch (_a) {
|
|
108
|
+
// Soft-fail.
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
@@ -25,9 +25,11 @@ export * from "./api.js";
|
|
|
25
25
|
export * from "./binding.js";
|
|
26
26
|
export * from "./checks.js";
|
|
27
27
|
export * from "./cursor-account.js";
|
|
28
|
+
export * from "./defaults.js";
|
|
28
29
|
export * from "./events.js";
|
|
29
30
|
export * from "./origin-channel.js";
|
|
30
31
|
export * from "./origin-webhook.js";
|
|
31
32
|
export * from "./reactions.js";
|
|
33
|
+
export * from "./state.js";
|
|
32
34
|
export * from "./types.js";
|
|
33
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -25,8 +25,10 @@ export * from "./api.js";
|
|
|
25
25
|
export * from "./binding.js";
|
|
26
26
|
export * from "./checks.js";
|
|
27
27
|
export * from "./cursor-account.js";
|
|
28
|
+
export * from "./defaults.js";
|
|
28
29
|
export * from "./events.js";
|
|
29
30
|
export * from "./origin-channel.js";
|
|
30
31
|
export * from "./origin-webhook.js";
|
|
31
32
|
export * from "./reactions.js";
|
|
33
|
+
export * from "./state.js";
|
|
32
34
|
export * from "./types.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AuthContext, ChannelDefinition, ChannelHandlerArgs } from "../../types.js";
|
|
2
|
+
import { type OriginChannelState } from "./state.js";
|
|
2
3
|
import type { OriginChannelOptions, OriginEventContext, OriginPullRequestEvent, OriginTurnDispatch, OriginWebhookEnvelope } from "./types.js";
|
|
3
4
|
/** `AGENT_SERVE_ORIGIN_APP_ID` fallback for {@link OriginChannelOptions.appId}. */
|
|
4
5
|
export declare function envOriginAppId(): string | undefined;
|
|
@@ -51,7 +52,7 @@ export declare function handleOriginWebhookRequest(input: {
|
|
|
51
52
|
skipSignatureVerification?: boolean;
|
|
52
53
|
}): Promise<Response>;
|
|
53
54
|
export declare function getOriginChannelOptions(definition: object): OriginChannelOptions | undefined;
|
|
54
|
-
export declare function originChannel(options?: OriginChannelOptions): ChannelDefinition
|
|
55
|
+
export declare function originChannel(options?: OriginChannelOptions): ChannelDefinition<OriginChannelState>;
|
|
55
56
|
/** Minimal mount shape shared by `serve` / trigger fan-out. */
|
|
56
57
|
export interface OriginAgentMountLike {
|
|
57
58
|
slug: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,
|
|
1
|
+
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EAEjB,kBAAkB,EAEnB,MAAM,gBAAgB,CAAC;AAcxB,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,oBAAoB,EAGpB,kBAAkB,EAClB,sBAAsB,EAItB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAiFpB,mFAAmF;AACnF,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAGnD;AAqGD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,GACf,qBAAqB,GAAG,IAAI,CAG9B;AAuCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,qBAAqB,CAAC;CACjC,GAAG;IACF,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,CAAC;IAC/D,WAAW,EAAE,sBAAsB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG,IAAI,CAwDP;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC7D,WAAW,CAeb;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,mBAAmB,CAAC,GAChE,MAAM,CAER;AAED,2EAA2E;AAC3E,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAST;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,mBAAmB,CAAC,GAChE,MAAM,CAER;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9D,WAAW,EAAE,sBAAsB,GAClC,MAAM,CAaR;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9D,WAAW,EAAE,sBAAsB,GAClC,kBAAkB,GAAG,IAAI,CAK3B;AA6BD,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAe7D,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,GACjB,qBAAqB,GAAG,SAAS,CAEnC;AA+ID;;;;GAIG;AACH;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiHpB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,0EAA0E;IAC1E,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwDpB;AAOD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB,oBAAoB,GAAG,SAAS,CAElC;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,iBAAiB,CAAC,kBAAkB,CAAC,CAgGvC;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;YACX,UAAU,EAAE;gBACV,IAAI,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;oBAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;iBAAE,CAAC;aACnE,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAC1C,mBAAmB,EAAE,CAgBvB"}
|