@cursor/july 0.1.2 → 0.1.4
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 +16 -5
- package/README.md +8 -9
- package/dist/bin/agent-serve.d.ts +3 -1
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +416 -155
- package/dist/channels/slack/log.d.ts +1 -1
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +4 -5
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/socket-mode.d.ts.map +1 -1
- package/dist/channels/slack/socket-mode.js +10 -9
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.Oje4vhlk.js → app.DF-Yx4OP.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.0XrheBv2.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.DSeJSudL.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.DZVLTXOC.js} +2 -2
- package/dist/docs/assets/{index.md.m81y7TY7.js → index.md.Cylk70gg.js} +1 -1
- package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
- 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/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.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/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 +5 -5
- package/dist/docs/quickstart.html +22 -10
- package/dist/docs/reference/agent-config.html +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +14 -9
- 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/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/internal/ab-collector.js +3 -3
- package/dist/internal/ab-fold.js +1 -1
- package/dist/internal/chat-client.d.ts +29 -3
- package/dist/internal/chat-client.d.ts.map +1 -1
- package/dist/internal/chat-client.js +180 -27
- package/dist/internal/cli-ax.d.ts +83 -2
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +626 -52
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +8 -36
- package/dist/internal/cli-deploy.d.ts +59 -3
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +316 -38
- package/dist/internal/cli-github.js +13 -13
- package/dist/internal/cursor/account-mcp.js +3 -3
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/credentials.d.ts +14 -3
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +21 -6
- package/dist/internal/cursor/github-credentials.js +3 -3
- package/dist/internal/cursor-event-relay.js +1 -1
- package/dist/internal/cursor-relay-core.d.ts +1 -1
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/cursor-relay-core.js +2 -1
- package/dist/internal/cursor-slack-relay.js +1 -1
- package/dist/internal/deploy-client.d.ts +9 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +23 -3
- package/dist/internal/deploy-source.d.ts +35 -0
- package/dist/internal/deploy-source.d.ts.map +1 -0
- package/dist/internal/deploy-source.js +118 -0
- package/dist/internal/discovery.d.ts +11 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +43 -14
- package/dist/internal/distribution.d.ts +7 -0
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +7 -0
- package/dist/internal/docs-site.js +3 -3
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +10 -9
- package/dist/internal/eval-runner.d.ts +2 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +2 -0
- package/dist/internal/event-mapper.d.ts +54 -1
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +151 -41
- package/dist/internal/github-fanout.js +2 -2
- package/dist/internal/host-platforms.js +5 -5
- package/dist/internal/init-project.d.ts +88 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +221 -31
- package/dist/internal/install-cursor-skills.d.ts +64 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -0
- package/dist/internal/install-cursor-skills.js +274 -0
- package/dist/internal/logs-client.d.ts +60 -0
- package/dist/internal/logs-client.d.ts.map +1 -0
- package/dist/internal/logs-client.js +311 -0
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/open-browser.d.ts +5 -0
- package/dist/internal/open-browser.d.ts.map +1 -0
- package/dist/internal/open-browser.js +34 -0
- package/dist/internal/playground/toolchain.d.ts.map +1 -1
- package/dist/internal/playground/toolchain.js +19 -14
- package/dist/internal/playground-proxy.d.ts +69 -0
- package/dist/internal/playground-proxy.d.ts.map +1 -0
- package/dist/internal/playground-proxy.js +468 -0
- package/dist/internal/prompt-context.d.ts +35 -0
- package/dist/internal/prompt-context.d.ts.map +1 -0
- package/dist/internal/prompt-context.js +71 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +11 -11
- package/dist/internal/request-headers.d.ts +11 -0
- package/dist/internal/request-headers.d.ts.map +1 -0
- package/dist/internal/request-headers.js +14 -0
- package/dist/internal/resolve-prod-target.d.ts +44 -0
- package/dist/internal/resolve-prod-target.d.ts.map +1 -0
- package/dist/internal/resolve-prod-target.js +134 -0
- package/dist/internal/resolved-connections.js +5 -5
- package/dist/internal/run-client.d.ts +2 -2
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +38 -23
- package/dist/internal/schedule-runner.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +23 -17
- package/dist/internal/session-engine.d.ts +1 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +34 -19
- package/dist/internal/sessions-client.d.ts +34 -0
- package/dist/internal/sessions-client.d.ts.map +1 -0
- package/dist/internal/sessions-client.js +193 -0
- package/dist/internal/storage-coordinator.js +6 -6
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +31 -3
- package/dist/internal/terminal-style.d.ts +22 -0
- package/dist/internal/terminal-style.d.ts.map +1 -0
- package/dist/internal/terminal-style.js +49 -0
- package/dist/internal/trajectory.d.ts +10 -5
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +82 -10
- package/dist/internal/update-check.d.ts +93 -0
- package/dist/internal/update-check.d.ts.map +1 -0
- package/dist/internal/update-check.js +431 -0
- package/dist/internal/workspace.d.ts +11 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +38 -4
- package/dist/playground/assets/index-Ct_Usdm8.css +1 -0
- package/dist/playground/assets/index-Dsyb-Vaj.js +319 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +29 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +0 -1
- package/docs/quickstart.md +22 -7
- package/docs/reference/cli.md +51 -3
- package/package.json +4 -1
- package/skills/ab/SKILL.md +8 -8
- package/skills/create-agent/SKILL.md +28 -22
- package/skills/debug/SKILL.md +11 -11
- package/skills/evals/SKILL.md +16 -16
- package/skills/framework-map/SKILL.md +6 -6
- package/skills/github/SKILL.md +13 -13
- package/skills/hillclimb/SKILL.md +10 -10
- package/skills/setup-slack/SKILL.md +14 -14
- package/src/bin/agent-serve.ts +451 -191
- package/src/channels/slack/log.ts +5 -5
- package/src/channels/slack/setup.ts +1 -1
- package/src/channels/slack/socket-mode.ts +11 -9
- package/src/internal/ab-collector.ts +3 -3
- package/src/internal/ab-fold.ts +1 -1
- package/src/internal/chat-client.ts +252 -37
- package/src/internal/cli-ax.ts +761 -72
- package/src/internal/cli-cursor.ts +14 -42
- package/src/internal/cli-deploy.ts +428 -49
- package/src/internal/cli-github.ts +13 -15
- package/src/internal/cursor/account-mcp.ts +3 -3
- package/src/internal/cursor/backend-client.ts +1 -1
- package/src/internal/cursor/credentials.ts +26 -7
- package/src/internal/cursor/github-credentials.ts +3 -3
- package/src/internal/cursor-event-relay.ts +1 -1
- package/src/internal/cursor-relay-core.ts +4 -2
- package/src/internal/cursor-slack-relay.ts +1 -1
- package/src/internal/deploy-client.ts +45 -4
- package/src/internal/deploy-source.ts +133 -0
- package/src/internal/discovery.ts +53 -16
- package/src/internal/distribution.ts +8 -0
- package/src/internal/docs-site.ts +3 -3
- package/src/internal/eval-run-store.ts +10 -11
- package/src/internal/eval-runner.ts +5 -0
- package/src/internal/event-mapper.ts +222 -42
- package/src/internal/github-fanout.ts +2 -2
- package/src/internal/host-platforms.ts +5 -5
- package/src/internal/init-project.ts +333 -51
- package/src/internal/install-cursor-skills.ts +327 -0
- package/src/internal/logs-client.ts +442 -0
- package/src/internal/mcp-endpoint.ts +1 -3
- package/src/internal/open-browser.ts +41 -0
- package/src/internal/playground/toolchain.ts +18 -16
- package/src/internal/playground-proxy.ts +576 -0
- package/src/internal/prompt-context.ts +95 -0
- package/src/internal/reminder-runner.ts +11 -17
- package/src/internal/request-headers.ts +23 -0
- package/src/internal/resolve-prod-target.ts +182 -0
- package/src/internal/resolved-connections.ts +5 -5
- package/src/internal/run-client.ts +39 -36
- package/src/internal/schedule-runner.ts +1 -1
- package/src/internal/server.ts +25 -16
- package/src/internal/session-engine.ts +35 -18
- package/src/internal/sessions-client.ts +216 -0
- package/src/internal/storage-coordinator.ts +6 -6
- package/src/internal/stream-progress.ts +36 -2
- package/src/internal/terminal-style.ts +74 -0
- package/src/internal/trajectory.ts +91 -13
- package/src/internal/update-check.ts +552 -0
- package/src/internal/workspace.ts +42 -4
- package/src/types.ts +45 -7
- package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
- package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
- package/dist/playground/assets/index-CpDYCj8W.js +0 -79
- /package/dist/docs/assets/{index.md.m81y7TY7.lean.js → index.md.Cylk70gg.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
|
@@ -81,7 +81,7 @@ export function warmupHostGitHubAuth(options) {
|
|
|
81
81
|
var _a;
|
|
82
82
|
const source = (_a = options.authSource) !== null && _a !== void 0 ? _a : (yield resolveHostGitHubAuthSource());
|
|
83
83
|
if (source === "unavailable") {
|
|
84
|
-
options.logger("[
|
|
84
|
+
options.logger("[agentkit] GitHub auth: unavailable (set GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEY + GITHUB_APP_INSTALLATION_ID, or GITHUB_TOKEN / GH_TOKEN, or run `gh auth login`)");
|
|
85
85
|
return source;
|
|
86
86
|
}
|
|
87
87
|
let exportedGhToken = false;
|
|
@@ -90,7 +90,7 @@ export function warmupHostGitHubAuth(options) {
|
|
|
90
90
|
exportedGhToken = yield ensureGhCliTokenEnv();
|
|
91
91
|
}
|
|
92
92
|
catch (error) {
|
|
93
|
-
options.logger(`[
|
|
93
|
+
options.logger(`[agentkit] GitHub auth: failed to export GH_TOKEN for gh CLI: ${error instanceof Error ? error.message : String(error)}`);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
const label = source === "cursor-account"
|
|
@@ -103,15 +103,15 @@ export function warmupHostGitHubAuth(options) {
|
|
|
103
103
|
? "GITHUB_TOKEN/GH_TOKEN"
|
|
104
104
|
: "gh auth token";
|
|
105
105
|
if (options.github === undefined) {
|
|
106
|
-
options.logger(`[
|
|
106
|
+
options.logger(`[agentkit] GitHub auth: ${label}`);
|
|
107
107
|
return source;
|
|
108
108
|
}
|
|
109
109
|
try {
|
|
110
110
|
yield options.github.getOctokit();
|
|
111
|
-
options.logger(`[
|
|
111
|
+
options.logger(`[agentkit] GitHub auth: ${label}`);
|
|
112
112
|
}
|
|
113
113
|
catch (error) {
|
|
114
|
-
options.logger(`[
|
|
114
|
+
options.logger(`[agentkit] GitHub auth: ${label} resolved but Octokit warmup failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
115
|
}
|
|
116
116
|
return source;
|
|
117
117
|
});
|
|
@@ -9,11 +9,98 @@ export interface InitProjectOptions {
|
|
|
9
9
|
/** Model id override written into agent.ts. */
|
|
10
10
|
model?: string;
|
|
11
11
|
}
|
|
12
|
+
export type InitFileAction = "create" | "exist";
|
|
13
|
+
export interface InitFileEntry {
|
|
14
|
+
path: string;
|
|
15
|
+
action: InitFileAction;
|
|
16
|
+
}
|
|
12
17
|
export interface InitProjectResult {
|
|
13
18
|
rootDir: string;
|
|
14
|
-
files
|
|
19
|
+
/** Scaffold files in write order, with create/exist for each. */
|
|
20
|
+
files: InitFileEntry[];
|
|
21
|
+
/** Paths newly written. */
|
|
22
|
+
created: string[];
|
|
23
|
+
/** Paths left alone because they already existed. */
|
|
24
|
+
skipped: string[];
|
|
15
25
|
}
|
|
16
26
|
export declare function initProject(options: InitProjectOptions): Promise<InitProjectResult>;
|
|
27
|
+
export interface InstallScaffoldDependenciesOptions {
|
|
28
|
+
/**
|
|
29
|
+
* `inherit` streams npm output to the terminal (human `init`);
|
|
30
|
+
* `pipe` captures it ( `--json` / tests).
|
|
31
|
+
*/
|
|
32
|
+
stdio?: "inherit" | "pipe";
|
|
33
|
+
/** Test seam — replaces the real `npm install` spawn. */
|
|
34
|
+
runner?: (args: {
|
|
35
|
+
command: string;
|
|
36
|
+
args: string[];
|
|
37
|
+
cwd: string;
|
|
38
|
+
stdio: "inherit" | "pipe";
|
|
39
|
+
}) => Promise<{
|
|
40
|
+
exitCode: number;
|
|
41
|
+
stderr: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
export interface InstallScaffoldDependenciesResult {
|
|
45
|
+
ok: boolean;
|
|
46
|
+
exitCode: number;
|
|
47
|
+
stderr: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Install the scaffold's npm dependencies so `dev` / `run` can resolve
|
|
51
|
+
* `@cursor/july` immediately after `init`.
|
|
52
|
+
*/
|
|
53
|
+
export declare function installScaffoldDependencies(rootDir: string, options?: InstallScaffoldDependenciesOptions): Promise<InstallScaffoldDependenciesResult>;
|
|
54
|
+
export interface InitScaffoldSummaryOptions {
|
|
55
|
+
/** Scaffolded project root (absolute). */
|
|
56
|
+
rootDir: string;
|
|
57
|
+
/** Scaffold files in write order (`create` / `exist`). */
|
|
58
|
+
files: InitFileEntry[];
|
|
59
|
+
/** Override TTY color detection (tests / `--json` callers). */
|
|
60
|
+
color?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface InitNextStepsOptions {
|
|
63
|
+
/** Scaffolded project root (absolute). */
|
|
64
|
+
rootDir: string;
|
|
65
|
+
/** Directory the command ran from. */
|
|
66
|
+
cwd: string;
|
|
67
|
+
/**
|
|
68
|
+
* True when a Cursor credential resolves. When false, next steps include
|
|
69
|
+
* `login` (used for `--json` and when an interactive login attempt failed).
|
|
70
|
+
*/
|
|
71
|
+
signedIn: boolean;
|
|
72
|
+
/** Override TTY color detection (tests / `--json` callers). */
|
|
73
|
+
color?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export type InitSummaryOptions = InitScaffoldSummaryOptions & InitNextStepsOptions;
|
|
76
|
+
/**
|
|
77
|
+
* Created/skipped files plus the project path. Printed before an interactive
|
|
78
|
+
* login so the scaffold is visible while the browser flow runs.
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatInitScaffoldSummary(options: InitScaffoldSummaryOptions): string;
|
|
81
|
+
/**
|
|
82
|
+
* Numbered next steps after scaffold (and after login when init ran it).
|
|
83
|
+
* Includes `cd` when init did not already run inside the project.
|
|
84
|
+
*/
|
|
85
|
+
export declare function formatInitNextSteps(options: InitNextStepsOptions): string;
|
|
86
|
+
/**
|
|
87
|
+
* Full human-readable scaffold summary (scaffold + next steps).
|
|
88
|
+
*/
|
|
89
|
+
export declare function formatInitSummary(options: InitSummaryOptions): string;
|
|
90
|
+
/**
|
|
91
|
+
* `cd` into the scaffold when init did not already run inside it. Relative
|
|
92
|
+
* when the target sits under the invoking directory, absolute otherwise.
|
|
93
|
+
*/
|
|
94
|
+
export declare function formatCdCommand(cwd: string, rootDir: string): string | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Next-step commands for the `--json` scaffold summary (login omitted when
|
|
97
|
+
* the host already has a Cursor credential).
|
|
98
|
+
*/
|
|
99
|
+
export declare function initNextCommands(options: {
|
|
100
|
+
rootDir: string;
|
|
101
|
+
cwd: string;
|
|
102
|
+
signedIn: boolean;
|
|
103
|
+
}): string[];
|
|
17
104
|
/**
|
|
18
105
|
* Coding-agent setup guide printed by `agent-serve init`
|
|
19
106
|
* with no target directory (does not scaffold).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../src/internal/init-project.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
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,CAgH5B;AAWD,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,CAsBrC"}
|
|
@@ -10,9 +10,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
|
+
import { spawn } from "node:child_process";
|
|
13
14
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
14
|
-
import { basename, dirname, join, resolve } from "node:path";
|
|
15
|
+
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
15
16
|
import { CLI_COMMAND_NAME, PACKAGE_NAME, packageVersion, } from "./distribution.js";
|
|
17
|
+
import { makePalette, stdoutPalette, } from "./terminal-style.js";
|
|
16
18
|
const DEFAULT_MODEL = {
|
|
17
19
|
id: "grok-4.5",
|
|
18
20
|
params: [
|
|
@@ -20,6 +22,22 @@ const DEFAULT_MODEL = {
|
|
|
20
22
|
{ id: "fast", value: "true" },
|
|
21
23
|
],
|
|
22
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Empty capability folders the scaffold creates (each gets a `.gitkeep`).
|
|
27
|
+
* `agent/tools/` is omitted — the demo `echo.ts` already keeps it in git.
|
|
28
|
+
*/
|
|
29
|
+
const SCAFFOLD_EMPTY_DIRS = [
|
|
30
|
+
"agent/skills",
|
|
31
|
+
"agent/mcp-connections",
|
|
32
|
+
"agent/subagents",
|
|
33
|
+
"agent/channels",
|
|
34
|
+
"agent/hooks",
|
|
35
|
+
"agent/ab",
|
|
36
|
+
"agent/schedules",
|
|
37
|
+
"agent/sandbox/workspace",
|
|
38
|
+
"agent/lib",
|
|
39
|
+
"evals",
|
|
40
|
+
];
|
|
23
41
|
export function initProject(options) {
|
|
24
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
43
|
var _a, _b;
|
|
@@ -28,36 +46,67 @@ export function initProject(options) {
|
|
|
28
46
|
const model = formatModelLiteral((_b = options.model) !== null && _b !== void 0 ? _b : DEFAULT_MODEL);
|
|
29
47
|
const agentDir = join(rootDir, "agent");
|
|
30
48
|
yield mkdir(agentDir, { recursive: true });
|
|
31
|
-
const
|
|
49
|
+
const files = [];
|
|
32
50
|
const write = (rel, contents) => __awaiter(this, void 0, void 0, function* () {
|
|
33
51
|
const abs = join(rootDir, rel);
|
|
34
52
|
yield mkdir(dirname(abs), { recursive: true });
|
|
35
|
-
|
|
36
|
-
|
|
53
|
+
try {
|
|
54
|
+
yield writeFile(abs, contents, { flag: "wx" });
|
|
55
|
+
files.push({ path: rel, action: "create" });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (isEexist(error)) {
|
|
59
|
+
// Rails generators leave existing files alone (`exist`).
|
|
60
|
+
files.push({ path: rel, action: "exist" });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
37
65
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
66
|
+
yield write("package.json", `${JSON.stringify({
|
|
67
|
+
name,
|
|
68
|
+
private: true,
|
|
69
|
+
type: "module",
|
|
70
|
+
description: `agent project: ${name}`,
|
|
71
|
+
scripts: {
|
|
72
|
+
check: "tsc --noEmit",
|
|
73
|
+
},
|
|
74
|
+
dependencies: {
|
|
75
|
+
[PACKAGE_NAME]: `^${packageVersion()}`,
|
|
76
|
+
zod: "^3.25.0",
|
|
77
|
+
},
|
|
78
|
+
devDependencies: {
|
|
79
|
+
"@types/node": "^22.14.0",
|
|
80
|
+
typescript: "^5.8.0",
|
|
81
|
+
},
|
|
82
|
+
}, null, 2)}\n`);
|
|
83
|
+
yield write("tsconfig.json", `{
|
|
84
|
+
// Type-checking only (npm run check): the framework runs agent/ code
|
|
85
|
+
// directly through tsx, so nothing is compiled.
|
|
86
|
+
"compilerOptions": {
|
|
87
|
+
"target": "ES2022",
|
|
88
|
+
"module": "ESNext",
|
|
89
|
+
"moduleResolution": "bundler",
|
|
90
|
+
"strict": true,
|
|
91
|
+
"noEmit": true,
|
|
92
|
+
"skipLibCheck": true,
|
|
93
|
+
"types": ["node"]
|
|
94
|
+
},
|
|
95
|
+
"include": ["agent/**/*", "evals/**/*"]
|
|
96
|
+
}
|
|
97
|
+
`);
|
|
98
|
+
yield write("agent/agent.ts", `import { defineAgent } from "${PACKAGE_NAME}";
|
|
50
99
|
|
|
51
100
|
export default defineAgent({
|
|
52
101
|
model: ${model},
|
|
53
102
|
});
|
|
54
103
|
`);
|
|
55
|
-
|
|
104
|
+
yield write("agent/instructions.md", `# ${name}
|
|
56
105
|
|
|
57
106
|
You are a helpful agent. Prefer tools when they fit the request.
|
|
58
107
|
Keep answers concise unless the user asks for detail.
|
|
59
108
|
`);
|
|
60
|
-
|
|
109
|
+
yield write("agent/tools/echo.ts", `import { defineTool } from "${PACKAGE_NAME}/tools";
|
|
61
110
|
import { z } from "zod";
|
|
62
111
|
|
|
63
112
|
export default defineTool({
|
|
@@ -68,17 +117,68 @@ export default defineTool({
|
|
|
68
117
|
},
|
|
69
118
|
});
|
|
70
119
|
`);
|
|
120
|
+
for (const dir of SCAFFOLD_EMPTY_DIRS) {
|
|
121
|
+
yield write(`${dir}/.gitkeep`, "");
|
|
71
122
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
123
|
+
return {
|
|
124
|
+
rootDir,
|
|
125
|
+
files,
|
|
126
|
+
created: files
|
|
127
|
+
.filter((entry) => entry.action === "create")
|
|
128
|
+
.map((entry) => entry.path),
|
|
129
|
+
skipped: files
|
|
130
|
+
.filter((entry) => entry.action === "exist")
|
|
131
|
+
.map((entry) => entry.path),
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function isEexist(error) {
|
|
136
|
+
return (error !== null &&
|
|
137
|
+
typeof error === "object" &&
|
|
138
|
+
"code" in error &&
|
|
139
|
+
error.code === "EEXIST");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Install the scaffold's npm dependencies so `dev` / `run` can resolve
|
|
143
|
+
* `@cursor/july` immediately after `init`.
|
|
144
|
+
*/
|
|
145
|
+
export function installScaffoldDependencies(rootDir_1) {
|
|
146
|
+
return __awaiter(this, arguments, void 0, function* (rootDir, options = {}) {
|
|
147
|
+
var _a, _b;
|
|
148
|
+
const stdio = (_a = options.stdio) !== null && _a !== void 0 ? _a : "inherit";
|
|
149
|
+
const command = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
150
|
+
const args = ["install", "--no-fund", "--no-audit"];
|
|
151
|
+
const runner = (_b = options.runner) !== null && _b !== void 0 ? _b : defaultNpmInstallRunner;
|
|
152
|
+
const result = yield runner({ command, args, cwd: rootDir, stdio });
|
|
153
|
+
return {
|
|
154
|
+
ok: result.exitCode === 0,
|
|
155
|
+
exitCode: result.exitCode,
|
|
156
|
+
stderr: result.stderr,
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function defaultNpmInstallRunner(args) {
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
return yield new Promise((resolvePromise, reject) => {
|
|
163
|
+
var _a, _b, _c;
|
|
164
|
+
const child = spawn(args.command, args.args, {
|
|
165
|
+
cwd: args.cwd,
|
|
166
|
+
stdio: args.stdio === "inherit" ? "inherit" : ["ignore", "pipe", "pipe"],
|
|
167
|
+
env: process.env,
|
|
168
|
+
});
|
|
169
|
+
let stderr = "";
|
|
170
|
+
if (args.stdio === "pipe") {
|
|
171
|
+
(_a = child.stderr) === null || _a === void 0 ? void 0 : _a.setEncoding("utf8");
|
|
172
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (chunk) => {
|
|
173
|
+
stderr += chunk;
|
|
174
|
+
});
|
|
175
|
+
(_c = child.stdout) === null || _c === void 0 ? void 0 : _c.resume();
|
|
78
176
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
177
|
+
child.on("error", reject);
|
|
178
|
+
child.on("close", (code) => {
|
|
179
|
+
resolvePromise({ exitCode: code !== null && code !== void 0 ? code : 1, stderr });
|
|
180
|
+
});
|
|
181
|
+
});
|
|
82
182
|
});
|
|
83
183
|
}
|
|
84
184
|
function formatModelLiteral(model) {
|
|
@@ -97,6 +197,95 @@ ${model.params
|
|
|
97
197
|
id: ${JSON.stringify(model.id)}${params},
|
|
98
198
|
}`;
|
|
99
199
|
}
|
|
200
|
+
function initPalette(color) {
|
|
201
|
+
return color === undefined ? stdoutPalette() : makePalette(color);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Created/skipped files plus the project path. Printed before an interactive
|
|
205
|
+
* login so the scaffold is visible while the browser flow runs.
|
|
206
|
+
*/
|
|
207
|
+
export function formatInitScaffoldSummary(options) {
|
|
208
|
+
const c = initPalette(options.color);
|
|
209
|
+
const name = basename(options.rootDir);
|
|
210
|
+
const lines = [];
|
|
211
|
+
lines.push(`Initialized agent ${name}`);
|
|
212
|
+
lines.push("");
|
|
213
|
+
for (const file of options.files) {
|
|
214
|
+
// Empty-dir placeholders stay on disk but clutter the summary.
|
|
215
|
+
if (file.path.endsWith("/.gitkeep") || file.path === ".gitkeep") {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
// Thor/Rails status column is 12 chars, right-aligned.
|
|
219
|
+
lines.push(c.dim(`${file.action.padStart(12)} ${file.path}`));
|
|
220
|
+
}
|
|
221
|
+
lines.push("");
|
|
222
|
+
lines.push(c.dim(`Project: ${options.rootDir}`));
|
|
223
|
+
lines.push("");
|
|
224
|
+
return `${lines.join("\n")}\n`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Numbered next steps after scaffold (and after login when init ran it).
|
|
228
|
+
* Includes `cd` when init did not already run inside the project.
|
|
229
|
+
*/
|
|
230
|
+
export function formatInitNextSteps(options) {
|
|
231
|
+
const c = initPalette(options.color);
|
|
232
|
+
const lines = [];
|
|
233
|
+
lines.push("Next steps:");
|
|
234
|
+
lines.push("");
|
|
235
|
+
const steps = initNextStepEntries(options);
|
|
236
|
+
const width = Math.max(...steps.map((step) => step.command.length));
|
|
237
|
+
for (const [index, step] of steps.entries()) {
|
|
238
|
+
const command = step.note === undefined
|
|
239
|
+
? step.command
|
|
240
|
+
: `${step.command.padEnd(width)} ${c.dim(`# ${step.note}`)}`;
|
|
241
|
+
lines.push(` ${index + 1}. ${command}`);
|
|
242
|
+
}
|
|
243
|
+
return `${lines.join("\n")}\n`;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Full human-readable scaffold summary (scaffold + next steps).
|
|
247
|
+
*/
|
|
248
|
+
export function formatInitSummary(options) {
|
|
249
|
+
return formatInitScaffoldSummary(options) + formatInitNextSteps(options);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* `cd` into the scaffold when init did not already run inside it. Relative
|
|
253
|
+
* when the target sits under the invoking directory, absolute otherwise.
|
|
254
|
+
*/
|
|
255
|
+
export function formatCdCommand(cwd, rootDir) {
|
|
256
|
+
const rel = relative(cwd, rootDir);
|
|
257
|
+
if (rel === "") {
|
|
258
|
+
return undefined;
|
|
259
|
+
}
|
|
260
|
+
const path = rel.startsWith("..") ? rootDir : rel;
|
|
261
|
+
const quoted = /\s/.test(path) ? JSON.stringify(path) : path;
|
|
262
|
+
return `cd ${quoted}`;
|
|
263
|
+
}
|
|
264
|
+
function initNextStepEntries(options) {
|
|
265
|
+
const steps = [];
|
|
266
|
+
const cd = formatCdCommand(options.cwd, options.rootDir);
|
|
267
|
+
if (cd !== undefined) {
|
|
268
|
+
steps.push({ command: cd });
|
|
269
|
+
}
|
|
270
|
+
if (!options.signedIn) {
|
|
271
|
+
steps.push({
|
|
272
|
+
command: `${CLI_COMMAND_NAME} login`,
|
|
273
|
+
note: "connect your Cursor account (powers model turns)",
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
steps.push({
|
|
277
|
+
command: `${CLI_COMMAND_NAME} dev`,
|
|
278
|
+
note: "start the local playground",
|
|
279
|
+
});
|
|
280
|
+
return steps;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Next-step commands for the `--json` scaffold summary (login omitted when
|
|
284
|
+
* the host already has a Cursor credential).
|
|
285
|
+
*/
|
|
286
|
+
export function initNextCommands(options) {
|
|
287
|
+
return initNextStepEntries(options).map((step) => step.command);
|
|
288
|
+
}
|
|
100
289
|
/**
|
|
101
290
|
* Coding-agent setup guide printed by `agent-serve init`
|
|
102
291
|
* with no target directory (does not scaffold).
|
|
@@ -104,15 +293,16 @@ ${model.params
|
|
|
104
293
|
export function printInitGuide() {
|
|
105
294
|
process.stdout.write(`${CLI_COMMAND_NAME} — coding agent setup
|
|
106
295
|
|
|
107
|
-
|
|
296
|
+
Scaffold a project, then open the playground:
|
|
297
|
+
${CLI_COMMAND_NAME} init ./my-agent # installs deps; signs you in when needed
|
|
298
|
+
cd ./my-agent && ${CLI_COMMAND_NAME} dev
|
|
299
|
+
|
|
300
|
+
Recommended loop once the project exists:
|
|
108
301
|
1. Edit agent/ + tools under agent/tools/
|
|
109
302
|
2. ${CLI_COMMAND_NAME} info --dir . --json
|
|
110
303
|
3. ${CLI_COMMAND_NAME} run --dir . --message "..."
|
|
111
304
|
4. ${CLI_COMMAND_NAME} eval --dir .
|
|
112
305
|
|
|
113
|
-
Scaffold a project:
|
|
114
|
-
${CLI_COMMAND_NAME} init ./my-agent
|
|
115
|
-
|
|
116
306
|
Evals:
|
|
117
307
|
Create evals/**/*.eval.ts using defineEval from ${PACKAGE_NAME}/evals
|
|
118
308
|
Case id is the path: evals/weather/nyc.eval.ts → weather/nyc
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offer to install the package's coding-agent skills into the user's
|
|
3
|
+
* personal Cursor skills dir under `~/.cursor/skills/agentkit/<skill>/`.
|
|
4
|
+
*
|
|
5
|
+
* Cursor walks `~/.cursor/skills` recursively, so the `agentkit/` folder is
|
|
6
|
+
* only organizational — identity comes from the leaf folder that holds
|
|
7
|
+
* SKILL.md. Skipped for `--json` / non-TTY hosts.
|
|
8
|
+
*/
|
|
9
|
+
/** Category folder under ~/.cursor/skills (Cursor discovers nested skills). */
|
|
10
|
+
export declare const CURSOR_SKILLS_NAMESPACE = "agentkit";
|
|
11
|
+
export interface PackageSkill {
|
|
12
|
+
/** Frontmatter `name` (e.g. agentkit-create-agent). */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Leaf install directory under agentkit/ (e.g. create-agent). */
|
|
15
|
+
leafDir: string;
|
|
16
|
+
/** Absolute path to the source skill directory in the package. */
|
|
17
|
+
sourceDir: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function cursorSkillsHome(home?: string): string;
|
|
20
|
+
/** `~/.cursor/skills/agentkit` — where package skills are installed. */
|
|
21
|
+
export declare function agentkitCursorSkillsDir(skillsHome?: string): string;
|
|
22
|
+
/** Absolute install path for one skill: `…/agentkit/<leafDir>`. */
|
|
23
|
+
export declare function skillInstallPath(skill: Pick<PackageSkill, "leafDir">, skillsHome?: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Skills shipped next to the running package. Uses the frontmatter `name`
|
|
26
|
+
* when present, otherwise `agentkit-<dir>`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function listShippedPackageSkills(packageRoot?: string): Promise<PackageSkill[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Skills that do not yet have a SKILL.md under ~/.cursor/skills/agentkit/.
|
|
31
|
+
* Install still overwrites every shipped skill when the user confirms — this
|
|
32
|
+
* helper is for messaging (fresh install vs update).
|
|
33
|
+
*/
|
|
34
|
+
export declare function findMissingCursorSkills(options?: {
|
|
35
|
+
packageRoot?: string;
|
|
36
|
+
skillsHome?: string;
|
|
37
|
+
}): Promise<PackageSkill[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Copy each skill directory into `skillsHome/agentkit/<leafDir>/`.
|
|
40
|
+
* Always overwrites so a package upgrade refreshes local Cursor skills.
|
|
41
|
+
* Strips monorepo-only frontmatter and removes leaf dirs no longer shipped.
|
|
42
|
+
*/
|
|
43
|
+
export declare function installCursorSkills(skills: readonly PackageSkill[], skillsHome?: string): Promise<string[]>;
|
|
44
|
+
/** Drop monorepo `paths` globs and fix package doc links for ~/.cursor installs. */
|
|
45
|
+
export declare function prepareSkillMarkdownForCursorInstall(content: string): string;
|
|
46
|
+
export interface OfferInstallCursorSkillsOptions {
|
|
47
|
+
/** Skip when false (non-TTY / `--json`). */
|
|
48
|
+
interactive?: boolean;
|
|
49
|
+
packageRoot?: string;
|
|
50
|
+
skillsHome?: string;
|
|
51
|
+
/** Injected yes/no for tests. */
|
|
52
|
+
confirm?: (question: string) => Promise<boolean>;
|
|
53
|
+
out?: (text: string) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* On a TTY, offer to install/update every shipped package skill into
|
|
57
|
+
* ~/.cursor/skills/agentkit (always overwriting). No-op when non-interactive
|
|
58
|
+
* or the package ships no skills.
|
|
59
|
+
*/
|
|
60
|
+
export declare function offerInstallCursorSkills(options?: OfferInstallCursorSkillsOptions): Promise<{
|
|
61
|
+
installed: string[];
|
|
62
|
+
skipped: boolean;
|
|
63
|
+
}>;
|
|
64
|
+
//# sourceMappingURL=install-cursor-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-cursor-skills.d.ts","sourceRoot":"","sources":["../../src/internal/install-cursor-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,GAAE,MAAsC,GAC3C,MAAM,CAGR;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CACrC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAER;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EACpC,UAAU,GAAE,MAA2B,GACtC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,GAAE,MAAyB,GACrC,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BzB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAY1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,UAAU,GAAE,MAA2B,GACtC,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB;AAED,oFAAoF;AACpF,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY5E;AAoBD,MAAM,WAAW,+BAA+B;IAC9C,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA+CpD"}
|