assistant-ui 0.0.116 → 0.0.118
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/dist/codemods/utils/createTransformer.d.ts +13 -16
- 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-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 +13 -16
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +3 -3
- package/dist/commands/agent.d.ts +1 -4
- 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 +43 -39
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +40 -26
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +17 -20
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/info.d.ts +4 -6
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +3 -3
- package/dist/commands/init.d.ts +8 -10
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -4
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +2 -2
- package/dist/commands/update.d.ts +1 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/commands/upgrade.d.ts +7 -10
- 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 +11 -10
- 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 +33 -32
- 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 +1 -4
- package/dist/lib/handle-cli-error.d.ts.map +1 -1
- package/dist/lib/install-ai-sdk-lib.d.ts +1 -4
- package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
- package/dist/lib/install-edge-lib.d.ts +1 -4
- package/dist/lib/install-edge-lib.d.ts.map +1 -1
- package/dist/lib/run-spawn.d.ts +17 -19
- 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 +5 -8
- package/dist/lib/transform-options.d.ts.map +1 -1
- package/dist/lib/transform.d.ts +13 -16
- 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 +3 -6
- 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 +18 -21
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/file-scanner.d.ts +12 -15
- package/dist/lib/utils/file-scanner.d.ts.map +1 -1
- package/dist/lib/utils/logger.d.ts +7 -10
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/package-installer.d.ts +7 -10
- package/dist/lib/utils/package-installer.d.ts.map +1 -1
- package/dist/lib/utils/package-json.d.ts +1 -4
- package/dist/lib/utils/package-json.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.d.ts +9 -12
- 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 +5 -8
- package/dist/lib/utils/registry.d.ts.map +1 -1
- package/dist/lib/utils/workspace.d.ts +2 -5
- package/dist/lib/utils/workspace.d.ts.map +1 -1
- package/dist/program.d.ts +1 -4
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +6 -6
- package/dist/run.d.ts +1 -4
- package/dist/run.d.ts.map +1 -1
- package/package.json +8 -8
- 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/assistant-api-to-aui.ts +125 -225
- 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 +53 -20
- package/src/commands/init.ts +1 -2
- 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
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
|
-
|
|
4
|
-
|
|
5
|
-
declare
|
|
6
|
-
|
|
7
|
-
export { findWorkspaceRoot, info, satisfiesRange };
|
|
2
|
+
import { findWorkspaceRoot } from "../lib/utils/workspace.js";
|
|
3
|
+
export { findWorkspaceRoot };
|
|
4
|
+
export declare function satisfiesRange(version: string, range: string): boolean;
|
|
5
|
+
export declare const info: Command;
|
|
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,15 +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
|
-
declare function createExistingProjectInitPlan(params: {
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export declare function createExistingProjectInitPlan(params: {
|
|
7
|
+
yes: boolean;
|
|
8
|
+
overwrite: boolean;
|
|
10
9
|
}): ExistingProjectInitPlan;
|
|
11
|
-
declare function isNonInteractiveShell(stdinIsTTY?: boolean): boolean;
|
|
12
|
-
declare const init: Command;
|
|
13
|
-
|
|
14
|
-
export { createExistingProjectInitPlan, init, isNonInteractiveShell };
|
|
10
|
+
export declare function isNonInteractiveShell(stdinIsTTY?: boolean): boolean;
|
|
11
|
+
export declare const init: Command;
|
|
12
|
+
export {};
|
|
15
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";
|
|
@@ -44,8 +44,7 @@ const init = new Command().name("init").description("initialize assistant-ui in
|
|
|
44
44
|
logger.info("No existing project found. Running 'create' instead...");
|
|
45
45
|
logger.break();
|
|
46
46
|
}
|
|
47
|
-
const createArgs = [];
|
|
48
|
-
if (projectDirectory) createArgs.push(targetDir);
|
|
47
|
+
const createArgs = projectDirectory ? [targetDir] : ["--cwd", cwd];
|
|
49
48
|
if (presetUrl) createArgs.push("--preset", presetUrl);
|
|
50
49
|
if (opts.useNpm) createArgs.push("--use-npm");
|
|
51
50
|
if (opts.usePnpm) createArgs.push("--use-pnpm");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","names":[],"sources":["../../src/commands/init.ts"],"sourcesContent":["import { Command, Option } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { dlxCommand, resolvePackageManager } from \"../lib/create-project\";\nimport { runSpawn, SpawnExitError, SpawnSignalError } from \"../lib/run-spawn\";\nimport { logger } from \"../lib/utils/logger\";\nimport { resolvePackageManagerForCwd } from \"../lib/utils/package-manager\";\nimport {\n getComponentsJsonStyle,\n resolveQuickStartRegistryUrl,\n} from \"../lib/utils/registry\";\nimport { create } from \"./create\";\n\ninterface ExistingProjectInitPlan {\n initArgs: string[];\n addArgs: string[];\n}\n\nexport function createExistingProjectInitPlan(params: {\n yes: boolean;\n overwrite: boolean;\n}): ExistingProjectInitPlan {\n const { yes, overwrite } = params;\n const initArgs = yes\n ? [`shadcn@latest`, \"init\", \"--defaults\", \"--yes\"]\n : [`shadcn@latest`, \"init\"];\n const addArgs = [`shadcn@latest`, \"add\"];\n if (yes) addArgs.push(\"--yes\");\n if (overwrite) addArgs.push(\"--overwrite\");\n\n return { initArgs, addArgs };\n}\n\nexport function isNonInteractiveShell(\n stdinIsTTY = process.stdin.isTTY,\n): boolean {\n return !stdinIsTTY;\n}\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize assistant-ui in an existing project\")\n .argument(\"[project-directory]\", \"directory for the new project\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd(),\n )\n .addOption(\n new Option(\n \"-p, --preset <name-or-url>\",\n \"preset name or URL (forwarded to 'assistant-ui create')\",\n ).hideHelp(),\n )\n .option(\"--use-npm\", \"explicitly use npm\")\n .option(\"--use-pnpm\", \"explicitly use pnpm\")\n .option(\"--use-yarn\", \"explicitly use yarn\")\n .option(\"--use-bun\", \"explicitly use bun\")\n .option(\"--skip-install\", \"skip installing packages\")\n .action(async (projectDirectory, opts) => {\n const cwd = opts.cwd;\n const presetUrl = opts.preset as string | undefined;\n const targetDir = projectDirectory\n ? path.resolve(cwd, projectDirectory)\n : cwd;\n\n const componentsConfigPath = path.join(targetDir, \"components.json\");\n\n if (!presetUrl && fs.existsSync(componentsConfigPath)) {\n logger.warn(\"Project is already initialized.\");\n logger.info(\"Use 'assistant-ui add' to add more components.\");\n return;\n }\n\n const packageJsonPath = path.join(targetDir, \"package.json\");\n const packageJsonExists = fs.existsSync(packageJsonPath);\n\n if (presetUrl || !packageJsonExists) {\n if (!presetUrl) {\n logger.info(\"No existing project found. Running 'create' instead...\");\n logger.break();\n }\n\n const createArgs
|
|
1
|
+
{"version":3,"file":"init.js","names":[],"sources":["../../src/commands/init.ts"],"sourcesContent":["import { Command, Option } from \"commander\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { dlxCommand, resolvePackageManager } from \"../lib/create-project\";\nimport { runSpawn, SpawnExitError, SpawnSignalError } from \"../lib/run-spawn\";\nimport { logger } from \"../lib/utils/logger\";\nimport { resolvePackageManagerForCwd } from \"../lib/utils/package-manager\";\nimport {\n getComponentsJsonStyle,\n resolveQuickStartRegistryUrl,\n} from \"../lib/utils/registry\";\nimport { create } from \"./create\";\n\ninterface ExistingProjectInitPlan {\n initArgs: string[];\n addArgs: string[];\n}\n\nexport function createExistingProjectInitPlan(params: {\n yes: boolean;\n overwrite: boolean;\n}): ExistingProjectInitPlan {\n const { yes, overwrite } = params;\n const initArgs = yes\n ? [`shadcn@latest`, \"init\", \"--defaults\", \"--yes\"]\n : [`shadcn@latest`, \"init\"];\n const addArgs = [`shadcn@latest`, \"add\"];\n if (yes) addArgs.push(\"--yes\");\n if (overwrite) addArgs.push(\"--overwrite\");\n\n return { initArgs, addArgs };\n}\n\nexport function isNonInteractiveShell(\n stdinIsTTY = process.stdin.isTTY,\n): boolean {\n return !stdinIsTTY;\n}\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize assistant-ui in an existing project\")\n .argument(\"[project-directory]\", \"directory for the new project\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd(),\n )\n .addOption(\n new Option(\n \"-p, --preset <name-or-url>\",\n \"preset name or URL (forwarded to 'assistant-ui create')\",\n ).hideHelp(),\n )\n .option(\"--use-npm\", \"explicitly use npm\")\n .option(\"--use-pnpm\", \"explicitly use pnpm\")\n .option(\"--use-yarn\", \"explicitly use yarn\")\n .option(\"--use-bun\", \"explicitly use bun\")\n .option(\"--skip-install\", \"skip installing packages\")\n .action(async (projectDirectory, opts) => {\n const cwd = opts.cwd;\n const presetUrl = opts.preset as string | undefined;\n const targetDir = projectDirectory\n ? path.resolve(cwd, projectDirectory)\n : cwd;\n\n const componentsConfigPath = path.join(targetDir, \"components.json\");\n\n if (!presetUrl && fs.existsSync(componentsConfigPath)) {\n logger.warn(\"Project is already initialized.\");\n logger.info(\"Use 'assistant-ui add' to add more components.\");\n return;\n }\n\n const packageJsonPath = path.join(targetDir, \"package.json\");\n const packageJsonExists = fs.existsSync(packageJsonPath);\n\n if (presetUrl || !packageJsonExists) {\n if (!presetUrl) {\n logger.info(\"No existing project found. Running 'create' instead...\");\n logger.break();\n }\n\n const createArgs = projectDirectory ? [targetDir] : [\"--cwd\", cwd];\n if (presetUrl) createArgs.push(\"--preset\", presetUrl);\n if (opts.useNpm) createArgs.push(\"--use-npm\");\n if (opts.usePnpm) createArgs.push(\"--use-pnpm\");\n if (opts.useYarn) createArgs.push(\"--use-yarn\");\n if (opts.useBun) createArgs.push(\"--use-bun\");\n if (opts.skipInstall) createArgs.push(\"--skip-install\");\n\n await create.parseAsync(createArgs, { from: \"user\" });\n return;\n }\n\n logger.info(\"Initializing assistant-ui in existing project...\");\n logger.break();\n\n if (!opts.yes && isNonInteractiveShell()) {\n logger.error(\n [\n \"Detected a non-interactive shell, but 'assistant-ui init' needs interactive prompts by default.\",\n \"To run this in CI/agent mode, re-run with '--yes' so shadcn initialization and component install run non-interactively.\",\n \"Example: assistant-ui init --yes\",\n ].join(\"\\n\"),\n );\n process.exit(1);\n }\n\n try {\n const pm = await resolvePackageManagerForCwd(\n targetDir,\n resolvePackageManager(opts),\n );\n const [dlxCmd, dlxArgs] = dlxCommand(pm);\n\n const { initArgs, addArgs } = createExistingProjectInitPlan({\n yes: opts.yes,\n overwrite: opts.overwrite,\n });\n\n await runSpawn(dlxCmd, [...dlxArgs, ...initArgs], targetDir);\n const registryUrl = resolveQuickStartRegistryUrl(\n getComponentsJsonStyle(targetDir),\n );\n await runSpawn(dlxCmd, [...dlxArgs, ...addArgs, registryUrl], targetDir);\n\n logger.break();\n logger.success(\"Project initialized successfully!\");\n logger.info(\"You can now add more components with 'assistant-ui add'\");\n } catch (error) {\n if (error instanceof SpawnSignalError) throw error;\n if (error instanceof SpawnExitError) {\n logger.error(`Initialization failed with code ${error.code}`);\n process.exit(error.code);\n }\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to initialize: ${message}`);\n process.exit(1);\n }\n });\n"],"mappings":"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"}
|
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,13 +1,10 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
jscodeshift?: string;
|
|
2
|
+
export interface TransformOptions {
|
|
3
|
+
dry?: boolean;
|
|
4
|
+
print?: boolean;
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
jscodeshift?: string;
|
|
8
7
|
}
|
|
9
|
-
declare const codemodCommand: Command;
|
|
10
|
-
declare const upgradeCommand: Command;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { TransformOptions, codemodCommand, upgradeCommand };
|
|
8
|
+
export declare const codemodCommand: Command;
|
|
9
|
+
export declare const upgradeCommand: Command;
|
|
13
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,13 +1,14 @@
|
|
|
1
|
-
import { PackageManagerName } from "./utils/package-manager.js";
|
|
2
|
-
|
|
3
|
-
declare const
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { type PackageManagerName } from "./utils/package-manager.js";
|
|
2
|
+
export declare const SKILLS_PACKAGE = "assistant-ui/skills";
|
|
3
|
+
export declare const SKILLS_COMMIT = "66befc4468ce0691c9203442d70cbbdcb5562ea1";
|
|
4
|
+
export declare const SKILLS_PLUGIN_SOURCE = "gh:assistant-ui/skills/assistant-ui#66befc4468ce0691c9203442d70cbbdcb5562ea1";
|
|
5
|
+
export declare function resolveSkillsInstall(params: {
|
|
6
|
+
skills?: boolean;
|
|
7
|
+
stdinIsTTY?: boolean;
|
|
7
8
|
}): boolean | undefined;
|
|
8
|
-
declare function buildSkillsAddCommand(pm: PackageManagerName, params?: {
|
|
9
|
-
|
|
9
|
+
export declare function buildSkillsAddCommand(pm: PackageManagerName, params?: {
|
|
10
|
+
stdinIsTTY?: boolean;
|
|
10
11
|
}): [string, string[]];
|
|
11
|
-
|
|
12
|
-
export
|
|
12
|
+
export declare function skillsPluginDir(): string;
|
|
13
|
+
export declare function ensureSkillsPlugin(): Promise<string>;
|
|
13
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 = "66befc4468ce0691c9203442d70cbbdcb5562ea1";
|
|
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 = \"66befc4468ce0691c9203442d70cbbdcb5562ea1\";\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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
packageManager: PackageManagerName;
|
|
1
|
+
import { type PackageManagerName } from "./utils/package-manager.js";
|
|
2
|
+
export declare function dlxCommand(pm: PackageManagerName): [string, string[]];
|
|
3
|
+
export interface TransformOptions {
|
|
4
|
+
hasLocalComponents: boolean;
|
|
5
|
+
skipInstall?: boolean;
|
|
6
|
+
packageManager: PackageManagerName;
|
|
8
7
|
}
|
|
9
|
-
type ProjectSource = {
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
export type ProjectSource = {
|
|
9
|
+
kind: "github";
|
|
10
|
+
ref: string | undefined;
|
|
12
11
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
kind: "local";
|
|
13
|
+
rootDir: string;
|
|
15
14
|
};
|
|
16
|
-
declare function resolvePackageManager(opts: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
export declare function resolvePackageManager(opts: {
|
|
16
|
+
useNpm?: boolean;
|
|
17
|
+
usePnpm?: boolean;
|
|
18
|
+
useYarn?: boolean;
|
|
19
|
+
useBun?: boolean;
|
|
21
20
|
}): PackageManagerName | undefined;
|
|
22
|
-
declare function
|
|
23
|
-
declare function
|
|
24
|
-
declare
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
export declare function resolveGitHubAuthToken(): string | undefined;
|
|
22
|
+
export declare function resolveLatestReleaseRef(): Promise<string | undefined>;
|
|
23
|
+
export declare const DOWNLOAD_TIMEOUT_MS = 30000;
|
|
24
|
+
export declare function cleanupPendingProjectDownloads(): void;
|
|
25
|
+
export declare function downloadProject(repoPath: string, destDir: string, ref?: string): Promise<void>;
|
|
26
|
+
export declare function scaffoldProject(repoPath: string, destDir: string, source: ProjectSource): Promise<void>;
|
|
27
|
+
export interface TransformResult {
|
|
28
|
+
registryInstallFailure?: {
|
|
29
|
+
retryCommand: string;
|
|
30
|
+
};
|
|
31
|
+
registryInstallCommand?: string;
|
|
30
32
|
}
|
|
31
|
-
declare function transformProject(projectDir: string, opts: TransformOptions): Promise<TransformResult>;
|
|
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
|
|
@@ -41,8 +43,7 @@ interface RequiredComponents {
|
|
|
41
43
|
* specifier against the files the registry actually installed and rewrite it
|
|
42
44
|
* only when the legacy path is absent and the elements layout has it.
|
|
43
45
|
*/
|
|
44
|
-
declare function reconcileAssistantUIImportLayout(projectDir: string): Promise<void>;
|
|
45
|
-
declare function scanRequiredComponents(projectDir: string): RequiredComponents;
|
|
46
|
-
|
|
47
|
-
export { ProjectSource, TransformOptions, TransformResult, dlxCommand, downloadProject, reconcileAssistantUIImportLayout, resolveLatestReleaseRef, resolvePackageManager, scaffoldProject, scanRequiredComponents, transformProject };
|
|
46
|
+
export declare function reconcileAssistantUIImportLayout(projectDir: string): Promise<void>;
|
|
47
|
+
export declare function scanRequiredComponents(projectDir: string): RequiredComponents;
|
|
48
|
+
export {};
|
|
48
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
|