assistant-ui 0.0.81 → 0.0.83
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 +1 -1
- package/bin/assistant-ui.js +2 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +34 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.d.ts +13 -45
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +389 -101
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/create-project.d.ts +12 -0
- package/dist/lib/create-project.d.ts.map +1 -0
- package/dist/lib/create-project.js +273 -0
- package/dist/lib/create-project.js.map +1 -0
- package/package.json +8 -4
- package/plugin/.claude-plugin/plugin.json +8 -0
- package/plugin/skills/assistant-ui/SKILL.md +167 -0
- package/src/commands/agent.ts +36 -0
- package/src/commands/create.ts +452 -129
- package/src/commands/init.ts +2 -2
- package/src/index.ts +2 -0
- package/src/lib/create-project.ts +367 -0
- package/dist/lib/create-from-example.d.ts +0 -9
- package/dist/lib/create-from-example.d.ts.map +0 -1
- package/dist/lib/create-from-example.js +0 -325
- package/dist/lib/create-from-example.js.map +0 -1
- package/src/lib/create-from-example.ts +0 -426
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { codemodCommand, upgradeCommand } from "./commands/upgrade.js";
|
|
|
6
6
|
import { init } from "./commands/init.js";
|
|
7
7
|
import { update } from "./commands/update.js";
|
|
8
8
|
import { mcp } from "./commands/mcp.js";
|
|
9
|
+
import { agent } from "./commands/agent.js";
|
|
9
10
|
process.on("SIGINT", () => process.exit(0));
|
|
10
11
|
process.on("SIGTERM", () => process.exit(0));
|
|
11
12
|
function main() {
|
|
@@ -19,6 +20,7 @@ function main() {
|
|
|
19
20
|
program.addCommand(codemodCommand);
|
|
20
21
|
program.addCommand(upgradeCommand);
|
|
21
22
|
program.addCommand(update);
|
|
23
|
+
program.addCommand(agent);
|
|
22
24
|
program.parse();
|
|
23
25
|
}
|
|
24
26
|
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;
|
|
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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type PackageManagerName = "npm" | "pnpm" | "yarn" | "bun";
|
|
2
|
+
export declare function dlxCommand(pm: PackageManagerName): [string, string[]];
|
|
3
|
+
export interface TransformOptions {
|
|
4
|
+
hasLocalComponents: boolean;
|
|
5
|
+
skipInstall?: boolean;
|
|
6
|
+
packageManager?: PackageManagerName;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveLatestReleaseRef(): Promise<string | undefined>;
|
|
9
|
+
export declare function downloadProject(repoPath: string, destDir: string, ref?: string): Promise<void>;
|
|
10
|
+
export declare function resolvePackageManagerName(projectDir: string, packageManager?: PackageManagerName): Promise<PackageManagerName>;
|
|
11
|
+
export declare function transformProject(projectDir: string, opts: TransformOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=create-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEjE,wBAAgB,UAAU,CAAC,EAAE,EAAE,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW3E;AAID,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,kBAAkB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAO7B;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAgDf"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { downloadTemplate } from "giget";
|
|
4
|
+
import { spawn } from "cross-spawn";
|
|
5
|
+
import { sync as globSync } from "glob";
|
|
6
|
+
import { detect } from "detect-package-manager";
|
|
7
|
+
import { logger } from "./utils/logger.js";
|
|
8
|
+
export function dlxCommand(pm) {
|
|
9
|
+
switch (pm) {
|
|
10
|
+
case "pnpm":
|
|
11
|
+
return ["pnpm", ["dlx"]];
|
|
12
|
+
case "yarn":
|
|
13
|
+
return ["yarn", ["dlx"]];
|
|
14
|
+
case "bun":
|
|
15
|
+
return ["bunx", []];
|
|
16
|
+
case "npm":
|
|
17
|
+
return ["npx", ["--yes"]];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function resolveLatestReleaseRef() {
|
|
21
|
+
try {
|
|
22
|
+
const res = await fetch("https://api.github.com/repos/assistant-ui/assistant-ui/releases/latest");
|
|
23
|
+
if (!res.ok)
|
|
24
|
+
return undefined;
|
|
25
|
+
const release = (await res.json());
|
|
26
|
+
return release.tag_name || undefined;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const DOWNLOAD_TIMEOUT_MS = 30_000;
|
|
33
|
+
export async function downloadProject(repoPath, destDir, ref) {
|
|
34
|
+
const source = ref
|
|
35
|
+
? `gh:assistant-ui/assistant-ui/${repoPath}#${ref}`
|
|
36
|
+
: `gh:assistant-ui/assistant-ui/${repoPath}`;
|
|
37
|
+
// Suppress giget's console.debug output
|
|
38
|
+
const origDebug = console.debug;
|
|
39
|
+
console.debug = () => { };
|
|
40
|
+
try {
|
|
41
|
+
const downloadPromise = downloadTemplate(source, {
|
|
42
|
+
dir: destDir,
|
|
43
|
+
force: true,
|
|
44
|
+
silent: true,
|
|
45
|
+
});
|
|
46
|
+
let timer;
|
|
47
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
48
|
+
timer = setTimeout(() => reject(new Error("Download timed out. This may be due to GitHub rate limiting or a network issue. Try again in a few minutes.")), DOWNLOAD_TIMEOUT_MS);
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
await Promise.race([downloadPromise, timeoutPromise]);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
console.debug = origDebug;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function resolvePackageManagerName(projectDir, packageManager) {
|
|
62
|
+
if (packageManager)
|
|
63
|
+
return packageManager;
|
|
64
|
+
try {
|
|
65
|
+
return await detect({ cwd: path.dirname(projectDir) });
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return "npm";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function transformProject(projectDir, opts) {
|
|
72
|
+
// 1. Transform package.json (always)
|
|
73
|
+
logger.step("Transforming package.json...");
|
|
74
|
+
await transformPackageJson(projectDir);
|
|
75
|
+
let assistantUI;
|
|
76
|
+
let shadcnUI;
|
|
77
|
+
if (!opts.hasLocalComponents) {
|
|
78
|
+
logger.step("Transforming project files...");
|
|
79
|
+
// 2–5. Transform tsconfig, CSS, scan components, and remove workspace
|
|
80
|
+
// components — all independent, run in parallel
|
|
81
|
+
const [, , components] = await Promise.all([
|
|
82
|
+
transformTsConfig(projectDir),
|
|
83
|
+
transformCssFiles(projectDir),
|
|
84
|
+
scanRequiredComponents(projectDir),
|
|
85
|
+
removeWorkspaceComponents(projectDir),
|
|
86
|
+
]);
|
|
87
|
+
assistantUI = components.assistantUI;
|
|
88
|
+
shadcnUI = components.shadcnUI;
|
|
89
|
+
}
|
|
90
|
+
// 6. Install dependencies
|
|
91
|
+
const pm = opts.packageManager ?? (await resolvePackageManagerName(projectDir));
|
|
92
|
+
if (!opts.skipInstall) {
|
|
93
|
+
logger.step("Installing dependencies...");
|
|
94
|
+
await installDependencies(projectDir, pm);
|
|
95
|
+
}
|
|
96
|
+
if (!opts.hasLocalComponents && shadcnUI && assistantUI) {
|
|
97
|
+
// 7. Install shadcn UI components
|
|
98
|
+
const allShadcn = shadcnUI.includes("utils")
|
|
99
|
+
? shadcnUI
|
|
100
|
+
: [...shadcnUI, "utils"];
|
|
101
|
+
logger.step(`Installing shadcn UI components: ${allShadcn.join(", ")}...`);
|
|
102
|
+
await installShadcnRegistry(projectDir, allShadcn, "shadcn components", pm);
|
|
103
|
+
// 8. Install assistant-ui components
|
|
104
|
+
if (assistantUI.length > 0) {
|
|
105
|
+
const auiComponents = assistantUI.map((c) => `@assistant-ui/${c}`);
|
|
106
|
+
logger.step(`Installing assistant-ui components: ${assistantUI.join(", ")}...`);
|
|
107
|
+
await installShadcnRegistry(projectDir, auiComponents, "components", pm);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function transformPackageJson(projectDir) {
|
|
112
|
+
const pkgPath = path.join(projectDir, "package.json");
|
|
113
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
114
|
+
// Remove @assistant-ui/ui (workspace-only package)
|
|
115
|
+
if (pkg.dependencies?.["@assistant-ui/ui"]) {
|
|
116
|
+
delete pkg.dependencies["@assistant-ui/ui"];
|
|
117
|
+
}
|
|
118
|
+
// Transform workspace dependencies to latest
|
|
119
|
+
for (const depType of ["dependencies", "devDependencies"]) {
|
|
120
|
+
const deps = pkg[depType];
|
|
121
|
+
if (!deps)
|
|
122
|
+
continue;
|
|
123
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
124
|
+
if (String(version).includes("workspace:")) {
|
|
125
|
+
deps[name] = "latest";
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Remove devDependencies that are workspace-only
|
|
130
|
+
if (pkg.devDependencies?.["@assistant-ui/x-buildutils"]) {
|
|
131
|
+
delete pkg.devDependencies["@assistant-ui/x-buildutils"];
|
|
132
|
+
}
|
|
133
|
+
// Update package name to be unique
|
|
134
|
+
const dirName = path.basename(projectDir);
|
|
135
|
+
pkg.name = dirName;
|
|
136
|
+
fs.writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
|
|
137
|
+
}
|
|
138
|
+
async function transformTsConfig(projectDir) {
|
|
139
|
+
const tsconfigPath = path.join(projectDir, "tsconfig.json");
|
|
140
|
+
if (!fs.existsSync(tsconfigPath)) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const content = fs.readFileSync(tsconfigPath, "utf-8");
|
|
144
|
+
const tsconfig = JSON.parse(content);
|
|
145
|
+
// Remove workspace paths
|
|
146
|
+
if (tsconfig.compilerOptions?.paths) {
|
|
147
|
+
delete tsconfig.compilerOptions.paths["@/components/assistant-ui/*"];
|
|
148
|
+
delete tsconfig.compilerOptions.paths["@/components/ui/*"];
|
|
149
|
+
delete tsconfig.compilerOptions.paths["@/lib/utils"];
|
|
150
|
+
delete tsconfig.compilerOptions.paths["@assistant-ui/ui/*"];
|
|
151
|
+
if (Object.keys(tsconfig.compilerOptions.paths).length === 0) {
|
|
152
|
+
delete tsconfig.compilerOptions.paths;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// If extends uses @assistant-ui/x-buildutils, replace with inline config
|
|
156
|
+
if (tsconfig.extends?.includes("@assistant-ui/x-buildutils")) {
|
|
157
|
+
const isNext = tsconfig.extends.includes("ts/next");
|
|
158
|
+
delete tsconfig.extends;
|
|
159
|
+
const inlinedCompilerOptions = {
|
|
160
|
+
target: "ESNext",
|
|
161
|
+
lib: ["dom", "dom.iterable", "ES2023"],
|
|
162
|
+
skipLibCheck: true,
|
|
163
|
+
strict: true,
|
|
164
|
+
noEmit: true,
|
|
165
|
+
esModuleInterop: true,
|
|
166
|
+
module: "ESNext",
|
|
167
|
+
moduleResolution: "bundler",
|
|
168
|
+
resolveJsonModule: true,
|
|
169
|
+
isolatedModules: true,
|
|
170
|
+
jsx: "react-jsx",
|
|
171
|
+
...(isNext ? { plugins: [{ name: "next" }] } : {}),
|
|
172
|
+
};
|
|
173
|
+
tsconfig.compilerOptions = {
|
|
174
|
+
...inlinedCompilerOptions,
|
|
175
|
+
...tsconfig.compilerOptions,
|
|
176
|
+
paths: {
|
|
177
|
+
"@/*": ["./*"],
|
|
178
|
+
...(tsconfig.compilerOptions?.paths || {}),
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
fs.writeFileSync(tsconfigPath, `${JSON.stringify(tsconfig, null, 2)}\n`);
|
|
183
|
+
}
|
|
184
|
+
async function transformCssFiles(projectDir) {
|
|
185
|
+
const cssFiles = globSync("**/*.css", {
|
|
186
|
+
cwd: projectDir,
|
|
187
|
+
ignore: ["**/node_modules/**", "**/dist/**", "**/.next/**"],
|
|
188
|
+
});
|
|
189
|
+
for (const file of cssFiles) {
|
|
190
|
+
const fullPath = path.join(projectDir, file);
|
|
191
|
+
try {
|
|
192
|
+
let content = fs.readFileSync(fullPath, "utf-8");
|
|
193
|
+
content = content.replace(/@source\s+["'][^"']*packages\/ui\/src[^"']*["'];\s*\n?/g, "");
|
|
194
|
+
fs.writeFileSync(fullPath, content);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Ignore files that cannot be read/written
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function scanRequiredComponents(projectDir) {
|
|
202
|
+
const files = globSync("**/*.{ts,tsx}", {
|
|
203
|
+
cwd: projectDir,
|
|
204
|
+
ignore: ["**/node_modules/**", "**/dist/**", "**/.next/**"],
|
|
205
|
+
});
|
|
206
|
+
const assistantUIComponents = new Set();
|
|
207
|
+
const shadcnUIComponents = new Set();
|
|
208
|
+
for (const file of files) {
|
|
209
|
+
const fullPath = path.join(projectDir, file);
|
|
210
|
+
try {
|
|
211
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
212
|
+
const assistantUIRegex = /from\s+["']@\/components\/assistant-ui\/([^"']+)["']/g;
|
|
213
|
+
let match;
|
|
214
|
+
while ((match = assistantUIRegex.exec(content)) !== null) {
|
|
215
|
+
assistantUIComponents.add(match[1]);
|
|
216
|
+
}
|
|
217
|
+
const uiRegex = /from\s+["']@\/components\/ui\/([^"']+)["']/g;
|
|
218
|
+
while ((match = uiRegex.exec(content)) !== null) {
|
|
219
|
+
shadcnUIComponents.add(match[1]);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Ignore files that cannot be read
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
assistantUI: Array.from(assistantUIComponents),
|
|
228
|
+
shadcnUI: Array.from(shadcnUIComponents),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
async function removeWorkspaceComponents(projectDir) {
|
|
232
|
+
const componentsDir = path.join(projectDir, "components", "assistant-ui");
|
|
233
|
+
fs.rmSync(componentsDir, { recursive: true, force: true });
|
|
234
|
+
}
|
|
235
|
+
async function installDependencies(projectDir, pm) {
|
|
236
|
+
const args = pm === "yarn" ? [] : ["install"];
|
|
237
|
+
return new Promise((resolve, reject) => {
|
|
238
|
+
const child = spawn(pm, args, {
|
|
239
|
+
cwd: projectDir,
|
|
240
|
+
stdio: "inherit",
|
|
241
|
+
});
|
|
242
|
+
child.on("error", (error) => {
|
|
243
|
+
reject(new Error(`Failed to install dependencies: ${error.message}`));
|
|
244
|
+
});
|
|
245
|
+
child.on("close", (code) => {
|
|
246
|
+
if (code !== 0) {
|
|
247
|
+
reject(new Error(`${pm} install exited with code ${code}`));
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
resolve();
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async function installShadcnRegistry(projectDir, components, label, pm) {
|
|
256
|
+
const [cmd, dlxArgs] = dlxCommand(pm);
|
|
257
|
+
return new Promise((resolve, reject) => {
|
|
258
|
+
const child = spawn(cmd, [...dlxArgs, "shadcn@latest", "add", ...components, "--yes"], {
|
|
259
|
+
cwd: projectDir,
|
|
260
|
+
stdio: "inherit",
|
|
261
|
+
});
|
|
262
|
+
child.on("error", (error) => {
|
|
263
|
+
reject(new Error(`Failed to install ${label}: ${error.message}`));
|
|
264
|
+
});
|
|
265
|
+
child.on("close", (code) => {
|
|
266
|
+
if (code !== 0) {
|
|
267
|
+
logger.warn(`shadcn exited with code ${code}. Run the following to retry:\n ${cmd} ${[...dlxArgs, "shadcn@latest", "add", ...components].join(" ")}`);
|
|
268
|
+
}
|
|
269
|
+
resolve();
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=create-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/lib/create-project.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assistant-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.83",
|
|
4
4
|
"description": "CLI for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"type": "module",
|
|
17
17
|
"bin": {
|
|
18
|
-
"assistant-ui": "./
|
|
18
|
+
"assistant-ui": "./bin/assistant-ui.js"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
|
+
"bin",
|
|
21
22
|
"dist",
|
|
23
|
+
"plugin",
|
|
22
24
|
"src",
|
|
23
25
|
"README.md"
|
|
24
26
|
],
|
|
@@ -31,8 +33,10 @@
|
|
|
31
33
|
"cross-spawn": "^7.0.6",
|
|
32
34
|
"debug": "^4.4.3",
|
|
33
35
|
"detect-package-manager": "^3.0.2",
|
|
36
|
+
"giget": "^3.1.2",
|
|
34
37
|
"glob": "^13.0.6",
|
|
35
|
-
"jscodeshift": "^17.3.0"
|
|
38
|
+
"jscodeshift": "^17.3.0",
|
|
39
|
+
"@assistant-ui/agent-launcher": "0.1.0"
|
|
36
40
|
},
|
|
37
41
|
"devDependencies": {
|
|
38
42
|
"@types/cli-progress": "^3.11.6",
|
|
@@ -42,7 +46,7 @@
|
|
|
42
46
|
"@types/node": "^25.3.3",
|
|
43
47
|
"@vitest/coverage-v8": "^4.0.18",
|
|
44
48
|
"vitest": "^4.0.18",
|
|
45
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
49
|
+
"@assistant-ui/x-buildutils": "0.0.2"
|
|
46
50
|
},
|
|
47
51
|
"publishConfig": {
|
|
48
52
|
"access": "public",
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: assistant-ui
|
|
3
|
+
description: Add, configure, and integrate assistant-ui components in React apps. Use when developers ask to add a chat thread, set up a runtime, integrate with AI SDK, configure tools, or build AI chat interfaces with assistant-ui.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# assistant-ui
|
|
7
|
+
|
|
8
|
+
Use this skill to help users build AI chat interfaces with assistant-ui.
|
|
9
|
+
|
|
10
|
+
## Step 1: Check Project Setup
|
|
11
|
+
|
|
12
|
+
Check if the project has `components.json` (shadcn config) and `@assistant-ui/react` installed.
|
|
13
|
+
|
|
14
|
+
If assistant-ui is not yet set up, run:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx assistant-ui init --yes
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
This initializes shadcn and installs the default assistant-ui chat components.
|
|
21
|
+
|
|
22
|
+
## Step 2: Add Components
|
|
23
|
+
|
|
24
|
+
Install components via the shadcn registry:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx shadcn@latest add "https://r.assistant-ui.com/chat/b/ai-sdk-quick-start/json"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Available component presets:
|
|
31
|
+
|
|
32
|
+
| Preset | Registry URL |
|
|
33
|
+
|--------|-------------|
|
|
34
|
+
| AI SDK Quick Start | `https://r.assistant-ui.com/chat/b/ai-sdk-quick-start/json` |
|
|
35
|
+
|
|
36
|
+
You can also add individual assistant-ui shadcn components:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx shadcn@latest add assistant-ui/thread
|
|
40
|
+
npx shadcn@latest add assistant-ui/markdown-text
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Step 3: Runtime Setup
|
|
44
|
+
|
|
45
|
+
assistant-ui requires a runtime. The most common setup uses AI SDK:
|
|
46
|
+
|
|
47
|
+
### AI SDK Runtime (recommended)
|
|
48
|
+
|
|
49
|
+
Install the integration package:
|
|
50
|
+
```bash
|
|
51
|
+
npm install @assistant-ui/react-ai-sdk
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Create a chat API route (Next.js App Router):
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
// app/api/chat/route.ts
|
|
58
|
+
import { openai } from "@ai-sdk/openai";
|
|
59
|
+
import { streamText } from "ai";
|
|
60
|
+
|
|
61
|
+
export const maxDuration = 30;
|
|
62
|
+
|
|
63
|
+
export async function POST(req: Request) {
|
|
64
|
+
const { messages, config } = await req.json();
|
|
65
|
+
|
|
66
|
+
const result = streamText({
|
|
67
|
+
model: openai("gpt-4o"),
|
|
68
|
+
messages,
|
|
69
|
+
...config,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return result.toDataStreamResponse();
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Create the assistant component:
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
"use client";
|
|
80
|
+
|
|
81
|
+
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
82
|
+
import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
83
|
+
import { Thread } from "@/components/assistant-ui/thread";
|
|
84
|
+
|
|
85
|
+
export const Assistant = () => {
|
|
86
|
+
const runtime = useChatRuntime({
|
|
87
|
+
api: "/api/chat",
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<AssistantRuntimeProvider runtime={runtime}>
|
|
92
|
+
<Thread />
|
|
93
|
+
</AssistantRuntimeProvider>
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Step 4: Tools (optional)
|
|
99
|
+
|
|
100
|
+
To add tool calling support, define tools on the backend and render them on the frontend:
|
|
101
|
+
|
|
102
|
+
### Backend tool (AI SDK):
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { streamText, tool } from "ai";
|
|
106
|
+
import { z } from "zod";
|
|
107
|
+
|
|
108
|
+
const result = streamText({
|
|
109
|
+
model: openai("gpt-4o"),
|
|
110
|
+
messages,
|
|
111
|
+
tools: {
|
|
112
|
+
get_weather: tool({
|
|
113
|
+
description: "Get weather for a location",
|
|
114
|
+
parameters: z.object({
|
|
115
|
+
location: z.string(),
|
|
116
|
+
}),
|
|
117
|
+
execute: async ({ location }) => {
|
|
118
|
+
return { temperature: 72, condition: "sunny", location };
|
|
119
|
+
},
|
|
120
|
+
}),
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Frontend tool UI:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
"use client";
|
|
129
|
+
|
|
130
|
+
import { makeAssistantToolUI } from "@assistant-ui/react";
|
|
131
|
+
|
|
132
|
+
export const WeatherToolUI = makeAssistantToolUI({
|
|
133
|
+
toolName: "get_weather",
|
|
134
|
+
render: ({ args, result }) => {
|
|
135
|
+
return (
|
|
136
|
+
<div>
|
|
137
|
+
<p>Weather for {args?.location}</p>
|
|
138
|
+
{result && <p>{result.temperature}F, {result.condition}</p>}
|
|
139
|
+
</div>
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Register the tool UI in your assistant component:
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
<AssistantRuntimeProvider runtime={runtime}>
|
|
149
|
+
<WeatherToolUI />
|
|
150
|
+
<Thread />
|
|
151
|
+
</AssistantRuntimeProvider>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Key Packages
|
|
155
|
+
|
|
156
|
+
| Package | Purpose |
|
|
157
|
+
|---------|---------|
|
|
158
|
+
| `@assistant-ui/react` | Core React components and primitives |
|
|
159
|
+
| `@assistant-ui/react-ai-sdk` | Vercel AI SDK integration |
|
|
160
|
+
| `@assistant-ui/react-markdown` | Markdown rendering |
|
|
161
|
+
| `@assistant-ui/react-syntax-highlighter` | Code highlighting |
|
|
162
|
+
| `@assistant-ui/ui` | Pre-built shadcn/ui component set |
|
|
163
|
+
| `@assistant-ui/styles` | Pre-built CSS for non-Tailwind users |
|
|
164
|
+
|
|
165
|
+
## Environment Variables
|
|
166
|
+
|
|
167
|
+
For OpenAI-based setups, ensure `OPENAI_API_KEY` is set in `.env.local`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { resolve, dirname } from "node:path";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { launch } from "@assistant-ui/agent-launcher";
|
|
6
|
+
|
|
7
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
|
|
9
|
+
function getPluginPath(): string {
|
|
10
|
+
// In dist/, plugin is at ../../plugin relative to dist/commands/agent.js
|
|
11
|
+
// In dev (src/), plugin is at ../../plugin relative to src/commands/
|
|
12
|
+
const candidates = [
|
|
13
|
+
resolve(__dirname, "..", "..", "plugin"),
|
|
14
|
+
resolve(__dirname, "..", "plugin"),
|
|
15
|
+
];
|
|
16
|
+
for (const candidate of candidates) {
|
|
17
|
+
if (existsSync(candidate)) return candidate;
|
|
18
|
+
}
|
|
19
|
+
return candidates[0]!;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const agent = new Command()
|
|
23
|
+
.name("agent")
|
|
24
|
+
.description("launch Claude Code with assistant-ui skills")
|
|
25
|
+
.argument("<prompt...>", "prompt for the agent")
|
|
26
|
+
.option("--dry", "print the command instead of running it")
|
|
27
|
+
.action((promptParts: string[], opts) => {
|
|
28
|
+
const prompt = promptParts.join(" ");
|
|
29
|
+
|
|
30
|
+
launch({
|
|
31
|
+
pluginDir: getPluginPath(),
|
|
32
|
+
skillName: "assistant-ui",
|
|
33
|
+
prompt,
|
|
34
|
+
dry: opts.dry,
|
|
35
|
+
});
|
|
36
|
+
});
|