assistant-ui 0.0.91 → 0.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -108
- package/dist/codemods/utils/createTransformer.d.ts +17 -13
- package/dist/codemods/utils/createTransformer.d.ts.map +1 -1
- package/dist/codemods/utils/createTransformer.js +18 -15
- package/dist/codemods/utils/createTransformer.js.map +1 -1
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts +3 -1
- package/dist/codemods/v0-11/content-part-to-message-part.d.ts.map +1 -1
- package/dist/codemods/v0-11/content-part-to-message-part.js +98 -135
- package/dist/codemods/v0-11/content-part-to-message-part.js.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts +3 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.d.ts.map +1 -1
- package/dist/codemods/v0-12/assistant-api-to-aui.js +126 -213
- package/dist/codemods/v0-12/assistant-api-to-aui.js.map +1 -1
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts +3 -1
- package/dist/codemods/v0-12/event-names-to-camelcase.d.ts.map +1 -1
- package/dist/codemods/v0-12/event-names-to-camelcase.js +33 -38
- package/dist/codemods/v0-12/event-names-to-camelcase.js.map +1 -1
- package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts +3 -1
- 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 +212 -297
- package/dist/codemods/v0-12/primitive-if-to-aui-if.js.map +1 -1
- package/dist/codemods/v0-8/ui-package-split.d.ts +3 -1
- package/dist/codemods/v0-8/ui-package-split.d.ts.map +1 -1
- package/dist/codemods/v0-8/ui-package-split.js +121 -164
- package/dist/codemods/v0-8/ui-package-split.js.map +1 -1
- package/dist/codemods/v0-9/edge-package-split.d.ts +3 -1
- package/dist/codemods/v0-9/edge-package-split.d.ts.map +1 -1
- package/dist/codemods/v0-9/edge-package-split.js +96 -140
- package/dist/codemods/v0-9/edge-package-split.js.map +1 -1
- package/dist/commands/add.d.ts +18 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +54 -49
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/agent.d.ts +5 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +16 -25
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/create.d.ts +36 -26
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +458 -519
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/info.d.ts +5 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +233 -314
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts +12 -9
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +98 -136
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +5 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +175 -214
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/update.d.ts +5 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +46 -55
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upgrade.d.ts +11 -7
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +26 -38
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.js +15 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/create-project.d.ts +27 -10
- package/dist/lib/create-project.d.ts.map +1 -1
- package/dist/lib/create-project.js +239 -277
- package/dist/lib/create-project.js.map +1 -1
- package/dist/lib/install-ai-sdk-lib.d.ts +4 -1
- package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
- package/dist/lib/install-ai-sdk-lib.js +12 -8
- package/dist/lib/install-ai-sdk-lib.js.map +1 -1
- package/dist/lib/install-edge-lib.d.ts +4 -1
- package/dist/lib/install-edge-lib.d.ts.map +1 -1
- package/dist/lib/install-edge-lib.js +16 -12
- package/dist/lib/install-edge-lib.js.map +1 -1
- package/dist/lib/install-ui-lib.d.ts +4 -1
- package/dist/lib/install-ui-lib.d.ts.map +1 -1
- package/dist/lib/install-ui-lib.js +12 -8
- package/dist/lib/install-ui-lib.js.map +1 -1
- package/dist/lib/run-spawn.d.ts +9 -0
- package/dist/lib/run-spawn.d.ts.map +1 -0
- package/dist/lib/run-spawn.js +26 -0
- package/dist/lib/run-spawn.js.map +1 -0
- package/dist/lib/transform-options.d.ts +8 -5
- package/dist/lib/transform-options.d.ts.map +1 -1
- package/dist/lib/transform-options.js +0 -2
- package/dist/lib/transform.d.ts +15 -11
- package/dist/lib/transform.d.ts.map +1 -1
- package/dist/lib/transform.js +97 -114
- package/dist/lib/transform.js.map +1 -1
- package/dist/lib/upgrade.d.ts +6 -2
- package/dist/lib/upgrade.d.ts.map +1 -1
- package/dist/lib/upgrade.js +62 -64
- package/dist/lib/upgrade.js.map +1 -1
- package/dist/lib/utils/config.d.ts +21 -18
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/config.js +24 -28
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/lib/utils/file-scanner.d.ts +9 -6
- package/dist/lib/utils/file-scanner.d.ts.map +1 -1
- package/dist/lib/utils/file-scanner.js +44 -51
- package/dist/lib/utils/file-scanner.js.map +1 -1
- package/dist/lib/utils/logger.d.ts +10 -7
- package/dist/lib/utils/logger.d.ts.map +1 -1
- package/dist/lib/utils/logger.js +23 -19
- package/dist/lib/utils/logger.js.map +1 -1
- package/dist/lib/utils/package-installer.d.ts +10 -7
- package/dist/lib/utils/package-installer.d.ts.map +1 -1
- package/dist/lib/utils/package-installer.js +18 -19
- package/dist/lib/utils/package-installer.js.map +1 -1
- package/dist/lib/utils/package-manager.d.ts +10 -7
- package/dist/lib/utils/package-manager.d.ts.map +1 -1
- package/dist/lib/utils/package-manager.js +68 -59
- package/dist/lib/utils/package-manager.js.map +1 -1
- package/package.json +7 -7
- package/plugin/skills/assistant-ui/SKILL.md +2 -2
- package/src/commands/add.ts +67 -30
- package/src/commands/create.ts +116 -84
- package/src/commands/init.ts +9 -42
- package/src/lib/create-project.ts +123 -74
- package/src/lib/run-spawn.ts +32 -0
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/transform-options.js.map +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
//#region src/lib/utils/package-manager.d.ts
|
|
2
|
+
declare function askQuestion(query: string): Promise<string>;
|
|
3
|
+
declare function isPackageInstalled(pkg: string, cwd?: string): boolean;
|
|
4
|
+
interface InstallCommand {
|
|
5
|
+
command: string;
|
|
6
|
+
args: string[];
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
declare function getInstallCommand(packageName: string | string[], cwd?: string): Promise<InstallCommand>;
|
|
9
|
+
declare function installPackage(packageName: string, cwd?: string): Promise<boolean>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { InstallCommand, askQuestion, getInstallCommand, installPackage, isPackageInstalled };
|
|
9
12
|
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","names":[],"sources":["../../../src/lib/utils/package-manager.ts"],"mappings":";iBAOgB,WAAA,CAAY,KAAA,WAAgB,OAAO;AAAA,iBAanC,kBAAA,CACd,GAAA,UACA,GAA2B;AAAA,UAmBZ,cAAA;EACf,OAAA;EACA,IAAI;AAAA;AAAA,iBAGgB,iBAAA,CACpB,WAAA,qBACA,GAAA,YACC,OAAO,CAAC,cAAA;AAAA,iBAeW,cAAA,CACpB,WAAA,UACA,GAAA,YACC,OAAO"}
|
|
@@ -1,66 +1,75 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
1
|
+
import { logger } from "./logger.js";
|
|
2
|
+
import * as fs$1 from "node:fs";
|
|
3
|
+
import * as path$1 from "node:path";
|
|
4
4
|
import { detect } from "detect-package-manager";
|
|
5
|
+
import { spawnSync } from "node:child_process";
|
|
5
6
|
import * as readline from "node:readline";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
//#region src/lib/utils/package-manager.ts
|
|
8
|
+
function askQuestion(query) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const rl = readline.createInterface({
|
|
11
|
+
input: process.stdin,
|
|
12
|
+
output: process.stdout
|
|
13
|
+
});
|
|
14
|
+
rl.question(query, (answer) => {
|
|
15
|
+
rl.close();
|
|
16
|
+
resolve(answer);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
catch {
|
|
32
|
-
// Fall back to node_modules check below.
|
|
33
|
-
}
|
|
34
|
-
const modulePath = path.join(cwd, "node_modules", ...pkg.split("/"));
|
|
35
|
-
return fs.existsSync(modulePath);
|
|
20
|
+
function isPackageInstalled(pkg, cwd = process.cwd()) {
|
|
21
|
+
try {
|
|
22
|
+
const pkgJsonPath = path$1.join(cwd, "package.json");
|
|
23
|
+
if (fs$1.existsSync(pkgJsonPath)) {
|
|
24
|
+
const pkgJson = JSON.parse(fs$1.readFileSync(pkgJsonPath, "utf8"));
|
|
25
|
+
const deps = pkgJson.dependencies || {};
|
|
26
|
+
const devDeps = pkgJson.devDependencies || {};
|
|
27
|
+
if (deps[pkg] || devDeps[pkg]) return true;
|
|
28
|
+
}
|
|
29
|
+
} catch {}
|
|
30
|
+
const modulePath = path$1.join(cwd, "node_modules", ...pkg.split("/"));
|
|
31
|
+
return fs$1.existsSync(modulePath);
|
|
36
32
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
33
|
+
async function getInstallCommand(packageName, cwd) {
|
|
34
|
+
const pm = await detect({ cwd });
|
|
35
|
+
const packages = Array.isArray(packageName) ? packageName : [packageName];
|
|
36
|
+
switch (pm) {
|
|
37
|
+
case "yarn": return {
|
|
38
|
+
command: "yarn",
|
|
39
|
+
args: ["add", ...packages]
|
|
40
|
+
};
|
|
41
|
+
case "pnpm": return {
|
|
42
|
+
command: "pnpm",
|
|
43
|
+
args: ["add", ...packages]
|
|
44
|
+
};
|
|
45
|
+
case "bun": return {
|
|
46
|
+
command: "bun",
|
|
47
|
+
args: ["add", ...packages]
|
|
48
|
+
};
|
|
49
|
+
default: return {
|
|
50
|
+
command: "npm",
|
|
51
|
+
args: ["install", ...packages]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
50
54
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
async function installPackage(packageName, cwd) {
|
|
56
|
+
try {
|
|
57
|
+
const { command, args } = await getInstallCommand(packageName, cwd);
|
|
58
|
+
const result = spawnSync(command, args, {
|
|
59
|
+
stdio: "inherit",
|
|
60
|
+
cwd
|
|
61
|
+
});
|
|
62
|
+
if (result.error || result.status !== 0) {
|
|
63
|
+
logger.error(`Installation failed${result.error ? `: ${String(result.error)}` : "."}`);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
} catch (e) {
|
|
68
|
+
logger.error(`Installation failed: ${String(e)}`);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
65
71
|
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { askQuestion, getInstallCommand, installPackage, isPackageInstalled };
|
|
74
|
+
|
|
66
75
|
//# sourceMappingURL=package-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.js","
|
|
1
|
+
{"version":3,"file":"package-manager.js","names":["path","fs"],"sources":["../../../src/lib/utils/package-manager.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { detect } from \"detect-package-manager\";\nimport * as readline from \"node:readline\";\nimport { logger } from \"./logger\";\n\nexport function askQuestion(query: string): Promise<string> {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(query, (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n}\n\nexport function isPackageInstalled(\n pkg: string,\n cwd: string = process.cwd(),\n): boolean {\n try {\n const pkgJsonPath = path.join(cwd, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf8\"));\n const deps = pkgJson.dependencies || {};\n const devDeps = pkgJson.devDependencies || {};\n if (deps[pkg] || devDeps[pkg]) {\n return true;\n }\n }\n } catch {\n // Fall back to node_modules check below.\n }\n const modulePath = path.join(cwd, \"node_modules\", ...pkg.split(\"/\"));\n return fs.existsSync(modulePath);\n}\n\nexport interface InstallCommand {\n command: string;\n args: string[];\n}\n\nexport async function getInstallCommand(\n packageName: string | string[],\n cwd?: string,\n): Promise<InstallCommand> {\n const pm = await detect({ cwd });\n const packages = Array.isArray(packageName) ? packageName : [packageName];\n switch (pm) {\n case \"yarn\":\n return { command: \"yarn\", args: [\"add\", ...packages] };\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", ...packages] };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", ...packages] };\n default:\n return { command: \"npm\", args: [\"install\", ...packages] };\n }\n}\n\nexport async function installPackage(\n packageName: string,\n cwd?: string,\n): Promise<boolean> {\n try {\n const { command, args } = await getInstallCommand(packageName, cwd);\n const result = spawnSync(command, args, { stdio: \"inherit\", cwd });\n\n if (result.error || result.status !== 0) {\n logger.error(\n `Installation failed${\n result.error ? `: ${String(result.error)}` : \".\"\n }`,\n );\n return false;\n }\n\n return true;\n } catch (e) {\n logger.error(`Installation failed: ${String(e)}`);\n return false;\n }\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,YAAY,OAAgC;CAC1D,OAAO,IAAI,SAAS,YAAY;EAC9B,MAAM,KAAK,SAAS,gBAAgB;GAClC,OAAO,QAAQ;GACf,QAAQ,QAAQ;EAClB,CAAC;EACD,GAAG,SAAS,QAAQ,WAAW;GAC7B,GAAG,MAAM;GACT,QAAQ,MAAM;EAChB,CAAC;CACH,CAAC;AACH;AAEA,SAAgB,mBACd,KACA,MAAc,QAAQ,IAAI,GACjB;CACT,IAAI;EACF,MAAM,cAAcA,OAAK,KAAK,KAAK,cAAc;EACjD,IAAIC,KAAG,WAAW,WAAW,GAAG;GAC9B,MAAM,UAAU,KAAK,MAAMA,KAAG,aAAa,aAAa,MAAM,CAAC;GAC/D,MAAM,OAAO,QAAQ,gBAAgB,CAAC;GACtC,MAAM,UAAU,QAAQ,mBAAmB,CAAC;GAC5C,IAAI,KAAK,QAAQ,QAAQ,MACvB,OAAO;EAEX;CACF,QAAQ,CAER;CACA,MAAM,aAAaD,OAAK,KAAK,KAAK,gBAAgB,GAAG,IAAI,MAAM,GAAG,CAAC;CACnE,OAAOC,KAAG,WAAW,UAAU;AACjC;AAOA,eAAsB,kBACpB,aACA,KACyB;CACzB,MAAM,KAAK,MAAM,OAAO,EAAE,IAAI,CAAC;CAC/B,MAAM,WAAW,MAAM,QAAQ,WAAW,IAAI,cAAc,CAAC,WAAW;CACxE,QAAQ,IAAR;EACE,KAAK,QACH,OAAO;GAAE,SAAS;GAAQ,MAAM,CAAC,OAAO,GAAG,QAAQ;EAAE;EACvD,KAAK,QACH,OAAO;GAAE,SAAS;GAAQ,MAAM,CAAC,OAAO,GAAG,QAAQ;EAAE;EACvD,KAAK,OACH,OAAO;GAAE,SAAS;GAAO,MAAM,CAAC,OAAO,GAAG,QAAQ;EAAE;EACtD,SACE,OAAO;GAAE,SAAS;GAAO,MAAM,CAAC,WAAW,GAAG,QAAQ;EAAE;CAC5D;AACF;AAEA,eAAsB,eACpB,aACA,KACkB;CAClB,IAAI;EACF,MAAM,EAAE,SAAS,SAAS,MAAM,kBAAkB,aAAa,GAAG;EAClE,MAAM,SAAS,UAAU,SAAS,MAAM;GAAE,OAAO;GAAW;EAAI,CAAC;EAEjE,IAAI,OAAO,SAAS,OAAO,WAAW,GAAG;GACvC,OAAO,MACL,sBACE,OAAO,QAAQ,KAAK,OAAO,OAAO,KAAK,MAAM,KAEjD;GACA,OAAO;EACT;EAEA,OAAO;CACT,SAAS,GAAG;EACV,OAAO,MAAM,wBAAwB,OAAO,CAAC,GAAG;EAChD,OAAO;CACT;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assistant-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.93",
|
|
4
4
|
"description": "CLI for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
],
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@clack/prompts": "^1.
|
|
29
|
+
"@clack/prompts": "^1.4.0",
|
|
30
30
|
"chalk": "^5.6.2",
|
|
31
31
|
"cli-progress": "^3.12.0",
|
|
32
32
|
"commander": "^14.0.3",
|
|
@@ -36,17 +36,17 @@
|
|
|
36
36
|
"giget": "^3.2.0",
|
|
37
37
|
"glob": "^13.0.6",
|
|
38
38
|
"jscodeshift": "^17.3.0",
|
|
39
|
-
"@assistant-ui/agent-launcher": "0.1.
|
|
39
|
+
"@assistant-ui/agent-launcher": "0.1.5"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/cli-progress": "^3.11.6",
|
|
43
43
|
"@types/cross-spawn": "^6.0.6",
|
|
44
44
|
"@types/debug": "^4.1.13",
|
|
45
45
|
"@types/jscodeshift": "^17.3.0",
|
|
46
|
-
"@types/node": "^25.
|
|
47
|
-
"@vitest/coverage-v8": "^4.1.
|
|
48
|
-
"vitest": "^4.1.
|
|
49
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
46
|
+
"@types/node": "^25.9.1",
|
|
47
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
48
|
+
"vitest": "^4.1.7",
|
|
49
|
+
"@assistant-ui/x-buildutils": "0.0.9"
|
|
50
50
|
},
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public",
|
|
@@ -64,7 +64,7 @@ export async function POST(req: Request) {
|
|
|
64
64
|
const { messages, config } = await req.json();
|
|
65
65
|
|
|
66
66
|
const result = streamText({
|
|
67
|
-
model: openai("gpt-
|
|
67
|
+
model: openai("gpt-5.4-nano"),
|
|
68
68
|
messages,
|
|
69
69
|
...config,
|
|
70
70
|
});
|
|
@@ -106,7 +106,7 @@ import { streamText, tool } from "ai";
|
|
|
106
106
|
import { z } from "zod";
|
|
107
107
|
|
|
108
108
|
const result = streamText({
|
|
109
|
-
model: openai("gpt-
|
|
109
|
+
model: openai("gpt-5.4-nano"),
|
|
110
110
|
messages,
|
|
111
111
|
tools: {
|
|
112
112
|
get_weather: tool({
|
package/src/commands/add.ts
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import { spawn } from "cross-spawn";
|
|
3
2
|
import { logger } from "../lib/utils/logger";
|
|
4
3
|
import { hasConfig } from "../lib/utils/config";
|
|
4
|
+
import {
|
|
5
|
+
dlxCommand,
|
|
6
|
+
resolvePackageManager,
|
|
7
|
+
resolvePackageManagerForCwd,
|
|
8
|
+
type PackageManagerName,
|
|
9
|
+
} from "../lib/create-project";
|
|
10
|
+
import { runSpawn, SpawnExitError } from "../lib/run-spawn";
|
|
5
11
|
|
|
6
12
|
const REGISTRY_BASE_URL = "https://r.assistant-ui.com";
|
|
7
13
|
|
|
14
|
+
export interface AddComponentsPlan {
|
|
15
|
+
command: string;
|
|
16
|
+
args: string[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createAddComponentsPlan(params: {
|
|
20
|
+
components: string[];
|
|
21
|
+
packageManager: PackageManagerName;
|
|
22
|
+
yes?: boolean;
|
|
23
|
+
overwrite?: boolean;
|
|
24
|
+
cwd?: string;
|
|
25
|
+
path?: string;
|
|
26
|
+
}): AddComponentsPlan {
|
|
27
|
+
const componentsToAdd = params.components.map((c) => {
|
|
28
|
+
if (!/^[a-zA-Z0-9-/]+$/.test(c)) {
|
|
29
|
+
throw new Error(`Invalid component name: ${c}`);
|
|
30
|
+
}
|
|
31
|
+
return `${REGISTRY_BASE_URL}/${encodeURIComponent(c)}.json`;
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const [command, dlxArgs] = dlxCommand(params.packageManager);
|
|
35
|
+
const args = [...dlxArgs, "shadcn@latest", "add", ...componentsToAdd];
|
|
36
|
+
|
|
37
|
+
// For npm, dlxArgs may already include `--yes` for npx auto-install.
|
|
38
|
+
// This flag is for shadcn's own confirmation prompt.
|
|
39
|
+
if (params.yes) args.push("--yes");
|
|
40
|
+
if (params.overwrite) args.push("--overwrite");
|
|
41
|
+
if (params.cwd) args.push("--cwd", params.cwd);
|
|
42
|
+
if (params.path) args.push("--path", params.path);
|
|
43
|
+
|
|
44
|
+
return { command, args };
|
|
45
|
+
}
|
|
46
|
+
|
|
8
47
|
export const add = new Command()
|
|
9
48
|
.name("add")
|
|
10
49
|
.description("add a component to your project")
|
|
@@ -17,7 +56,11 @@ export const add = new Command()
|
|
|
17
56
|
process.cwd(),
|
|
18
57
|
)
|
|
19
58
|
.option("-p, --path <path>", "the path to add the component to.")
|
|
20
|
-
.
|
|
59
|
+
.option("--use-npm", "explicitly use npm")
|
|
60
|
+
.option("--use-pnpm", "explicitly use pnpm")
|
|
61
|
+
.option("--use-yarn", "explicitly use yarn")
|
|
62
|
+
.option("--use-bun", "explicitly use bun")
|
|
63
|
+
.action(async (components: string[], opts) => {
|
|
21
64
|
// Check if project is initialized
|
|
22
65
|
if (!hasConfig(opts.cwd)) {
|
|
23
66
|
logger.warn(
|
|
@@ -26,38 +69,32 @@ export const add = new Command()
|
|
|
26
69
|
logger.break();
|
|
27
70
|
}
|
|
28
71
|
|
|
29
|
-
const componentsToAdd = components.map((c) => {
|
|
30
|
-
if (!/^[a-zA-Z0-9-/]+$/.test(c)) {
|
|
31
|
-
throw new Error(`Invalid component name: ${c}`);
|
|
32
|
-
}
|
|
33
|
-
return `${REGISTRY_BASE_URL}/${encodeURIComponent(c)}.json`;
|
|
34
|
-
});
|
|
35
|
-
|
|
36
72
|
logger.step(`Adding ${components.length} component(s)...`);
|
|
37
73
|
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
74
|
+
const packageManager = await resolvePackageManagerForCwd(
|
|
75
|
+
opts.cwd,
|
|
76
|
+
resolvePackageManager(opts),
|
|
77
|
+
);
|
|
78
|
+
const { command, args } = createAddComponentsPlan({
|
|
79
|
+
components,
|
|
80
|
+
packageManager,
|
|
81
|
+
yes: opts.yes,
|
|
82
|
+
overwrite: opts.overwrite,
|
|
83
|
+
cwd: opts.cwd,
|
|
84
|
+
path: opts.path,
|
|
48
85
|
});
|
|
49
86
|
|
|
50
|
-
|
|
51
|
-
|
|
87
|
+
try {
|
|
88
|
+
await runSpawn(command, args, opts.cwd);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
if (error instanceof SpawnExitError) {
|
|
91
|
+
logger.error(`Process exited with code ${error.code}`);
|
|
92
|
+
process.exit(error.code);
|
|
93
|
+
}
|
|
94
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
95
|
+
logger.error(`Failed to add components: ${message}`);
|
|
52
96
|
process.exit(1);
|
|
53
|
-
}
|
|
97
|
+
}
|
|
54
98
|
|
|
55
|
-
|
|
56
|
-
if (code !== 0) {
|
|
57
|
-
logger.error(`Process exited with code ${code}`);
|
|
58
|
-
process.exit(code || 1);
|
|
59
|
-
} else {
|
|
60
|
-
logger.success("Components added successfully!");
|
|
61
|
-
}
|
|
62
|
-
});
|
|
99
|
+
logger.success("Components added successfully!");
|
|
63
100
|
});
|