@cursor/july 0.1.62 → 0.1.73
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 -5
- package/README.md +23 -11
- package/dist/bin/agent-serve.js +11 -2
- package/dist/channels/github/api.d.ts +2 -0
- package/dist/channels/github/api.d.ts.map +1 -1
- package/dist/channels/github/api.js +2 -1
- package/dist/channels/github/binding.d.ts +7 -0
- package/dist/channels/github/binding.d.ts.map +1 -1
- package/dist/channels/github/binding.js +4 -0
- package/dist/channels/github/checks.d.ts +99 -0
- package/dist/channels/github/checks.d.ts.map +1 -0
- package/dist/channels/github/checks.js +108 -0
- package/dist/channels/github/cursor-account.d.ts +4 -4
- package/dist/channels/github/cursor-account.d.ts.map +1 -1
- package/dist/channels/github/cursor-account.js +7 -5
- package/dist/channels/github/index.d.ts +1 -0
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +1 -0
- package/dist/channels/github/types.d.ts +8 -0
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/slack/channel-watch.d.ts +2 -1
- package/dist/channels/slack/channel-watch.d.ts.map +1 -1
- package/dist/channels/slack/channel-watch.js +7 -3
- package/dist/channels/slack/dispatch.d.ts +9 -0
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +41 -21
- package/dist/channels/slack/manifest.d.ts +2 -2
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +14 -11
- package/dist/channels/slack/nudge-store.d.ts +16 -0
- package/dist/channels/slack/nudge-store.d.ts.map +1 -1
- package/dist/channels/slack/nudge-store.js +53 -0
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +4 -1
- package/dist/channels/slack/types.d.ts +24 -7
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/connections.d.ts +17 -5
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +17 -5
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.B-biogkN.js → app.CdbcFD8T.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DQad--_z.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DZqKtFZS.js → VPLocalSearchBox.D_NKImM7.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BwC5zP2r.js → theme.CMvz7cu9.js} +2 -2
- package/dist/docs/assets/{concepts.md.CqOsxbMU.js → concepts.md.BXAm6G-C.js} +1 -1
- package/dist/docs/assets/{guides_mcp-oauth.md.C7G7IykG.js → guides_mcp-oauth.md.CzEB6RaG.js} +1 -1
- package/dist/docs/assets/{reference_agent-config.md.DHkkvcEZ.js → reference_agent-config.md.BZnEKfEc.js} +3 -4
- package/dist/docs/assets/{reference_agent-config.md.DHkkvcEZ.lean.js → reference_agent-config.md.BZnEKfEc.lean.js} +1 -1
- package/dist/docs/assets/{reference_connections.md.CSQiNzre.js → reference_connections.md.Cu3N-S3Q.js} +26 -9
- package/dist/docs/assets/reference_connections.md.Cu3N-S3Q.lean.js +1 -0
- package/dist/docs/assets/{reference_sessions.md.DBVFi2Sx.js → reference_sessions.md.B0DdlM-K.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.kJfJAP2m.js → reference_tools.md.DTg_kEsx.js} +2 -2
- package/dist/docs/assets/{reference_tools.md.kJfJAP2m.lean.js → reference_tools.md.DTg_kEsx.lean.js} +1 -1
- package/dist/docs/assets/troubleshooting.md.DQ-hYuZT.js +1 -0
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +5 -5
- package/dist/docs/deployment.html +3 -3
- package/dist/docs/evals.html +3 -3
- package/dist/docs/example-agents/approval-buddy.html +3 -3
- package/dist/docs/example-agents/benny.html +3 -3
- package/dist/docs/example-agents/bugbot.html +3 -3
- package/dist/docs/example-agents/codebase-wiki.html +3 -3
- package/dist/docs/example-agents/codeowners-review.html +3 -3
- package/dist/docs/example-agents/concierge.html +3 -3
- package/dist/docs/example-agents/fsd.html +3 -3
- package/dist/docs/example-agents/index.html +3 -3
- package/dist/docs/example-agents/knowledge-base.html +3 -3
- package/dist/docs/example-agents/oncall.html +3 -3
- package/dist/docs/example-agents/security-reviewer.html +3 -3
- package/dist/docs/example-agents/slack-agent.html +3 -3
- package/dist/docs/example-agents/weather-agent.html +3 -3
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +3 -3
- package/dist/docs/guides/convert-automation.html +3 -3
- package/dist/docs/guides/github.html +3 -3
- package/dist/docs/guides/human-in-the-loop.html +3 -3
- package/dist/docs/guides/mcp-oauth.html +5 -5
- package/dist/docs/guides/opentelemetry.html +3 -3
- package/dist/docs/guides/slack.html +3 -3
- package/dist/docs/guides/webhooks.html +3 -3
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +3 -3
- package/dist/docs/index.html +3 -3
- package/dist/docs/quickstart.html +3 -3
- package/dist/docs/reference/agent-config.html +5 -6
- package/dist/docs/reference/artifacts.html +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +3 -3
- package/dist/docs/reference/connections.html +28 -11
- package/dist/docs/reference/hooks.html +3 -3
- package/dist/docs/reference/http-api.html +3 -3
- package/dist/docs/reference/instructions.html +3 -3
- package/dist/docs/reference/playground.html +3 -3
- package/dist/docs/reference/project-layout.html +3 -3
- package/dist/docs/reference/prompt.html +3 -3
- package/dist/docs/reference/schedules.html +3 -3
- package/dist/docs/reference/sessions.html +5 -5
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +5 -5
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/templates/agentic-owners.html +3 -3
- package/dist/docs/templates/demo.html +3 -3
- package/dist/docs/templates/pr-autofixer.html +3 -3
- package/dist/docs/templates/security-reviewer.html +3 -3
- package/dist/docs/templates/triage.html +3 -3
- package/dist/docs/troubleshooting.html +5 -5
- package/dist/files-backends/agent-store-presigned-url.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/advertise-tools.d.ts +79 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -0
- package/dist/internal/advertise-tools.js +185 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +7 -1
- package/dist/internal/cli-manifest.d.ts +19 -0
- package/dist/internal/cli-manifest.d.ts.map +1 -0
- package/dist/internal/cli-manifest.js +49 -0
- package/dist/internal/cli-slack.d.ts.map +1 -1
- package/dist/internal/cli-slack.js +9 -1
- package/dist/internal/convert-automation/convert-workflow.d.ts.map +1 -1
- package/dist/internal/convert-automation/convert-workflow.js +2 -10
- package/dist/internal/cursor/account-mcp.d.ts +29 -3
- package/dist/internal/cursor/account-mcp.d.ts.map +1 -1
- package/dist/internal/cursor/account-mcp.js +147 -67
- package/dist/internal/cursor/backend-client.d.ts +11 -6
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +32 -10
- package/dist/internal/cursor-account-mcp-auth.d.ts +11 -0
- package/dist/internal/cursor-account-mcp-auth.d.ts.map +1 -1
- package/dist/internal/cursor-account-mcp-auth.js +69 -0
- package/dist/internal/cursor-agent-template.d.ts +9 -0
- package/dist/internal/cursor-agent-template.d.ts.map +1 -0
- package/dist/internal/cursor-agent-template.js +37 -0
- package/dist/internal/deploy-client.d.ts +1 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +18 -2
- package/dist/internal/deploy-manifest.d.ts +76 -0
- package/dist/internal/deploy-manifest.d.ts.map +1 -0
- package/dist/internal/deploy-manifest.js +117 -0
- package/dist/internal/deployment-scm-event-stream.d.ts +116 -0
- package/dist/internal/deployment-scm-event-stream.d.ts.map +1 -0
- package/dist/internal/deployment-scm-event-stream.js +474 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +111 -10
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +12 -123
- package/dist/internal/init-scaffold.d.ts +8 -0
- package/dist/internal/init-scaffold.d.ts.map +1 -0
- package/dist/internal/init-scaffold.js +168 -0
- package/dist/internal/inline-stdio-mcp.d.ts +2 -0
- package/dist/internal/inline-stdio-mcp.d.ts.map +1 -1
- package/dist/internal/inline-stdio-mcp.js +10 -8
- package/dist/internal/json-schema.d.ts +7 -0
- package/dist/internal/json-schema.d.ts.map +1 -1
- package/dist/internal/json-schema.js +18 -3
- package/dist/internal/mcp-endpoint.js +7 -7
- package/dist/internal/mcp-host.d.ts +18 -0
- package/dist/internal/mcp-host.d.ts.map +1 -1
- package/dist/internal/mcp-host.js +43 -5
- package/dist/internal/mcp-oauth.d.ts +22 -0
- package/dist/internal/mcp-oauth.d.ts.map +1 -1
- package/dist/internal/mcp-oauth.js +40 -1
- package/dist/internal/package-inline-stdio.d.ts.map +1 -1
- package/dist/internal/package-inline-stdio.js +5 -5
- package/dist/internal/review-comments.d.ts +97 -0
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +151 -0
- package/dist/internal/sanitize-mcp-tool-name.d.ts +20 -0
- package/dist/internal/sanitize-mcp-tool-name.d.ts.map +1 -0
- package/dist/internal/sanitize-mcp-tool-name.js +30 -0
- package/dist/internal/sdk-runner.d.ts +1 -1
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +36 -13
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +18 -0
- package/dist/internal/session-engine.d.ts +66 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +428 -110
- package/dist/internal/shallow-clone.d.ts +170 -0
- package/dist/internal/shallow-clone.d.ts.map +1 -0
- package/dist/internal/shallow-clone.js +412 -0
- package/dist/internal/slack-provision-client.d.ts +2 -0
- package/dist/internal/slack-provision-client.d.ts.map +1 -1
- package/dist/internal/slack-provision-client.js +1 -0
- package/dist/internal/terminal-style.d.ts +18 -0
- package/dist/internal/terminal-style.d.ts.map +1 -1
- package/dist/internal/terminal-style.js +46 -1
- package/dist/internal/turn-lease-store.d.ts +44 -0
- package/dist/internal/turn-lease-store.d.ts.map +1 -0
- package/dist/internal/turn-lease-store.js +139 -0
- package/dist/internal/workspace.d.ts +14 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +33 -0
- package/dist/playground/assets/index-77uhu5Kr.css +1 -0
- package/dist/playground/assets/index-D4buox4m.js +85 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-protocol.d.ts +122 -0
- package/dist/storage-protocol.d.ts.map +1 -0
- package/dist/storage-protocol.js +173 -0
- package/dist/storage.d.ts +2 -72
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +2 -82
- package/dist/tools.d.ts +7 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +141 -6
- package/dist/types.d.ts.map +1 -1
- package/docs/concepts.md +4 -4
- package/docs/guides/mcp-oauth.md +3 -1
- package/docs/reference/agent-config.md +11 -12
- package/docs/reference/connections.md +108 -10
- package/docs/reference/sessions.md +2 -2
- package/docs/reference/tools.md +14 -0
- package/docs/troubleshooting.md +3 -2
- package/package.json +7 -2
- package/skills/create-agent/SKILL.md +12 -9
- package/skills/debug/SKILL.md +2 -1
- package/skills/framework-map/SKILL.md +6 -6
- package/skills/mcp-auth/SKILL.md +8 -6
- package/src/bin/agent-serve.ts +12 -2
- package/src/channels/github/api.ts +6 -1
- package/src/channels/github/binding.ts +21 -0
- package/src/channels/github/checks.ts +179 -0
- package/src/channels/github/cursor-account.ts +9 -6
- package/src/channels/github/index.ts +1 -0
- package/src/channels/github/types.ts +8 -0
- package/src/channels/slack/channel-watch.ts +6 -3
- package/src/channels/slack/dispatch.ts +40 -3
- package/src/channels/slack/manifest.ts +9 -10
- package/src/channels/slack/nudge-store.ts +56 -0
- package/src/channels/slack/slack-channel.ts +3 -0
- package/src/channels/slack/types.ts +24 -7
- package/src/connections.ts +17 -5
- package/src/index.ts +5 -0
- package/src/internal/advertise-tools.ts +278 -0
- package/src/internal/cli-deploy.ts +11 -1
- package/src/internal/cli-manifest.ts +63 -0
- package/src/internal/cli-slack.ts +10 -1
- package/src/internal/convert-automation/convert-workflow.ts +2 -11
- package/src/internal/cursor/account-mcp.ts +208 -73
- package/src/internal/cursor/backend-client.ts +45 -11
- package/src/internal/cursor-account-mcp-auth.ts +83 -0
- package/src/internal/cursor-agent-template.ts +46 -0
- package/src/internal/deploy-client.ts +25 -6
- package/src/internal/deploy-manifest.ts +161 -0
- package/src/internal/deployment-scm-event-stream.ts +593 -0
- package/src/internal/discovery.ts +132 -3
- package/src/internal/init-project.ts +18 -153
- package/src/internal/init-scaffold.ts +176 -0
- package/src/internal/inline-stdio-mcp.ts +13 -0
- package/src/internal/json-schema.ts +24 -3
- package/src/internal/mcp-endpoint.ts +6 -0
- package/src/internal/mcp-host.ts +70 -9
- package/src/internal/mcp-oauth.ts +55 -1
- package/src/internal/package-inline-stdio.ts +5 -1
- package/src/internal/review-comments.ts +245 -0
- package/src/internal/sanitize-mcp-tool-name.ts +33 -0
- package/src/internal/sdk-runner.ts +50 -11
- package/src/internal/server.ts +19 -0
- package/src/internal/session-engine.ts +392 -19
- package/src/internal/shallow-clone.ts +595 -0
- package/src/internal/slack-provision-client.ts +3 -0
- package/src/internal/terminal-style.ts +67 -1
- package/src/internal/turn-lease-store.ts +147 -0
- package/src/internal/workspace.ts +33 -0
- package/src/storage-protocol.ts +247 -0
- package/src/storage.ts +16 -110
- package/src/tools.ts +7 -0
- package/src/types.ts +149 -7
- package/templates/agentic-owners/agent/agent.ts +3 -0
- package/templates/demo/agent/agent.ts +3 -0
- package/templates/pr-autofixer/agent/lib/drive-schemas.ts +4 -1
- package/templates/security-reviewer/agent/agent.ts +3 -0
- package/templates/triage/agent/agent.ts +3 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.5ozYNf74.js +0 -1
- package/dist/docs/assets/reference_connections.md.CSQiNzre.lean.js +0 -1
- package/dist/docs/assets/troubleshooting.md.CuVztCKs.js +0 -1
- package/dist/playground/assets/index-B4rcOgeP.css +0 -1
- package/dist/playground/assets/index-DXcY42Jv.js +0 -85
- /package/dist/docs/assets/{concepts.md.CqOsxbMU.lean.js → concepts.md.BXAm6G-C.lean.js} +0 -0
- /package/dist/docs/assets/{guides_mcp-oauth.md.C7G7IykG.lean.js → guides_mcp-oauth.md.CzEB6RaG.lean.js} +0 -0
- /package/dist/docs/assets/{reference_sessions.md.DBVFi2Sx.lean.js → reference_sessions.md.B0DdlM-K.lean.js} +0 -0
- /package/dist/docs/assets/{troubleshooting.md.CuVztCKs.lean.js → troubleshooting.md.DQ-hYuZT.lean.js} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline deploy manifest (workstream Wd of
|
|
3
|
+
* `docs/agent-serve/agent-sdk-event-ingress-plan.md`, Wd-0/Wd-1).
|
|
4
|
+
*
|
|
5
|
+
* The manifest is every piece of deployment metadata that is statically
|
|
6
|
+
* derivable from the agent project — extracted at build/deploy time, with no
|
|
7
|
+
* VM, no engine, and no network — so the control plane can store it before
|
|
8
|
+
* any pod starts and keep answering metadata questions while a deployment is
|
|
9
|
+
* offline or hibernated.
|
|
10
|
+
*
|
|
11
|
+
* Two layers with different stability contracts:
|
|
12
|
+
*
|
|
13
|
+
* - `declarations` is the **versioned wire contract** consumed by the
|
|
14
|
+
* control plane (Wd-2): per-channel event capabilities, egress domains,
|
|
15
|
+
* and public route paths. Validated by {@link agentDeployManifestV1Schema};
|
|
16
|
+
* the CP stores these as columns / column views. Repos are deliberately
|
|
17
|
+
* NOT here — which repos a deployment watches is per-instance deploy
|
|
18
|
+
* configuration, not a property of the code.
|
|
19
|
+
* - `info` is the full static project description — the same payload the
|
|
20
|
+
* engine serves at `GET /v1/info` (`projectInfo`). Stored opaquely by the
|
|
21
|
+
* CP so `/v1/info`-class reads can be served for offline deployments
|
|
22
|
+
* (Wd-5). Its shape evolves with the SDK and is intentionally not pinned
|
|
23
|
+
* by the wire schema beyond "is an object".
|
|
24
|
+
*
|
|
25
|
+
* Event derivation note: each mounted channel publishes its event set in its
|
|
26
|
+
* own `channels[].eventTypes` declaration. A project with no GitHub channel
|
|
27
|
+
* subscribes to no GitHub events, regardless of configured repository scope.
|
|
28
|
+
* Keep that capability per-channel: do not reintroduce a provider-wide event
|
|
29
|
+
* union for control-plane consumers.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { z } from "zod";
|
|
33
|
+
import { isPublicEndpointPolicy } from "../channels.js";
|
|
34
|
+
import { isCursorHostedStorage } from "../storage-backends/cursor-hosted.js";
|
|
35
|
+
import type { AgentProject, AgentProjectInfo } from "../types.js";
|
|
36
|
+
import { projectInfo } from "./discovery.js";
|
|
37
|
+
import { packageVersion } from "./distribution.js";
|
|
38
|
+
|
|
39
|
+
export const DEPLOY_MANIFEST_VERSION: 1 = 1;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Versioned wire contract for the CP-consumed declaration fields. Kept
|
|
43
|
+
* module-private (the package builds with isolated declarations); consumers
|
|
44
|
+
* use {@link parseAgentDeployManifest} and the explicit interfaces below.
|
|
45
|
+
*/
|
|
46
|
+
const agentDeployManifestV1Schema = z.object({
|
|
47
|
+
manifestVersion: z.literal(DEPLOY_MANIFEST_VERSION),
|
|
48
|
+
generatedAtMs: z.number().int().nonnegative(),
|
|
49
|
+
cliVersion: z.string().min(1),
|
|
50
|
+
declarations: z.object({
|
|
51
|
+
egressDomains: z.array(z.string().min(1)).max(64),
|
|
52
|
+
publicRoutePaths: z.array(z.string().min(1)).max(64),
|
|
53
|
+
frameworkStorage: z.enum(["cursor-hosted", "other", "none"]).optional(),
|
|
54
|
+
channels: z
|
|
55
|
+
.array(
|
|
56
|
+
z.object({
|
|
57
|
+
id: z.string().min(1).max(128),
|
|
58
|
+
kind: z.string().min(1).max(32).optional(),
|
|
59
|
+
eventTypes: z.array(z.string().min(1).max(64)).max(64).optional(),
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
.max(64),
|
|
63
|
+
}),
|
|
64
|
+
// Full `projectInfo` payload — opaque to the wire contract.
|
|
65
|
+
info: z.record(z.unknown()),
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export interface AgentDeployManifestDeclarations {
|
|
69
|
+
egressDomains: string[];
|
|
70
|
+
publicRoutePaths: string[];
|
|
71
|
+
/** Where this runtime mirrors framework-owned sessions and event chunks. */
|
|
72
|
+
frameworkStorage?: "cursor-hosted" | "other" | "none";
|
|
73
|
+
/**
|
|
74
|
+
* Mounted channels with their kinds and per-channel event capability.
|
|
75
|
+
* Scope keys are installation config and are never extracted here.
|
|
76
|
+
* Continuation is opt-in: without a deterministic selector key, every
|
|
77
|
+
* inbound event starts a fresh session. Selector encoding remains open.
|
|
78
|
+
*/
|
|
79
|
+
channels: Array<{ id: string; kind?: string; eventTypes?: string[] }>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface AgentDeployManifestV1 {
|
|
83
|
+
manifestVersion: 1;
|
|
84
|
+
/** Unix ms at extraction. */
|
|
85
|
+
generatedAtMs: number;
|
|
86
|
+
/** `@cursor/july` version that produced the manifest. */
|
|
87
|
+
cliVersion: string;
|
|
88
|
+
declarations: AgentDeployManifestDeclarations;
|
|
89
|
+
/**
|
|
90
|
+
* Full `projectInfo` payload (see `GET /v1/info`). Opaque to the wire
|
|
91
|
+
* contract; the CP stores it verbatim.
|
|
92
|
+
*/
|
|
93
|
+
info: AgentProjectInfo;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Extract the offline deploy manifest from a loaded project. Pure: no
|
|
98
|
+
* network, no filesystem beyond what `loadAgentProject` already read.
|
|
99
|
+
*/
|
|
100
|
+
export function buildAgentDeployManifest(
|
|
101
|
+
project: AgentProject,
|
|
102
|
+
options?: { nowMs?: number; cliVersion?: string }
|
|
103
|
+
): AgentDeployManifestV1 {
|
|
104
|
+
const channels = project.channels.map((channel) => {
|
|
105
|
+
const kind = channel.definition.meta?.kind;
|
|
106
|
+
const githubEvents = channel.definition.meta?.githubWebhookEvents;
|
|
107
|
+
const originEvents = channel.definition.meta?.originWebhookEvents;
|
|
108
|
+
const eventTypes =
|
|
109
|
+
githubEvents !== undefined
|
|
110
|
+
? [...githubEvents].sort()
|
|
111
|
+
: originEvents !== undefined
|
|
112
|
+
? [...originEvents].sort()
|
|
113
|
+
: undefined;
|
|
114
|
+
return {
|
|
115
|
+
id: channel.id,
|
|
116
|
+
kind,
|
|
117
|
+
eventTypes,
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Same mapping as `july deploy` (cli-deploy.ts): channels declared public
|
|
122
|
+
// via `publicEndpoint()` become alias-token-free route prefixes.
|
|
123
|
+
const publicRoutePaths = project.channels
|
|
124
|
+
.filter((channel) =>
|
|
125
|
+
(channel.definition.auth ?? []).some(isPublicEndpointPolicy)
|
|
126
|
+
)
|
|
127
|
+
.map((channel) => `/v1/channels/${channel.id}`);
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
manifestVersion: DEPLOY_MANIFEST_VERSION,
|
|
131
|
+
generatedAtMs: options?.nowMs ?? Date.now(),
|
|
132
|
+
cliVersion: options?.cliVersion ?? packageVersion(),
|
|
133
|
+
declarations: {
|
|
134
|
+
egressDomains: [...(project.agent.hosting?.egressDomains ?? [])],
|
|
135
|
+
publicRoutePaths,
|
|
136
|
+
frameworkStorage:
|
|
137
|
+
project.storage === undefined
|
|
138
|
+
? "none"
|
|
139
|
+
: isCursorHostedStorage(project.storage)
|
|
140
|
+
? "cursor-hosted"
|
|
141
|
+
: "other",
|
|
142
|
+
channels,
|
|
143
|
+
},
|
|
144
|
+
info: projectInfo(project),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Parse an untrusted manifest (round-trip check for the CLI's own output;
|
|
150
|
+
* the CP re-validates server-side with its own copy of the contract).
|
|
151
|
+
*/
|
|
152
|
+
export function parseAgentDeployManifest(
|
|
153
|
+
raw: unknown
|
|
154
|
+
): AgentDeployManifestV1 | undefined {
|
|
155
|
+
const parsed = agentDeployManifestV1Schema.safeParse(raw);
|
|
156
|
+
// `info` is opaque to the wire schema (validated as a plain object) but
|
|
157
|
+
// typed as AgentProjectInfo for producers/consumers inside the SDK.
|
|
158
|
+
return parsed.success
|
|
159
|
+
? (parsed.data as unknown as AgentDeployManifestV1)
|
|
160
|
+
: undefined;
|
|
161
|
+
}
|