assistant-ui 0.0.117 → 0.0.119
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/LICENSE +1 -1
- package/dist/codemods/utils/createTransformer.d.ts +10 -12
- package/dist/codemods/utils/createTransformer.d.ts.map +1 -1
- package/dist/codemods/utils/resolveBinding.d.ts +3 -0
- package/dist/codemods/utils/resolveBinding.d.ts.map +1 -0
- package/dist/codemods/utils/resolveBinding.js +78 -0
- package/dist/codemods/utils/resolveBinding.js.map +1 -0
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts +1 -3
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts +1 -3
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.js +51 -99
- package/dist/codemods/v0-12/assistant-api-to-aui.js.map +1 -1
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts +1 -3
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts.map +1 -1
- package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts +1 -3
- package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts.map +1 -1
- package/dist/codemods/v0-12/primitive-if-to-aui-if.js +6 -6
- package/dist/codemods/v0-12/primitive-if-to-aui-if.js.map +1 -1
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts +1 -3
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.d.ts.map +1 -1
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js +33 -5
- package/dist/codemods/v0-15/aui-accessor-calls-to-properties.js.map +1 -1
- package/dist/codemods/v0-8/ui-package-split.d.ts +1 -3
- package/dist/codemods/v0-8/ui-package-split.d.ts.map +1 -1
- package/dist/codemods/v0-9/edge-package-split.d.ts +1 -3
- package/dist/codemods/v0-9/edge-package-split.d.ts.map +1 -1
- package/dist/commands/add.d.ts +10 -12
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -3
- package/dist/commands/agent.d.ts +0 -2
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +16 -13
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/create.d.ts +33 -28
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +19 -15
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +8 -10
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/info.d.ts +2 -4
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +3 -3
- package/dist/commands/init.d.ts +5 -6
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/mcp.d.ts +0 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/update.d.ts +0 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/commands/upgrade.d.ts +4 -6
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/agent-skill.d.ts +8 -6
- package/dist/lib/agent-skill.d.ts.map +1 -1
- package/dist/lib/agent-skill.js +78 -2
- package/dist/lib/agent-skill.js.map +1 -1
- package/dist/lib/create-project.d.ts +22 -20
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +91 -5
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/handle-cli-error.d.ts +0 -2
- package/dist/lib/handle-cli-error.d.ts.map +1 -1
- package/dist/lib/install-ai-sdk-lib.d.ts +0 -2
- package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
- package/dist/lib/install-edge-lib.d.ts +0 -2
- package/dist/lib/install-edge-lib.d.ts.map +1 -1
- package/dist/lib/run-spawn.d.ts +11 -12
- package/dist/lib/run-spawn.d.ts.map +1 -1
- package/dist/lib/run-spawn.js +25 -10
- package/dist/lib/run-spawn.js.map +1 -1
- package/dist/lib/transform-options.d.ts +4 -6
- package/dist/lib/transform-options.d.ts.map +1 -1
- package/dist/lib/transform.d.ts +11 -13
- package/dist/lib/transform.d.ts.map +1 -1
- package/dist/lib/transform.js +19 -35
- package/dist/lib/transform.js.map +1 -1
- package/dist/lib/upgrade.d.ts +2 -4
- package/dist/lib/upgrade.d.ts.map +1 -1
- package/dist/lib/upgrade.js +6 -11
- package/dist/lib/upgrade.js.map +1 -1
- package/dist/lib/utils/config.d.ts +14 -16
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/file-scanner.d.ts +8 -10
- package/dist/lib/utils/file-scanner.d.ts.map +1 -1
- package/dist/lib/utils/logger.d.ts +6 -8
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/package-installer.d.ts +5 -7
- package/dist/lib/utils/package-installer.d.ts.map +1 -1
- package/dist/lib/utils/package-json.d.ts +0 -2
- package/dist/lib/utils/package-json.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.d.ts +2 -4
- package/dist/lib/utils/package-manager.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.js +13 -2
- package/dist/lib/utils/package-manager.js.map +1 -1
- package/dist/lib/utils/registry.d.ts +0 -2
- package/dist/lib/utils/registry.d.ts.map +1 -1
- package/dist/lib/utils/workspace.d.ts +0 -2
- package/dist/lib/utils/workspace.d.ts.map +1 -1
- package/dist/program.d.ts +0 -2
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -6
- package/dist/run.d.ts +0 -2
- package/dist/run.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/codemods/utils/resolveBinding.test.ts +107 -0
- package/src/codemods/utils/resolveBinding.ts +130 -0
- package/src/codemods/v0-12/__tests__/assistant-api-to-aui.test.ts +256 -0
- package/src/codemods/v0-12/__tests__/primitive-if-to-aui-if.test.ts +31 -0
- package/src/codemods/v0-12/assistant-api-to-aui.ts +125 -225
- package/src/codemods/v0-12/primitive-if-to-aui-if.ts +8 -5
- package/src/codemods/v0-15/__tests__/aui-accessor-calls-to-properties.test.ts +101 -0
- package/src/codemods/v0-15/aui-accessor-calls-to-properties.ts +60 -5
- package/src/commands/agent.ts +15 -22
- package/src/commands/create.ts +24 -15
- package/src/lib/agent-skill.ts +103 -1
- package/src/lib/create-project.ts +99 -4
- package/src/lib/run-spawn.test.ts +47 -0
- package/src/lib/run-spawn.ts +29 -17
- package/src/lib/transform-files.test.ts +71 -0
- package/src/lib/transform.test.ts +69 -1
- package/src/lib/transform.ts +23 -38
- package/src/lib/upgrade.ts +9 -13
- package/src/lib/utils/package-manager.ts +24 -1
- package/plugin/.claude-plugin/plugin.json +0 -8
- package/plugin/skills/assistant-ui/SKILL.md +0 -199
- package/plugin/skills/assistant-ui/shipables.json +0 -22
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
//#region src/commands/doctor.d.ts
|
|
3
2
|
export interface DiscoveredPackage {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
installPath: string;
|
|
7
6
|
}
|
|
8
7
|
export declare function discoverInstalledPackages(cwd: string): DiscoveredPackage[];
|
|
9
8
|
export interface DuplicateGroup {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
name: string;
|
|
10
|
+
installations: DiscoveredPackage[];
|
|
12
11
|
}
|
|
13
12
|
export declare function findDuplicates(packages: DiscoveredPackage[]): DuplicateGroup[];
|
|
14
13
|
export declare function uniquePackageNames(packages: DiscoveredPackage[]): string[];
|
|
15
14
|
export declare function compareSemver(a: string, b: string): number;
|
|
16
15
|
export interface OutdatedPackage {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
name: string;
|
|
17
|
+
current: string;
|
|
18
|
+
latest: string;
|
|
20
19
|
}
|
|
21
20
|
export declare function findOutdated(packages: DiscoveredPackage[], latest: Map<string, string | null>): OutdatedPackage[];
|
|
22
21
|
export declare const doctor: Command;
|
|
23
|
-
//#endregion
|
|
24
22
|
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgKD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAe1E;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,cAAc,EAAE,CAiBlB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAE1E;AAiCD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACjC,eAAe,EAAE,CAmBnB;AAmED,eAAO,MAAM,MAAM,SA6Df,CAAC"}
|
package/dist/commands/info.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { findWorkspaceRoot } from "../lib/utils/workspace.js";
|
|
2
1
|
import { Command } from "commander";
|
|
3
|
-
|
|
2
|
+
import { findWorkspaceRoot } from "../lib/utils/workspace.js";
|
|
3
|
+
export { findWorkspaceRoot };
|
|
4
4
|
export declare function satisfiesRange(version: string, range: string): boolean;
|
|
5
5
|
export declare const info: Command;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { findWorkspaceRoot };
|
|
8
6
|
//# sourceMappingURL=info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAAE,iBAAiB,EAAmB,kCAA+B;AAE5E,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAsM7B,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAYtE;AA6LD,eAAO,MAAM,IAAI,SA6Cb,CAAC"}
|
package/dist/commands/info.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { logPackageJsonParseError } from "../lib/utils/package-json.js";
|
|
2
1
|
import { findWorkspaceRoot, resolveRealPath } from "../lib/utils/workspace.js";
|
|
3
|
-
import
|
|
2
|
+
import { logPackageJsonParseError } from "../lib/utils/package-json.js";
|
|
4
3
|
import { Command } from "commander";
|
|
5
4
|
import chalk from "chalk";
|
|
6
5
|
import * as fs$1 from "node:fs";
|
|
7
6
|
import * as path$1 from "node:path";
|
|
7
|
+
import * as os$1 from "node:os";
|
|
8
8
|
import { detect } from "detect-package-manager";
|
|
9
|
-
import { spawnSync } from "node:child_process";
|
|
10
9
|
import { satisfies } from "semver";
|
|
10
|
+
import { spawnSync } from "node:child_process";
|
|
11
11
|
//#region src/commands/info.ts
|
|
12
12
|
const ASSISTANT_UI_PACKAGES = [
|
|
13
13
|
"@assistant-ui/react",
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
//#region src/commands/init.d.ts
|
|
3
2
|
interface ExistingProjectInitPlan {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
initArgs: string[];
|
|
4
|
+
addArgs: string[];
|
|
6
5
|
}
|
|
7
6
|
export declare function createExistingProjectInitPlan(params: {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
yes: boolean;
|
|
8
|
+
overwrite: boolean;
|
|
10
9
|
}): ExistingProjectInitPlan;
|
|
11
10
|
export declare function isNonInteractiveShell(stdinIsTTY?: boolean): boolean;
|
|
12
11
|
export declare const init: Command;
|
|
13
|
-
|
|
12
|
+
export {};
|
|
14
13
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAa5C,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,uBAAuB,CAU1B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,UAAsB,GAC/B,OAAO,CAET;AAED,eAAO,MAAM,IAAI,SAuGb,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
2
1
|
import { logger } from "../lib/utils/logger.js";
|
|
3
|
-
import { resolvePackageManagerForCwd } from "../lib/utils/package-manager.js";
|
|
4
2
|
import { getComponentsJsonStyle, resolveQuickStartRegistryUrl } from "../lib/utils/registry.js";
|
|
3
|
+
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
4
|
+
import { resolvePackageManagerForCwd } from "../lib/utils/package-manager.js";
|
|
5
5
|
import { dlxCommand, resolvePackageManager } from "../lib/create-project.js";
|
|
6
6
|
import { create } from "./create.js";
|
|
7
7
|
import { Command, Option } from "commander";
|
package/dist/commands/mcp.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgQpC,eAAO,MAAM,GAAG,SAmDZ,CAAC"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
2
1
|
import { logger } from "../lib/utils/logger.js";
|
|
3
|
-
import
|
|
2
|
+
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
4
3
|
import { Command } from "commander";
|
|
5
4
|
import fs from "node:fs";
|
|
6
5
|
import path from "node:path";
|
|
6
|
+
import os from "node:os";
|
|
7
7
|
import * as p from "@clack/prompts";
|
|
8
8
|
//#region src/commands/mcp.ts
|
|
9
9
|
const HOSTED_MCP_URL = "https://www.assistant-ui.com/mcp";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,MAAM,SA6Ef,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
2
1
|
import { logger } from "../lib/utils/logger.js";
|
|
2
|
+
import { SpawnExitError, SpawnSignalError, runSpawn } from "../lib/run-spawn.js";
|
|
3
3
|
import { getInstallCommand } from "../lib/utils/package-manager.js";
|
|
4
4
|
import { logPackageJsonParseError } from "../lib/utils/package-json.js";
|
|
5
5
|
import { Command } from "commander";
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
//#region src/commands/upgrade.d.ts
|
|
3
2
|
export interface TransformOptions {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
dry?: boolean;
|
|
4
|
+
print?: boolean;
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
jscodeshift?: string;
|
|
8
7
|
}
|
|
9
8
|
export declare const codemodCommand: Command;
|
|
10
9
|
export declare const upgradeCommand: Command;
|
|
11
|
-
//#endregion
|
|
12
10
|
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgBD,eAAO,MAAM,cAAc,SAmBzB,CAAC;AAEH,eAAO,MAAM,cAAc,SAiBzB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { PackageManagerName } from "./utils/package-manager.js";
|
|
2
|
-
//#region src/lib/agent-skill.d.ts
|
|
1
|
+
import { type PackageManagerName } from "./utils/package-manager.js";
|
|
3
2
|
export declare const SKILLS_PACKAGE = "assistant-ui/skills";
|
|
3
|
+
export declare const SKILLS_COMMIT = "4007601e2e16762060f02d45ad82f453eed5409a";
|
|
4
|
+
export declare const SKILLS_PLUGIN_SOURCE = "gh:assistant-ui/skills/assistant-ui#4007601e2e16762060f02d45ad82f453eed5409a";
|
|
4
5
|
export declare function resolveSkillsInstall(params: {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
skills?: boolean;
|
|
7
|
+
stdinIsTTY?: boolean;
|
|
7
8
|
}): boolean | undefined;
|
|
8
9
|
export declare function buildSkillsAddCommand(pm: PackageManagerName, params?: {
|
|
9
|
-
|
|
10
|
+
stdinIsTTY?: boolean;
|
|
10
11
|
}): [string, string[]];
|
|
11
|
-
|
|
12
|
+
export declare function skillsPluginDir(): string;
|
|
13
|
+
export declare function ensureSkillsPlugin(): Promise<string>;
|
|
12
14
|
//# sourceMappingURL=agent-skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skill.d.ts","
|
|
1
|
+
{"version":3,"file":"agent-skill.d.ts","sourceRoot":"","sources":["../../src/lib/agent-skill.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,kBAAkB,EAAE,mCAAgC;AAElE,eAAO,MAAM,cAAc,wBAAwB,CAAC;AACpD,eAAO,MAAM,aAAa,6CAA6C,CAAC;AACxE,eAAO,MAAM,oBAAoB,iFAAuD,CAAC;AAEzF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,GAAG,SAAS,CAKtB;AAED,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,kBAAkB,EACtB,MAAM,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAUpB;AAED,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgE1D"}
|
package/dist/lib/agent-skill.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { dlxCommand } from "./create-project.js";
|
|
1
|
+
import { DOWNLOAD_TIMEOUT_MS, dlxCommand, resolveGitHubAuthToken } from "./create-project.js";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import { downloadTemplate } from "giget";
|
|
2
6
|
//#region src/lib/agent-skill.ts
|
|
3
7
|
const SKILLS_PACKAGE = "assistant-ui/skills";
|
|
8
|
+
const SKILLS_COMMIT = "4007601e2e16762060f02d45ad82f453eed5409a";
|
|
9
|
+
const SKILLS_PLUGIN_SOURCE = `gh:${SKILLS_PACKAGE}/assistant-ui#${SKILLS_COMMIT}`;
|
|
4
10
|
function resolveSkillsInstall(params) {
|
|
5
11
|
const { skills, stdinIsTTY = process.stdin.isTTY } = params;
|
|
6
12
|
if (skills !== void 0) return skills;
|
|
@@ -18,7 +24,77 @@ function buildSkillsAddCommand(pm, params = {}) {
|
|
|
18
24
|
if (!stdinIsTTY) args.push("--yes");
|
|
19
25
|
return [command, args];
|
|
20
26
|
}
|
|
27
|
+
function skillsPluginDir() {
|
|
28
|
+
const cacheHome = process.env.XDG_CACHE_HOME || path.join(os.homedir(), ".cache");
|
|
29
|
+
return path.join(cacheHome, "assistant-ui", "skills", SKILLS_COMMIT);
|
|
30
|
+
}
|
|
31
|
+
async function ensureSkillsPlugin() {
|
|
32
|
+
const dir = skillsPluginDir();
|
|
33
|
+
const marker = path.join(dir, ".claude-plugin", "plugin.json");
|
|
34
|
+
if (fs.existsSync(marker)) return dir;
|
|
35
|
+
const parent = path.dirname(dir);
|
|
36
|
+
await fs.promises.mkdir(parent, { recursive: true });
|
|
37
|
+
const staging = await fs.promises.mkdtemp(path.join(parent, ".staging-"));
|
|
38
|
+
const removeStaging = () => {
|
|
39
|
+
process.removeListener("exit", removeStaging);
|
|
40
|
+
process.removeListener("SIGINT", removeStagingOnSignal);
|
|
41
|
+
process.removeListener("SIGTERM", removeStagingOnSignal);
|
|
42
|
+
fs.rmSync(staging, {
|
|
43
|
+
recursive: true,
|
|
44
|
+
force: true
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const removeStagingOnSignal = (signal) => {
|
|
48
|
+
removeStaging();
|
|
49
|
+
process.kill(process.pid, signal);
|
|
50
|
+
};
|
|
51
|
+
process.once("exit", removeStaging);
|
|
52
|
+
process.once("SIGINT", removeStagingOnSignal);
|
|
53
|
+
process.once("SIGTERM", removeStagingOnSignal);
|
|
54
|
+
const origDebug = process.env.DEBUG;
|
|
55
|
+
delete process.env.DEBUG;
|
|
56
|
+
let timer;
|
|
57
|
+
let downloadSettled = false;
|
|
58
|
+
let download;
|
|
59
|
+
try {
|
|
60
|
+
const authToken = resolveGitHubAuthToken();
|
|
61
|
+
download = downloadTemplate(SKILLS_PLUGIN_SOURCE, {
|
|
62
|
+
dir: staging,
|
|
63
|
+
preferOffline: true,
|
|
64
|
+
silent: true,
|
|
65
|
+
...authToken ? { auth: authToken } : {}
|
|
66
|
+
}).finally(() => {
|
|
67
|
+
downloadSettled = true;
|
|
68
|
+
});
|
|
69
|
+
const timeout = new Promise((_, reject) => {
|
|
70
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error("Download timed out.")), DOWNLOAD_TIMEOUT_MS);
|
|
71
|
+
});
|
|
72
|
+
await Promise.race([download, timeout]).catch((error) => {
|
|
73
|
+
throw new Error("Could not fetch the assistant-ui skills from GitHub. Check your network, or set GITHUB_TOKEN if you are rate limited.", { cause: error });
|
|
74
|
+
});
|
|
75
|
+
await publish(staging, dir, marker);
|
|
76
|
+
} finally {
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
if (origDebug !== void 0) process.env.DEBUG = origDebug;
|
|
79
|
+
if (!download || downloadSettled) removeStaging();
|
|
80
|
+
else download.then(removeStaging, removeStaging);
|
|
81
|
+
}
|
|
82
|
+
return dir;
|
|
83
|
+
}
|
|
84
|
+
async function publish(staging, dir, marker, retry = true) {
|
|
85
|
+
try {
|
|
86
|
+
await fs.promises.rename(staging, dir);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
if (fs.existsSync(marker)) return;
|
|
89
|
+
if (!retry) throw error;
|
|
90
|
+
await fs.promises.rm(dir, {
|
|
91
|
+
recursive: true,
|
|
92
|
+
force: true
|
|
93
|
+
});
|
|
94
|
+
await publish(staging, dir, marker, false);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
21
97
|
//#endregion
|
|
22
|
-
export { SKILLS_PACKAGE, buildSkillsAddCommand, resolveSkillsInstall };
|
|
98
|
+
export { SKILLS_COMMIT, SKILLS_PACKAGE, SKILLS_PLUGIN_SOURCE, buildSkillsAddCommand, ensureSkillsPlugin, resolveSkillsInstall, skillsPluginDir };
|
|
23
99
|
|
|
24
100
|
//# sourceMappingURL=agent-skill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-skill.js","names":[],"sources":["../../src/lib/agent-skill.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"agent-skill.js","names":[],"sources":["../../src/lib/agent-skill.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { downloadTemplate } from \"giget\";\nimport {\n DOWNLOAD_TIMEOUT_MS,\n dlxCommand,\n resolveGitHubAuthToken,\n} from \"./create-project\";\nimport { type PackageManagerName } from \"./utils/package-manager\";\n\nexport const SKILLS_PACKAGE = \"assistant-ui/skills\";\nexport const SKILLS_COMMIT = \"4007601e2e16762060f02d45ad82f453eed5409a\";\nexport const SKILLS_PLUGIN_SOURCE = `gh:${SKILLS_PACKAGE}/assistant-ui#${SKILLS_COMMIT}`;\n\nexport function resolveSkillsInstall(params: {\n skills?: boolean;\n stdinIsTTY?: boolean;\n}): boolean | undefined {\n const { skills, stdinIsTTY = process.stdin.isTTY } = params;\n if (skills !== undefined) return skills;\n if (!stdinIsTTY) return true;\n return undefined;\n}\n\nexport function buildSkillsAddCommand(\n pm: PackageManagerName,\n params: { stdinIsTTY?: boolean } = {},\n): [string, string[]] {\n const { stdinIsTTY = process.stdin.isTTY } = params;\n const [command, dlxArgs] = dlxCommand(pm);\n const args = [...dlxArgs, \"skills\", \"add\", SKILLS_PACKAGE];\n\n // Without a TTY the skills CLI cannot prompt for agent platforms, so skip its\n // confirmation; with a TTY it owns the platform selection interactively.\n if (!stdinIsTTY) args.push(\"--yes\");\n\n return [command, args];\n}\n\nexport function skillsPluginDir(): string {\n const cacheHome =\n process.env.XDG_CACHE_HOME || path.join(os.homedir(), \".cache\");\n return path.join(cacheHome, \"assistant-ui\", \"skills\", SKILLS_COMMIT);\n}\n\nexport async function ensureSkillsPlugin(): Promise<string> {\n const dir = skillsPluginDir();\n const marker = path.join(dir, \".claude-plugin\", \"plugin.json\");\n if (fs.existsSync(marker)) return dir;\n\n const parent = path.dirname(dir);\n await fs.promises.mkdir(parent, { recursive: true });\n const staging = await fs.promises.mkdtemp(path.join(parent, \".staging-\"));\n // Node emits no \"exit\" when a signal kills the process, so the staging\n // directory is removed on the signal and the signal re-raised. The\n // listeners stay armed until the removal runs, which a download that\n // outlives the timeout defers past the caller's own exit.\n const removeStaging = () => {\n process.removeListener(\"exit\", removeStaging);\n process.removeListener(\"SIGINT\", removeStagingOnSignal);\n process.removeListener(\"SIGTERM\", removeStagingOnSignal);\n fs.rmSync(staging, { recursive: true, force: true });\n };\n const removeStagingOnSignal = (signal: NodeJS.Signals) => {\n removeStaging();\n process.kill(process.pid, signal);\n };\n process.once(\"exit\", removeStaging);\n process.once(\"SIGINT\", removeStagingOnSignal);\n process.once(\"SIGTERM\", removeStagingOnSignal);\n\n // giget logs to console.debug whenever DEBUG is set, which the `debug`\n // package does at module load for an unrelated namespace.\n const origDebug = process.env.DEBUG;\n delete process.env.DEBUG;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let downloadSettled = false;\n let download: Promise<unknown> | undefined;\n try {\n const authToken = resolveGitHubAuthToken();\n download = downloadTemplate(SKILLS_PLUGIN_SOURCE, {\n dir: staging,\n preferOffline: true,\n silent: true,\n ...(authToken ? { auth: authToken } : {}),\n }).finally(() => {\n downloadSettled = true;\n });\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new Error(\"Download timed out.\")),\n DOWNLOAD_TIMEOUT_MS,\n );\n });\n await Promise.race([download, timeout]).catch((error: unknown) => {\n throw new Error(\n \"Could not fetch the assistant-ui skills from GitHub. Check your network, or set GITHUB_TOKEN if you are rate limited.\",\n { cause: error },\n );\n });\n await publish(staging, dir, marker);\n } finally {\n clearTimeout(timer);\n if (origDebug !== undefined) process.env.DEBUG = origDebug;\n if (!download || downloadSettled) removeStaging();\n else void download.then(removeStaging, removeStaging);\n }\n\n return dir;\n}\n\n// A rename fails when the target directory exists and is not empty. A\n// concurrent invocation that published the same commit meanwhile wins and\n// the staged copy is dropped; a directory without the marker is a stale\n// partial cache and is replaced.\nasync function publish(\n staging: string,\n dir: string,\n marker: string,\n retry = true,\n): Promise<void> {\n try {\n await fs.promises.rename(staging, dir);\n } catch (error) {\n if (fs.existsSync(marker)) return;\n if (!retry) throw error;\n await fs.promises.rm(dir, { recursive: true, force: true });\n await publish(staging, dir, marker, false);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
import { PackageManagerName } from "./utils/package-manager.js";
|
|
2
|
-
//#region src/lib/create-project.d.ts
|
|
1
|
+
import { type PackageManagerName } from "./utils/package-manager.js";
|
|
3
2
|
export declare function dlxCommand(pm: PackageManagerName): [string, string[]];
|
|
4
3
|
export interface TransformOptions {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
hasLocalComponents: boolean;
|
|
5
|
+
skipInstall?: boolean;
|
|
6
|
+
packageManager: PackageManagerName;
|
|
8
7
|
}
|
|
9
8
|
export type ProjectSource = {
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
kind: "github";
|
|
10
|
+
ref: string | undefined;
|
|
12
11
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
kind: "local";
|
|
13
|
+
rootDir: string;
|
|
15
14
|
};
|
|
16
15
|
export declare function resolvePackageManager(opts: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
useNpm?: boolean;
|
|
17
|
+
usePnpm?: boolean;
|
|
18
|
+
useYarn?: boolean;
|
|
19
|
+
useBun?: boolean;
|
|
21
20
|
}): PackageManagerName | undefined;
|
|
21
|
+
export declare function resolveGitHubAuthToken(): string | undefined;
|
|
22
22
|
export declare function resolveLatestReleaseRef(): Promise<string | undefined>;
|
|
23
|
+
export declare const DOWNLOAD_TIMEOUT_MS = 30000;
|
|
24
|
+
export declare function cleanupPendingProjectDownloads(): void;
|
|
23
25
|
export declare function downloadProject(repoPath: string, destDir: string, ref?: string): Promise<void>;
|
|
24
26
|
export declare function scaffoldProject(repoPath: string, destDir: string, source: ProjectSource): Promise<void>;
|
|
25
27
|
export interface TransformResult {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
registryInstallFailure?: {
|
|
29
|
+
retryCommand: string;
|
|
30
|
+
};
|
|
31
|
+
registryInstallCommand?: string;
|
|
30
32
|
}
|
|
31
33
|
export declare function transformProject(projectDir: string, opts: TransformOptions): Promise<TransformResult>;
|
|
32
34
|
interface RequiredComponents {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
assistantUI: string[];
|
|
36
|
+
shadcnUI: string[];
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Example snapshots are downloaded at a release tag while the shadcn registry
|
|
@@ -43,5 +45,5 @@ interface RequiredComponents {
|
|
|
43
45
|
*/
|
|
44
46
|
export declare function reconcileAssistantUIImportLayout(projectDir: string): Promise<void>;
|
|
45
47
|
export declare function scanRequiredComponents(projectDir: string): RequiredComponents;
|
|
46
|
-
|
|
48
|
+
export {};
|
|
47
49
|
//# sourceMappingURL=create-project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.d.ts","
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,kBAAkB,EAAE,mCAAgC;AAOlE,wBAAgB,UAAU,CAAC,EAAE,EAAE,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAaN,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,kBAAkB,GAAG,SAAS,CAMjC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAK3D;AAMD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe3E;AAED,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAG1C,wBAAgB,8BAA8B,IAAI,IAAI,CAMrD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAgIf;AAYD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,eAAe,CAAC,CAoC1B;AA6JD,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA4CD;;;;;;;GAOG;AACH,wBAAsB,gCAAgC,CACpD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Gf;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CA8B7E"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { SpawnExitError, SpawnSignalError, runSpawn } from "./run-spawn.js";
|
|
2
1
|
import { logger } from "./utils/logger.js";
|
|
3
|
-
import { readProjectFiles } from "./utils/file-scanner.js";
|
|
4
2
|
import { detectRegistryPlatform, resolveRegistryItemUrl } from "./utils/registry.js";
|
|
3
|
+
import { SpawnExitError, SpawnSignalError, runSpawn } from "./run-spawn.js";
|
|
4
|
+
import { readProjectFiles } from "./utils/file-scanner.js";
|
|
5
5
|
import * as fs$1 from "node:fs";
|
|
6
6
|
import * as path$1 from "node:path";
|
|
7
|
+
import * as os$1 from "node:os";
|
|
7
8
|
import { downloadTemplate } from "giget";
|
|
8
9
|
import { parse, printParseErrorCode } from "jsonc-parser";
|
|
9
10
|
//#region src/lib/create-project.ts
|
|
@@ -45,17 +46,75 @@ async function resolveLatestReleaseRef() {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
const DOWNLOAD_TIMEOUT_MS = 3e4;
|
|
49
|
+
const pendingDownloadCleanups = /* @__PURE__ */ new Set();
|
|
50
|
+
function cleanupPendingProjectDownloads() {
|
|
51
|
+
for (const cleanup of pendingDownloadCleanups) {
|
|
52
|
+
pendingDownloadCleanups.delete(cleanup);
|
|
53
|
+
process.removeListener("exit", cleanup);
|
|
54
|
+
cleanup();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
48
57
|
async function downloadProject(repoPath, destDir, ref) {
|
|
49
58
|
const source = ref ? `gh:assistant-ui/assistant-ui/${repoPath}#${ref}` : `gh:assistant-ui/assistant-ui/${repoPath}`;
|
|
50
59
|
const origDebug = process.env.DEBUG;
|
|
51
60
|
delete process.env.DEBUG;
|
|
61
|
+
let destinationCreated = false;
|
|
62
|
+
let stagingDir;
|
|
63
|
+
let downloadPromise;
|
|
64
|
+
let downloadFinished = false;
|
|
65
|
+
let downloadCommitted = false;
|
|
66
|
+
let cleanupRequested = false;
|
|
67
|
+
const removeCleanupListeners = () => {
|
|
68
|
+
process.removeListener("exit", cleanupOnExit);
|
|
69
|
+
pendingDownloadCleanups.delete(cleanupOnExit);
|
|
70
|
+
};
|
|
71
|
+
const attemptSyncCleanup = (cleanup) => {
|
|
72
|
+
try {
|
|
73
|
+
cleanup();
|
|
74
|
+
} catch {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const cleanupOnExit = () => {
|
|
79
|
+
cleanupRequested = true;
|
|
80
|
+
const currentStagingDir = stagingDir;
|
|
81
|
+
if (currentStagingDir) attemptSyncCleanup(() => {
|
|
82
|
+
fs$1.rmSync(currentStagingDir, {
|
|
83
|
+
recursive: true,
|
|
84
|
+
force: true
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
if (destinationCreated && !downloadCommitted) attemptSyncCleanup(() => {
|
|
88
|
+
fs$1.rmdirSync(destDir);
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
const removeStagingDir = async () => {
|
|
92
|
+
if (stagingDir) await fs$1.promises.rm(stagingDir, {
|
|
93
|
+
recursive: true,
|
|
94
|
+
force: true
|
|
95
|
+
}).catch(() => void 0);
|
|
96
|
+
removeCleanupListeners();
|
|
97
|
+
if (destinationCreated && !downloadCommitted) await fs$1.promises.rmdir(destDir).catch(() => void 0);
|
|
98
|
+
};
|
|
52
99
|
try {
|
|
100
|
+
await fs$1.promises.mkdir(path$1.dirname(destDir), { recursive: true });
|
|
101
|
+
try {
|
|
102
|
+
stagingDir = await fs$1.promises.mkdtemp(path$1.join(path$1.dirname(destDir), ".assistant-ui-download-"));
|
|
103
|
+
} catch (error) {
|
|
104
|
+
const code = error.code;
|
|
105
|
+
if (code !== "EACCES" && code !== "EPERM" && code !== "EROFS") throw error;
|
|
106
|
+
stagingDir = await fs$1.promises.mkdtemp(path$1.join(os$1.tmpdir(), ".assistant-ui-download-"));
|
|
107
|
+
}
|
|
108
|
+
process.once("exit", cleanupOnExit);
|
|
109
|
+
pendingDownloadCleanups.add(cleanupOnExit);
|
|
53
110
|
const authToken = resolveGitHubAuthToken();
|
|
54
|
-
|
|
55
|
-
dir:
|
|
111
|
+
downloadPromise = downloadTemplate(source, {
|
|
112
|
+
dir: stagingDir,
|
|
56
113
|
force: true,
|
|
57
114
|
silent: true,
|
|
58
115
|
...authToken ? { auth: authToken } : {}
|
|
116
|
+
}).finally(() => {
|
|
117
|
+
downloadFinished = true;
|
|
59
118
|
});
|
|
60
119
|
let timer;
|
|
61
120
|
const timeoutPromise = new Promise((_, reject) => {
|
|
@@ -63,10 +122,37 @@ async function downloadProject(repoPath, destDir, ref) {
|
|
|
63
122
|
});
|
|
64
123
|
try {
|
|
65
124
|
await Promise.race([downloadPromise, timeoutPromise]);
|
|
125
|
+
if (cleanupRequested) throw new Error("Download was interrupted.");
|
|
126
|
+
destinationCreated = !fs$1.existsSync(destDir);
|
|
127
|
+
await fs$1.promises.mkdir(destDir, { recursive: true });
|
|
128
|
+
for (const entry of await fs$1.promises.readdir(stagingDir)) {
|
|
129
|
+
const target = path$1.join(destDir, entry);
|
|
130
|
+
const sourceEntry = path$1.join(stagingDir, entry);
|
|
131
|
+
await fs$1.promises.rm(target, {
|
|
132
|
+
recursive: true,
|
|
133
|
+
force: true
|
|
134
|
+
});
|
|
135
|
+
try {
|
|
136
|
+
await fs$1.promises.rename(sourceEntry, target);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
if (error.code !== "EXDEV") throw error;
|
|
139
|
+
await fs$1.promises.cp(sourceEntry, target, {
|
|
140
|
+
recursive: true,
|
|
141
|
+
force: true
|
|
142
|
+
});
|
|
143
|
+
await fs$1.promises.rm(sourceEntry, {
|
|
144
|
+
recursive: true,
|
|
145
|
+
force: true
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
downloadCommitted = true;
|
|
66
150
|
} finally {
|
|
67
151
|
clearTimeout(timer);
|
|
68
152
|
}
|
|
69
153
|
} finally {
|
|
154
|
+
if (!downloadPromise || downloadFinished) await removeStagingDir();
|
|
155
|
+
else downloadPromise.then(removeStagingDir, removeStagingDir);
|
|
70
156
|
if (origDebug !== void 0) process.env.DEBUG = origDebug;
|
|
71
157
|
}
|
|
72
158
|
}
|
|
@@ -369,6 +455,6 @@ async function installShadcnRegistry(projectDir, components, label, pm) {
|
|
|
369
455
|
}
|
|
370
456
|
}
|
|
371
457
|
//#endregion
|
|
372
|
-
export { dlxCommand, downloadProject, reconcileAssistantUIImportLayout, resolveLatestReleaseRef, resolvePackageManager, scaffoldProject, scanRequiredComponents, transformProject };
|
|
458
|
+
export { DOWNLOAD_TIMEOUT_MS, cleanupPendingProjectDownloads, dlxCommand, downloadProject, reconcileAssistantUIImportLayout, resolveGitHubAuthToken, resolveLatestReleaseRef, resolvePackageManager, scaffoldProject, scanRequiredComponents, transformProject };
|
|
373
459
|
|
|
374
460
|
//# sourceMappingURL=create-project.js.map
|