@agentuity/cli 0.0.100 → 0.0.102
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/AGENTS.md +19 -188
- package/bin/cli.ts +13 -6
- package/dist/api.d.ts +1 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +41 -12
- package/dist/cli.js.map +1 -1
- package/dist/cmd/ai/index.d.ts.map +1 -1
- package/dist/cmd/ai/index.js +6 -1
- package/dist/cmd/ai/index.js.map +1 -1
- package/dist/cmd/ai/prompt/agent.d.ts +7 -0
- package/dist/cmd/ai/prompt/agent.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/agent.js +12 -323
- package/dist/cmd/ai/prompt/agent.js.map +1 -1
- package/dist/cmd/ai/prompt/api.d.ts +7 -0
- package/dist/cmd/ai/prompt/api.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/api.js +12 -260
- package/dist/cmd/ai/prompt/api.js.map +1 -1
- package/dist/cmd/ai/prompt/version.d.ts +35 -0
- package/dist/cmd/ai/prompt/version.d.ts.map +1 -0
- package/dist/cmd/ai/prompt/version.js +55 -0
- package/dist/cmd/ai/prompt/version.js.map +1 -0
- package/dist/cmd/ai/prompt/web.d.ts +7 -0
- package/dist/cmd/ai/prompt/web.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/web.js +12 -283
- package/dist/cmd/ai/prompt/web.js.map +1 -1
- package/dist/cmd/ai/skills/generate.d.ts +3 -0
- package/dist/cmd/ai/skills/generate.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generate.js +65 -0
- package/dist/cmd/ai/skills/generate.js.map +1 -0
- package/dist/cmd/ai/skills/generator.d.ts +4 -0
- package/dist/cmd/ai/skills/generator.d.ts.map +1 -0
- package/dist/cmd/ai/skills/generator.js +402 -0
- package/dist/cmd/ai/skills/generator.js.map +1 -0
- package/dist/cmd/ai/skills/index.d.ts +4 -0
- package/dist/cmd/ai/skills/index.d.ts.map +1 -0
- package/dist/cmd/ai/skills/index.js +21 -0
- package/dist/cmd/ai/skills/index.js.map +1 -0
- package/dist/cmd/auth/signup.d.ts.map +1 -1
- package/dist/cmd/auth/signup.js +1 -0
- package/dist/cmd/auth/signup.js.map +1 -1
- package/dist/cmd/build/ast.d.ts +2 -1
- package/dist/cmd/build/ast.d.ts.map +1 -1
- package/dist/cmd/build/ast.js +135 -47
- package/dist/cmd/build/ast.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts.map +1 -1
- package/dist/cmd/build/entry-generator.js +255 -188
- package/dist/cmd/build/entry-generator.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.js +103 -45
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +7 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
- package/dist/cmd/build/vite/bun-dev-server.js +52 -26
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
- package/dist/cmd/build/vite/docs-generator.d.ts +13 -0
- package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/docs-generator.js +81 -0
- package/dist/cmd/build/vite/docs-generator.js.map +1 -0
- package/dist/cmd/build/vite/index.d.ts +3 -3
- package/dist/cmd/build/vite/index.d.ts.map +1 -1
- package/dist/cmd/build/vite/index.js +9 -7
- package/dist/cmd/build/vite/index.js.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +19 -5
- package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.js +203 -7
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +23 -0
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/prompt-generator.js +123 -0
- package/dist/cmd/build/vite/prompt-generator.js.map +1 -0
- package/dist/cmd/build/vite/registry-generator.d.ts +3 -3
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/registry-generator.js +644 -103
- package/dist/cmd/build/vite/registry-generator.js.map +1 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +4 -0
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/route-discovery.js.map +1 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +4 -0
- package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -1
- package/dist/cmd/build/vite/server-bundler.js +63 -17
- package/dist/cmd/build/vite/server-bundler.js.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +4 -0
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +118 -96
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/build/vite-bundler.js +6 -6
- package/dist/cmd/build/vite-bundler.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +89 -32
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/delete.js +3 -1
- package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/set.js +4 -2
- package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +2 -13
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/vector/delete-namespace.d.ts +3 -0
- package/dist/cmd/cloud/vector/delete-namespace.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/delete-namespace.js +77 -0
- package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -0
- package/dist/cmd/cloud/vector/index.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/index.js +21 -4
- package/dist/cmd/cloud/vector/index.js.map +1 -1
- package/dist/cmd/cloud/vector/list-namespaces.d.ts +3 -0
- package/dist/cmd/cloud/vector/list-namespaces.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/list-namespaces.js +42 -0
- package/dist/cmd/cloud/vector/list-namespaces.js.map +1 -0
- package/dist/cmd/cloud/vector/stats.d.ts +3 -0
- package/dist/cmd/cloud/vector/stats.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/stats.js +142 -0
- package/dist/cmd/cloud/vector/stats.js.map +1 -0
- package/dist/cmd/cloud/vector/upsert.d.ts +3 -0
- package/dist/cmd/cloud/vector/upsert.d.ts.map +1 -0
- package/dist/cmd/cloud/vector/upsert.js +192 -0
- package/dist/cmd/cloud/vector/upsert.js.map +1 -0
- package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
- package/dist/cmd/dev/file-watcher.js +94 -33
- package/dist/cmd/dev/file-watcher.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +298 -61
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/skills.d.ts +10 -0
- package/dist/cmd/dev/skills.d.ts.map +1 -0
- package/dist/cmd/dev/skills.js +57 -0
- package/dist/cmd/dev/skills.js.map +1 -0
- package/dist/cmd/dev/sync.d.ts.map +1 -1
- package/dist/cmd/dev/sync.js +19 -3
- package/dist/cmd/dev/sync.js.map +1 -1
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +1 -0
- package/dist/cmd/index.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +3 -0
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/template-flow.d.ts +1 -0
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +30 -5
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/cmd/setup/index.d.ts.map +1 -1
- package/dist/cmd/setup/index.js +1 -0
- package/dist/cmd/setup/index.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts +15 -0
- package/dist/cmd/upgrade/index.d.ts.map +1 -1
- package/dist/cmd/upgrade/index.js +59 -4
- package/dist/cmd/upgrade/index.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/domain.d.ts +45 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +200 -0
- package/dist/domain.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/schema-generator.d.ts +2 -0
- package/dist/schema-generator.d.ts.map +1 -1
- package/dist/schema-generator.js +18 -0
- package/dist/schema-generator.js.map +1 -1
- package/dist/steps.d.ts +1 -1
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +16 -5
- package/dist/steps.js.map +1 -1
- package/dist/tui/prompt.d.ts +1 -2
- package/dist/tui/prompt.d.ts.map +1 -1
- package/dist/tui/prompt.js +8 -4
- package/dist/tui/prompt.js.map +1 -1
- package/dist/tui.d.ts +16 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +23 -2
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/package.json +5 -8
- package/src/api.ts +1 -1
- package/src/cli.ts +47 -12
- package/src/cmd/ai/index.ts +6 -1
- package/src/cmd/ai/prompt/agent.md +306 -0
- package/src/cmd/ai/prompt/agent.ts +12 -322
- package/src/cmd/ai/prompt/api.md +360 -0
- package/src/cmd/ai/prompt/api.ts +13 -260
- package/src/cmd/ai/prompt/version.ts +61 -0
- package/src/cmd/ai/prompt/web.md +509 -0
- package/src/cmd/ai/prompt/web.ts +12 -282
- package/src/cmd/ai/skills/generate.ts +75 -0
- package/src/cmd/ai/skills/generator.ts +519 -0
- package/src/cmd/ai/skills/index.ts +23 -0
- package/src/cmd/auth/signup.ts +1 -0
- package/src/cmd/build/ast.ts +161 -48
- package/src/cmd/build/entry-generator.ts +258 -187
- package/src/cmd/build/vite/agent-discovery.ts +151 -58
- package/src/cmd/build/vite/bun-dev-server.ts +57 -27
- package/src/cmd/build/vite/docs-generator.ts +87 -0
- package/src/cmd/build/vite/index.ts +9 -7
- package/src/cmd/build/vite/lifecycle-generator.ts +19 -5
- package/src/cmd/build/vite/metadata-generator.ts +251 -7
- package/src/cmd/build/vite/prompt-generator.ts +169 -0
- package/src/cmd/build/vite/registry-generator.ts +750 -108
- package/src/cmd/build/vite/route-discovery.ts +4 -0
- package/src/cmd/build/vite/server-bundler.ts +73 -23
- package/src/cmd/build/vite/vite-asset-server-config.ts +5 -0
- package/src/cmd/build/vite/vite-builder.ts +134 -100
- package/src/cmd/build/vite-bundler.ts +6 -6
- package/src/cmd/cloud/deploy.ts +114 -36
- package/src/cmd/cloud/keyvalue/create-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete-namespace.ts +3 -1
- package/src/cmd/cloud/keyvalue/delete.ts +3 -1
- package/src/cmd/cloud/keyvalue/set.ts +4 -2
- package/src/cmd/cloud/stream/get.ts +2 -9
- package/src/cmd/cloud/vector/delete-namespace.ts +89 -0
- package/src/cmd/cloud/vector/index.ts +21 -4
- package/src/cmd/cloud/vector/list-namespaces.ts +46 -0
- package/src/cmd/cloud/vector/stats.ts +160 -0
- package/src/cmd/cloud/vector/upsert.ts +216 -0
- package/src/cmd/dev/file-watcher.ts +109 -34
- package/src/cmd/dev/index.ts +364 -60
- package/src/cmd/dev/skills.ts +82 -0
- package/src/cmd/dev/sync.ts +41 -6
- package/src/cmd/index.ts +1 -0
- package/src/cmd/project/create.ts +3 -0
- package/src/cmd/project/template-flow.ts +37 -5
- package/src/cmd/setup/index.ts +1 -0
- package/src/cmd/upgrade/index.ts +68 -4
- package/src/config.ts +9 -0
- package/src/domain.ts +273 -0
- package/src/index.ts +0 -5
- package/src/runtime-bootstrap.md +1 -1
- package/src/schema-generator.ts +23 -0
- package/src/steps.ts +16 -5
- package/src/tui/prompt.ts +11 -5
- package/src/tui.ts +21 -2
- package/src/types/md.d.ts +8 -0
- package/src/types.ts +12 -3
- package/dist/cmd/cloud/domain.d.ts +0 -17
- package/dist/cmd/cloud/domain.d.ts.map +0 -1
- package/dist/cmd/cloud/domain.js +0 -79
- package/dist/cmd/cloud/domain.js.map +0 -1
- package/dist/runtime-bootstrap.d.ts +0 -56
- package/dist/runtime-bootstrap.d.ts.map +0 -1
- package/dist/runtime-bootstrap.js +0 -95
- package/dist/runtime-bootstrap.js.map +0 -1
- package/src/cmd/cloud/domain.ts +0 -100
- package/src/runtime-bootstrap.ts +0 -131
|
@@ -33,8 +33,12 @@ export interface RouteInfo {
|
|
|
33
33
|
routeType: 'api' | 'sms' | 'email' | 'cron' | 'websocket' | 'sse' | 'stream';
|
|
34
34
|
agentVariable?: string;
|
|
35
35
|
agentImportPath?: string;
|
|
36
|
+
agentName?: string;
|
|
37
|
+
agentDescription?: string;
|
|
36
38
|
inputSchemaVariable?: string;
|
|
37
39
|
outputSchemaVariable?: string;
|
|
40
|
+
inputSchemaCode?: string;
|
|
41
|
+
outputSchemaCode?: string;
|
|
38
42
|
stream?: boolean;
|
|
39
43
|
}
|
|
40
44
|
|
|
@@ -9,6 +9,37 @@ import type { Logger } from '../../../types';
|
|
|
9
9
|
import type { BunPlugin } from 'bun';
|
|
10
10
|
import { generatePatches, applyPatch } from '../patch';
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Format a Bun build log (BuildMessage or ResolveMessage) into a readable string
|
|
14
|
+
*/
|
|
15
|
+
export function formatBuildLog(log: BuildMessage | ResolveMessage): string {
|
|
16
|
+
const parts: string[] = [];
|
|
17
|
+
|
|
18
|
+
// For ResolveMessage, format with specifier info
|
|
19
|
+
if (log.name === 'ResolveMessage') {
|
|
20
|
+
const resolveLog = log as ResolveMessage;
|
|
21
|
+
if (resolveLog.specifier) {
|
|
22
|
+
parts.push(`Could not resolve "${resolveLog.specifier}"`);
|
|
23
|
+
// Use referrer if available, otherwise fall back to position.file
|
|
24
|
+
const referrer = resolveLog.referrer || resolveLog.position?.file;
|
|
25
|
+
if (referrer) {
|
|
26
|
+
parts.push(` imported from: ${referrer}`);
|
|
27
|
+
}
|
|
28
|
+
} else if (resolveLog.message) {
|
|
29
|
+
parts.push(resolveLog.message);
|
|
30
|
+
}
|
|
31
|
+
} else if (log.message) {
|
|
32
|
+
parts.push(log.message);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Add position info if available (only if we haven't already shown referrer from position)
|
|
36
|
+
if (log.position && log.name !== 'ResolveMessage') {
|
|
37
|
+
parts.push(` at ${log.position.file}:${log.position.line}:${log.position.column}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return parts.join('\n');
|
|
41
|
+
}
|
|
42
|
+
|
|
12
43
|
export interface ServerBundleOptions {
|
|
13
44
|
rootDir: string;
|
|
14
45
|
dev: boolean;
|
|
@@ -24,7 +55,7 @@ export async function installExternalsAndBuild(options: ServerBundleOptions): Pr
|
|
|
24
55
|
|
|
25
56
|
logger.debug('[server-bundler] Starting server bundle process');
|
|
26
57
|
|
|
27
|
-
const entryPath = join(rootDir, '
|
|
58
|
+
const entryPath = join(rootDir, 'src/generated/app.ts');
|
|
28
59
|
const outDir = join(rootDir, '.agentuity');
|
|
29
60
|
|
|
30
61
|
logger.debug(`[server-bundler] Entry: ${entryPath}, OutDir: ${outDir}`);
|
|
@@ -246,6 +277,10 @@ export async function installExternalsAndBuild(options: ServerBundleOptions): Pr
|
|
|
246
277
|
minify: !dev,
|
|
247
278
|
sourcemap: (dev ? 'inline' : 'external') as 'inline' | 'external',
|
|
248
279
|
external,
|
|
280
|
+
// CRITICAL: Disable environment variable inlining for server builds
|
|
281
|
+
// Server code must read process.env at RUNTIME, not have values baked in at build time
|
|
282
|
+
// Without this, NODE_ENV and other env vars get inlined as string literals
|
|
283
|
+
env: 'disable' as const,
|
|
249
284
|
define: userDefine, // Include custom define values from agentuity.config.ts
|
|
250
285
|
plugins: [patchPlugin],
|
|
251
286
|
naming: {
|
|
@@ -257,6 +292,12 @@ export async function installExternalsAndBuild(options: ServerBundleOptions): Pr
|
|
|
257
292
|
`Bun.build config: ${JSON.stringify({ ...buildConfig, external: `[${external.length} packages]` }, null, 2)}`
|
|
258
293
|
);
|
|
259
294
|
|
|
295
|
+
// WORKAROUND: Temporarily delete NODE_ENV to prevent Bun.build from inlining it
|
|
296
|
+
// See: https://github.com/oven-sh/bun/issues/20183
|
|
297
|
+
// Even with env: 'disable', Bun.build still inlines NODE_ENV at build time
|
|
298
|
+
const originalNodeEnv = process.env.NODE_ENV;
|
|
299
|
+
delete process.env.NODE_ENV;
|
|
300
|
+
|
|
260
301
|
// Verify entry point exists before building
|
|
261
302
|
if (!(await Bun.file(entryPath).exists())) {
|
|
262
303
|
throw new Error(`Entry point not found: ${entryPath}`);
|
|
@@ -268,38 +309,47 @@ export async function installExternalsAndBuild(options: ServerBundleOptions): Pr
|
|
|
268
309
|
try {
|
|
269
310
|
result = await Bun.build(buildConfig);
|
|
270
311
|
} catch (error: unknown) {
|
|
271
|
-
|
|
312
|
+
// Restore NODE_ENV after build attempt
|
|
313
|
+
if (originalNodeEnv !== undefined) {
|
|
314
|
+
process.env.NODE_ENV = originalNodeEnv;
|
|
315
|
+
}
|
|
272
316
|
|
|
273
317
|
// Handle AggregateError with build/resolve messages
|
|
274
318
|
if (error instanceof AggregateError && error.errors) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
319
|
+
const formattedErrors = error.errors
|
|
320
|
+
.map((err) => {
|
|
321
|
+
// Try to use formatBuildLog if it looks like a BuildMessage/ResolveMessage
|
|
322
|
+
if (err && typeof err === 'object' && 'name' in err) {
|
|
323
|
+
const formatted = formatBuildLog(err as BuildMessage | ResolveMessage);
|
|
324
|
+
if (formatted) return formatted;
|
|
325
|
+
}
|
|
326
|
+
// Fallback for other error types
|
|
327
|
+
const parts = [err.message || err.text || 'Unknown error'];
|
|
328
|
+
if (err.position) {
|
|
329
|
+
parts.push(
|
|
330
|
+
` at ${err.position.file}:${err.position.line}:${err.position.column}`
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
return parts.join('\n');
|
|
334
|
+
})
|
|
335
|
+
.filter(Boolean)
|
|
336
|
+
.join('\n');
|
|
337
|
+
|
|
338
|
+
throw new Error(formattedErrors || 'Build failed');
|
|
284
339
|
}
|
|
285
340
|
|
|
286
341
|
throw error;
|
|
287
342
|
}
|
|
288
343
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
);
|
|
344
|
+
// Restore NODE_ENV after successful build
|
|
345
|
+
if (originalNodeEnv !== undefined) {
|
|
346
|
+
process.env.NODE_ENV = originalNodeEnv;
|
|
347
|
+
}
|
|
294
348
|
|
|
349
|
+
if (!result.success) {
|
|
295
350
|
const errorMessages = result.logs
|
|
296
|
-
.map((log) =>
|
|
297
|
-
|
|
298
|
-
if (log.position) {
|
|
299
|
-
parts.push(` at ${log.position.file}:${log.position.line}:${log.position.column}`);
|
|
300
|
-
}
|
|
301
|
-
return parts.join('\n');
|
|
302
|
-
})
|
|
351
|
+
.map((log) => formatBuildLog(log))
|
|
352
|
+
.filter(Boolean)
|
|
303
353
|
.join('\n');
|
|
304
354
|
|
|
305
355
|
throw new Error(errorMessages || 'Build failed with no error messages');
|
|
@@ -69,6 +69,11 @@ export async function generateAssetServerConfig(
|
|
|
69
69
|
dedupe: ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime'],
|
|
70
70
|
},
|
|
71
71
|
|
|
72
|
+
// Pre-bundle @agentuity/workbench to avoid React preamble issues with pre-built JSX
|
|
73
|
+
optimizeDeps: {
|
|
74
|
+
include: ['@agentuity/workbench', '@agentuity/core', '@agentuity/react'],
|
|
75
|
+
},
|
|
76
|
+
|
|
72
77
|
// Only allow frontend env vars (server uses process.env)
|
|
73
78
|
envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'],
|
|
74
79
|
|
|
@@ -5,10 +5,43 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { join } from 'node:path';
|
|
8
|
-
import
|
|
8
|
+
import { existsSync, renameSync, rmSync } from 'node:fs';
|
|
9
|
+
import type { InlineConfig, Plugin } from 'vite';
|
|
9
10
|
import type { Logger } from '../../../types';
|
|
10
11
|
import { browserEnvPlugin } from './browser-env-plugin';
|
|
11
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Vite plugin to flatten the output structure for index.html
|
|
15
|
+
*
|
|
16
|
+
* When root is set to the project root (for TanStack Router compatibility),
|
|
17
|
+
* Vite outputs index.html to .agentuity/client/src/web/index.html instead of
|
|
18
|
+
* .agentuity/client/index.html. This plugin moves it to the expected location.
|
|
19
|
+
*/
|
|
20
|
+
function flattenHtmlOutputPlugin(outDir: string): Plugin {
|
|
21
|
+
return {
|
|
22
|
+
name: 'agentuity:flatten-html-output',
|
|
23
|
+
apply: 'build',
|
|
24
|
+
closeBundle() {
|
|
25
|
+
const nestedHtmlPath = join(outDir, 'src', 'web', 'index.html');
|
|
26
|
+
const targetHtmlPath = join(outDir, 'index.html');
|
|
27
|
+
|
|
28
|
+
if (existsSync(nestedHtmlPath)) {
|
|
29
|
+
renameSync(nestedHtmlPath, targetHtmlPath);
|
|
30
|
+
|
|
31
|
+
// Clean up empty src/web directory structure
|
|
32
|
+
const srcWebDir = join(outDir, 'src', 'web');
|
|
33
|
+
const srcDir = join(outDir, 'src');
|
|
34
|
+
try {
|
|
35
|
+
rmSync(srcWebDir, { recursive: true, force: true });
|
|
36
|
+
rmSync(srcDir, { recursive: true, force: true });
|
|
37
|
+
} catch {
|
|
38
|
+
// Ignore cleanup errors
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
12
45
|
export interface ViteBuildOptions {
|
|
13
46
|
rootDir: string;
|
|
14
47
|
mode: 'client' | 'server' | 'workbench';
|
|
@@ -25,7 +58,7 @@ export interface ViteBuildOptions {
|
|
|
25
58
|
|
|
26
59
|
/**
|
|
27
60
|
* Run a Vite build for the specified mode
|
|
28
|
-
*
|
|
61
|
+
* Uses inline Vite config (customizable via agentuity.config.ts)
|
|
29
62
|
*/
|
|
30
63
|
export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
31
64
|
const { rootDir, mode, dev = false, projectId = '', deploymentId = '', logger } = options;
|
|
@@ -34,28 +67,40 @@ export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
|
34
67
|
|
|
35
68
|
// For server mode, use Bun.build (preserves process.env at runtime)
|
|
36
69
|
if (mode === 'server') {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// Then, build with Bun.build
|
|
49
|
-
const { installExternalsAndBuild } = await import('./server-bundler');
|
|
50
|
-
await installExternalsAndBuild({
|
|
51
|
-
rootDir,
|
|
52
|
-
dev,
|
|
53
|
-
logger,
|
|
54
|
-
});
|
|
55
|
-
} catch (error) {
|
|
56
|
-
logger.error('server-bundler import or execution failed: %s', error);
|
|
57
|
-
throw error;
|
|
70
|
+
const srcDir = join(rootDir, 'src');
|
|
71
|
+
|
|
72
|
+
// Generate documentation files (if they don't exist)
|
|
73
|
+
const { generateDocumentation } = await import('./docs-generator');
|
|
74
|
+
await generateDocumentation(srcDir, logger);
|
|
75
|
+
|
|
76
|
+
// Generate/update prompt files in dev mode only (non-blocking)
|
|
77
|
+
if (dev) {
|
|
78
|
+
import('./prompt-generator')
|
|
79
|
+
.then(({ generatePromptFiles }) => generatePromptFiles(srcDir, logger))
|
|
80
|
+
.catch((err) => logger.warn('Failed to generate prompt files: %s', err.message));
|
|
58
81
|
}
|
|
82
|
+
|
|
83
|
+
// Generate lifecycle types (if setup() exists)
|
|
84
|
+
const { generateLifecycleTypes } = await import('./lifecycle-generator');
|
|
85
|
+
await generateLifecycleTypes(rootDir, srcDir, logger);
|
|
86
|
+
|
|
87
|
+
// Then, generate the entry file
|
|
88
|
+
const { generateEntryFile } = await import('../entry-generator');
|
|
89
|
+
await generateEntryFile({
|
|
90
|
+
rootDir,
|
|
91
|
+
projectId,
|
|
92
|
+
deploymentId: deploymentId || '',
|
|
93
|
+
logger,
|
|
94
|
+
mode: dev ? 'dev' : 'prod',
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Finally, build with Bun.build
|
|
98
|
+
const { installExternalsAndBuild } = await import('./server-bundler');
|
|
99
|
+
await installExternalsAndBuild({
|
|
100
|
+
rootDir,
|
|
101
|
+
dev,
|
|
102
|
+
logger,
|
|
103
|
+
});
|
|
59
104
|
return;
|
|
60
105
|
}
|
|
61
106
|
|
|
@@ -75,7 +120,8 @@ export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
|
75
120
|
const { workbenchEnabled = false, workbenchRoute = '/workbench' } = options;
|
|
76
121
|
|
|
77
122
|
// Load custom user plugins from agentuity.config.ts if it exists
|
|
78
|
-
const
|
|
123
|
+
const clientOutDir = join(rootDir, '.agentuity/client');
|
|
124
|
+
const plugins = [react(), browserEnvPlugin(), flattenHtmlOutputPlugin(clientOutDir)];
|
|
79
125
|
const { loadAgentuityConfig } = await import('./config-loader');
|
|
80
126
|
const userConfig = await loadAgentuityConfig(rootDir, logger);
|
|
81
127
|
const userPlugins = userConfig?.plugins || [];
|
|
@@ -94,14 +140,18 @@ export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
|
94
140
|
}
|
|
95
141
|
|
|
96
142
|
// Determine CDN base URL for production builds
|
|
143
|
+
// Use CDN for all non-dev builds with a deploymentId (including local region)
|
|
97
144
|
const isLocalRegion = options.region === 'local';
|
|
145
|
+
const cdnDomain = isLocalRegion
|
|
146
|
+
? 'localstack-static-assets.t3.storage.dev'
|
|
147
|
+
: 'static.agentuity.com';
|
|
98
148
|
const cdnBaseUrl =
|
|
99
|
-
!dev && deploymentId
|
|
100
|
-
? `https://static.agentuity.com/${deploymentId}/client/`
|
|
101
|
-
: undefined;
|
|
149
|
+
!dev && deploymentId ? `https://${cdnDomain}/${deploymentId}/client/` : undefined;
|
|
102
150
|
|
|
103
151
|
viteConfig = {
|
|
104
|
-
root
|
|
152
|
+
// Use project root as Vite root so plugins (e.g., TanStack Router) resolve paths
|
|
153
|
+
// from the repo root, matching where agentuity.config.ts is located
|
|
154
|
+
root: rootDir,
|
|
105
155
|
plugins,
|
|
106
156
|
envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'],
|
|
107
157
|
publicDir: join(rootDir, 'src', 'web', 'public'),
|
|
@@ -116,7 +166,7 @@ export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
|
116
166
|
: 'undefined',
|
|
117
167
|
},
|
|
118
168
|
build: {
|
|
119
|
-
outDir:
|
|
169
|
+
outDir: clientOutDir,
|
|
120
170
|
rollupOptions: {
|
|
121
171
|
input: htmlPath,
|
|
122
172
|
},
|
|
@@ -167,20 +217,15 @@ export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
|
167
217
|
}
|
|
168
218
|
|
|
169
219
|
// Build with Vite
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const buildMode = dev ? 'development' : 'production';
|
|
220
|
+
// Force the build to use the correct mode
|
|
221
|
+
const buildMode = dev ? 'development' : 'production';
|
|
173
222
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
223
|
+
await viteBuild({
|
|
224
|
+
...viteConfig,
|
|
225
|
+
mode: buildMode,
|
|
226
|
+
});
|
|
178
227
|
|
|
179
|
-
|
|
180
|
-
} catch (error) {
|
|
181
|
-
logger.error(`Vite build failed for mode ${mode}:`, error);
|
|
182
|
-
throw error;
|
|
183
|
-
}
|
|
228
|
+
logger.debug(`Vite build complete for mode: ${mode}`);
|
|
184
229
|
}
|
|
185
230
|
|
|
186
231
|
interface BuildResult {
|
|
@@ -213,64 +258,8 @@ export async function runAllBuilds(options: Omit<ViteBuildOptions, 'mode'>): Pro
|
|
|
213
258
|
await generateWorkbenchFiles(rootDir, projectId, workbenchConfig, logger);
|
|
214
259
|
}
|
|
215
260
|
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
// 1. Build client (only if web frontend exists)
|
|
220
|
-
if (hasWebFrontend) {
|
|
221
|
-
logger.debug('Building client assets...');
|
|
222
|
-
try {
|
|
223
|
-
const started = Date.now();
|
|
224
|
-
await runViteBuild({
|
|
225
|
-
...options,
|
|
226
|
-
mode: 'client',
|
|
227
|
-
workbenchEnabled: workbenchConfig.enabled,
|
|
228
|
-
workbenchRoute: workbenchConfig.route,
|
|
229
|
-
});
|
|
230
|
-
result.client.included = true;
|
|
231
|
-
result.client.duration = Date.now() - started;
|
|
232
|
-
} catch (error) {
|
|
233
|
-
logger.error('Client build failed:', error);
|
|
234
|
-
throw error;
|
|
235
|
-
}
|
|
236
|
-
} else {
|
|
237
|
-
logger.debug('Skipping client build - no src/web/index.html found');
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// 2. Build workbench (if enabled in config)
|
|
241
|
-
if (workbenchConfig.enabled) {
|
|
242
|
-
logger.debug('Building workbench assets...');
|
|
243
|
-
try {
|
|
244
|
-
const started = Date.now();
|
|
245
|
-
await runViteBuild({
|
|
246
|
-
...options,
|
|
247
|
-
mode: 'workbench',
|
|
248
|
-
workbenchRoute: workbenchConfig.route,
|
|
249
|
-
workbenchEnabled: true,
|
|
250
|
-
});
|
|
251
|
-
result.workbench.included = true;
|
|
252
|
-
result.workbench.duration = Date.now() - started;
|
|
253
|
-
} catch (error) {
|
|
254
|
-
logger.error('Workbench build failed:', error);
|
|
255
|
-
throw error;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// 3. Build server
|
|
260
|
-
logger.debug('Building server...');
|
|
261
|
-
try {
|
|
262
|
-
const started = Date.now();
|
|
263
|
-
await runViteBuild({ ...options, mode: 'server' });
|
|
264
|
-
result.server.included = true;
|
|
265
|
-
result.server.duration = Date.now() - started;
|
|
266
|
-
} catch (error) {
|
|
267
|
-
logger.error('Server build failed:', error);
|
|
268
|
-
throw error;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// 4. Generate registry and metadata (after all builds complete)
|
|
272
|
-
logger.debug('Generating agent registry and metadata...');
|
|
273
|
-
const { generateMetadata, writeMetadataFile } = await import('./metadata-generator');
|
|
261
|
+
// 1. Discover agents and routes BEFORE builds
|
|
262
|
+
logger.debug('Discovering agents and routes...');
|
|
274
263
|
const { generateAgentRegistry, generateRouteRegistry } = await import('./registry-generator');
|
|
275
264
|
const { discoverAgents } = await import('./agent-discovery');
|
|
276
265
|
const { discoverRoutes } = await import('./route-discovery');
|
|
@@ -289,11 +278,56 @@ export async function runAllBuilds(options: Omit<ViteBuildOptions, 'mode'>): Pro
|
|
|
289
278
|
logger
|
|
290
279
|
);
|
|
291
280
|
|
|
292
|
-
// Generate agent and route registries for type augmentation
|
|
281
|
+
// Generate agent and route registries for type augmentation BEFORE builds
|
|
282
|
+
// (TypeScript needs these files to exist during type checking)
|
|
293
283
|
generateAgentRegistry(srcDir, agentMetadata);
|
|
294
284
|
generateRouteRegistry(srcDir, routeInfoList);
|
|
295
285
|
logger.debug('Agent and route registries generated');
|
|
296
286
|
|
|
287
|
+
// Check if web frontend exists
|
|
288
|
+
const hasWebFrontend = await Bun.file(join(rootDir, 'src', 'web', 'index.html')).exists();
|
|
289
|
+
|
|
290
|
+
// 2. Build client (only if web frontend exists)
|
|
291
|
+
if (hasWebFrontend) {
|
|
292
|
+
logger.debug('Building client assets...');
|
|
293
|
+
const started = Date.now();
|
|
294
|
+
await runViteBuild({
|
|
295
|
+
...options,
|
|
296
|
+
mode: 'client',
|
|
297
|
+
workbenchEnabled: workbenchConfig.enabled,
|
|
298
|
+
workbenchRoute: workbenchConfig.route,
|
|
299
|
+
});
|
|
300
|
+
result.client.included = true;
|
|
301
|
+
result.client.duration = Date.now() - started;
|
|
302
|
+
} else {
|
|
303
|
+
logger.debug('Skipping client build - no src/web/index.html found');
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// 3. Build workbench (if enabled in config)
|
|
307
|
+
if (workbenchConfig.enabled) {
|
|
308
|
+
logger.debug('Building workbench assets...');
|
|
309
|
+
const started = Date.now();
|
|
310
|
+
await runViteBuild({
|
|
311
|
+
...options,
|
|
312
|
+
mode: 'workbench',
|
|
313
|
+
workbenchRoute: workbenchConfig.route,
|
|
314
|
+
workbenchEnabled: true,
|
|
315
|
+
});
|
|
316
|
+
result.workbench.included = true;
|
|
317
|
+
result.workbench.duration = Date.now() - started;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// 4. Build server
|
|
321
|
+
logger.debug('Building server...');
|
|
322
|
+
const serverStarted = Date.now();
|
|
323
|
+
await runViteBuild({ ...options, mode: 'server' });
|
|
324
|
+
result.server.included = true;
|
|
325
|
+
result.server.duration = Date.now() - serverStarted;
|
|
326
|
+
|
|
327
|
+
// 5. Generate metadata (after all builds complete)
|
|
328
|
+
logger.debug('Generating metadata...');
|
|
329
|
+
const { generateMetadata, writeMetadataFile } = await import('./metadata-generator');
|
|
330
|
+
|
|
297
331
|
// Generate metadata
|
|
298
332
|
const metadata = await generateMetadata({
|
|
299
333
|
rootDir,
|
|
@@ -75,8 +75,8 @@ export async function viteBundle(options: ViteBundleOptions): Promise<{ output:
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
try {
|
|
78
|
-
// Run all
|
|
79
|
-
logger.debug('Starting
|
|
78
|
+
// Run all builds (client -> workbench -> server)
|
|
79
|
+
logger.debug('Starting builds...');
|
|
80
80
|
|
|
81
81
|
const result = await runAllBuilds({
|
|
82
82
|
rootDir,
|
|
@@ -90,16 +90,16 @@ export async function viteBundle(options: ViteBundleOptions): Promise<{ output:
|
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
if (result.client.included) {
|
|
93
|
-
output.push(tui.muted(`✓ Client
|
|
93
|
+
output.push(tui.muted(`✓ Client built in ${result.client.duration}ms`));
|
|
94
94
|
}
|
|
95
95
|
if (result.workbench.included) {
|
|
96
|
-
output.push(tui.muted(`✓ Workbench
|
|
96
|
+
output.push(tui.muted(`✓ Workbench built in ${result.workbench.duration}ms`));
|
|
97
97
|
}
|
|
98
98
|
if (result.server.included) {
|
|
99
|
-
output.push(tui.muted(`✓ Server
|
|
99
|
+
output.push(tui.muted(`✓ Server built in ${result.server.duration}ms`));
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
logger.debug('
|
|
102
|
+
logger.debug('All builds complete');
|
|
103
103
|
|
|
104
104
|
return { output };
|
|
105
105
|
} catch (error) {
|