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.
Files changed (124) hide show
  1. package/README.md +32 -108
  2. package/dist/codemods/utils/createTransformer.d.ts +17 -13
  3. package/dist/codemods/utils/createTransformer.d.ts.map +1 -1
  4. package/dist/codemods/utils/createTransformer.js +18 -15
  5. package/dist/codemods/utils/createTransformer.js.map +1 -1
  6. package/dist/codemods/v0-11/content-part-to-message-part.d.ts +3 -1
  7. package/dist/codemods/v0-11/content-part-to-message-part.d.ts.map +1 -1
  8. package/dist/codemods/v0-11/content-part-to-message-part.js +98 -135
  9. package/dist/codemods/v0-11/content-part-to-message-part.js.map +1 -1
  10. package/dist/codemods/v0-12/assistant-api-to-aui.d.ts +3 -1
  11. package/dist/codemods/v0-12/assistant-api-to-aui.d.ts.map +1 -1
  12. package/dist/codemods/v0-12/assistant-api-to-aui.js +126 -213
  13. package/dist/codemods/v0-12/assistant-api-to-aui.js.map +1 -1
  14. package/dist/codemods/v0-12/event-names-to-camelcase.d.ts +3 -1
  15. package/dist/codemods/v0-12/event-names-to-camelcase.d.ts.map +1 -1
  16. package/dist/codemods/v0-12/event-names-to-camelcase.js +33 -38
  17. package/dist/codemods/v0-12/event-names-to-camelcase.js.map +1 -1
  18. package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts +3 -1
  19. package/dist/codemods/v0-12/primitive-if-to-aui-if.d.ts.map +1 -1
  20. package/dist/codemods/v0-12/primitive-if-to-aui-if.js +212 -297
  21. package/dist/codemods/v0-12/primitive-if-to-aui-if.js.map +1 -1
  22. package/dist/codemods/v0-8/ui-package-split.d.ts +3 -1
  23. package/dist/codemods/v0-8/ui-package-split.d.ts.map +1 -1
  24. package/dist/codemods/v0-8/ui-package-split.js +121 -164
  25. package/dist/codemods/v0-8/ui-package-split.js.map +1 -1
  26. package/dist/codemods/v0-9/edge-package-split.d.ts +3 -1
  27. package/dist/codemods/v0-9/edge-package-split.d.ts.map +1 -1
  28. package/dist/codemods/v0-9/edge-package-split.js +96 -140
  29. package/dist/codemods/v0-9/edge-package-split.js.map +1 -1
  30. package/dist/commands/add.d.ts +18 -1
  31. package/dist/commands/add.d.ts.map +1 -1
  32. package/dist/commands/add.js +54 -49
  33. package/dist/commands/add.js.map +1 -1
  34. package/dist/commands/agent.d.ts +5 -1
  35. package/dist/commands/agent.d.ts.map +1 -1
  36. package/dist/commands/agent.js +16 -25
  37. package/dist/commands/agent.js.map +1 -1
  38. package/dist/commands/create.d.ts +36 -26
  39. package/dist/commands/create.d.ts.map +1 -1
  40. package/dist/commands/create.js +458 -519
  41. package/dist/commands/create.js.map +1 -1
  42. package/dist/commands/info.d.ts +5 -1
  43. package/dist/commands/info.d.ts.map +1 -1
  44. package/dist/commands/info.js +233 -314
  45. package/dist/commands/info.js.map +1 -1
  46. package/dist/commands/init.d.ts +12 -9
  47. package/dist/commands/init.d.ts.map +1 -1
  48. package/dist/commands/init.js +98 -136
  49. package/dist/commands/init.js.map +1 -1
  50. package/dist/commands/mcp.d.ts +5 -1
  51. package/dist/commands/mcp.d.ts.map +1 -1
  52. package/dist/commands/mcp.js +175 -214
  53. package/dist/commands/mcp.js.map +1 -1
  54. package/dist/commands/update.d.ts +5 -1
  55. package/dist/commands/update.d.ts.map +1 -1
  56. package/dist/commands/update.js +46 -55
  57. package/dist/commands/update.js.map +1 -1
  58. package/dist/commands/upgrade.d.ts +11 -7
  59. package/dist/commands/upgrade.d.ts.map +1 -1
  60. package/dist/commands/upgrade.js +26 -38
  61. package/dist/commands/upgrade.js.map +1 -1
  62. package/dist/index.d.ts +1 -3
  63. package/dist/index.js +15 -14
  64. package/dist/index.js.map +1 -1
  65. package/dist/lib/create-project.d.ts +27 -10
  66. package/dist/lib/create-project.d.ts.map +1 -1
  67. package/dist/lib/create-project.js +239 -277
  68. package/dist/lib/create-project.js.map +1 -1
  69. package/dist/lib/install-ai-sdk-lib.d.ts +4 -1
  70. package/dist/lib/install-ai-sdk-lib.d.ts.map +1 -1
  71. package/dist/lib/install-ai-sdk-lib.js +12 -8
  72. package/dist/lib/install-ai-sdk-lib.js.map +1 -1
  73. package/dist/lib/install-edge-lib.d.ts +4 -1
  74. package/dist/lib/install-edge-lib.d.ts.map +1 -1
  75. package/dist/lib/install-edge-lib.js +16 -12
  76. package/dist/lib/install-edge-lib.js.map +1 -1
  77. package/dist/lib/install-ui-lib.d.ts +4 -1
  78. package/dist/lib/install-ui-lib.d.ts.map +1 -1
  79. package/dist/lib/install-ui-lib.js +12 -8
  80. package/dist/lib/install-ui-lib.js.map +1 -1
  81. package/dist/lib/run-spawn.d.ts +9 -0
  82. package/dist/lib/run-spawn.d.ts.map +1 -0
  83. package/dist/lib/run-spawn.js +26 -0
  84. package/dist/lib/run-spawn.js.map +1 -0
  85. package/dist/lib/transform-options.d.ts +8 -5
  86. package/dist/lib/transform-options.d.ts.map +1 -1
  87. package/dist/lib/transform-options.js +0 -2
  88. package/dist/lib/transform.d.ts +15 -11
  89. package/dist/lib/transform.d.ts.map +1 -1
  90. package/dist/lib/transform.js +97 -114
  91. package/dist/lib/transform.js.map +1 -1
  92. package/dist/lib/upgrade.d.ts +6 -2
  93. package/dist/lib/upgrade.d.ts.map +1 -1
  94. package/dist/lib/upgrade.js +62 -64
  95. package/dist/lib/upgrade.js.map +1 -1
  96. package/dist/lib/utils/config.d.ts +21 -18
  97. package/dist/lib/utils/config.d.ts.map +1 -1
  98. package/dist/lib/utils/config.js +24 -28
  99. package/dist/lib/utils/config.js.map +1 -1
  100. package/dist/lib/utils/file-scanner.d.ts +9 -6
  101. package/dist/lib/utils/file-scanner.d.ts.map +1 -1
  102. package/dist/lib/utils/file-scanner.js +44 -51
  103. package/dist/lib/utils/file-scanner.js.map +1 -1
  104. package/dist/lib/utils/logger.d.ts +10 -7
  105. package/dist/lib/utils/logger.d.ts.map +1 -1
  106. package/dist/lib/utils/logger.js +23 -19
  107. package/dist/lib/utils/logger.js.map +1 -1
  108. package/dist/lib/utils/package-installer.d.ts +10 -7
  109. package/dist/lib/utils/package-installer.d.ts.map +1 -1
  110. package/dist/lib/utils/package-installer.js +18 -19
  111. package/dist/lib/utils/package-installer.js.map +1 -1
  112. package/dist/lib/utils/package-manager.d.ts +10 -7
  113. package/dist/lib/utils/package-manager.d.ts.map +1 -1
  114. package/dist/lib/utils/package-manager.js +68 -59
  115. package/dist/lib/utils/package-manager.js.map +1 -1
  116. package/package.json +7 -7
  117. package/plugin/skills/assistant-ui/SKILL.md +2 -2
  118. package/src/commands/add.ts +67 -30
  119. package/src/commands/create.ts +116 -84
  120. package/src/commands/init.ts +9 -42
  121. package/src/lib/create-project.ts +123 -74
  122. package/src/lib/run-spawn.ts +32 -0
  123. package/dist/index.d.ts.map +0 -1
  124. package/dist/lib/transform-options.js.map +0 -1
@@ -1,9 +1,12 @@
1
- export declare function askQuestion(query: string): Promise<string>;
2
- export declare function isPackageInstalled(pkg: string, cwd?: string): boolean;
3
- export interface InstallCommand {
4
- command: string;
5
- args: string[];
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
- export declare function getInstallCommand(packageName: string | string[], cwd?: string): Promise<InstallCommand>;
8
- export declare function installPackage(packageName: string, cwd?: string): Promise<boolean>;
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","sourceRoot":"","sources":["../../../src/lib/utils/package-manager.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAgBT;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAazB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
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 * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { spawnSync } from "node:child_process";
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
- import { logger } from "./logger.js";
7
- export function askQuestion(query) {
8
- return new Promise((resolve) => {
9
- const rl = readline.createInterface({
10
- input: process.stdin,
11
- output: process.stdout,
12
- });
13
- rl.question(query, (answer) => {
14
- rl.close();
15
- resolve(answer);
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
- export function isPackageInstalled(pkg, cwd = process.cwd()) {
20
- try {
21
- const pkgJsonPath = path.join(cwd, "package.json");
22
- if (fs.existsSync(pkgJsonPath)) {
23
- const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
24
- const deps = pkgJson.dependencies || {};
25
- const devDeps = pkgJson.devDependencies || {};
26
- if (deps[pkg] || devDeps[pkg]) {
27
- return true;
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
- export async function getInstallCommand(packageName, cwd) {
38
- const pm = await detect({ cwd });
39
- const packages = Array.isArray(packageName) ? packageName : [packageName];
40
- switch (pm) {
41
- case "yarn":
42
- return { command: "yarn", args: ["add", ...packages] };
43
- case "pnpm":
44
- return { command: "pnpm", args: ["add", ...packages] };
45
- case "bun":
46
- return { command: "bun", args: ["add", ...packages] };
47
- default:
48
- return { command: "npm", args: ["install", ...packages] };
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
- export async function installPackage(packageName, cwd) {
52
- try {
53
- const { command, args } = await getInstallCommand(packageName, cwd);
54
- const result = spawnSync(command, args, { stdio: "inherit", cwd });
55
- if (result.error || result.status !== 0) {
56
- logger.error(`Installation failed${result.error ? `: ${String(result.error)}` : "."}`);
57
- return false;
58
- }
59
- return true;
60
- }
61
- catch (e) {
62
- logger.error(`Installation failed: ${String(e)}`);
63
- return false;
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","sourceRoot":"","sources":["../../../src/lib/utils/package-manager.ts"],"names":[],"mappings":"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"}
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.91",
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.3.0",
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.4"
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.6.0",
47
- "@vitest/coverage-v8": "^4.1.5",
48
- "vitest": "^4.1.5",
49
- "@assistant-ui/x-buildutils": "0.0.7"
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-4o"),
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-4o"),
109
+ model: openai("gpt-5.4-nano"),
110
110
  messages,
111
111
  tools: {
112
112
  get_weather: tool({
@@ -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
- .action((components: string[], opts) => {
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 args = [`shadcn@latest`, "add", ...componentsToAdd];
39
-
40
- if (opts.yes) args.push("--yes");
41
- if (opts.overwrite) args.push("--overwrite");
42
- if (opts.cwd) args.push("--cwd", opts.cwd);
43
- if (opts.path) args.push("--path", opts.path);
44
-
45
- const child = spawn("npx", args, {
46
- stdio: "inherit",
47
- shell: true,
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
- child.on("error", (error) => {
51
- logger.error(`Failed to add components: ${error.message}`);
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
- child.on("close", (code) => {
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
  });