assistant-ui 0.0.77 → 0.0.79

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 CHANGED
@@ -4,14 +4,18 @@ The `assistant-ui` CLI for adding components and dependencies to your project.
4
4
 
5
5
  ## Usage
6
6
 
7
- Use the `init` command to initialize dependencies for a new or existing project.
7
+ Use the `init` command to initialize assistant-ui in an existing project.
8
8
 
9
9
  The `init` command installs dependencies, adds components, and configures your project for assistant-ui.
10
10
 
11
11
  ```bash
12
12
  npx assistant-ui@latest init
13
+ npx assistant-ui@latest init --yes # non-interactive / CI / agent mode
13
14
  ```
14
15
 
16
+ If no existing project is found (no `package.json`), `init` forwards to `create`.
17
+ Passing `--preset` to `init` also forwards to `create` for compatibility.
18
+
15
19
  ## create
16
20
 
17
21
  Use the `create` command to scaffold a new Next.js project with assistant-ui.
@@ -28,14 +32,23 @@ You can choose from multiple templates:
28
32
  # Default template with Vercel AI SDK
29
33
  npx assistant-ui@latest create my-app
30
34
 
35
+ # Minimal starter
36
+ npx assistant-ui@latest create my-app -t minimal
37
+
31
38
  # With Assistant Cloud for persistence
32
39
  npx assistant-ui@latest create my-app -t cloud
33
40
 
34
- # With LangGraph integration
41
+ # With Assistant Cloud + Clerk auth
42
+ npx assistant-ui@latest create my-app -t cloud-clerk
43
+
44
+ # With LangGraph starter template
35
45
  npx assistant-ui@latest create my-app -t langgraph
36
46
 
37
- # With MCP support
47
+ # With MCP starter template
38
48
  npx assistant-ui@latest create my-app -t mcp
49
+
50
+ # With playground preset configuration
51
+ npx assistant-ui@latest create my-app --preset "https://www.assistant-ui.com/playground/init?preset=chatgpt"
39
52
  ```
40
53
 
41
54
  ## add
@@ -1,3 +1,57 @@
1
1
  import { Command } from "commander";
2
+ import * as p from "@clack/prompts";
3
+ declare const templates: {
4
+ readonly default: {
5
+ readonly url: "https://github.com/assistant-ui/assistant-ui-starter";
6
+ readonly label: "Default";
7
+ readonly hint: "Default template with Vercel AI SDK";
8
+ };
9
+ readonly minimal: {
10
+ readonly url: "https://github.com/assistant-ui/assistant-ui-starter-minimal";
11
+ readonly label: "Minimal";
12
+ readonly hint: "Bare-bones starting point";
13
+ };
14
+ readonly cloud: {
15
+ readonly url: "https://github.com/assistant-ui/assistant-cloud-starter";
16
+ readonly label: "Cloud";
17
+ readonly hint: "Cloud-backed persistence starter";
18
+ };
19
+ readonly "cloud-clerk": {
20
+ readonly url: "https://github.com/assistant-ui/assistant-ui-starter-cloud-clerk";
21
+ readonly label: "Cloud + Clerk";
22
+ readonly hint: "Cloud-backed starter with Clerk auth";
23
+ };
24
+ readonly langgraph: {
25
+ readonly url: "https://github.com/assistant-ui/assistant-ui-starter-langgraph";
26
+ readonly label: "LangGraph";
27
+ readonly hint: "LangGraph starter template";
28
+ };
29
+ readonly mcp: {
30
+ readonly url: "https://github.com/assistant-ui/assistant-ui-starter-mcp";
31
+ readonly label: "MCP";
32
+ readonly hint: "MCP starter template";
33
+ };
34
+ };
35
+ type TemplateName = keyof typeof templates;
36
+ export declare function resolveCreateTemplateName(params: {
37
+ template?: string;
38
+ stdinIsTTY?: boolean;
39
+ select?: typeof p.select;
40
+ isCancel?: typeof p.isCancel;
41
+ }): Promise<TemplateName | null>;
42
+ export declare function buildCreateNextAppArgs(params: {
43
+ projectDirectory?: string;
44
+ useNpm?: boolean;
45
+ usePnpm?: boolean;
46
+ useYarn?: boolean;
47
+ useBun?: boolean;
48
+ skipInstall?: boolean;
49
+ templateUrl: string;
50
+ }): string[];
51
+ export declare function resolveCreateProjectDirectory(params: {
52
+ projectDirectory?: string;
53
+ stdinIsTTY?: boolean;
54
+ }): string | undefined;
2
55
  export declare const create: Command;
56
+ export {};
3
57
  //# sourceMappingURL=create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,MAAM,SAgFf,CAAC"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAKpC,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BL,CAAC;AAEX,KAAK,YAAY,GAAG,MAAM,OAAO,SAAS,CAAC;AAa3C,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;CAC9B,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0B/B;AAiCD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,EAAE,CAqBX;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,MAAM,GAAG,SAAS,CAMrB;AAMD,eAAO,MAAM,MAAM,SAkHf,CAAC"}
@@ -1,17 +1,119 @@
1
1
  import { Command } from "commander";
2
2
  import chalk from "chalk";
3
3
  import { spawn } from "cross-spawn";
4
+ import path from "node:path";
5
+ import * as p from "@clack/prompts";
4
6
  import { logger } from "../lib/utils/logger.js";
5
7
  import { createFromExample } from "../lib/create-from-example.js";
6
8
  // Keep in sync with packages/create-assistant-ui/src/index.ts
7
9
  const templates = {
8
- default: "https://github.com/assistant-ui/assistant-ui-starter",
9
- minimal: "https://github.com/assistant-ui/assistant-ui-starter-minimal",
10
- cloud: "https://github.com/assistant-ui/assistant-ui-starter-cloud",
11
- langgraph: "https://github.com/assistant-ui/assistant-ui-starter-langgraph",
12
- mcp: "https://github.com/assistant-ui/assistant-ui-starter-mcp",
10
+ default: {
11
+ url: "https://github.com/assistant-ui/assistant-ui-starter",
12
+ label: "Default",
13
+ hint: "Default template with Vercel AI SDK",
14
+ },
15
+ minimal: {
16
+ url: "https://github.com/assistant-ui/assistant-ui-starter-minimal",
17
+ label: "Minimal",
18
+ hint: "Bare-bones starting point",
19
+ },
20
+ cloud: {
21
+ url: "https://github.com/assistant-ui/assistant-cloud-starter",
22
+ label: "Cloud",
23
+ hint: "Cloud-backed persistence starter",
24
+ },
25
+ "cloud-clerk": {
26
+ url: "https://github.com/assistant-ui/assistant-ui-starter-cloud-clerk",
27
+ label: "Cloud + Clerk",
28
+ hint: "Cloud-backed starter with Clerk auth",
29
+ },
30
+ langgraph: {
31
+ url: "https://github.com/assistant-ui/assistant-ui-starter-langgraph",
32
+ label: "LangGraph",
33
+ hint: "LangGraph starter template",
34
+ },
35
+ mcp: {
36
+ url: "https://github.com/assistant-ui/assistant-ui-starter-mcp",
37
+ label: "MCP",
38
+ hint: "MCP starter template",
39
+ },
13
40
  };
14
41
  const templateNames = Object.keys(templates);
42
+ const templatePickerOptions = templateNames.map((name) => ({
43
+ value: name,
44
+ label: templates[name].label,
45
+ hint: templates[name].hint,
46
+ }));
47
+ export async function resolveCreateTemplateName(params) {
48
+ const { template, stdinIsTTY = process.stdin.isTTY, select = p.select, isCancel = p.isCancel, } = params;
49
+ if (template) {
50
+ return template;
51
+ }
52
+ if (!stdinIsTTY) {
53
+ return "default";
54
+ }
55
+ const selected = await select({
56
+ message: "Select a template:",
57
+ options: templatePickerOptions,
58
+ });
59
+ if (isCancel(selected)) {
60
+ return null;
61
+ }
62
+ return selected;
63
+ }
64
+ class SpawnExitError extends Error {
65
+ code;
66
+ constructor(code) {
67
+ super(`Process exited with code ${code}`);
68
+ this.code = code;
69
+ }
70
+ }
71
+ async function runSpawn(command, args, cwd) {
72
+ return new Promise((resolve, reject) => {
73
+ const child = spawn(command, args, {
74
+ stdio: "inherit",
75
+ cwd,
76
+ });
77
+ child.on("error", (error) => reject(error));
78
+ child.on("close", (code) => {
79
+ if (code !== 0) {
80
+ reject(new SpawnExitError(code || 1));
81
+ }
82
+ else {
83
+ resolve();
84
+ }
85
+ });
86
+ });
87
+ }
88
+ export function buildCreateNextAppArgs(params) {
89
+ const { projectDirectory, useNpm, usePnpm, useYarn, useBun, skipInstall, templateUrl, } = params;
90
+ const args = ["create-next-app@latest"];
91
+ if (projectDirectory)
92
+ args.push(projectDirectory);
93
+ if (useNpm)
94
+ args.push("--use-npm");
95
+ if (usePnpm)
96
+ args.push("--use-pnpm");
97
+ if (useYarn)
98
+ args.push("--use-yarn");
99
+ if (useBun)
100
+ args.push("--use-bun");
101
+ if (skipInstall)
102
+ args.push("--skip-install");
103
+ args.push("-e", templateUrl);
104
+ return args;
105
+ }
106
+ export function resolveCreateProjectDirectory(params) {
107
+ const { projectDirectory, stdinIsTTY = process.stdin.isTTY } = params;
108
+ if (projectDirectory)
109
+ return projectDirectory;
110
+ if (!stdinIsTTY)
111
+ return "my-aui-app";
112
+ return undefined;
113
+ }
114
+ function buildPresetAddArgs(presetUrl) {
115
+ return ["shadcn@latest", "add", "--yes", presetUrl];
116
+ }
15
117
  export const create = new Command()
16
118
  .name("create")
17
119
  .description("create a new project")
@@ -19,19 +121,31 @@ export const create = new Command()
19
121
  .usage(`${chalk.green("[project-directory]")} [options]`)
20
122
  .option("-t, --template <template>", `template to use (${templateNames.join(", ")})`)
21
123
  .option("-e, --example <example>", "create from an example (e.g., with-langgraph, with-ai-sdk-v6)")
124
+ .option("-p, --preset <url>", "preset URL from playground (e.g., https://www.assistant-ui.com/playground/init?preset=chatgpt)")
22
125
  .option("--use-npm", "explicitly use npm")
23
126
  .option("--use-pnpm", "explicitly use pnpm")
24
127
  .option("--use-yarn", "explicitly use yarn")
25
128
  .option("--use-bun", "explicitly use bun")
26
129
  .option("--skip-install", "skip installing packages")
27
130
  .action(async (projectDirectory, opts) => {
131
+ const resolvedProjectDirectory = resolveCreateProjectDirectory({
132
+ projectDirectory,
133
+ });
134
+ if (opts.example && opts.preset) {
135
+ logger.error("Cannot use --preset with --example.");
136
+ process.exit(1);
137
+ }
138
+ if (opts.preset && !resolvedProjectDirectory) {
139
+ logger.error("Project directory is required when using --preset.");
140
+ process.exit(1);
141
+ }
28
142
  // Handle --example option
29
143
  if (opts.example) {
30
- if (!projectDirectory) {
144
+ if (!resolvedProjectDirectory) {
31
145
  logger.error("Project directory is required when using --example");
32
146
  process.exit(1);
33
147
  }
34
- await createFromExample(projectDirectory, opts.example, {
148
+ await createFromExample(resolvedProjectDirectory, opts.example, {
35
149
  skipInstall: opts.skipInstall,
36
150
  useNpm: opts.useNpm,
37
151
  usePnpm: opts.usePnpm,
@@ -41,8 +155,14 @@ export const create = new Command()
41
155
  return;
42
156
  }
43
157
  // Handle --template option
44
- const templateName = opts.template ?? "default";
45
- const templateUrl = templates[templateName];
158
+ const templateName = await resolveCreateTemplateName({
159
+ template: opts.template,
160
+ });
161
+ if (!templateName) {
162
+ p.cancel("Project creation cancelled.");
163
+ process.exit(0);
164
+ }
165
+ const templateUrl = templates[templateName]?.url;
46
166
  if (!templateUrl) {
47
167
  logger.error(`Unknown template: ${opts.template}`);
48
168
  logger.info(`Available templates: ${templateNames.join(", ")}`);
@@ -50,28 +170,39 @@ export const create = new Command()
50
170
  }
51
171
  logger.info(`Creating project with template: ${templateName}`);
52
172
  logger.break();
53
- const filteredArgs = process.argv.slice(3).filter((arg, index, arr) => {
54
- return !(arg === "-t" ||
55
- arg === "--template" ||
56
- arr[index - 1] === "-t" ||
57
- arr[index - 1] === "--template");
58
- });
59
- const child = spawn("npx", [`create-next-app@latest`, ...filteredArgs, "-e", templateUrl], {
60
- stdio: "inherit",
61
- });
62
- child.on("error", (error) => {
63
- logger.error(`Failed to create project: ${error.message}`);
64
- process.exit(1);
173
+ const createNextAppArgs = buildCreateNextAppArgs({
174
+ ...(resolvedProjectDirectory
175
+ ? { projectDirectory: resolvedProjectDirectory }
176
+ : {}),
177
+ ...(opts.useNpm ? { useNpm: true } : {}),
178
+ ...(opts.usePnpm ? { usePnpm: true } : {}),
179
+ ...(opts.useYarn ? { useYarn: true } : {}),
180
+ ...(opts.useBun ? { useBun: true } : {}),
181
+ ...(opts.skipInstall ? { skipInstall: true } : {}),
182
+ templateUrl,
65
183
  });
66
- child.on("close", (code) => {
67
- if (code !== 0) {
68
- logger.error(`Project creation failed with code ${code}`);
69
- process.exit(code || 1);
70
- }
71
- else {
184
+ try {
185
+ await runSpawn("npx", createNextAppArgs);
186
+ if (opts.preset) {
187
+ if (!resolvedProjectDirectory) {
188
+ logger.error("Project directory is required when using --preset.");
189
+ process.exit(1);
190
+ }
191
+ logger.info("Applying preset configuration...");
72
192
  logger.break();
73
- logger.success("Project created successfully!");
193
+ await runSpawn("npx", buildPresetAddArgs(opts.preset), path.resolve(process.cwd(), resolvedProjectDirectory));
74
194
  }
75
- });
195
+ logger.break();
196
+ logger.success("Project created successfully!");
197
+ }
198
+ catch (error) {
199
+ if (error instanceof SpawnExitError) {
200
+ logger.error(`Project creation failed with code ${error.code}`);
201
+ process.exit(error.code);
202
+ }
203
+ const message = error instanceof Error ? error.message : String(error);
204
+ logger.error(`Failed to create project: ${message}`);
205
+ process.exit(1);
206
+ }
76
207
  });
77
208
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,+BAA4B;AAC7C,OAAO,EAAE,iBAAiB,EAAE,sCAAmC;AAE/D,8DAA8D;AAC9D,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE;QACP,GAAG,EAAE,sDAAsD;QAC3D,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,qCAAqC;KAC5C;IACD,OAAO,EAAE;QACP,GAAG,EAAE,8DAA8D;QACnE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,2BAA2B;KAClC;IACD,KAAK,EAAE;QACL,GAAG,EAAE,yDAAyD;QAC9D,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,kCAAkC;KACzC;IACD,aAAa,EAAE;QACb,GAAG,EAAE,kEAAkE;QACvE,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,sCAAsC;KAC7C;IACD,SAAS,EAAE;QACT,GAAG,EAAE,gEAAgE;QACrE,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,4BAA4B;KACnC;IACD,GAAG,EAAE;QACH,GAAG,EAAE,0DAA0D;QAC/D,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,sBAAsB;KAC7B;CACO,CAAC;AAGX,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAmB,CAAC;AAE/D,MAAM,qBAAqB,GAItB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK;IAC5B,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI;CAC3B,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAK/C;IACC,MAAM,EACJ,QAAQ,EACR,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAChC,MAAM,GAAG,CAAC,CAAC,MAAM,EACjB,QAAQ,GAAG,CAAC,CAAC,QAAQ,GACtB,GAAG,MAAM,CAAC;IAEX,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAwB,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,OAAO,EAAE,oBAAoB;QAC7B,OAAO,EAAE,qBAAqB;KAC/B,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAwB,CAAC;AAClC,CAAC;AAED,MAAM,cAAe,SAAQ,KAAK;IAChC,IAAI,CAAS;IAEb,YAAY,IAAY;QACtB,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,KAAK,UAAU,QAAQ,CACrB,OAAe,EACf,IAAc,EACd,GAAY;IAEZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,SAAS;YAChB,GAAG;SACJ,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAQtC;IACC,MAAM,EACJ,gBAAgB,EAChB,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,EACX,WAAW,GACZ,GAAG,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,IAAI,gBAAgB;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAG7C;IACC,MAAM,EAAE,gBAAgB,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC;IAEtE,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,YAAY,CAAC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;KAChC,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CAAC,qBAAqB,CAAC;KAC/B,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC;KACxD,MAAM,CACL,2BAA2B,EAC3B,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChD;KACA,MAAM,CACL,yBAAyB,EACzB,+DAA+D,CAChE;KACA,MAAM,CACL,oBAAoB,EACpB,gGAAgG,CACjG;KACA,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE;IACvC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC;QAC7D,gBAAgB;KACjB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,iBAAiB,CAAC,wBAAwB,EAAE,IAAI,CAAC,OAAO,EAAE;YAC9D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC;QACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC;IAEjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,wBAAwB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;QAC/C,GAAG,CAAC,wBAAwB;YAC1B,CAAC,CAAC,EAAE,gBAAgB,EAAE,wBAAwB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,CACZ,KAAK,EACL,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,3 +1,14 @@
1
1
  import { Command } from "commander";
2
+ interface ExistingProjectInitPlan {
3
+ initArgs: string[] | null;
4
+ addArgs: string[];
5
+ }
6
+ export declare function createExistingProjectInitPlan(params: {
7
+ yes: boolean;
8
+ overwrite: boolean;
9
+ registryUrl: string;
10
+ }): ExistingProjectInitPlan;
11
+ export declare function isNonInteractiveShell(stdinIsTTY?: boolean): boolean;
2
12
  export declare const init: Command;
13
+ export {};
3
14
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,IAAI,SAiHb,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAmB5C,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,uBAAuB,CAiB1B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,UAAsB,GAC/B,OAAO,CAET;AA2BD,eAAO,MAAM,IAAI,SAkGb,CAAC"}
@@ -1,26 +1,63 @@
1
- import { Command } from "commander";
1
+ import { Command, Option } from "commander";
2
2
  import { spawn } from "cross-spawn";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { logger } from "../lib/utils/logger.js";
6
- import { hasConfig } from "../lib/utils/config.js";
6
+ import { create } from "./create.js";
7
7
  const DEFAULT_REGISTRY_URL = "https://r.assistant-ui.com/chat/b/ai-sdk-quick-start/json";
8
- // Keep in sync with packages/create-assistant-ui/src/index.ts
9
- const templates = {
10
- default: "https://github.com/assistant-ui/assistant-ui-starter",
11
- minimal: "https://github.com/assistant-ui/assistant-ui-starter-minimal",
12
- cloud: "https://github.com/assistant-ui/assistant-ui-starter-cloud",
13
- langgraph: "https://github.com/assistant-ui/assistant-ui-starter-langgraph",
14
- mcp: "https://github.com/assistant-ui/assistant-ui-starter-mcp",
15
- };
16
- const templateNames = Object.keys(templates);
8
+ class SpawnExitError extends Error {
9
+ code;
10
+ constructor(code) {
11
+ super(`Process exited with code ${code}`);
12
+ this.code = code;
13
+ }
14
+ }
15
+ export function createExistingProjectInitPlan(params) {
16
+ const { yes, overwrite, registryUrl } = params;
17
+ if (!yes) {
18
+ const addArgs = [`shadcn@latest`, "add"];
19
+ if (overwrite)
20
+ addArgs.push("--overwrite");
21
+ addArgs.push(registryUrl);
22
+ return { initArgs: null, addArgs };
23
+ }
24
+ const initArgs = [`shadcn@latest`, "init", "--defaults", "--yes"];
25
+ const addArgs = [`shadcn@latest`, "add", "--yes"];
26
+ if (overwrite)
27
+ addArgs.push("--overwrite");
28
+ addArgs.push(registryUrl);
29
+ return { initArgs, addArgs };
30
+ }
31
+ export function isNonInteractiveShell(stdinIsTTY = process.stdin.isTTY) {
32
+ return !stdinIsTTY;
33
+ }
34
+ async function runSpawn(command, args, cwd) {
35
+ return new Promise((resolve, reject) => {
36
+ const child = spawn(command, args, {
37
+ stdio: "inherit",
38
+ cwd,
39
+ });
40
+ child.on("error", (error) => {
41
+ reject(error);
42
+ });
43
+ child.on("close", (code) => {
44
+ if (code !== 0) {
45
+ reject(new SpawnExitError(code || 1));
46
+ }
47
+ else {
48
+ resolve();
49
+ }
50
+ });
51
+ });
52
+ }
17
53
  export const init = new Command()
18
54
  .name("init")
19
- .description("initialize assistant-ui in a new or existing project")
55
+ .description("initialize assistant-ui in an existing project")
20
56
  .argument("[project-directory]", "directory for the new project")
57
+ .option("-y, --yes", "skip confirmation prompt.", false)
58
+ .option("-o, --overwrite", "overwrite existing files.", false)
21
59
  .option("-c, --cwd <cwd>", "the working directory. defaults to the current directory.", process.cwd())
22
- .option("-p, --preset <url>", "preset URL from playground (e.g., https://www.assistant-ui.com/playground/init?preset=chatgpt)")
23
- .option("-t, --template <template>", `template to use (${templateNames.join(", ")})`, "minimal")
60
+ .addOption(new Option("-p, --preset <url>", "preset URL from playground (forwarded to 'assistant-ui create')").hideHelp())
24
61
  .option("--use-npm", "explicitly use npm")
25
62
  .option("--use-pnpm", "explicitly use pnpm")
26
63
  .option("--use-yarn", "explicitly use yarn")
@@ -28,84 +65,74 @@ export const init = new Command()
28
65
  .option("--skip-install", "skip installing packages")
29
66
  .action(async (projectDirectory, opts) => {
30
67
  const cwd = opts.cwd;
68
+ const presetUrl = opts.preset;
31
69
  const targetDir = projectDirectory
32
70
  ? path.resolve(cwd, projectDirectory)
33
71
  : cwd;
34
- const presetUrl = opts.preset;
35
- if (hasConfig(targetDir)) {
72
+ const componentsConfigPath = path.join(targetDir, "components.json");
73
+ if (!presetUrl && fs.existsSync(componentsConfigPath)) {
36
74
  logger.warn("Project is already initialized.");
37
75
  logger.info("Use 'assistant-ui add' to add more components.");
38
76
  return;
39
77
  }
40
78
  const packageJsonPath = path.join(targetDir, "package.json");
41
79
  const packageJsonExists = fs.existsSync(packageJsonPath);
42
- if (packageJsonExists) {
43
- const registryUrl = presetUrl ?? DEFAULT_REGISTRY_URL;
44
- if (presetUrl) {
45
- logger.info("Initializing assistant-ui with preset configuration...");
80
+ if (presetUrl || !packageJsonExists) {
81
+ if (!presetUrl) {
82
+ logger.info("No existing project found. Running 'create' instead...");
83
+ logger.break();
46
84
  }
47
- else {
48
- logger.info("Initializing assistant-ui in existing project...");
49
- }
50
- logger.break();
51
- const child = spawn("npx", [`shadcn@latest`, "add", registryUrl], {
52
- stdio: "inherit",
53
- cwd: targetDir,
54
- });
55
- child.on("error", (error) => {
56
- logger.error(`Failed to initialize: ${error.message}`);
57
- process.exit(1);
58
- });
59
- child.on("close", (code) => {
60
- if (code !== 0) {
61
- logger.error(`Initialization failed with code ${code}`);
62
- process.exit(code || 1);
63
- }
64
- else {
65
- logger.break();
66
- logger.success("Project initialized successfully!");
67
- logger.info("You can now add more components with 'assistant-ui add'");
68
- }
69
- });
70
- }
71
- else {
72
- const templateName = opts.template;
73
- const templateUrl = templates[templateName];
74
- if (!templateUrl) {
75
- logger.error(`Unknown template: ${opts.template}`);
76
- logger.info(`Available templates: ${templateNames.join(", ")}`);
77
- process.exit(1);
78
- }
79
- logger.info(`Creating a new assistant-ui project (template: ${templateName})...`);
80
- logger.break();
81
- const cnaArgs = ["create-next-app@latest"];
82
- cnaArgs.push(projectDirectory || ".");
83
- cnaArgs.push("-e", templateUrl);
85
+ const createArgs = [];
86
+ if (projectDirectory)
87
+ createArgs.push(projectDirectory);
88
+ if (presetUrl)
89
+ createArgs.push("--preset", presetUrl);
84
90
  if (opts.useNpm)
85
- cnaArgs.push("--use-npm");
91
+ createArgs.push("--use-npm");
86
92
  if (opts.usePnpm)
87
- cnaArgs.push("--use-pnpm");
93
+ createArgs.push("--use-pnpm");
88
94
  if (opts.useYarn)
89
- cnaArgs.push("--use-yarn");
95
+ createArgs.push("--use-yarn");
90
96
  if (opts.useBun)
91
- cnaArgs.push("--use-bun");
97
+ createArgs.push("--use-bun");
92
98
  if (opts.skipInstall)
93
- cnaArgs.push("--skip-install");
94
- const child = spawn("npx", cnaArgs, { stdio: "inherit", cwd });
95
- child.on("error", (error) => {
96
- logger.error(`Failed to create project: ${error.message}`);
97
- process.exit(1);
98
- });
99
- child.on("close", (code) => {
100
- if (code !== 0) {
101
- logger.error(`Project creation failed with code ${code}`);
102
- process.exit(code || 1);
103
- }
104
- else {
105
- logger.break();
106
- logger.success("Project created successfully!");
107
- }
99
+ createArgs.push("--skip-install");
100
+ await create.parseAsync(createArgs, { from: "user" });
101
+ return;
102
+ }
103
+ const registryUrl = DEFAULT_REGISTRY_URL;
104
+ logger.info("Initializing assistant-ui in existing project...");
105
+ logger.break();
106
+ if (!opts.yes && isNonInteractiveShell()) {
107
+ logger.error([
108
+ "Detected a non-interactive shell, but 'assistant-ui init' needs interactive prompts by default.",
109
+ "To run this in CI/agent mode, re-run with '--yes' so shadcn initialization and component install run non-interactively.",
110
+ "Example: assistant-ui init --yes",
111
+ ].join("\n"));
112
+ process.exit(1);
113
+ }
114
+ try {
115
+ const { initArgs, addArgs } = createExistingProjectInitPlan({
116
+ yes: opts.yes,
117
+ overwrite: opts.overwrite,
118
+ registryUrl,
108
119
  });
120
+ if (initArgs) {
121
+ await runSpawn("npx", initArgs, targetDir);
122
+ }
123
+ await runSpawn("npx", addArgs, targetDir);
124
+ logger.break();
125
+ logger.success("Project initialized successfully!");
126
+ logger.info("You can now add more components with 'assistant-ui add'");
127
+ }
128
+ catch (error) {
129
+ if (error instanceof SpawnExitError) {
130
+ logger.error(`Initialization failed with code ${error.code}`);
131
+ process.exit(error.code);
132
+ }
133
+ const message = error instanceof Error ? error.message : String(error);
134
+ logger.error(`Failed to initialize: ${message}`);
135
+ process.exit(1);
109
136
  }
110
137
  });
111
138
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}