assistant-ui 0.0.84 → 0.0.86

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
@@ -91,6 +91,47 @@ The `upgrade` command runs codemods to transform your code and prompts to instal
91
91
  npx assistant-ui@latest upgrade
92
92
  ```
93
93
 
94
+ ## info
95
+
96
+ Use the `info` command to print your environment and package versions for bug reports.
97
+
98
+ ```bash
99
+ npx assistant-ui info
100
+ ```
101
+
102
+ This command collects and prints:
103
+ - OS, Node.js version, package manager, and framework
104
+ - All installed `@assistant-ui/*` and `assistant-*` package versions
105
+ - Key ecosystem dependency versions (React, Next.js, AI SDK, etc.)
106
+ - Peer dependency warnings if any mismatches are detected
107
+
108
+ **Example output:**
109
+
110
+ ```
111
+ Environment:
112
+ OS: macOS 15.3 (arm64)
113
+ Node.js: v22.14.0
114
+ Package Manager: pnpm 10.32.1
115
+ Framework: Next.js 15.3.1
116
+
117
+ Packages:
118
+ @assistant-ui/react 0.12.15
119
+ @assistant-ui/react-ai-sdk 1.3.12
120
+ @assistant-ui/react-markdown 0.3.8
121
+ assistant-stream 0.2.14
122
+
123
+ Ecosystem:
124
+ react 19.1.0
125
+ react-dom 19.1.0
126
+ next 15.3.1
127
+ ai 6.0.120
128
+ ```
129
+
130
+ The output includes a copy-pasteable markdown block that you can paste directly into a bug report.
131
+
132
+ **Options:**
133
+ - `-c, --cwd <cwd>` - the working directory. defaults to the current directory.
134
+
94
135
  ## Documentation
95
136
 
96
137
  Visit https://assistant-ui.com/docs/cli to view the full documentation.
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const info: Command;
3
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiapC,eAAO,MAAM,IAAI,SAqCb,CAAC"}
@@ -0,0 +1,366 @@
1
+ import { Command } from "commander";
2
+ import * as fs from "node:fs";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { spawnSync } from "node:child_process";
6
+ import chalk from "chalk";
7
+ import { detect } from "detect-package-manager";
8
+ const ASSISTANT_UI_PACKAGES = [
9
+ // Distribution
10
+ "@assistant-ui/react",
11
+ "@assistant-ui/react-native",
12
+ "@assistant-ui/react-ink",
13
+ // Core (should not be installed directly)
14
+ "@assistant-ui/core",
15
+ "@assistant-ui/store",
16
+ "@assistant-ui/tap",
17
+ // Streaming & Cloud
18
+ "assistant-stream",
19
+ "assistant-cloud",
20
+ "@assistant-ui/cloud-ai-sdk",
21
+ // Adapters
22
+ "@assistant-ui/react-ai-sdk",
23
+ "@assistant-ui/react-langgraph",
24
+ "@assistant-ui/react-ag-ui",
25
+ "@assistant-ui/react-a2a",
26
+ "@assistant-ui/react-data-stream",
27
+ "@assistant-ui/react-google-adk",
28
+ // UI / Rendering
29
+ "@assistant-ui/react-markdown",
30
+ "@assistant-ui/react-streamdown",
31
+ "@assistant-ui/react-lexical",
32
+ "@assistant-ui/react-syntax-highlighter",
33
+ "@assistant-ui/react-hook-form",
34
+ // Observability & DevTools
35
+ "@assistant-ui/react-o11y",
36
+ "@assistant-ui/react-devtools",
37
+ ];
38
+ const ECOSYSTEM_PACKAGES = [
39
+ "react",
40
+ "react-dom",
41
+ "react-native",
42
+ "next",
43
+ "vite",
44
+ "expo",
45
+ "ai",
46
+ "zod",
47
+ "zustand",
48
+ "typescript",
49
+ ];
50
+ // Packages that users should NOT install directly — they are internal
51
+ // dependencies pulled in automatically by distribution packages.
52
+ const SHOULD_NOT_DIRECT_INSTALL = new Set([
53
+ "@assistant-ui/core",
54
+ "@assistant-ui/store",
55
+ "@assistant-ui/tap",
56
+ ]);
57
+ // ---------------------------------------------------------------------------
58
+ // Helpers
59
+ // ---------------------------------------------------------------------------
60
+ function resolvePackageJson(pkg, cwd) {
61
+ let dir = cwd;
62
+ const root = path.parse(dir).root;
63
+ while (dir !== root) {
64
+ const candidate = path.join(dir, "node_modules", ...pkg.split("/"), "package.json");
65
+ if (fs.existsSync(candidate))
66
+ return candidate;
67
+ dir = path.dirname(dir);
68
+ }
69
+ return null;
70
+ }
71
+ function getInstalledVersion(pkg, cwd) {
72
+ try {
73
+ const pkgJsonPath = resolvePackageJson(pkg, cwd);
74
+ if (pkgJsonPath) {
75
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
76
+ return pkgJson.version ?? null;
77
+ }
78
+ }
79
+ catch {
80
+ // ignore
81
+ }
82
+ return null;
83
+ }
84
+ function findWorkspaceRoot(cwd) {
85
+ let dir = path.dirname(cwd);
86
+ const root = path.parse(dir).root;
87
+ while (dir !== root) {
88
+ if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml")))
89
+ return dir;
90
+ const pkgPath = path.join(dir, "package.json");
91
+ if (fs.existsSync(pkgPath)) {
92
+ try {
93
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
94
+ if (pkg.workspaces)
95
+ return dir;
96
+ }
97
+ catch {
98
+ // ignore
99
+ }
100
+ }
101
+ dir = path.dirname(dir);
102
+ }
103
+ return null;
104
+ }
105
+ function readProjectDeps(projectPkg) {
106
+ return {
107
+ ...(projectPkg.dependencies ?? {}),
108
+ ...(projectPkg.devDependencies ?? {}),
109
+ };
110
+ }
111
+ function getSpecifiedRange(pkg, projectPkg) {
112
+ const deps = (projectPkg.dependencies ?? {});
113
+ const devDeps = (projectPkg.devDependencies ?? {});
114
+ return deps[pkg] ?? devDeps[pkg] ?? null;
115
+ }
116
+ function getPeerDeps(pkg, cwd) {
117
+ try {
118
+ const pkgJsonPath = resolvePackageJson(pkg, cwd);
119
+ if (pkgJsonPath) {
120
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
121
+ return pkgJson.peerDependencies ?? null;
122
+ }
123
+ }
124
+ catch {
125
+ // ignore
126
+ }
127
+ return null;
128
+ }
129
+ function detectFramework(projectPkg, cwd) {
130
+ const deps = readProjectDeps(projectPkg);
131
+ if (deps["next"]) {
132
+ const v = getInstalledVersion("next", cwd);
133
+ return `Next.js ${v ?? deps["next"]}`;
134
+ }
135
+ if (deps["expo"]) {
136
+ const v = getInstalledVersion("expo", cwd);
137
+ return `Expo ${v ?? deps["expo"]}`;
138
+ }
139
+ if (deps["vite"]) {
140
+ const v = getInstalledVersion("vite", cwd);
141
+ return `Vite ${v ?? deps["vite"]}`;
142
+ }
143
+ if (deps["@remix-run/react"] || deps["remix"])
144
+ return "Remix";
145
+ if (deps["gatsby"])
146
+ return "Gatsby";
147
+ if (deps["astro"])
148
+ return "Astro";
149
+ return "Unknown";
150
+ }
151
+ function getOsInfo() {
152
+ const platform = os.platform();
153
+ const arch = os.arch();
154
+ const release = os.release();
155
+ switch (platform) {
156
+ case "darwin": {
157
+ const result = spawnSync("sw_vers", ["-productVersion"], {
158
+ encoding: "utf8",
159
+ });
160
+ const macVer = result.stdout?.trim();
161
+ return macVer
162
+ ? `macOS ${macVer} (${arch})`
163
+ : `macOS ${release} (${arch})`;
164
+ }
165
+ case "win32":
166
+ return `Windows ${release} (${arch})`;
167
+ case "linux":
168
+ return `Linux ${release} (${arch})`;
169
+ default:
170
+ return `${platform} ${release} (${arch})`;
171
+ }
172
+ }
173
+ async function getPackageManagerInfo(cwd) {
174
+ const pm = await detect({ cwd });
175
+ const result = spawnSync(pm, ["--version"], {
176
+ encoding: "utf8",
177
+ cwd,
178
+ });
179
+ const version = result.stdout?.trim() ?? "unknown";
180
+ return { name: pm, version };
181
+ }
182
+ function satisfiesRange(version, range) {
183
+ if (range === "*" || range === "any")
184
+ return true;
185
+ const clean = (v) => v.replace(/^[^\d]*/, "");
186
+ const major = (v) => parseInt(clean(v).split(".")[0], 10);
187
+ if (range.includes("||")) {
188
+ return range
189
+ .split("||")
190
+ .some((part) => satisfiesRange(version, part.trim()));
191
+ }
192
+ const rangeMajor = major(range);
193
+ const versionMajor = major(version);
194
+ if (Number.isNaN(rangeMajor) || Number.isNaN(versionMajor))
195
+ return true;
196
+ if (range.startsWith("^"))
197
+ return versionMajor >= rangeMajor;
198
+ if (range.startsWith(">="))
199
+ return versionMajor >= rangeMajor;
200
+ return versionMajor >= rangeMajor;
201
+ }
202
+ function collectPackages(names, cwd, projectPkg) {
203
+ const result = [];
204
+ const deps = readProjectDeps(projectPkg);
205
+ for (const name of names) {
206
+ const version = getInstalledVersion(name, cwd);
207
+ if (version) {
208
+ result.push({
209
+ name,
210
+ version,
211
+ range: getSpecifiedRange(name, projectPkg),
212
+ });
213
+ }
214
+ else {
215
+ // Fallback: no node_modules, show range from package.json
216
+ const range = deps[name];
217
+ if (range && !range.startsWith("workspace:")) {
218
+ result.push({ name, version: `${range} (not installed)`, range });
219
+ }
220
+ }
221
+ }
222
+ return result;
223
+ }
224
+ function collectWarnings(packages, cwd, projectPkg) {
225
+ const warnings = [];
226
+ const deps = readProjectDeps(projectPkg);
227
+ // Check peer dependency mismatches
228
+ for (const pkg of packages) {
229
+ const peerDeps = getPeerDeps(pkg.name, cwd);
230
+ if (!peerDeps)
231
+ continue;
232
+ for (const [peerName, peerRange] of Object.entries(peerDeps)) {
233
+ const peerVersion = getInstalledVersion(peerName, cwd);
234
+ if (!peerVersion)
235
+ continue;
236
+ if (!satisfiesRange(peerVersion, peerRange)) {
237
+ warnings.push(`${pkg.name} requires ${peerName} ${peerRange}, found ${peerVersion}`);
238
+ }
239
+ }
240
+ }
241
+ // Check for direct install of internal packages
242
+ for (const name of SHOULD_NOT_DIRECT_INSTALL) {
243
+ if (deps[name]) {
244
+ warnings.push(`${name} should not be installed directly — it is an internal dependency`);
245
+ }
246
+ }
247
+ return warnings;
248
+ }
249
+ async function collectInfo(cwd, projectPkg) {
250
+ const pm = await getPackageManagerInfo(cwd);
251
+ const packages = collectPackages(ASSISTANT_UI_PACKAGES, cwd, projectPkg);
252
+ const ecosystem = collectPackages(ECOSYSTEM_PACKAGES, cwd, projectPkg);
253
+ const warnings = collectWarnings(packages, cwd, projectPkg);
254
+ return {
255
+ os: getOsInfo(),
256
+ node: process.version,
257
+ pm,
258
+ framework: detectFramework(projectPkg, cwd),
259
+ isMonorepo: findWorkspaceRoot(cwd) !== null,
260
+ packages,
261
+ ecosystem,
262
+ warnings,
263
+ };
264
+ }
265
+ // ---------------------------------------------------------------------------
266
+ // Rendering
267
+ // ---------------------------------------------------------------------------
268
+ function formatSection(label, items) {
269
+ if (items.length === 0)
270
+ return [];
271
+ const lines = [];
272
+ lines.push("");
273
+ lines.push(`${label}:`);
274
+ const maxLen = Math.max(...items.map((p) => p.name.length));
275
+ for (const pkg of items) {
276
+ lines.push(` ${pkg.name.padEnd(maxLen)} ${pkg.version}`);
277
+ }
278
+ return lines;
279
+ }
280
+ function renderPlain(data) {
281
+ const lines = [];
282
+ lines.push("Environment:");
283
+ lines.push(` OS: ${data.os}`);
284
+ lines.push(` Node.js: ${data.node}`);
285
+ lines.push(` Package Manager: ${data.pm.name} ${data.pm.version}`);
286
+ lines.push(` Framework: ${data.framework}`);
287
+ if (data.isMonorepo) {
288
+ lines.push(` Monorepo: yes`);
289
+ }
290
+ lines.push(...formatSection("Packages", data.packages));
291
+ lines.push(...formatSection("Ecosystem", data.ecosystem));
292
+ if (data.warnings.length > 0) {
293
+ lines.push("");
294
+ lines.push("Warnings:");
295
+ for (const w of data.warnings) {
296
+ lines.push(` ! ${w}`);
297
+ }
298
+ }
299
+ return lines;
300
+ }
301
+ function renderColored(data) {
302
+ const lines = [];
303
+ lines.push(chalk.bold("Environment:"));
304
+ lines.push(` OS: ${data.os}`);
305
+ lines.push(` Node.js: ${data.node}`);
306
+ lines.push(` Package Manager: ${data.pm.name} ${data.pm.version}`);
307
+ lines.push(` Framework: ${data.framework}`);
308
+ if (data.isMonorepo) {
309
+ lines.push(` Monorepo: yes`);
310
+ }
311
+ if (data.packages.length > 0) {
312
+ const section = formatSection("Packages", data.packages);
313
+ section[0] = "";
314
+ section[1] = chalk.bold("Packages:");
315
+ lines.push(...section);
316
+ }
317
+ else {
318
+ lines.push("");
319
+ lines.push(chalk.yellow(" No assistant-ui packages found."));
320
+ }
321
+ if (data.ecosystem.length > 0) {
322
+ const section = formatSection("Ecosystem", data.ecosystem);
323
+ section[0] = "";
324
+ section[1] = chalk.bold("Ecosystem:");
325
+ lines.push(...section);
326
+ }
327
+ if (data.warnings.length > 0) {
328
+ lines.push("");
329
+ lines.push(chalk.yellow.bold("Warnings:"));
330
+ for (const w of data.warnings) {
331
+ lines.push(chalk.yellow(` ! ${w}`));
332
+ }
333
+ }
334
+ return lines;
335
+ }
336
+ // ---------------------------------------------------------------------------
337
+ // Command
338
+ // ---------------------------------------------------------------------------
339
+ export const info = new Command()
340
+ .name("info")
341
+ .description("Print environment and package information for bug reports.")
342
+ .option("-c, --cwd <cwd>", "the working directory. defaults to the current directory.", process.cwd())
343
+ .action(async (opts) => {
344
+ const cwd = path.resolve(opts.cwd);
345
+ const packageJsonPath = path.join(cwd, "package.json");
346
+ if (!fs.existsSync(packageJsonPath)) {
347
+ console.error(chalk.red("No package.json found in the current directory."));
348
+ process.exit(1);
349
+ }
350
+ const projectPkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
351
+ const data = await collectInfo(cwd, projectPkg);
352
+ // Colored output for terminal
353
+ console.log("");
354
+ for (const line of renderColored(data)) {
355
+ console.log(line);
356
+ }
357
+ console.log("");
358
+ // Copyable plain text
359
+ const plain = renderPlain(data);
360
+ const block = ["```", ...plain, "```"].join("\n");
361
+ console.log(chalk.dim("— Copy the text below into your bug report —"));
362
+ console.log("");
363
+ console.log(block);
364
+ console.log("");
365
+ });
366
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import { init } from "./commands/init.js";
7
7
  import { update } from "./commands/update.js";
8
8
  import { mcp } from "./commands/mcp.js";
9
9
  import { agent } from "./commands/agent.js";
10
+ import { info } from "./commands/info.js";
10
11
  process.on("SIGINT", () => process.exit(0));
11
12
  process.on("SIGTERM", () => process.exit(0));
12
13
  function main() {
@@ -21,6 +22,7 @@ function main() {
21
22
  program.addCommand(upgradeCommand);
22
23
  program.addCommand(update);
23
24
  program.addCommand(agent);
25
+ program.addCommand(info);
24
26
  program.parse();
25
27
  }
26
28
  main();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,6BAA0B;AAC3C,OAAO,EAAE,GAAG,EAAE,0BAAuB;AACrC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA2B;AACpE,OAAO,EAAE,IAAI,EAAE,2BAAwB;AACvC,OAAO,EAAE,MAAM,EAAE,6BAA0B;AAC3C,OAAO,EAAE,GAAG,EAAE,0BAAuB;AACrC,OAAO,EAAE,KAAK,EAAE,4BAAyB;AAEzC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,cAAc,CAAC;SACpB,WAAW,CAAC,iDAAiD,CAAC,CAAC;IAElE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAE1B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,6BAA0B;AAC3C,OAAO,EAAE,GAAG,EAAE,0BAAuB;AACrC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA2B;AACpE,OAAO,EAAE,IAAI,EAAE,2BAAwB;AACvC,OAAO,EAAE,MAAM,EAAE,6BAA0B;AAC3C,OAAO,EAAE,GAAG,EAAE,0BAAuB;AACrC,OAAO,EAAE,KAAK,EAAE,4BAAyB;AACzC,OAAO,EAAE,IAAI,EAAE,2BAAwB;AAEvC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,cAAc,CAAC;SACpB,WAAW,CAAC,iDAAiD,CAAC,CAAC;IAElE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEzB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-ui",
3
- "version": "0.0.84",
3
+ "version": "0.0.86",
4
4
  "description": "CLI for assistant-ui",
5
5
  "keywords": [
6
6
  "cli",
@@ -41,11 +41,11 @@
41
41
  "devDependencies": {
42
42
  "@types/cli-progress": "^3.11.6",
43
43
  "@types/cross-spawn": "^6.0.6",
44
- "@types/debug": "^4.1.12",
44
+ "@types/debug": "^4.1.13",
45
45
  "@types/jscodeshift": "^17.3.0",
46
46
  "@types/node": "^25.5.0",
47
- "@vitest/coverage-v8": "^4.1.0",
48
- "vitest": "^4.1.0",
47
+ "@vitest/coverage-v8": "^4.1.1",
48
+ "vitest": "^4.1.1",
49
49
  "@assistant-ui/x-buildutils": "0.0.3"
50
50
  },
51
51
  "publishConfig": {
@@ -0,0 +1,455 @@
1
+ import { Command } from "commander";
2
+ import * as fs from "node:fs";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { spawnSync } from "node:child_process";
6
+ import chalk from "chalk";
7
+ import { detect } from "detect-package-manager";
8
+
9
+ const ASSISTANT_UI_PACKAGES = [
10
+ // Distribution
11
+ "@assistant-ui/react",
12
+ "@assistant-ui/react-native",
13
+ "@assistant-ui/react-ink",
14
+ // Core (should not be installed directly)
15
+ "@assistant-ui/core",
16
+ "@assistant-ui/store",
17
+ "@assistant-ui/tap",
18
+ // Streaming & Cloud
19
+ "assistant-stream",
20
+ "assistant-cloud",
21
+ "@assistant-ui/cloud-ai-sdk",
22
+ // Adapters
23
+ "@assistant-ui/react-ai-sdk",
24
+ "@assistant-ui/react-langgraph",
25
+ "@assistant-ui/react-ag-ui",
26
+ "@assistant-ui/react-a2a",
27
+ "@assistant-ui/react-data-stream",
28
+ "@assistant-ui/react-google-adk",
29
+ // UI / Rendering
30
+ "@assistant-ui/react-markdown",
31
+ "@assistant-ui/react-streamdown",
32
+ "@assistant-ui/react-lexical",
33
+ "@assistant-ui/react-syntax-highlighter",
34
+ "@assistant-ui/react-hook-form",
35
+ // Observability & DevTools
36
+ "@assistant-ui/react-o11y",
37
+ "@assistant-ui/react-devtools",
38
+ ];
39
+
40
+ const ECOSYSTEM_PACKAGES = [
41
+ "react",
42
+ "react-dom",
43
+ "react-native",
44
+ "next",
45
+ "vite",
46
+ "expo",
47
+ "ai",
48
+ "zod",
49
+ "zustand",
50
+ "typescript",
51
+ ];
52
+
53
+ // Packages that users should NOT install directly — they are internal
54
+ // dependencies pulled in automatically by distribution packages.
55
+ const SHOULD_NOT_DIRECT_INSTALL = new Set([
56
+ "@assistant-ui/core",
57
+ "@assistant-ui/store",
58
+ "@assistant-ui/tap",
59
+ ]);
60
+
61
+ // ---------------------------------------------------------------------------
62
+ // Helpers
63
+ // ---------------------------------------------------------------------------
64
+
65
+ function resolvePackageJson(pkg: string, cwd: string): string | null {
66
+ let dir = cwd;
67
+ const root = path.parse(dir).root;
68
+ while (dir !== root) {
69
+ const candidate = path.join(
70
+ dir,
71
+ "node_modules",
72
+ ...pkg.split("/"),
73
+ "package.json",
74
+ );
75
+ if (fs.existsSync(candidate)) return candidate;
76
+ dir = path.dirname(dir);
77
+ }
78
+ return null;
79
+ }
80
+
81
+ function getInstalledVersion(pkg: string, cwd: string): string | null {
82
+ try {
83
+ const pkgJsonPath = resolvePackageJson(pkg, cwd);
84
+ if (pkgJsonPath) {
85
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
86
+ return pkgJson.version ?? null;
87
+ }
88
+ } catch {
89
+ // ignore
90
+ }
91
+ return null;
92
+ }
93
+
94
+ function findWorkspaceRoot(cwd: string): string | null {
95
+ let dir = path.dirname(cwd);
96
+ const root = path.parse(dir).root;
97
+ while (dir !== root) {
98
+ if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) return dir;
99
+ const pkgPath = path.join(dir, "package.json");
100
+ if (fs.existsSync(pkgPath)) {
101
+ try {
102
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
103
+ if (pkg.workspaces) return dir;
104
+ } catch {
105
+ // ignore
106
+ }
107
+ }
108
+ dir = path.dirname(dir);
109
+ }
110
+ return null;
111
+ }
112
+
113
+ function readProjectDeps(
114
+ projectPkg: Record<string, unknown>,
115
+ ): Record<string, string> {
116
+ return {
117
+ ...((projectPkg.dependencies ?? {}) as Record<string, string>),
118
+ ...((projectPkg.devDependencies ?? {}) as Record<string, string>),
119
+ };
120
+ }
121
+
122
+ function getSpecifiedRange(
123
+ pkg: string,
124
+ projectPkg: Record<string, unknown>,
125
+ ): string | null {
126
+ const deps = (projectPkg.dependencies ?? {}) as Record<string, string>;
127
+ const devDeps = (projectPkg.devDependencies ?? {}) as Record<string, string>;
128
+ return deps[pkg] ?? devDeps[pkg] ?? null;
129
+ }
130
+
131
+ function getPeerDeps(pkg: string, cwd: string): Record<string, string> | null {
132
+ try {
133
+ const pkgJsonPath = resolvePackageJson(pkg, cwd);
134
+ if (pkgJsonPath) {
135
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
136
+ return (pkgJson.peerDependencies as Record<string, string>) ?? null;
137
+ }
138
+ } catch {
139
+ // ignore
140
+ }
141
+ return null;
142
+ }
143
+
144
+ function detectFramework(
145
+ projectPkg: Record<string, unknown>,
146
+ cwd: string,
147
+ ): string {
148
+ const deps = readProjectDeps(projectPkg);
149
+
150
+ if (deps["next"]) {
151
+ const v = getInstalledVersion("next", cwd);
152
+ return `Next.js ${v ?? deps["next"]}`;
153
+ }
154
+ if (deps["expo"]) {
155
+ const v = getInstalledVersion("expo", cwd);
156
+ return `Expo ${v ?? deps["expo"]}`;
157
+ }
158
+ if (deps["vite"]) {
159
+ const v = getInstalledVersion("vite", cwd);
160
+ return `Vite ${v ?? deps["vite"]}`;
161
+ }
162
+ if (deps["@remix-run/react"] || deps["remix"]) return "Remix";
163
+ if (deps["gatsby"]) return "Gatsby";
164
+ if (deps["astro"]) return "Astro";
165
+ return "Unknown";
166
+ }
167
+
168
+ function getOsInfo(): string {
169
+ const platform = os.platform();
170
+ const arch = os.arch();
171
+ const release = os.release();
172
+
173
+ switch (platform) {
174
+ case "darwin": {
175
+ const result = spawnSync("sw_vers", ["-productVersion"], {
176
+ encoding: "utf8",
177
+ });
178
+ const macVer = result.stdout?.trim();
179
+ return macVer
180
+ ? `macOS ${macVer} (${arch})`
181
+ : `macOS ${release} (${arch})`;
182
+ }
183
+ case "win32":
184
+ return `Windows ${release} (${arch})`;
185
+ case "linux":
186
+ return `Linux ${release} (${arch})`;
187
+ default:
188
+ return `${platform} ${release} (${arch})`;
189
+ }
190
+ }
191
+
192
+ async function getPackageManagerInfo(
193
+ cwd: string,
194
+ ): Promise<{ name: string; version: string }> {
195
+ const pm = await detect({ cwd });
196
+ const result = spawnSync(pm, ["--version"], {
197
+ encoding: "utf8",
198
+ cwd,
199
+ });
200
+ const version = result.stdout?.trim() ?? "unknown";
201
+ return { name: pm, version };
202
+ }
203
+
204
+ function satisfiesRange(version: string, range: string): boolean {
205
+ if (range === "*" || range === "any") return true;
206
+
207
+ const clean = (v: string) => v.replace(/^[^\d]*/, "");
208
+ const major = (v: string) => parseInt(clean(v).split(".")[0]!, 10);
209
+
210
+ if (range.includes("||")) {
211
+ return range
212
+ .split("||")
213
+ .some((part) => satisfiesRange(version, part.trim()));
214
+ }
215
+
216
+ const rangeMajor = major(range);
217
+ const versionMajor = major(version);
218
+
219
+ if (Number.isNaN(rangeMajor) || Number.isNaN(versionMajor)) return true;
220
+
221
+ if (range.startsWith("^")) return versionMajor >= rangeMajor;
222
+ if (range.startsWith(">=")) return versionMajor >= rangeMajor;
223
+
224
+ return versionMajor >= rangeMajor;
225
+ }
226
+
227
+ // ---------------------------------------------------------------------------
228
+ // Data collection
229
+ // ---------------------------------------------------------------------------
230
+
231
+ interface PackageInfo {
232
+ name: string;
233
+ version: string;
234
+ range: string | null;
235
+ }
236
+
237
+ interface InfoData {
238
+ os: string;
239
+ node: string;
240
+ pm: { name: string; version: string };
241
+ framework: string;
242
+ isMonorepo: boolean;
243
+ packages: PackageInfo[];
244
+ ecosystem: PackageInfo[];
245
+ warnings: string[];
246
+ }
247
+
248
+ function collectPackages(
249
+ names: string[],
250
+ cwd: string,
251
+ projectPkg: Record<string, unknown>,
252
+ ): PackageInfo[] {
253
+ const result: PackageInfo[] = [];
254
+ const deps = readProjectDeps(projectPkg);
255
+
256
+ for (const name of names) {
257
+ const version = getInstalledVersion(name, cwd);
258
+ if (version) {
259
+ result.push({
260
+ name,
261
+ version,
262
+ range: getSpecifiedRange(name, projectPkg),
263
+ });
264
+ } else {
265
+ // Fallback: no node_modules, show range from package.json
266
+ const range = deps[name];
267
+ if (range && !range.startsWith("workspace:")) {
268
+ result.push({ name, version: `${range} (not installed)`, range });
269
+ }
270
+ }
271
+ }
272
+ return result;
273
+ }
274
+
275
+ function collectWarnings(
276
+ packages: PackageInfo[],
277
+ cwd: string,
278
+ projectPkg: Record<string, unknown>,
279
+ ): string[] {
280
+ const warnings: string[] = [];
281
+ const deps = readProjectDeps(projectPkg);
282
+
283
+ // Check peer dependency mismatches
284
+ for (const pkg of packages) {
285
+ const peerDeps = getPeerDeps(pkg.name, cwd);
286
+ if (!peerDeps) continue;
287
+
288
+ for (const [peerName, peerRange] of Object.entries(peerDeps)) {
289
+ const peerVersion = getInstalledVersion(peerName, cwd);
290
+ if (!peerVersion) continue;
291
+ if (!satisfiesRange(peerVersion, peerRange)) {
292
+ warnings.push(
293
+ `${pkg.name} requires ${peerName} ${peerRange}, found ${peerVersion}`,
294
+ );
295
+ }
296
+ }
297
+ }
298
+
299
+ // Check for direct install of internal packages
300
+ for (const name of SHOULD_NOT_DIRECT_INSTALL) {
301
+ if (deps[name]) {
302
+ warnings.push(
303
+ `${name} should not be installed directly — it is an internal dependency`,
304
+ );
305
+ }
306
+ }
307
+
308
+ return warnings;
309
+ }
310
+
311
+ async function collectInfo(
312
+ cwd: string,
313
+ projectPkg: Record<string, unknown>,
314
+ ): Promise<InfoData> {
315
+ const pm = await getPackageManagerInfo(cwd);
316
+ const packages = collectPackages(ASSISTANT_UI_PACKAGES, cwd, projectPkg);
317
+ const ecosystem = collectPackages(ECOSYSTEM_PACKAGES, cwd, projectPkg);
318
+ const warnings = collectWarnings(packages, cwd, projectPkg);
319
+
320
+ return {
321
+ os: getOsInfo(),
322
+ node: process.version,
323
+ pm,
324
+ framework: detectFramework(projectPkg, cwd),
325
+ isMonorepo: findWorkspaceRoot(cwd) !== null,
326
+ packages,
327
+ ecosystem,
328
+ warnings,
329
+ };
330
+ }
331
+
332
+ // ---------------------------------------------------------------------------
333
+ // Rendering
334
+ // ---------------------------------------------------------------------------
335
+
336
+ function formatSection(label: string, items: PackageInfo[]): string[] {
337
+ if (items.length === 0) return [];
338
+ const lines: string[] = [];
339
+ lines.push("");
340
+ lines.push(`${label}:`);
341
+ const maxLen = Math.max(...items.map((p) => p.name.length));
342
+ for (const pkg of items) {
343
+ lines.push(` ${pkg.name.padEnd(maxLen)} ${pkg.version}`);
344
+ }
345
+ return lines;
346
+ }
347
+
348
+ function renderPlain(data: InfoData): string[] {
349
+ const lines: string[] = [];
350
+
351
+ lines.push("Environment:");
352
+ lines.push(` OS: ${data.os}`);
353
+ lines.push(` Node.js: ${data.node}`);
354
+ lines.push(` Package Manager: ${data.pm.name} ${data.pm.version}`);
355
+ lines.push(` Framework: ${data.framework}`);
356
+ if (data.isMonorepo) {
357
+ lines.push(` Monorepo: yes`);
358
+ }
359
+
360
+ lines.push(...formatSection("Packages", data.packages));
361
+ lines.push(...formatSection("Ecosystem", data.ecosystem));
362
+
363
+ if (data.warnings.length > 0) {
364
+ lines.push("");
365
+ lines.push("Warnings:");
366
+ for (const w of data.warnings) {
367
+ lines.push(` ! ${w}`);
368
+ }
369
+ }
370
+
371
+ return lines;
372
+ }
373
+
374
+ function renderColored(data: InfoData): string[] {
375
+ const lines: string[] = [];
376
+
377
+ lines.push(chalk.bold("Environment:"));
378
+ lines.push(` OS: ${data.os}`);
379
+ lines.push(` Node.js: ${data.node}`);
380
+ lines.push(` Package Manager: ${data.pm.name} ${data.pm.version}`);
381
+ lines.push(` Framework: ${data.framework}`);
382
+ if (data.isMonorepo) {
383
+ lines.push(` Monorepo: yes`);
384
+ }
385
+
386
+ if (data.packages.length > 0) {
387
+ const section = formatSection("Packages", data.packages);
388
+ section[0] = "";
389
+ section[1] = chalk.bold("Packages:");
390
+ lines.push(...section);
391
+ } else {
392
+ lines.push("");
393
+ lines.push(chalk.yellow(" No assistant-ui packages found."));
394
+ }
395
+
396
+ if (data.ecosystem.length > 0) {
397
+ const section = formatSection("Ecosystem", data.ecosystem);
398
+ section[0] = "";
399
+ section[1] = chalk.bold("Ecosystem:");
400
+ lines.push(...section);
401
+ }
402
+
403
+ if (data.warnings.length > 0) {
404
+ lines.push("");
405
+ lines.push(chalk.yellow.bold("Warnings:"));
406
+ for (const w of data.warnings) {
407
+ lines.push(chalk.yellow(` ! ${w}`));
408
+ }
409
+ }
410
+
411
+ return lines;
412
+ }
413
+
414
+ // ---------------------------------------------------------------------------
415
+ // Command
416
+ // ---------------------------------------------------------------------------
417
+
418
+ export const info = new Command()
419
+ .name("info")
420
+ .description("Print environment and package information for bug reports.")
421
+ .option(
422
+ "-c, --cwd <cwd>",
423
+ "the working directory. defaults to the current directory.",
424
+ process.cwd(),
425
+ )
426
+ .action(async (opts) => {
427
+ const cwd = path.resolve(opts.cwd);
428
+ const packageJsonPath = path.join(cwd, "package.json");
429
+
430
+ if (!fs.existsSync(packageJsonPath)) {
431
+ console.error(
432
+ chalk.red("No package.json found in the current directory."),
433
+ );
434
+ process.exit(1);
435
+ }
436
+
437
+ const projectPkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
438
+ const data = await collectInfo(cwd, projectPkg);
439
+
440
+ // Colored output for terminal
441
+ console.log("");
442
+ for (const line of renderColored(data)) {
443
+ console.log(line);
444
+ }
445
+ console.log("");
446
+
447
+ // Copyable plain text
448
+ const plain = renderPlain(data);
449
+ const block = ["```", ...plain, "```"].join("\n");
450
+
451
+ console.log(chalk.dim("— Copy the text below into your bug report —"));
452
+ console.log("");
453
+ console.log(block);
454
+ console.log("");
455
+ });
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ import { init } from "./commands/init";
8
8
  import { update } from "./commands/update";
9
9
  import { mcp } from "./commands/mcp";
10
10
  import { agent } from "./commands/agent";
11
+ import { info } from "./commands/info";
11
12
 
12
13
  process.on("SIGINT", () => process.exit(0));
13
14
  process.on("SIGTERM", () => process.exit(0));
@@ -25,6 +26,7 @@ function main() {
25
26
  program.addCommand(upgradeCommand);
26
27
  program.addCommand(update);
27
28
  program.addCommand(agent);
29
+ program.addCommand(info);
28
30
 
29
31
  program.parse();
30
32
  }