@cursor/july 0.1.100 → 0.1.102
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/README.md +27 -0
- 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/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 +1 -1
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +5 -2
- package/dist/channels/slack/assistant.d.ts +1 -1
- package/dist/channels/slack/assistant.d.ts.map +1 -1
- 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/dispatch.d.ts +3 -2
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +28 -8
- package/dist/channels/slack/inbound.d.ts +8 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +28 -0
- package/dist/channels/slack/index.d.ts +1 -0
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +1 -0
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +11 -4
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +2 -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 +4 -4
- package/dist/docs/assets/{app.DZ1e0Ycq.js → app.CLA03RCz.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.FAqdWIXo.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.l8omwc6D.js → VPLocalSearchBox.ifxv-cJV.js} +1 -1
- package/dist/docs/assets/chunks/{theme.JVcD6gel.js → theme.DWCwM6p-.js} +2 -2
- package/dist/docs/assets/concepts.md.rPzW2HZN.js +1 -0
- package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.js +9 -0
- package/dist/docs/assets/guides_cloud-agents.md.DumwWXba.lean.js +1 -0
- package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.js → guides_cloud-runtime.md.BRirbRAN.js} +1 -1
- package/dist/docs/assets/index.md.Kiht7ell.js +5 -0
- package/dist/docs/assets/{index.md.Bb4k8kUm.lean.js → index.md.Kiht7ell.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.BiGoBAk2.js → reference_connections.md.Di6jJAXF.js} +12 -2
- package/dist/docs/assets/{reference_connections.md.BiGoBAk2.lean.js → reference_connections.md.Di6jJAXF.lean.js} +1 -1
- package/dist/docs/assets/reference_extensions.md.9WQMZe1l.js +56 -0
- package/dist/docs/assets/reference_extensions.md.9WQMZe1l.lean.js +1 -0
- package/dist/docs/assets/{reference_http-api.md.BEJx9XVj.js → reference_http-api.md.oySXBO8o.js} +1 -1
- package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.js → reference_project-layout.md.CA6QP6Lw.js} +2 -2
- package/dist/docs/assets/{reference_project-layout.md.Bv4KOtlB.lean.js → reference_project-layout.md.CA6QP6Lw.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.BFW9retM.js → reference_skills.md.l2ezAcaN.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.CvAHsdSp.js → reference_tools.md.B1up2r9W.js} +1 -1
- package/dist/docs/assets/skills_framework-map.md.DDa4MeEW.js +1 -0
- package/dist/docs/assets/{skills_framework-map.md.BTi817yv.lean.js → skills_framework-map.md.DDa4MeEW.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/concepts.md +3 -3
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-agents.html +35 -0
- package/dist/docs/guides/cloud-agents.md +93 -0
- package/dist/docs/guides/cloud-runtime.html +6 -6
- package/dist/docs/guides/cloud-runtime.md +2 -0
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +4 -4
- package/dist/docs/guides/opentelemetry.html +5 -5
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +6 -6
- package/dist/docs/index.md +5 -1
- package/dist/docs/llms-full.txt +353 -5
- package/dist/docs/llms.txt +2 -0
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +5 -5
- package/dist/docs/reference/cli.html +4 -4
- package/dist/docs/reference/connections.html +16 -6
- package/dist/docs/reference/connections.md +31 -0
- package/dist/docs/reference/extensions.html +82 -0
- package/dist/docs/reference/extensions.md +200 -0
- 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 +6 -6
- package/dist/docs/reference/project-layout.md +3 -0
- 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 +6 -6
- package/dist/docs/reference/skills.md +2 -0
- package/dist/docs/reference/subagents.html +5 -5
- package/dist/docs/reference/tools.html +6 -6
- package/dist/docs/reference/tools.md +2 -0
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/skills/ab.html +4 -4
- package/dist/docs/skills/create-agent.html +4 -4
- package/dist/docs/skills/debug.html +4 -4
- package/dist/docs/skills/evals.html +4 -4
- package/dist/docs/skills/framework-map.html +5 -5
- package/dist/docs/skills/framework-map.md +1 -0
- package/dist/docs/skills/github.html +4 -4
- package/dist/docs/skills/hillclimb.html +4 -4
- package/dist/docs/skills/index.html +4 -4
- package/dist/docs/skills/mcp-auth.html +4 -4
- package/dist/docs/skills/otel.html +4 -4
- package/dist/docs/skills/setup-slack.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +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 +4 -4
- package/dist/extensions/cursor-cloud-agents/extension.d.ts +57 -0
- package/dist/extensions/cursor-cloud-agents/extension.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/extension.js +66 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts +78 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/backend.js +286 -0
- package/dist/extensions/cursor-cloud-agents/lib/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/inputs.d.ts +5 -0
- package/dist/extensions/cursor-cloud-agents/lib/inputs.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/inputs.js +4 -0
- package/dist/extensions/cursor-cloud-agents/lib/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/lib/transcript.d.ts +8 -0
- package/dist/extensions/cursor-cloud-agents/lib/transcript.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/lib/transcript.js +15 -0
- package/dist/extensions/cursor-cloud-agents/skills/handoff.md +41 -0
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/cancel.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/cancel.js +26 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/dump.js +54 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/get.js +25 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/launch.js +59 -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/reply.d.ts +4 -0
- package/dist/extensions/cursor-cloud-agents/tools/reply.d.ts.map +1 -0
- package/dist/extensions/cursor-cloud-agents/tools/reply.js +35 -0
- package/dist/extensions.d.ts +73 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +112 -0
- package/dist/files-backends/cursor-hosted.d.ts +0 -8
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +1 -11
- package/dist/files.d.ts +5 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +22 -18
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- 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 +64 -19
- 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 +13 -15
- package/dist/internal/cursor/backend-client.d.ts +8 -1
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +25 -9
- 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 +11 -0
- package/dist/internal/cursor/hosted-store-secrets.d.ts.map +1 -1
- package/dist/internal/cursor/hosted-store-secrets.js +15 -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 +23 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +54 -12
- package/dist/internal/discovery/ab.d.ts +9 -0
- package/dist/internal/discovery/ab.d.ts.map +1 -0
- package/dist/internal/discovery/ab.js +101 -0
- package/dist/internal/discovery/agent-config.d.ts +35 -0
- package/dist/internal/discovery/agent-config.d.ts.map +1 -0
- package/dist/internal/discovery/agent-config.js +173 -0
- package/dist/internal/discovery/agent.d.ts +11 -0
- package/dist/internal/discovery/agent.d.ts.map +1 -0
- package/dist/internal/discovery/agent.js +306 -0
- package/dist/internal/discovery/channels.d.ts +10 -0
- package/dist/internal/discovery/channels.d.ts.map +1 -0
- package/dist/internal/discovery/channels.js +97 -0
- package/dist/internal/discovery/connections.d.ts +17 -0
- package/dist/internal/discovery/connections.d.ts.map +1 -0
- package/dist/internal/discovery/connections.js +436 -0
- package/dist/internal/discovery/context.d.ts +20 -0
- package/dist/internal/discovery/context.d.ts.map +1 -0
- package/dist/internal/discovery/context.js +30 -0
- package/dist/internal/discovery/cursor-plugin.d.ts +25 -0
- package/dist/internal/discovery/cursor-plugin.d.ts.map +1 -0
- package/dist/internal/discovery/cursor-plugin.js +570 -0
- package/dist/internal/discovery/extensions.d.ts +19 -0
- package/dist/internal/discovery/extensions.d.ts.map +1 -0
- package/dist/internal/discovery/extensions.js +238 -0
- package/dist/internal/discovery/fs.d.ts +15 -0
- package/dist/internal/discovery/fs.d.ts.map +1 -0
- package/dist/internal/discovery/fs.js +115 -0
- package/dist/internal/discovery/hooks.d.ts +7 -0
- package/dist/internal/discovery/hooks.d.ts.map +1 -0
- package/dist/internal/discovery/hooks.js +48 -0
- package/dist/internal/discovery/info.d.ts +6 -0
- package/dist/internal/discovery/info.d.ts.map +1 -0
- package/dist/internal/discovery/info.js +141 -0
- package/dist/internal/discovery/instructions.d.ts +7 -0
- package/dist/internal/discovery/instructions.d.ts.map +1 -0
- package/dist/internal/discovery/instructions.js +95 -0
- package/dist/internal/discovery/modules.d.ts +20 -0
- package/dist/internal/discovery/modules.d.ts.map +1 -0
- package/dist/internal/discovery/modules.js +101 -0
- package/dist/internal/discovery/names.d.ts +12 -0
- package/dist/internal/discovery/names.d.ts.map +1 -0
- package/dist/internal/discovery/names.js +36 -0
- package/dist/internal/discovery/project.d.ts +53 -0
- package/dist/internal/discovery/project.d.ts.map +1 -0
- package/dist/internal/discovery/project.js +239 -0
- package/dist/internal/discovery/runtime.d.ts +34 -0
- package/dist/internal/discovery/runtime.d.ts.map +1 -0
- package/dist/internal/discovery/runtime.js +98 -0
- package/dist/internal/discovery/schedules.d.ts +7 -0
- package/dist/internal/discovery/schedules.d.ts.map +1 -0
- package/dist/internal/discovery/schedules.js +97 -0
- package/dist/internal/discovery/seed-files.d.ts +7 -0
- package/dist/internal/discovery/seed-files.d.ts.map +1 -0
- package/dist/internal/discovery/seed-files.js +41 -0
- package/dist/internal/discovery/services.d.ts +17 -0
- package/dist/internal/discovery/services.d.ts.map +1 -0
- package/dist/internal/discovery/services.js +104 -0
- package/dist/internal/discovery/skills.d.ts +16 -0
- package/dist/internal/discovery/skills.d.ts.map +1 -0
- package/dist/internal/discovery/skills.js +151 -0
- package/dist/internal/discovery/subagent.d.ts +13 -0
- package/dist/internal/discovery/subagent.d.ts.map +1 -0
- package/dist/internal/discovery/subagent.js +19 -0
- package/dist/internal/discovery/tools.d.ts +18 -0
- package/dist/internal/discovery/tools.d.ts.map +1 -0
- package/dist/internal/discovery/tools.js +159 -0
- package/dist/internal/discovery.d.ts +8 -62
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +8 -2210
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +5 -0
- package/dist/internal/framework-file-storage.d.ts +3 -3
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +38 -9
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +8 -7
- package/dist/internal/frontmatter.d.ts +11 -3
- package/dist/internal/frontmatter.d.ts.map +1 -1
- package/dist/internal/frontmatter.js +29 -3
- package/dist/internal/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 +66 -29
- package/dist/internal/otel/collector.d.ts +13 -0
- package/dist/internal/otel/collector.d.ts.map +1 -1
- package/dist/internal/otel/collector.js +84 -17
- package/dist/internal/otel/http.d.ts.map +1 -1
- package/dist/internal/otel/http.js +2 -10
- package/dist/internal/otel/mcp.d.ts +16 -0
- package/dist/internal/otel/mcp.d.ts.map +1 -0
- package/dist/internal/otel/mcp.js +68 -0
- package/dist/internal/otel/propagation.d.ts +6 -0
- package/dist/internal/otel/propagation.d.ts.map +1 -0
- package/dist/internal/otel/propagation.js +14 -0
- package/dist/internal/otel/runtime.d.ts.map +1 -1
- package/dist/internal/otel/runtime.js +2 -0
- 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 +14 -7
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +113 -66
- package/dist/internal/session-run-log.d.ts +3 -1
- package/dist/internal/session-run-log.d.ts.map +1 -1
- package/dist/internal/session-run-log.js +14 -14
- 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 +149 -0
- package/dist/internal/storage-coordinator.d.ts +4 -1
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +15 -13
- package/dist/internal/tool-catalog.d.ts.map +1 -1
- package/dist/internal/tool-catalog.js +9 -6
- 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/internal/turn-cost.d.ts +14 -0
- package/dist/internal/turn-cost.d.ts.map +1 -1
- package/dist/internal/turn-cost.js +41 -9
- package/dist/internal/v2-hosting.d.ts +22 -0
- package/dist/internal/v2-hosting.d.ts.map +1 -0
- package/dist/internal/v2-hosting.js +23 -0
- package/dist/otel.d.ts +16 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +26 -0
- package/dist/playground/assets/index-B6C9S9nG.css +1 -0
- package/dist/playground/assets/{index-DVs98vPL.js → index-ZqNoT8Ie.js} +45 -45
- package/dist/playground/index.html +2 -2
- package/dist/storage-protocol.d.ts +47 -22
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +90 -54
- package/dist/storage.d.ts +2 -2
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +1 -1
- package/dist/tools.d.ts +9 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +9 -0
- package/dist/types.d.ts +154 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -1
- package/docs/README.md +5 -1
- package/docs/concepts.md +3 -3
- package/docs/guides/cloud-agents.md +98 -0
- package/docs/guides/cloud-runtime.md +2 -0
- package/docs/reference/connections.md +31 -0
- package/docs/reference/extensions.md +205 -0
- package/docs/reference/http-api.md +1 -1
- package/docs/reference/project-layout.md +3 -0
- package/docs/reference/skills.md +2 -0
- package/docs/reference/tools.md +2 -0
- package/package.json +18 -4
- package/skills/framework-map/SKILL.md +1 -0
- 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/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 +6 -3
- package/src/channels/slack/assistant.ts +1 -1
- package/src/channels/slack/code-fences.ts +183 -0
- package/src/channels/slack/dispatch.ts +27 -2
- package/src/channels/slack/inbound.ts +37 -0
- package/src/channels/slack/index.ts +1 -0
- package/src/channels/slack/live-delivery.ts +16 -13
- package/src/channels/slack/manifest.ts +2 -1
- package/src/connections.ts +18 -1
- package/src/extensions/cursor-cloud-agents/extension.ts +120 -0
- package/src/extensions/cursor-cloud-agents/lib/backend.ts +395 -0
- package/src/extensions/cursor-cloud-agents/lib/fleet.ts +109 -0
- package/src/extensions/cursor-cloud-agents/lib/inputs.ts +5 -0
- package/src/extensions/cursor-cloud-agents/lib/repos.ts +81 -0
- package/src/extensions/cursor-cloud-agents/lib/transcript.ts +23 -0
- package/src/extensions/cursor-cloud-agents/skills/handoff.md +41 -0
- package/src/extensions/cursor-cloud-agents/tools/cancel.ts +19 -0
- package/src/extensions/cursor-cloud-agents/tools/dump.ts +51 -0
- package/src/extensions/cursor-cloud-agents/tools/get.ts +18 -0
- package/src/extensions/cursor-cloud-agents/tools/launch.ts +64 -0
- package/src/extensions/cursor-cloud-agents/tools/list.ts +31 -0
- package/src/extensions/cursor-cloud-agents/tools/reply.ts +34 -0
- package/src/extensions.ts +141 -0
- package/src/files-backends/cursor-hosted.ts +1 -17
- package/src/files.ts +43 -34
- package/src/index.ts +11 -0
- package/src/internal/advertise-tools.ts +37 -12
- package/src/internal/as-of.ts +163 -0
- package/src/internal/cli-deploy.ts +86 -23
- package/src/internal/continuation-identity.ts +3 -1
- package/src/internal/conversation-mirror.ts +23 -18
- package/src/internal/cursor/backend-client.ts +32 -10
- package/src/internal/cursor/hosted-deployment-secrets.ts +72 -0
- package/src/internal/cursor/hosted-store-secrets.ts +27 -0
- package/src/internal/cursor-deployment-relay.ts +65 -8
- package/src/internal/deploy-client.ts +73 -18
- package/src/internal/discovery/ab.ts +111 -0
- package/src/internal/discovery/agent-config.ts +222 -0
- package/src/internal/discovery/agent.ts +360 -0
- package/src/internal/discovery/channels.ts +103 -0
- package/src/internal/discovery/connections.ts +540 -0
- package/src/internal/discovery/context.ts +46 -0
- package/src/internal/discovery/cursor-plugin.ts +708 -0
- package/src/internal/discovery/extensions.ts +348 -0
- package/src/internal/discovery/fs.ts +108 -0
- package/src/internal/discovery/hooks.ts +45 -0
- package/src/internal/discovery/info.ts +179 -0
- package/src/internal/discovery/instructions.ts +113 -0
- package/src/internal/discovery/modules.ts +107 -0
- package/src/internal/discovery/names.ts +44 -0
- package/src/internal/discovery/project.ts +270 -0
- package/src/internal/discovery/runtime.ts +159 -0
- package/src/internal/discovery/schedules.ts +94 -0
- package/src/internal/discovery/seed-files.ts +37 -0
- package/src/internal/discovery/services.ts +124 -0
- package/src/internal/discovery/skills.ts +176 -0
- package/src/internal/discovery/subagent.ts +29 -0
- package/src/internal/discovery/tools.ts +182 -0
- package/src/internal/discovery.ts +20 -2724
- package/src/internal/distribution.ts +5 -0
- package/src/internal/framework-file-storage.ts +43 -9
- package/src/internal/framework-storage-selection.ts +9 -9
- package/src/internal/frontmatter.ts +36 -3
- 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 +116 -37
- package/src/internal/otel/collector.ts +125 -25
- package/src/internal/otel/http.ts +2 -12
- package/src/internal/otel/mcp.ts +69 -0
- package/src/internal/otel/propagation.ts +17 -0
- package/src/internal/otel/runtime.ts +2 -0
- package/src/internal/review-comments.ts +5 -2
- package/src/internal/server.ts +81 -100
- package/src/internal/session-engine.ts +152 -39
- package/src/internal/session-run-log.ts +18 -16
- package/src/internal/start-log-store.ts +174 -0
- package/src/internal/storage-coordinator.ts +19 -16
- package/src/internal/tool-catalog.ts +9 -6
- package/src/internal/tool-policy.ts +39 -9
- package/src/internal/turn-cost.ts +47 -4
- package/src/internal/v2-hosting.ts +38 -0
- package/src/otel.ts +38 -0
- package/src/storage-protocol.ts +126 -79
- package/src/storage.ts +5 -0
- package/src/tools.ts +18 -0
- package/src/types.ts +213 -14
- package/dist/docs/assets/chunks/@localSearchIndexroot.j70vvPL4.js +0 -1
- package/dist/docs/assets/concepts.md.lwAgBIMI.js +0 -1
- package/dist/docs/assets/index.md.Bb4k8kUm.js +0 -5
- package/dist/docs/assets/skills_framework-map.md.BTi817yv.js +0 -1
- package/dist/playground/assets/index-BszoQDc6.css +0 -1
- /package/dist/docs/assets/{concepts.md.lwAgBIMI.lean.js → concepts.md.rPzW2HZN.lean.js} +0 -0
- /package/dist/docs/assets/{guides_cloud-runtime.md.CkYbjnAX.lean.js → guides_cloud-runtime.md.BRirbRAN.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/{reference_skills.md.BFW9retM.lean.js → reference_skills.md.l2ezAcaN.lean.js} +0 -0
- /package/dist/docs/assets/{reference_tools.md.CvAHsdSp.lean.js → reference_tools.md.B1up2r9W.lean.js} +0 -0
package/README.md
CHANGED
|
@@ -747,6 +747,33 @@ default). On the Cursor harness, subagents run as SDK custom subagents:
|
|
|
747
747
|
they inherit the parent's execution surface, so per-subagent `tools/`,
|
|
748
748
|
`skills/`, and `mcp-connections/` are reported as warnings and ignored for now.
|
|
749
749
|
|
|
750
|
+
### Extensions (`agent/extensions/<ns>.ts`)
|
|
751
|
+
|
|
752
|
+
An extension is a package of tools and skills mounted with one file; the
|
|
753
|
+
filename is the namespace and every contribution appears as `<ns>__<name>`.
|
|
754
|
+
A Cursor plugin (the marketplace format) mounts the same way with
|
|
755
|
+
`cursorPlugin`: its skills and commands become skills, its agents
|
|
756
|
+
subagents, and its MCP servers connections under the namespace.
|
|
757
|
+
|
|
758
|
+
```ts
|
|
759
|
+
// agent/extensions/ci.ts
|
|
760
|
+
import ci from "@acme/ci-triage";
|
|
761
|
+
export default ci({ org: "acme", token: process.env.BUILDKITE_TOKEN! });
|
|
762
|
+
|
|
763
|
+
// agent/extensions/notion.ts
|
|
764
|
+
import { cursorPlugin } from "@cursor/july/extensions";
|
|
765
|
+
export default cursorPlugin({
|
|
766
|
+
path: "plugins/notion-workspace",
|
|
767
|
+
variables: { NOTION_TOKEN: process.env.NOTION_TOKEN! },
|
|
768
|
+
});
|
|
769
|
+
```
|
|
770
|
+
|
|
771
|
+
Mount as a directory (`agent/extensions/<ns>/extension.ts`) to overlay
|
|
772
|
+
`tools/` and `skills/`, or a plugin's `mcp-connections/`; `disableTool()`
|
|
773
|
+
and `disableConnection()` remove a contribution. Mounting a plugin trusts
|
|
774
|
+
it like authored code. Details in
|
|
775
|
+
[Extensions](./docs/reference/extensions.md).
|
|
776
|
+
|
|
750
777
|
### Channels (`agent/channels/*.ts`)
|
|
751
778
|
|
|
752
779
|
The **built-in HTTP channel** is always mounted (under `/<slug>` in the
|
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"}
|
|
@@ -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"}
|
|
@@ -16,8 +16,10 @@ import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-ad
|
|
|
16
16
|
import { bindLocalIngressSend } from "../../internal/local-ingress.js";
|
|
17
17
|
import { buildOriginBinding } from "./binding.js";
|
|
18
18
|
import { parseCursorOriginRepoScope, registerOriginCursorAccountRuntime, } from "./cursor-account.js";
|
|
19
|
+
import { buildDefaultOriginEvents } from "./defaults.js";
|
|
19
20
|
import { deriveOriginWebhookEvents, ORIGIN_CHANNEL_KIND } from "./events.js";
|
|
20
21
|
import { DEFAULT_ORIGIN_API_BASE_URL, OriginJwksUnavailableError, verifyOriginWebhook, } from "./origin-webhook.js";
|
|
22
|
+
import { emptyOriginChannelState, originChannelStateForEvent, } from "./state.js";
|
|
21
23
|
/**
|
|
22
24
|
* Default dispatch gate when no `onPullRequest` hook is declared: the common
|
|
23
25
|
* review triggers start a turn as the delivery's actor.
|
|
@@ -304,7 +306,7 @@ function isTaskDispatch(dispatch) {
|
|
|
304
306
|
return "task" in dispatch;
|
|
305
307
|
}
|
|
306
308
|
function enrichEventContext(input) {
|
|
307
|
-
return Object.assign(Object.assign({}, input.ctx), { host: input.args.host, artifacts: input.args.artifacts, origin: buildOriginBinding({
|
|
309
|
+
return Object.assign(Object.assign({}, input.ctx), { host: input.args.host, artifacts: input.args.artifacts, send: input.args.send, origin: buildOriginBinding({
|
|
308
310
|
repository: input.ctx.repository,
|
|
309
311
|
installationId: input.ctx.installationId,
|
|
310
312
|
cursorAccount: input.options.cursorAccount !== undefined &&
|
|
@@ -337,9 +339,12 @@ function startTurn(input) {
|
|
|
337
339
|
return __awaiter(this, void 0, void 0, function* () {
|
|
338
340
|
var _a;
|
|
339
341
|
const source = continuationSource(input.options.continuation, "origin");
|
|
340
|
-
const session = yield input.args.send(input.message, Object.assign(Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine"
|
|
342
|
+
const session = yield input.args.send(input.message, Object.assign(Object.assign(Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine"
|
|
341
343
|
? { continuationToken: originContinuationKey(input.ctx) }
|
|
342
|
-
: {})), { title: (_a = input.dispatch.title) !== null && _a !== void 0 ? _a : defaultOriginTitle(input.ctx) }), (input.cloud === undefined ? {} : { cloud: input.cloud }))
|
|
344
|
+
: {})), { title: (_a = input.dispatch.title) !== null && _a !== void 0 ? _a : defaultOriginTitle(input.ctx) }), (input.cloud === undefined ? {} : { cloud: input.cloud })), { state: input.state,
|
|
345
|
+
// Resume must refresh the triggering comment / delivery identifiers so
|
|
346
|
+
// reply delivery targets the latest wake, not the session's first.
|
|
347
|
+
refreshState: input.state }));
|
|
343
348
|
if (isDeferredChannelSession(session)) {
|
|
344
349
|
// Hosted admission captured the send; the control plane allocates the
|
|
345
350
|
// session after acknowledgement, so there is nothing to report yet.
|
|
@@ -395,6 +400,14 @@ function applyDispatch(input) {
|
|
|
395
400
|
message,
|
|
396
401
|
dispatch: input.dispatch,
|
|
397
402
|
cloud: input.cloud,
|
|
403
|
+
state: originChannelStateForEvent({
|
|
404
|
+
repository: input.ctx.repository,
|
|
405
|
+
pullRequestNumber: input.ctx.pullRequestNumber,
|
|
406
|
+
installationId: input.ctx.installationId,
|
|
407
|
+
deliveryId: input.ctx.deliveryId,
|
|
408
|
+
eventType: input.ctx.eventType,
|
|
409
|
+
triggeringCommentId: input.triggeringCommentId,
|
|
410
|
+
}),
|
|
398
411
|
});
|
|
399
412
|
});
|
|
400
413
|
}
|
|
@@ -450,6 +463,7 @@ export function dispatchOriginWebhook(input) {
|
|
|
450
463
|
dispatch,
|
|
451
464
|
extra: { event: eventType },
|
|
452
465
|
message: `Origin comment on ${ctx.repository.fullName}#${ctx.pullRequestNumber}`,
|
|
466
|
+
triggeringCommentId: commentId,
|
|
453
467
|
});
|
|
454
468
|
}
|
|
455
469
|
if (eventType.startsWith("pull_request.review.")) {
|
|
@@ -587,8 +601,15 @@ export function originChannel(options = {}) {
|
|
|
587
601
|
if (channelOptions.continuation !== undefined) {
|
|
588
602
|
channelOptions.continuation = normalizeIdentity(channelOptions.continuation, "origin");
|
|
589
603
|
}
|
|
604
|
+
const events = Object.assign(Object.assign({}, buildDefaultOriginEvents({
|
|
605
|
+
cursorAccount: channelOptions.cursorAccount,
|
|
606
|
+
app: channelOptions.app,
|
|
607
|
+
deliverReplies: channelOptions.deliverReplies,
|
|
608
|
+
})), options.events);
|
|
590
609
|
const definition = defineChannel({
|
|
591
610
|
auth,
|
|
611
|
+
state: emptyOriginChannelState(),
|
|
612
|
+
events,
|
|
592
613
|
onStart: options.onStart,
|
|
593
614
|
onStop: options.onStop,
|
|
594
615
|
meta: {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable per-session Origin channel state.
|
|
3
|
+
*
|
|
4
|
+
* Persisted with the turn (same mechanism as `GitHubChannelState`) so
|
|
5
|
+
* channel stream-event handlers — reply delivery in ./defaults.ts — can
|
|
6
|
+
* rebuild a repo-bound Origin handle without re-parsing the webhook.
|
|
7
|
+
*/
|
|
8
|
+
export interface OriginChannelState {
|
|
9
|
+
owner: string;
|
|
10
|
+
repo: string;
|
|
11
|
+
pullRequestNumber: number | null;
|
|
12
|
+
/** Origin app installation id from the delivery envelope, when present. */
|
|
13
|
+
installationId: string | null;
|
|
14
|
+
/** Comment id that woke the turn (comment events only). */
|
|
15
|
+
triggeringCommentId: string | null;
|
|
16
|
+
deliveryId: string | null;
|
|
17
|
+
eventType: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function emptyOriginChannelState(overrides?: Partial<OriginChannelState>): OriginChannelState;
|
|
20
|
+
/** Build the per-turn channel state from a dispatched event's context. */
|
|
21
|
+
export declare function originChannelStateForEvent(input: {
|
|
22
|
+
repository: {
|
|
23
|
+
owner: string;
|
|
24
|
+
name: string;
|
|
25
|
+
};
|
|
26
|
+
pullRequestNumber: number;
|
|
27
|
+
installationId?: string;
|
|
28
|
+
deliveryId?: string;
|
|
29
|
+
eventType: string;
|
|
30
|
+
triggeringCommentId?: string;
|
|
31
|
+
}): OriginChannelState;
|
|
32
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,2EAA2E;IAC3E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,kBAAkB,CAWpB;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,kBAAkB,CAUrB"}
|