@cursor/july 0.1.32 → 0.1.34
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 +1 -1
- package/dist/artifacts.d.ts.map +1 -1
- package/dist/artifacts.js +0 -5
- package/dist/bin/agent-serve.d.ts +1 -0
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +32 -2
- package/dist/channels/github/types.d.ts +10 -7
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.C2aVczmo.js → app.FPupl4SP.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.WoYunhnT.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.DLEzetbD.js → VPLocalSearchBox.Cd182Cu0.js} +1 -1
- package/dist/docs/assets/chunks/{theme.BkOH1oMp.js → theme.BEM3Okcd.js} +2 -2
- package/dist/docs/assets/{example-agents_weather-agent.md.Dmrcphhl.js → example-agents_weather-agent.md.BADkPqxQ.js} +6 -4
- package/dist/docs/assets/example-agents_weather-agent.md.BADkPqxQ.lean.js +1 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CDJGvVC4.js +9 -0
- package/dist/docs/assets/guides_cloud-runtime.md.CDJGvVC4.lean.js +1 -0
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +3 -3
- 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 +10 -8
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +5 -5
- 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 +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 +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +3 -3
- package/dist/docs/reference/connections.html +3 -3
- 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 +3 -3
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +3 -3
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/files-backends/agent-store-presigned-url.d.ts.map +1 -1
- package/dist/files-backends/agent-store-presigned-url.js +19 -810
- package/dist/files.d.ts +20 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +20 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/internal/artifacts-store.d.ts +14 -6
- package/dist/internal/artifacts-store.d.ts.map +1 -1
- package/dist/internal/artifacts-store.js +160 -16
- package/dist/internal/cli-convert-automation.d.ts +39 -0
- package/dist/internal/cli-convert-automation.d.ts.map +1 -0
- package/dist/internal/cli-convert-automation.js +280 -0
- package/dist/internal/cli-deploy.d.ts +2 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +1 -1
- package/dist/internal/cli-mcp-oauth.d.ts +23 -0
- package/dist/internal/cli-mcp-oauth.d.ts.map +1 -1
- package/dist/internal/cli-mcp-oauth.js +57 -33
- package/dist/internal/convert-automation/convert-workflow.d.ts +10 -0
- package/dist/internal/convert-automation/convert-workflow.d.ts.map +1 -0
- package/dist/internal/convert-automation/convert-workflow.js +998 -0
- package/dist/internal/convert-automation/index.d.ts +3 -0
- package/dist/internal/convert-automation/index.d.ts.map +1 -0
- package/dist/internal/convert-automation/index.js +1 -0
- package/dist/internal/convert-automation/slug.d.ts +11 -0
- package/dist/internal/convert-automation/slug.d.ts.map +1 -0
- package/dist/internal/convert-automation/slug.js +36 -0
- package/dist/internal/convert-automation/types.d.ts +191 -0
- package/dist/internal/convert-automation/types.d.ts.map +1 -0
- package/dist/internal/convert-automation/types.js +13 -0
- package/dist/internal/cursor-relay-core.d.ts +12 -0
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/cursor-relay-core.js +42 -8
- package/dist/internal/deploy-client.d.ts +31 -0
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +48 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +3 -32
- package/dist/internal/init-project.d.ts +1 -0
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +1 -1
- package/dist/internal/mcp-endpoint.d.ts +6 -0
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +168 -0
- package/dist/internal/resolved-connections.d.ts +15 -0
- package/dist/internal/resolved-connections.d.ts.map +1 -1
- package/dist/internal/resolved-connections.js +12 -5
- package/dist/internal/review-comments.d.ts +9 -1
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +76 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +83 -8
- package/dist/internal/session-engine.d.ts +56 -3
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +252 -83
- package/dist/internal/storage-coordinator.d.ts +0 -15
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +0 -52
- package/dist/internal/workspace.d.ts +10 -5
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +13 -0
- package/dist/memory.d.ts +22 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +100 -8
- package/dist/playground/assets/index-CDDWw0YX.js +85 -0
- package/dist/playground/assets/index-MVuNTd8v.css +1 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage.d.ts +0 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +0 -4
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/example-agents/weather-agent.md +29 -11
- package/docs/guides/cloud-runtime.md +6 -4
- package/package.json +3 -22
- package/src/artifacts.ts +0 -6
- package/src/bin/agent-serve.ts +36 -2
- package/src/channels/github/types.ts +10 -7
- package/src/files-backends/agent-store-presigned-url.ts +7 -5
- package/src/files.ts +27 -0
- package/src/index.ts +6 -1
- package/src/internal/artifacts-store.ts +185 -22
- package/src/internal/cli-convert-automation.ts +352 -0
- package/src/internal/cli-deploy.ts +1 -1
- package/src/internal/cli-mcp-oauth.ts +69 -31
- package/src/internal/convert-automation/convert-workflow.ts +1422 -0
- package/src/internal/convert-automation/index.ts +10 -0
- package/src/internal/convert-automation/slug.ts +38 -0
- package/src/internal/convert-automation/types.ts +199 -0
- package/src/internal/cursor-relay-core.ts +62 -3
- package/src/internal/deploy-client.ts +78 -0
- package/src/internal/discovery.ts +3 -37
- package/src/internal/init-project.ts +1 -1
- package/src/internal/mcp-endpoint.ts +243 -0
- package/src/internal/resolved-connections.ts +32 -6
- package/src/internal/review-comments.ts +102 -2
- package/src/internal/server.ts +108 -2
- package/src/internal/session-engine.ts +329 -99
- package/src/internal/storage-coordinator.ts +0 -62
- package/src/internal/workspace.ts +19 -5
- package/src/memory.ts +126 -10
- package/src/storage.ts +0 -6
- package/src/types.ts +15 -0
- package/dist/channels/slack/post-update-delivery.d.ts +0 -85
- package/dist/channels/slack/post-update-delivery.d.ts.map +0 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.xgMnlUSO.js +0 -1
- package/dist/docs/assets/example-agents_weather-agent.md.Dmrcphhl.lean.js +0 -1
- package/dist/docs/assets/guides_cloud-runtime.md.BZ2GA7Es.js +0 -9
- package/dist/docs/assets/guides_cloud-runtime.md.BZ2GA7Es.lean.js +0 -1
- package/dist/internal/json-dir-store.d.ts +0 -32
- package/dist/internal/json-dir-store.d.ts.map +0 -1
- package/dist/internal/persistence-coordinator.d.ts +0 -127
- package/dist/internal/persistence-coordinator.d.ts.map +0 -1
- package/dist/multi-tenant.d.ts +0 -80
- package/dist/multi-tenant.d.ts.map +0 -1
- package/dist/multi-tenant.js +0 -69
- package/dist/persistence.d.ts +0 -184
- package/dist/persistence.d.ts.map +0 -1
- package/dist/playground/assets/index-50PKeJlG.css +0 -1
- package/dist/playground/assets/index-C0f2Wl1q.js +0 -85
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal/convert-automation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { convertWorkflow } from "./convert-workflow.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Filename slugs for generated project files. */
|
|
2
|
+
/** Lowercase, dashes, alphanumerics only; `fallback` when nothing survives. */
|
|
3
|
+
export declare function slugify(name: string, fallback: string): string;
|
|
4
|
+
/** Single-token PascalCase (Slack cursorAccount agentName). */
|
|
5
|
+
export declare function pascalCase(name: string, fallback: string): string;
|
|
6
|
+
/** Dedupes slugs with numeric suffixes: `linear`, `linear-2`, `linear-3`, … */
|
|
7
|
+
export declare class SlugRegistry {
|
|
8
|
+
private readonly used;
|
|
9
|
+
claim(base: string): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../../src/internal/convert-automation/slug.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,+EAA+E;AAC/E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,+EAA+E;AAC/E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAE1C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY1B;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Filename slugs for generated project files. */
|
|
2
|
+
/** Lowercase, dashes, alphanumerics only; `fallback` when nothing survives. */
|
|
3
|
+
export function slugify(name, fallback) {
|
|
4
|
+
const slug = name
|
|
5
|
+
.toLowerCase()
|
|
6
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
7
|
+
.replace(/^-+|-+$/g, "");
|
|
8
|
+
return slug === "" ? fallback : slug;
|
|
9
|
+
}
|
|
10
|
+
/** Single-token PascalCase (Slack cursorAccount agentName). */
|
|
11
|
+
export function pascalCase(name, fallback) {
|
|
12
|
+
const words = name.split(/[^a-zA-Z0-9]+/).filter((word) => word !== "");
|
|
13
|
+
if (words.length === 0) {
|
|
14
|
+
return fallback;
|
|
15
|
+
}
|
|
16
|
+
return words.map((word) => { var _a; return ((_a = word[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase()) + word.slice(1); }).join("");
|
|
17
|
+
}
|
|
18
|
+
/** Dedupes slugs with numeric suffixes: `linear`, `linear-2`, `linear-3`, … */
|
|
19
|
+
export class SlugRegistry {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.used = new Set();
|
|
22
|
+
}
|
|
23
|
+
claim(base) {
|
|
24
|
+
if (!this.used.has(base)) {
|
|
25
|
+
this.used.add(base);
|
|
26
|
+
return base;
|
|
27
|
+
}
|
|
28
|
+
for (let suffix = 2;; suffix++) {
|
|
29
|
+
const candidate = `${base}-${suffix}`;
|
|
30
|
+
if (!this.used.has(candidate)) {
|
|
31
|
+
this.used.add(candidate);
|
|
32
|
+
return candidate;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for `convertWorkflow` — the pure automation → agentkit project
|
|
3
|
+
* converter behind `agent-serve convert-automation`.
|
|
4
|
+
*
|
|
5
|
+
* The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
|
|
6
|
+
* enum value names as strings) produced by the backend export endpoint
|
|
7
|
+
* (`Workflow.toJson()` over `schema/aiserver/v1/automations.proto`).
|
|
8
|
+
* `@anysphere/proto` is not a dependency of this package, so instead of
|
|
9
|
+
* `Workflow.fromJson` we model the subset of the JSON shape the converter
|
|
10
|
+
* reads as local structural types. Unknown fields are ignored by
|
|
11
|
+
* construction; unknown trigger/action variants surface as warnings.
|
|
12
|
+
*/
|
|
13
|
+
/** Automation metadata from the export endpoint (`AutomationExportResponse`). */
|
|
14
|
+
export interface ConvertAutomationMetadata {
|
|
15
|
+
uuid: string;
|
|
16
|
+
name: string;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
/** DB scope enum name, e.g. "USER" | "TEAM" | "TEAM_EDITABLE_USER". */
|
|
19
|
+
scope: string;
|
|
20
|
+
webUrl: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* MCP server entry from the export endpoint (`AutomationExportMcpServer`):
|
|
24
|
+
* name + transport references only. Non-stdio servers convert to
|
|
25
|
+
* Cursor-account connections resolved at runtime.
|
|
26
|
+
*/
|
|
27
|
+
export interface ConvertMcpServer {
|
|
28
|
+
id?: string;
|
|
29
|
+
name: string;
|
|
30
|
+
transportType: "http" | "sse" | "stdio";
|
|
31
|
+
}
|
|
32
|
+
export interface ConvertWorkflowInput {
|
|
33
|
+
automation: ConvertAutomationMetadata;
|
|
34
|
+
/** The Workflow as generic proto3 JSON. */
|
|
35
|
+
workflow: WorkflowJson;
|
|
36
|
+
/** MCP servers resolved by the export endpoint (not from workflow refs). */
|
|
37
|
+
mcpServers: ConvertMcpServer[];
|
|
38
|
+
/**
|
|
39
|
+
* Export timestamp supplied by the caller (ISO 8601). Passed in so the
|
|
40
|
+
* conversion stays fully deterministic.
|
|
41
|
+
*/
|
|
42
|
+
exportedAt: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ConvertedFile {
|
|
45
|
+
path: string;
|
|
46
|
+
contents: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ConvertedMcpConnection {
|
|
49
|
+
/** Connection (file) name under `agent/mcp-connections/`. */
|
|
50
|
+
name: string;
|
|
51
|
+
/** Runtime-resolved Cursor-account connection, or a .todo.md stdio stub. */
|
|
52
|
+
kind: "cursorAccount" | "stdioStub";
|
|
53
|
+
}
|
|
54
|
+
export interface ConvertWorkflowResult {
|
|
55
|
+
files: ConvertedFile[];
|
|
56
|
+
warnings: string[];
|
|
57
|
+
setupSteps: string[];
|
|
58
|
+
mcpConnections: ConvertedMcpConnection[];
|
|
59
|
+
}
|
|
60
|
+
export interface WorkflowJson {
|
|
61
|
+
managedConfig?: Record<string, unknown>;
|
|
62
|
+
triggers?: TriggerJson[];
|
|
63
|
+
actions?: ActionJson[];
|
|
64
|
+
prompts?: PromptJson[];
|
|
65
|
+
model?: string;
|
|
66
|
+
gitConfig?: GitConfigJson;
|
|
67
|
+
agentOptions?: AgentOptionsJson;
|
|
68
|
+
memoryEnabled?: boolean;
|
|
69
|
+
disabledDefaultTools?: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface GitConfigJson {
|
|
72
|
+
repo?: string;
|
|
73
|
+
branch?: string;
|
|
74
|
+
repos?: string[];
|
|
75
|
+
}
|
|
76
|
+
export interface AgentOptionsJson {
|
|
77
|
+
skipInstall?: boolean;
|
|
78
|
+
privateWorker?: {
|
|
79
|
+
labels?: Array<{
|
|
80
|
+
key?: string;
|
|
81
|
+
value?: string;
|
|
82
|
+
}>;
|
|
83
|
+
};
|
|
84
|
+
environmentPublicId?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface PromptJson {
|
|
87
|
+
prompt?: string;
|
|
88
|
+
/** Enum name (e.g. "PROMPT_EFFORT_LEVEL_HARD") or number. */
|
|
89
|
+
effortLevel?: string | number;
|
|
90
|
+
model?: string;
|
|
91
|
+
suppressSlackReaction?: boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* A workflow trigger. Exactly one of the variant fields is set (proto oneof).
|
|
95
|
+
*/
|
|
96
|
+
export interface TriggerJson {
|
|
97
|
+
cron?: CronTriggerJson;
|
|
98
|
+
git?: GitTriggerJson;
|
|
99
|
+
slackTrigger?: SlackWatchTriggerJson;
|
|
100
|
+
linear?: Record<string, unknown>;
|
|
101
|
+
webhook?: Record<string, unknown>;
|
|
102
|
+
slackChannelCreated?: Record<string, unknown>;
|
|
103
|
+
pagerduty?: Record<string, unknown>;
|
|
104
|
+
sentry?: Record<string, unknown>;
|
|
105
|
+
microsoftTeamsTrigger?: Record<string, unknown>;
|
|
106
|
+
microsoftTeamsChannelCreated?: Record<string, unknown>;
|
|
107
|
+
slackReactionAdded?: SlackChannelsTriggerJson;
|
|
108
|
+
slackMention?: SlackChannelsTriggerJson;
|
|
109
|
+
slackAnyReactionAdded?: SlackChannelsTriggerJson;
|
|
110
|
+
}
|
|
111
|
+
export interface CronTriggerJson {
|
|
112
|
+
cron?: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Git trigger. Exactly one event variant is set; each carries `repos` and
|
|
116
|
+
* event-specific filter fields the converter only echoes into comments.
|
|
117
|
+
*/
|
|
118
|
+
export interface GitTriggerJson {
|
|
119
|
+
pullRequest?: GitEventJson;
|
|
120
|
+
push?: GitEventJson;
|
|
121
|
+
ciCompleted?: GitEventJson;
|
|
122
|
+
issueLabeled?: GitEventJson;
|
|
123
|
+
label?: GitEventJson & {
|
|
124
|
+
pullRequests?: boolean;
|
|
125
|
+
issues?: boolean;
|
|
126
|
+
};
|
|
127
|
+
issueComment?: GitEventJson;
|
|
128
|
+
pullRequestReviewComment?: GitEventJson;
|
|
129
|
+
pullRequestReview?: GitEventJson;
|
|
130
|
+
reviewThread?: GitEventJson;
|
|
131
|
+
workflowRun?: GitEventJson;
|
|
132
|
+
pullRequestReviewRequested?: GitEventJson;
|
|
133
|
+
issueAssigned?: GitEventJson;
|
|
134
|
+
userAllowlist?: string[];
|
|
135
|
+
}
|
|
136
|
+
export interface GitEventJson {
|
|
137
|
+
repo?: string;
|
|
138
|
+
repos?: string[];
|
|
139
|
+
orgs?: string[];
|
|
140
|
+
/** Only on push events: branch filter enforced by Cursor's backend. */
|
|
141
|
+
branch?: string;
|
|
142
|
+
/** Enum name, only on pullRequest events (e.g. "GIT_PULL_REQUEST_ACTION_COMMENTED"). */
|
|
143
|
+
prAction?: string | number;
|
|
144
|
+
[key: string]: unknown;
|
|
145
|
+
}
|
|
146
|
+
/** SlackTrigger (channel watch). */
|
|
147
|
+
export interface SlackWatchTriggerJson {
|
|
148
|
+
channel?: string;
|
|
149
|
+
channels?: string[];
|
|
150
|
+
messageContains?: string;
|
|
151
|
+
messageContainsIsRegex?: boolean;
|
|
152
|
+
topLevelOnly?: boolean;
|
|
153
|
+
[key: string]: unknown;
|
|
154
|
+
}
|
|
155
|
+
/** Shared shape of SlackMention / SlackReactionAdded / SlackAnyReactionAdded. */
|
|
156
|
+
export interface SlackChannelsTriggerJson {
|
|
157
|
+
channel?: string;
|
|
158
|
+
channels?: string[];
|
|
159
|
+
[key: string]: unknown;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* A workflow action. Exactly one variant field is set (proto oneof). Only
|
|
163
|
+
* `mcp` carries data the converter reads; the rest map to
|
|
164
|
+
* "behaviors to verify" setup steps.
|
|
165
|
+
*/
|
|
166
|
+
export interface ActionJson {
|
|
167
|
+
gitPr?: Record<string, unknown>;
|
|
168
|
+
prComment?: Record<string, unknown>;
|
|
169
|
+
slack?: SlackActionJson;
|
|
170
|
+
mcp?: {
|
|
171
|
+
server?: {
|
|
172
|
+
id?: string;
|
|
173
|
+
name?: string;
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
manageCheckRun?: Record<string, unknown>;
|
|
177
|
+
requestReviewers?: Record<string, unknown>;
|
|
178
|
+
readSlack?: Record<string, unknown>;
|
|
179
|
+
approvePr?: Record<string, unknown>;
|
|
180
|
+
resolveReviewThreads?: Record<string, unknown>;
|
|
181
|
+
microsoftTeams?: Record<string, unknown>;
|
|
182
|
+
readMicrosoftTeams?: Record<string, unknown>;
|
|
183
|
+
}
|
|
184
|
+
export interface SlackActionJson {
|
|
185
|
+
channel?: string;
|
|
186
|
+
channels?: string[];
|
|
187
|
+
generalized?: boolean;
|
|
188
|
+
postAsThread?: boolean;
|
|
189
|
+
[key: string]: unknown;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/convert-automation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,iFAAiF;AACjF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,yBAAyB,CAAC;IACtC,2CAA2C;IAC3C,QAAQ,EAAE,YAAY,CAAC;IACvB,4EAA4E;IAC5E,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,sBAAsB,EAAE,CAAC;CAC1C;AAMD,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACrE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,GAAG;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wBAAwB,CAAC,EAAE,YAAY,CAAC;IACxC,iBAAiB,CAAC,EAAE,YAAY,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,0BAA0B,CAAC,EAAE,YAAY,CAAC;IAC1C,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,iFAAiF;AACjF,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,GAAG,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for `convertWorkflow` — the pure automation → agentkit project
|
|
3
|
+
* converter behind `agent-serve convert-automation`.
|
|
4
|
+
*
|
|
5
|
+
* The workflow arrives as generic proto3 JSON (lowerCamelCase field names,
|
|
6
|
+
* enum value names as strings) produced by the backend export endpoint
|
|
7
|
+
* (`Workflow.toJson()` over `schema/aiserver/v1/automations.proto`).
|
|
8
|
+
* `@anysphere/proto` is not a dependency of this package, so instead of
|
|
9
|
+
* `Workflow.fromJson` we model the subset of the JSON shape the converter
|
|
10
|
+
* reads as local structural types. Unknown fields are ignored by
|
|
11
|
+
* construction; unknown trigger/action variants surface as warnings.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -73,7 +73,18 @@ export interface CursorRelayCoreOptions<TEvent extends {
|
|
|
73
73
|
fetchImpl?: typeof fetch;
|
|
74
74
|
/** Test seam: override long-poll wait (default 25s). */
|
|
75
75
|
pollWaitMs?: number;
|
|
76
|
+
/**
|
|
77
|
+
* Desired-revision generation for hosted engines. Sent as
|
|
78
|
+
* `x-agent-serve-generation` so the control plane can fence zombies after
|
|
79
|
+
* a redeploy. Defaults to `process.env.AGENT_SERVE_GENERATION` when set.
|
|
80
|
+
*/
|
|
81
|
+
deploymentGeneration?: number;
|
|
76
82
|
}
|
|
83
|
+
/** Must match server-shared `AGENT_SERVE_GENERATION_HEADER`. */
|
|
84
|
+
export declare const AGENT_SERVE_GENERATION_HEADER = "x-agent-serve-generation";
|
|
85
|
+
/** Must match server-shared `AGENT_SERVE_GENERATION_ENV_VAR`. */
|
|
86
|
+
export declare const AGENT_SERVE_GENERATION_ENV_VAR = "AGENT_SERVE_GENERATION";
|
|
87
|
+
export declare function resolveAgentServeDeploymentGeneration(explicit?: number): number | undefined;
|
|
77
88
|
export declare class CursorRelayCore<TEvent extends {
|
|
78
89
|
offset: string;
|
|
79
90
|
}> {
|
|
@@ -84,6 +95,7 @@ export declare class CursorRelayCore<TEvent extends {
|
|
|
84
95
|
private consumePromise;
|
|
85
96
|
private readonly offsetStore;
|
|
86
97
|
private readonly fetchImpl;
|
|
98
|
+
private readonly deploymentGeneration;
|
|
87
99
|
private consumerId;
|
|
88
100
|
/** undefined until the first registration, so a clean first success logs. */
|
|
89
101
|
private lastRegistrationLog;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-relay-core.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-relay-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6BH,8DAA8D;AAC9D,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAArC,YAA6B,QAAQ,EAAE,MAAM,EAAI;IAEjD,OAAO,KAAK,QAAQ,GAEnB;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAcxC;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxC;CACF;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjE;AASD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEzD;AAQD;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,MAAM,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;IAC7D,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACnD;;;;;;OAMG;IACH,uBAAuB,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD;;;;;OAKG;IACH,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IACnD;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB,CAAC,MAAM,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor-relay-core.d.ts","sourceRoot":"","sources":["../../src/internal/cursor-relay-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,6 +92,30 @@ function splitOffset(offset) {
|
|
|
92
92
|
export function describeRelayError(error) {
|
|
93
93
|
return error instanceof Error ? error.message : String(error);
|
|
94
94
|
}
|
|
95
|
+
/** Must match server-shared `AGENT_SERVE_GENERATION_HEADER`. */
|
|
96
|
+
export const AGENT_SERVE_GENERATION_HEADER = "x-agent-serve-generation";
|
|
97
|
+
/** Must match server-shared `AGENT_SERVE_GENERATION_ENV_VAR`. */
|
|
98
|
+
export const AGENT_SERVE_GENERATION_ENV_VAR = "AGENT_SERVE_GENERATION";
|
|
99
|
+
export function resolveAgentServeDeploymentGeneration(explicit) {
|
|
100
|
+
var _a;
|
|
101
|
+
if (explicit !== undefined &&
|
|
102
|
+
Number.isSafeInteger(explicit) &&
|
|
103
|
+
explicit > 0) {
|
|
104
|
+
return explicit;
|
|
105
|
+
}
|
|
106
|
+
const raw = (_a = process.env[AGENT_SERVE_GENERATION_ENV_VAR]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
107
|
+
if (raw === undefined || raw.length === 0) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
if (!/^\d+$/.test(raw)) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const parsed = Number(raw);
|
|
114
|
+
if (!Number.isSafeInteger(parsed) || parsed <= 0) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
return parsed;
|
|
118
|
+
}
|
|
95
119
|
export class CursorRelayCore {
|
|
96
120
|
constructor(options) {
|
|
97
121
|
var _a;
|
|
@@ -102,6 +126,7 @@ export class CursorRelayCore {
|
|
|
102
126
|
this.registeredOnce = false;
|
|
103
127
|
this.offsetStore = new RelayOffsetStore(options.stateDir);
|
|
104
128
|
this.fetchImpl = (_a = options.fetchImpl) !== null && _a !== void 0 ? _a : fetch;
|
|
129
|
+
this.deploymentGeneration = resolveAgentServeDeploymentGeneration(options.deploymentGeneration);
|
|
105
130
|
}
|
|
106
131
|
start() {
|
|
107
132
|
if (this.running)
|
|
@@ -216,10 +241,11 @@ export class CursorRelayCore {
|
|
|
216
241
|
try {
|
|
217
242
|
const response = yield this.fetchImpl(url, {
|
|
218
243
|
method: "PUT",
|
|
219
|
-
headers: {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
244
|
+
headers: Object.assign({ authorization: `Bearer ${this.options.apiKey}`, "content-type": "application/json" }, (this.deploymentGeneration === undefined
|
|
245
|
+
? {}
|
|
246
|
+
: {
|
|
247
|
+
[AGENT_SERVE_GENERATION_HEADER]: String(this.deploymentGeneration),
|
|
248
|
+
})),
|
|
223
249
|
body: JSON.stringify(adapter.buildDeregistrationBody(this.consumerId)),
|
|
224
250
|
signal: controller.signal,
|
|
225
251
|
});
|
|
@@ -244,7 +270,11 @@ export class CursorRelayCore {
|
|
|
244
270
|
request(method, path, body) {
|
|
245
271
|
return __awaiter(this, void 0, void 0, function* () {
|
|
246
272
|
const url = `${this.options.baseUrl.replace(/\/+$/, "")}${path}`;
|
|
247
|
-
return this.fetchImpl(url, Object.assign(Object.assign({ method, headers: Object.assign({ authorization: `Bearer ${this.options.apiKey}` }, (body === undefined ? {} : { "content-type": "application/json" }))
|
|
273
|
+
return this.fetchImpl(url, Object.assign(Object.assign({ method, headers: Object.assign(Object.assign({ authorization: `Bearer ${this.options.apiKey}` }, (body === undefined ? {} : { "content-type": "application/json" })), (this.deploymentGeneration === undefined
|
|
274
|
+
? {}
|
|
275
|
+
: {
|
|
276
|
+
[AGENT_SERVE_GENERATION_HEADER]: String(this.deploymentGeneration),
|
|
277
|
+
})) }, (body === undefined ? {} : { body: JSON.stringify(body) })), (this.abort === undefined ? {} : { signal: this.abort.signal })));
|
|
248
278
|
});
|
|
249
279
|
}
|
|
250
280
|
/** Retry registration with backoff until it succeeds or the relay stops. */
|
|
@@ -412,12 +442,16 @@ export class CursorRelayCore {
|
|
|
412
442
|
/** Log the failure, sleep, and return the backoff for the NEXT failure. */
|
|
413
443
|
backoffAfterHttpFailure(response, backoffMs) {
|
|
414
444
|
return __awaiter(this, void 0, void 0, function* () {
|
|
415
|
-
|
|
416
|
-
|
|
445
|
+
// 409 = generation fence (stale resident after redeploy). Same long
|
|
446
|
+
// backoff as auth: retrying every second cannot heal a wrong generation.
|
|
447
|
+
const isAuthOrFenceFailure = response.status === 401 ||
|
|
448
|
+
response.status === 403 ||
|
|
449
|
+
response.status === 409;
|
|
450
|
+
const sleepMs = isAuthOrFenceFailure ? AUTH_FAILURE_BACKOFF_MS : backoffMs;
|
|
417
451
|
const text = yield response.text().catch(() => "");
|
|
418
452
|
this.log(`poll failed: ${response.status} ${text.slice(0, 300)} (retrying in ${Math.round(sleepMs / 1000)}s)`);
|
|
419
453
|
yield this.sleep(sleepMs);
|
|
420
|
-
return
|
|
454
|
+
return isAuthOrFenceFailure
|
|
421
455
|
? AUTH_FAILURE_BACKOFF_MS
|
|
422
456
|
: Math.min(backoffMs * 2, MAX_BACKOFF_MS);
|
|
423
457
|
});
|
|
@@ -130,6 +130,28 @@ export interface SecretInfo {
|
|
|
130
130
|
name: string;
|
|
131
131
|
createdAt: string;
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* `GET /internal/agent-serve/automations/:uuid/export` response
|
|
135
|
+
* (backend `agentServeAutomationExport.ts`). Name + transport references
|
|
136
|
+
* only — the backend never exports URLs or credential material.
|
|
137
|
+
*/
|
|
138
|
+
export interface AutomationExportMcpServer {
|
|
139
|
+
id?: string;
|
|
140
|
+
name: string;
|
|
141
|
+
transportType: "http" | "sse" | "stdio";
|
|
142
|
+
}
|
|
143
|
+
export interface AutomationExport {
|
|
144
|
+
automation: {
|
|
145
|
+
uuid: string;
|
|
146
|
+
name: string;
|
|
147
|
+
enabled: boolean;
|
|
148
|
+
scope: string;
|
|
149
|
+
webUrl: string;
|
|
150
|
+
};
|
|
151
|
+
/** The Workflow as generic proto3 JSON. */
|
|
152
|
+
workflow: Record<string, unknown>;
|
|
153
|
+
mcpServers: AutomationExportMcpServer[];
|
|
154
|
+
}
|
|
133
155
|
export interface AgentServeDeployClientOptions {
|
|
134
156
|
backendUrl: string;
|
|
135
157
|
apiKey: string;
|
|
@@ -196,6 +218,15 @@ export declare class AgentServeDeployClient {
|
|
|
196
218
|
teamId: number;
|
|
197
219
|
slug: string;
|
|
198
220
|
}): Promise<string>;
|
|
221
|
+
/**
|
|
222
|
+
* Read an Automation's exported workflow definition for
|
|
223
|
+
* `convert-automation`. Missing, no-access, and gate-off all surface as
|
|
224
|
+
* indistinguishable 404s on the backend, so they map to one message here
|
|
225
|
+
* (the wrong-host 404 hint from {@link mapErrorResponse} passes through).
|
|
226
|
+
*/
|
|
227
|
+
exportAutomation(args: {
|
|
228
|
+
uuid: string;
|
|
229
|
+
}): Promise<AutomationExport>;
|
|
199
230
|
/** Full URL of the stable engine alias for a deployment. */
|
|
200
231
|
aliasUrl(engineAlias: string): string;
|
|
201
232
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -178,6 +178,27 @@ const listSecretsResponseSchema = z
|
|
|
178
178
|
secrets: z.array(z.object({ name: z.string(), createdAt: z.string() }).passthrough()),
|
|
179
179
|
})
|
|
180
180
|
.passthrough();
|
|
181
|
+
const automationExportSchema = z
|
|
182
|
+
.object({
|
|
183
|
+
automation: z
|
|
184
|
+
.object({
|
|
185
|
+
uuid: z.string(),
|
|
186
|
+
name: z.string(),
|
|
187
|
+
enabled: z.boolean(),
|
|
188
|
+
scope: z.string(),
|
|
189
|
+
webUrl: z.string(),
|
|
190
|
+
})
|
|
191
|
+
.passthrough(),
|
|
192
|
+
workflow: z.record(z.unknown()),
|
|
193
|
+
mcpServers: z.array(z
|
|
194
|
+
.object({
|
|
195
|
+
id: z.string().optional(),
|
|
196
|
+
name: z.string(),
|
|
197
|
+
transportType: z.enum(["http", "sse", "stdio"]),
|
|
198
|
+
})
|
|
199
|
+
.passthrough()),
|
|
200
|
+
})
|
|
201
|
+
.passthrough();
|
|
181
202
|
export class AgentServeDeployClient {
|
|
182
203
|
constructor(options) {
|
|
183
204
|
var _a;
|
|
@@ -332,6 +353,33 @@ export class AgentServeDeployClient {
|
|
|
332
353
|
return rotatePodCredentialResponseSchema.parse(raw).podCredentialMaskedKey;
|
|
333
354
|
});
|
|
334
355
|
}
|
|
356
|
+
/**
|
|
357
|
+
* Read an Automation's exported workflow definition for
|
|
358
|
+
* `convert-automation`. Missing, no-access, and gate-off all surface as
|
|
359
|
+
* indistinguishable 404s on the backend, so they map to one message here
|
|
360
|
+
* (the wrong-host 404 hint from {@link mapErrorResponse} passes through).
|
|
361
|
+
*/
|
|
362
|
+
exportAutomation(args) {
|
|
363
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
364
|
+
let raw;
|
|
365
|
+
try {
|
|
366
|
+
raw = yield this.request({
|
|
367
|
+
method: "GET",
|
|
368
|
+
path: `/internal/agent-serve/automations/${encodeURIComponent(args.uuid)}/export`,
|
|
369
|
+
context: { verb: "export automation" },
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
if (error instanceof DeployApiError &&
|
|
374
|
+
error.status === 404 &&
|
|
375
|
+
!error.message.includes("api.cursor.com")) {
|
|
376
|
+
throw new DeployApiError(`Automation ${args.uuid} was not found or you don't have access to it (the agent_serve_mvp feature gate may also be off for your team).`, 404);
|
|
377
|
+
}
|
|
378
|
+
throw error;
|
|
379
|
+
}
|
|
380
|
+
return automationExportSchema.parse(raw);
|
|
381
|
+
});
|
|
382
|
+
}
|
|
335
383
|
/** Full URL of the stable engine alias for a deployment. */
|
|
336
384
|
aliasUrl(engineAlias) {
|
|
337
385
|
return `${this.backendUrl}${engineAlias}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EASrB,KAAK,UAAU,EAqBhB,MAAM,aAAa,CAAC;AA0BrB,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3E;AAmBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAAuB,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAgBzD;AAWD,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAIrC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CAiEvB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAOnE;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/internal/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EASrB,KAAK,UAAU,EAqBhB,MAAM,aAAa,CAAC;AA0BrB,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3E;AAmBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAoBzD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAAuB,GAAG;IACjC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAgBzD;AAWD,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAIrC,CAAC;AAEH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,YAAY,CAAC,CAiEvB;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAElE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAOnE;AA8oBD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiB3E;AAkrBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CA6InE"}
|
|
@@ -307,14 +307,13 @@ function loadAgent(ctx, agentDir, options) {
|
|
|
307
307
|
const concurrency = resolveConcurrency(ctx, agentDir, config === null || config === void 0 ? void 0 : config.concurrency);
|
|
308
308
|
if (runtime === "cloud") {
|
|
309
309
|
warnCloudRuntimeLimitations(ctx, agentDir, {
|
|
310
|
-
serverTools: tools.filter((tool) => tool.execution === "server").length,
|
|
311
310
|
agentTools: tools.filter((tool) => tool.execution === "agent").length,
|
|
312
311
|
skills: skills.length,
|
|
313
312
|
seedFiles: seedFiles.length,
|
|
314
313
|
hasCloudOptions: cloud !== undefined,
|
|
315
314
|
});
|
|
316
315
|
}
|
|
317
|
-
appendBuiltinTools(ctx, agentDir, tools, config === null || config === void 0 ? void 0 : config.builtinTools
|
|
316
|
+
appendBuiltinTools(ctx, agentDir, tools, config === null || config === void 0 ? void 0 : config.builtinTools);
|
|
318
317
|
return {
|
|
319
318
|
name,
|
|
320
319
|
description: config === null || config === void 0 ? void 0 : config.description,
|
|
@@ -962,23 +961,14 @@ function warnUnsupportedSubagentSlots(ctx, subagentDir) {
|
|
|
962
961
|
}
|
|
963
962
|
/**
|
|
964
963
|
* Append enabled built-in tools after authored tools. Authored tools with
|
|
965
|
-
* the same name win
|
|
966
|
-
* warning instead of tools.
|
|
964
|
+
* the same name win.
|
|
967
965
|
*/
|
|
968
|
-
function appendBuiltinTools(ctx, agentDir, tools, config
|
|
966
|
+
function appendBuiltinTools(ctx, agentDir, tools, config) {
|
|
969
967
|
const builtin = builtinTools(config);
|
|
970
968
|
if (builtin.length === 0) {
|
|
971
969
|
return;
|
|
972
970
|
}
|
|
973
971
|
const agentPath = displayPath(ctx, join(agentDir, "agent.ts"));
|
|
974
|
-
if (runtime === "cloud") {
|
|
975
|
-
ctx.diagnostics.push({
|
|
976
|
-
severity: "warning",
|
|
977
|
-
path: agentPath,
|
|
978
|
-
message: "builtinTools are in-process server tools and are not available on cloud agents; they are skipped.",
|
|
979
|
-
});
|
|
980
|
-
return;
|
|
981
|
-
}
|
|
982
972
|
const authored = new Set(tools.map((tool) => tool.name));
|
|
983
973
|
for (const tool of builtin) {
|
|
984
974
|
if (authored.has(tool.name)) {
|
|
@@ -1001,13 +991,6 @@ function warnCloudRuntimeLimitations(ctx, agentDir, counts) {
|
|
|
1001
991
|
message: 'runtime: "cloud" usually needs a `cloud` block (e.g. repos / env). Without it the Cursor cloud API may reject create.',
|
|
1002
992
|
});
|
|
1003
993
|
}
|
|
1004
|
-
if (counts.serverTools > 0) {
|
|
1005
|
-
ctx.diagnostics.push({
|
|
1006
|
-
severity: "warning",
|
|
1007
|
-
path: displayPath(ctx, join(agentDir, "tools")),
|
|
1008
|
-
message: 'In-process tools (execution: "server", the default) are not available on cloud agents. Use execution: "agent", MCP connections, or tools that already live in the cloud workspace.',
|
|
1009
|
-
});
|
|
1010
|
-
}
|
|
1011
994
|
if (counts.agentTools > 0) {
|
|
1012
995
|
ctx.diagnostics.push({
|
|
1013
996
|
severity: "warning",
|
|
@@ -1348,18 +1331,6 @@ function appendArtifactTool(ctx, agentDir, agent, artifacts) {
|
|
|
1348
1331
|
return;
|
|
1349
1332
|
}
|
|
1350
1333
|
const artifactsPath = displayPath(ctx, (_a = (yield findModuleFile(agentDir, "artifacts"))) !== null && _a !== void 0 ? _a : join(agentDir, "artifacts.ts"));
|
|
1351
|
-
// TODO(artifacts-cloud): on cloud runtimes, ship tag_artifact as an
|
|
1352
|
-
// execution: "agent" script and have the host fold its action.result
|
|
1353
|
-
// stream events into artifact records — agent-tool calls already surface
|
|
1354
|
-
// durably in the session stream.
|
|
1355
|
-
if (agent.runtime === "cloud") {
|
|
1356
|
-
ctx.diagnostics.push({
|
|
1357
|
-
severity: "warning",
|
|
1358
|
-
path: artifactsPath,
|
|
1359
|
-
message: "tag_artifact is an in-process server tool (like builtinTools) and is not available on cloud agents; it is skipped.",
|
|
1360
|
-
});
|
|
1361
|
-
return;
|
|
1362
|
-
}
|
|
1363
1334
|
if (agent.tools.some((t) => t.name === TAG_ARTIFACT_TOOL_NAME)) {
|
|
1364
1335
|
ctx.diagnostics.push({
|
|
1365
1336
|
severity: "warning",
|
|
@@ -24,6 +24,7 @@ export interface InitProjectResult {
|
|
|
24
24
|
skipped: string[];
|
|
25
25
|
}
|
|
26
26
|
export declare function initProject(options: InitProjectOptions): Promise<InitProjectResult>;
|
|
27
|
+
export declare function isEexist(error: unknown): boolean;
|
|
27
28
|
export interface InstallScaffoldDependenciesOptions {
|
|
28
29
|
/**
|
|
29
30
|
* `inherit` streams npm output to the terminal (human `init`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA2BD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAsI5B;
|
|
1
|
+
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA2BD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAsI5B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOhD;AAED,MAAM,WAAW,kCAAkC;IACjD;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,yDAAyD;IACzD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;KAC3B,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,iCAAiC,CAAC,CAW5C;AAkDD,MAAM,WAAW,0BAA0B;IACzC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,0BAA0B,GACzD,oBAAoB,CAAC;AAMvB;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAkBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAgBzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAQpB;AAwBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,EAAE,CAEX;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAuBrC"}
|