@agentuity/cli 0.0.95 → 0.0.97
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 +84 -0
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +8 -5
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +190 -27
- package/dist/cli.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts +20 -0
- package/dist/cmd/build/entry-generator.d.ts.map +1 -0
- package/dist/cmd/build/entry-generator.js +366 -0
- package/dist/cmd/build/entry-generator.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +5 -23
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +33 -0
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -0
- package/dist/cmd/build/vite/agent-discovery.js +297 -0
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -0
- package/dist/cmd/build/vite/browser-env-plugin.d.ts +9 -0
- package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +1 -0
- package/dist/cmd/build/vite/browser-env-plugin.js +28 -0
- package/dist/cmd/build/vite/browser-env-plugin.js.map +1 -0
- package/dist/cmd/build/vite/bun-dev-server.d.ts +29 -0
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -0
- package/dist/cmd/build/vite/bun-dev-server.js +54 -0
- package/dist/cmd/build/vite/bun-dev-server.js.map +1 -0
- package/dist/cmd/build/vite/config-loader.d.ts +23 -0
- package/dist/cmd/build/vite/config-loader.d.ts.map +1 -0
- package/dist/cmd/build/vite/config-loader.js +50 -0
- package/dist/cmd/build/vite/config-loader.js.map +1 -0
- package/dist/cmd/build/vite/index.d.ts +26 -0
- package/dist/cmd/build/vite/index.d.ts.map +1 -0
- package/dist/cmd/build/vite/index.js +127 -0
- package/dist/cmd/build/vite/index.js.map +1 -0
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +11 -0
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/lifecycle-generator.js +35 -0
- package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -0
- package/dist/cmd/build/vite/metadata-generator.d.ts +32 -0
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/metadata-generator.js +489 -0
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -0
- package/dist/cmd/build/vite/patch-plugin.d.ts +21 -0
- package/dist/cmd/build/vite/patch-plugin.d.ts.map +1 -0
- package/dist/cmd/build/vite/patch-plugin.js +70 -0
- package/dist/cmd/build/vite/patch-plugin.js.map +1 -0
- package/dist/cmd/build/vite/registry-generator.d.ts +19 -0
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -0
- package/dist/cmd/build/{route-registry.js → vite/registry-generator.js} +126 -48
- package/dist/cmd/build/vite/registry-generator.js.map +1 -0
- package/dist/cmd/build/vite/route-discovery.d.ts +58 -0
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -0
- package/dist/cmd/build/vite/route-discovery.js +125 -0
- package/dist/cmd/build/vite/route-discovery.js.map +1 -0
- package/dist/cmd/build/vite/server-bundler.d.ts +16 -0
- package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -0
- package/dist/cmd/build/vite/server-bundler.js +194 -0
- package/dist/cmd/build/vite/server-bundler.js.map +1 -0
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts +19 -0
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -0
- package/dist/cmd/build/vite/vite-asset-server-config.js +105 -0
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -0
- package/dist/cmd/build/vite/vite-asset-server.d.ts +23 -0
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -0
- package/dist/cmd/build/vite/vite-asset-server.js +41 -0
- package/dist/cmd/build/vite/vite-asset-server.js.map +1 -0
- package/dist/cmd/build/vite/vite-builder.d.ts +44 -0
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -0
- package/dist/cmd/build/vite/vite-builder.js +234 -0
- package/dist/cmd/build/vite/vite-builder.js.map +1 -0
- package/dist/cmd/build/vite/workbench-generator.d.ts +10 -0
- package/dist/cmd/build/vite/workbench-generator.d.ts.map +1 -0
- package/dist/cmd/build/vite/workbench-generator.js +135 -0
- package/dist/cmd/build/vite/workbench-generator.js.map +1 -0
- package/dist/cmd/build/vite-bundler.d.ts +23 -0
- package/dist/cmd/build/vite-bundler.d.ts.map +1 -0
- package/dist/cmd/build/vite-bundler.js +79 -0
- package/dist/cmd/build/vite-bundler.js.map +1 -0
- package/dist/cmd/cloud/agent/get.d.ts.map +1 -1
- package/dist/cmd/cloud/agent/get.js +1 -0
- package/dist/cmd/cloud/agent/get.js.map +1 -1
- package/dist/cmd/cloud/agent/list.d.ts.map +1 -1
- package/dist/cmd/cloud/agent/list.js +1 -0
- package/dist/cmd/cloud/agent/list.js.map +1 -1
- package/dist/cmd/cloud/db/get.d.ts.map +1 -1
- package/dist/cmd/cloud/db/get.js +1 -0
- package/dist/cmd/cloud/db/get.js.map +1 -1
- package/dist/cmd/cloud/db/list.d.ts.map +1 -1
- package/dist/cmd/cloud/db/list.js +1 -0
- package/dist/cmd/cloud/db/list.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +152 -128
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/deployment/list.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/list.js +4 -0
- package/dist/cmd/cloud/deployment/list.js.map +1 -1
- package/dist/cmd/cloud/env/list.d.ts.map +1 -1
- package/dist/cmd/cloud/env/list.js +1 -0
- package/dist/cmd/cloud/env/list.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/get.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/get.js +1 -0
- package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/keys.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/keys.js +1 -0
- package/dist/cmd/cloud/keyvalue/keys.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/list-namespaces.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/list-namespaces.js +1 -0
- package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -1
- package/dist/cmd/cloud/keyvalue/stats.d.ts.map +1 -1
- package/dist/cmd/cloud/keyvalue/stats.js +1 -0
- package/dist/cmd/cloud/keyvalue/stats.js.map +1 -1
- package/dist/cmd/cloud/secret/list.d.ts.map +1 -1
- package/dist/cmd/cloud/secret/list.js +1 -0
- package/dist/cmd/cloud/secret/list.js.map +1 -1
- package/dist/cmd/cloud/session/list.d.ts.map +1 -1
- package/dist/cmd/cloud/session/list.js +4 -0
- package/dist/cmd/cloud/session/list.js.map +1 -1
- package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/get.js +1 -0
- package/dist/cmd/cloud/storage/get.js.map +1 -1
- package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
- package/dist/cmd/cloud/storage/list.js +3 -0
- package/dist/cmd/cloud/storage/list.js.map +1 -1
- package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/get.js +1 -0
- package/dist/cmd/cloud/stream/get.js.map +1 -1
- package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
- package/dist/cmd/cloud/stream/list.js +1 -0
- package/dist/cmd/cloud/stream/list.js.map +1 -1
- package/dist/cmd/cloud/vector/get.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/get.js +1 -0
- package/dist/cmd/cloud/vector/get.js.map +1 -1
- package/dist/cmd/cloud/vector/search.d.ts.map +1 -1
- package/dist/cmd/cloud/vector/search.js +1 -0
- package/dist/cmd/cloud/vector/search.js.map +1 -1
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +289 -758
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/sync.d.ts +1 -1
- package/dist/cmd/dev/sync.d.ts.map +1 -1
- package/dist/cmd/dev/sync.js +3 -0
- package/dist/cmd/dev/sync.js.map +1 -1
- package/dist/cmd/profile/show.d.ts.map +1 -1
- package/dist/cmd/profile/show.js +3 -4
- package/dist/cmd/profile/show.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +3 -4
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/list.d.ts.map +1 -1
- package/dist/cmd/project/list.js +1 -0
- package/dist/cmd/project/list.js.map +1 -1
- package/dist/cmd/project/show.d.ts.map +1 -1
- package/dist/cmd/project/show.js +1 -0
- package/dist/cmd/project/show.js.map +1 -1
- package/dist/cmd/upgrade/index.d.ts.map +1 -1
- package/dist/cmd/upgrade/index.js +43 -7
- package/dist/cmd/upgrade/index.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -11
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime-bootstrap.d.ts +3 -2
- package/dist/runtime-bootstrap.d.ts.map +1 -1
- package/dist/runtime-bootstrap.js +7 -2
- package/dist/runtime-bootstrap.js.map +1 -1
- package/dist/schemas/deploy.d.ts +1 -1
- package/dist/types.d.ts +40 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/bun-version-checker.d.ts +11 -0
- package/dist/utils/bun-version-checker.d.ts.map +1 -0
- package/dist/utils/bun-version-checker.js +56 -0
- package/dist/utils/bun-version-checker.js.map +1 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +5 -2
- package/dist/version-check.js.map +1 -1
- package/package.json +11 -3
- package/src/auth.ts +9 -5
- package/src/cli.ts +228 -29
- package/src/cmd/build/entry-generator.ts +404 -0
- package/src/cmd/build/index.ts +7 -28
- package/src/cmd/build/vite/agent-discovery.ts +467 -0
- package/src/cmd/build/vite/browser-env-plugin.ts +34 -0
- package/src/cmd/build/vite/bun-dev-server.ts +78 -0
- package/src/cmd/build/vite/config-loader.ts +70 -0
- package/src/cmd/build/vite/index.ts +166 -0
- package/src/cmd/build/vite/lifecycle-generator.ts +43 -0
- package/src/cmd/build/vite/metadata-generator.ts +602 -0
- package/src/cmd/build/vite/patch-plugin.ts +88 -0
- package/src/cmd/build/vite/registry-generator.ts +288 -0
- package/src/cmd/build/vite/route-discovery.ts +186 -0
- package/src/cmd/build/vite/server-bundler.ts +258 -0
- package/src/cmd/build/vite/vite-asset-server-config.ts +134 -0
- package/src/cmd/build/vite/vite-asset-server.ts +66 -0
- package/src/cmd/build/vite/vite-builder.ts +288 -0
- package/src/cmd/build/vite/workbench-generator.ts +152 -0
- package/src/cmd/build/vite-bundler.ts +110 -0
- package/src/cmd/cloud/agent/get.ts +2 -0
- package/src/cmd/cloud/agent/list.ts +1 -0
- package/src/cmd/cloud/db/get.ts +1 -0
- package/src/cmd/cloud/db/list.ts +1 -0
- package/src/cmd/cloud/deploy.ts +175 -144
- package/src/cmd/cloud/deployment/list.ts +4 -0
- package/src/cmd/cloud/env/list.ts +1 -0
- package/src/cmd/cloud/keyvalue/get.ts +1 -0
- package/src/cmd/cloud/keyvalue/keys.ts +1 -0
- package/src/cmd/cloud/keyvalue/list-namespaces.ts +1 -0
- package/src/cmd/cloud/keyvalue/stats.ts +2 -0
- package/src/cmd/cloud/secret/list.ts +1 -0
- package/src/cmd/cloud/session/list.ts +4 -0
- package/src/cmd/cloud/storage/get.ts +1 -0
- package/src/cmd/cloud/storage/list.ts +4 -0
- package/src/cmd/cloud/stream/get.ts +1 -0
- package/src/cmd/cloud/stream/list.ts +1 -0
- package/src/cmd/cloud/vector/get.ts +1 -0
- package/src/cmd/cloud/vector/search.ts +1 -0
- package/src/cmd/dev/index.ts +319 -921
- package/src/cmd/dev/sync.ts +5 -1
- package/src/cmd/profile/show.ts +3 -4
- package/src/cmd/project/create.ts +3 -4
- package/src/cmd/project/list.ts +1 -0
- package/src/cmd/project/show.ts +1 -0
- package/src/cmd/upgrade/index.ts +52 -8
- package/src/config.ts +31 -11
- package/src/index.ts +2 -0
- package/src/runtime-bootstrap.ts +8 -2
- package/src/types.ts +48 -1
- package/src/utils/bun-version-checker.ts +70 -0
- package/src/version-check.ts +6 -2
- package/dist/cmd/build/bundler.d.ts +0 -28
- package/dist/cmd/build/bundler.d.ts.map +0 -1
- package/dist/cmd/build/bundler.js +0 -800
- package/dist/cmd/build/bundler.js.map +0 -1
- package/dist/cmd/build/config-loader.d.ts +0 -16
- package/dist/cmd/build/config-loader.d.ts.map +0 -1
- package/dist/cmd/build/config-loader.js +0 -227
- package/dist/cmd/build/config-loader.js.map +0 -1
- package/dist/cmd/build/file.d.ts +0 -2
- package/dist/cmd/build/file.d.ts.map +0 -1
- package/dist/cmd/build/file.js +0 -10
- package/dist/cmd/build/file.js.map +0 -1
- package/dist/cmd/build/fix-duplicate-exports.d.ts +0 -2
- package/dist/cmd/build/fix-duplicate-exports.d.ts.map +0 -1
- package/dist/cmd/build/fix-duplicate-exports.js +0 -170
- package/dist/cmd/build/fix-duplicate-exports.js.map +0 -1
- package/dist/cmd/build/plugin.d.ts +0 -6
- package/dist/cmd/build/plugin.d.ts.map +0 -1
- package/dist/cmd/build/plugin.js +0 -645
- package/dist/cmd/build/plugin.js.map +0 -1
- package/dist/cmd/build/route-discovery.d.ts +0 -54
- package/dist/cmd/build/route-discovery.d.ts.map +0 -1
- package/dist/cmd/build/route-discovery.js +0 -148
- package/dist/cmd/build/route-discovery.js.map +0 -1
- package/dist/cmd/build/route-registry.d.ts +0 -38
- package/dist/cmd/build/route-registry.d.ts.map +0 -1
- package/dist/cmd/build/route-registry.js.map +0 -1
- package/src/cmd/build/bundler.ts +0 -965
- package/src/cmd/build/config-loader.ts +0 -268
- package/src/cmd/build/file.ts +0 -10
- package/src/cmd/build/fix-duplicate-exports.ts +0 -207
- package/src/cmd/build/plugin.ts +0 -782
- package/src/cmd/build/route-discovery.ts +0 -202
- package/src/cmd/build/route-registry.ts +0 -222
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite Builder
|
|
3
|
+
*
|
|
4
|
+
* Utilities for running Vite builds (client, server, workbench)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import type { InlineConfig } from 'vite';
|
|
9
|
+
import type { Logger } from '../../../types';
|
|
10
|
+
import { patchPlugin } from './patch-plugin';
|
|
11
|
+
import { browserEnvPlugin } from './browser-env-plugin';
|
|
12
|
+
|
|
13
|
+
export interface ViteBuildOptions {
|
|
14
|
+
rootDir: string;
|
|
15
|
+
mode: 'client' | 'server' | 'workbench';
|
|
16
|
+
dev?: boolean;
|
|
17
|
+
port?: number;
|
|
18
|
+
projectId?: string;
|
|
19
|
+
orgId?: string;
|
|
20
|
+
region?: string;
|
|
21
|
+
deploymentId?: string;
|
|
22
|
+
workbenchRoute?: string;
|
|
23
|
+
workbenchEnabled?: boolean;
|
|
24
|
+
logger: Logger;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Run a Vite build for the specified mode
|
|
29
|
+
* Generates vite config in .agentuity/.vite/ and uses it
|
|
30
|
+
*/
|
|
31
|
+
export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
32
|
+
const { rootDir, mode, dev = false, projectId = '', deploymentId = '', logger } = options;
|
|
33
|
+
|
|
34
|
+
logger.debug(`Running Vite build for mode: ${mode}`);
|
|
35
|
+
|
|
36
|
+
// For server mode, use Bun.build (preserves process.env at runtime)
|
|
37
|
+
if (mode === 'server') {
|
|
38
|
+
try {
|
|
39
|
+
// First, generate the entry file
|
|
40
|
+
const { generateEntryFile } = await import('../entry-generator');
|
|
41
|
+
await generateEntryFile({
|
|
42
|
+
rootDir,
|
|
43
|
+
projectId,
|
|
44
|
+
deploymentId: deploymentId || '',
|
|
45
|
+
logger,
|
|
46
|
+
mode: dev ? 'dev' : 'prod',
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Then, build with Bun.build
|
|
50
|
+
const { installExternalsAndBuild } = await import('./server-bundler');
|
|
51
|
+
await installExternalsAndBuild({
|
|
52
|
+
rootDir,
|
|
53
|
+
dev,
|
|
54
|
+
logger,
|
|
55
|
+
});
|
|
56
|
+
} catch (error) {
|
|
57
|
+
logger.error('server-bundler import or execution failed:', error);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Dynamically import vite and react plugin
|
|
64
|
+
const { build: viteBuild } = await import('vite');
|
|
65
|
+
const reactModule = await import('@vitejs/plugin-react');
|
|
66
|
+
const react = reactModule.default;
|
|
67
|
+
|
|
68
|
+
// For client/workbench, use inline config (no agentuity plugin needed)
|
|
69
|
+
let viteConfig: InlineConfig;
|
|
70
|
+
|
|
71
|
+
if (mode === 'client') {
|
|
72
|
+
// Vite needs index.html as entry point for web apps
|
|
73
|
+
const htmlPath = join(rootDir, 'src', 'web', 'index.html');
|
|
74
|
+
|
|
75
|
+
// Use workbench config passed from runAllBuilds
|
|
76
|
+
const { workbenchEnabled = false, workbenchRoute = '/workbench' } = options;
|
|
77
|
+
|
|
78
|
+
// Load custom user plugins from agentuity.config.ts if it exists
|
|
79
|
+
const plugins = [react(), browserEnvPlugin(), patchPlugin({ logger, dev })];
|
|
80
|
+
const { loadAgentuityConfig } = await import('./config-loader');
|
|
81
|
+
const userConfig = await loadAgentuityConfig(rootDir, logger);
|
|
82
|
+
const userPlugins = userConfig?.plugins || [];
|
|
83
|
+
plugins.push(...userPlugins);
|
|
84
|
+
if (userPlugins.length > 0) {
|
|
85
|
+
logger.debug('Loaded %d custom plugin(s) from agentuity.config.ts', userPlugins.length);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Determine CDN base URL for production builds
|
|
89
|
+
const isLocalRegion = options.region === 'local';
|
|
90
|
+
const cdnBaseUrl =
|
|
91
|
+
!dev && deploymentId && !isLocalRegion
|
|
92
|
+
? `https://static.agentuity.com/${deploymentId}/`
|
|
93
|
+
: undefined;
|
|
94
|
+
|
|
95
|
+
viteConfig = {
|
|
96
|
+
root: join(rootDir, 'src', 'web'), // Set web dir as root
|
|
97
|
+
plugins,
|
|
98
|
+
envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'],
|
|
99
|
+
publicDir: join(rootDir, 'src', 'web', 'public'),
|
|
100
|
+
base: cdnBaseUrl, // CDN URL for production assets
|
|
101
|
+
define: {
|
|
102
|
+
// Set workbench path if enabled (use import.meta.env for client code)
|
|
103
|
+
'import.meta.env.AGENTUITY_PUBLIC_WORKBENCH_PATH': workbenchEnabled
|
|
104
|
+
? JSON.stringify(workbenchRoute)
|
|
105
|
+
: 'undefined',
|
|
106
|
+
},
|
|
107
|
+
build: {
|
|
108
|
+
outDir: join(rootDir, '.agentuity/client'),
|
|
109
|
+
rollupOptions: {
|
|
110
|
+
input: htmlPath,
|
|
111
|
+
},
|
|
112
|
+
manifest: true,
|
|
113
|
+
emptyOutDir: true,
|
|
114
|
+
// Disable copying public files - Vite already includes them in assets with hashing
|
|
115
|
+
copyPublicDir: false,
|
|
116
|
+
},
|
|
117
|
+
logLevel: 'warn',
|
|
118
|
+
};
|
|
119
|
+
} else if (mode === 'workbench') {
|
|
120
|
+
const { workbenchRoute = '/workbench' } = options;
|
|
121
|
+
// Ensure route ends with / for Vite base
|
|
122
|
+
const base = workbenchRoute.endsWith('/') ? workbenchRoute : `${workbenchRoute}/`;
|
|
123
|
+
|
|
124
|
+
viteConfig = {
|
|
125
|
+
root: join(rootDir, '.agentuity/workbench-src'), // Use generated workbench source
|
|
126
|
+
base, // All workbench assets are under the configured route
|
|
127
|
+
plugins: [react(), patchPlugin({ logger, dev })],
|
|
128
|
+
envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'],
|
|
129
|
+
build: {
|
|
130
|
+
outDir: join(rootDir, '.agentuity/workbench'),
|
|
131
|
+
rollupOptions: {
|
|
132
|
+
input: join(rootDir, '.agentuity/workbench-src/index.html'),
|
|
133
|
+
},
|
|
134
|
+
manifest: true,
|
|
135
|
+
emptyOutDir: true,
|
|
136
|
+
},
|
|
137
|
+
logLevel: 'warn',
|
|
138
|
+
};
|
|
139
|
+
} else {
|
|
140
|
+
throw new Error(`Unknown build mode: ${mode}`);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Build with Vite
|
|
144
|
+
try {
|
|
145
|
+
// Force the build to use the correct mode
|
|
146
|
+
const buildMode = dev ? 'development' : 'production';
|
|
147
|
+
|
|
148
|
+
await viteBuild({
|
|
149
|
+
...viteConfig,
|
|
150
|
+
mode: buildMode,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
logger.debug(`Vite build complete for mode: ${mode}`);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
logger.error(`Vite build failed for mode ${mode}:`, error);
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
interface BuildResult {
|
|
161
|
+
workbench: { included: boolean; duration: number };
|
|
162
|
+
client: { included: boolean; duration: number };
|
|
163
|
+
server: { included: boolean; duration: number };
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Run all builds in sequence: client -> workbench (if enabled) -> server
|
|
168
|
+
*/
|
|
169
|
+
export async function runAllBuilds(options: Omit<ViteBuildOptions, 'mode'>): Promise<BuildResult> {
|
|
170
|
+
const { rootDir, projectId = '', dev = false, logger } = options;
|
|
171
|
+
|
|
172
|
+
const result: BuildResult = {
|
|
173
|
+
workbench: { included: false, duration: 0 },
|
|
174
|
+
client: { included: false, duration: 0 },
|
|
175
|
+
server: { included: false, duration: 0 },
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// Load config to check if workbench is enabled (dev mode only)
|
|
179
|
+
const { loadAgentuityConfig, getWorkbenchConfig } = await import('./config-loader');
|
|
180
|
+
const config = await loadAgentuityConfig(rootDir, logger);
|
|
181
|
+
const workbenchConfig = getWorkbenchConfig(config, dev);
|
|
182
|
+
|
|
183
|
+
// Generate workbench files BEFORE any builds if enabled (dev mode only)
|
|
184
|
+
if (workbenchConfig.enabled) {
|
|
185
|
+
logger.debug('Workbench enabled (dev mode), generating files before build...');
|
|
186
|
+
const { generateWorkbenchFiles } = await import('./workbench-generator');
|
|
187
|
+
await generateWorkbenchFiles(rootDir, projectId, workbenchConfig, logger);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Check if web frontend exists
|
|
191
|
+
const hasWebFrontend = await Bun.file(join(rootDir, 'src', 'web', 'index.html')).exists();
|
|
192
|
+
|
|
193
|
+
// 1. Build client (only if web frontend exists)
|
|
194
|
+
if (hasWebFrontend) {
|
|
195
|
+
logger.debug('Building client assets...');
|
|
196
|
+
try {
|
|
197
|
+
const started = Date.now();
|
|
198
|
+
await runViteBuild({
|
|
199
|
+
...options,
|
|
200
|
+
mode: 'client',
|
|
201
|
+
workbenchEnabled: workbenchConfig.enabled,
|
|
202
|
+
workbenchRoute: workbenchConfig.route,
|
|
203
|
+
});
|
|
204
|
+
result.client.included = true;
|
|
205
|
+
result.client.duration = Date.now() - started;
|
|
206
|
+
} catch (error) {
|
|
207
|
+
logger.error('Client build failed:', error);
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
} else {
|
|
211
|
+
logger.debug('Skipping client build - no src/web/index.html found');
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// 2. Build workbench (if enabled in config)
|
|
215
|
+
if (workbenchConfig.enabled) {
|
|
216
|
+
logger.debug('Building workbench assets...');
|
|
217
|
+
try {
|
|
218
|
+
const started = Date.now();
|
|
219
|
+
await runViteBuild({
|
|
220
|
+
...options,
|
|
221
|
+
mode: 'workbench',
|
|
222
|
+
workbenchRoute: workbenchConfig.route,
|
|
223
|
+
workbenchEnabled: true,
|
|
224
|
+
});
|
|
225
|
+
result.workbench.included = true;
|
|
226
|
+
result.workbench.duration = Date.now() - started;
|
|
227
|
+
} catch (error) {
|
|
228
|
+
logger.error('Workbench build failed:', error);
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// 3. Build server
|
|
234
|
+
logger.debug('Building server...');
|
|
235
|
+
try {
|
|
236
|
+
const started = Date.now();
|
|
237
|
+
await runViteBuild({ ...options, mode: 'server' });
|
|
238
|
+
result.server.included = true;
|
|
239
|
+
result.server.duration = Date.now() - started;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
logger.error('Server build failed:', error);
|
|
242
|
+
throw error;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// 4. Generate registry and metadata (after all builds complete)
|
|
246
|
+
logger.debug('Generating agent registry and metadata...');
|
|
247
|
+
const { generateMetadata, writeMetadataFile } = await import('./metadata-generator');
|
|
248
|
+
const { generateAgentRegistry, generateRouteRegistry } = await import('./registry-generator');
|
|
249
|
+
const { discoverAgents } = await import('./agent-discovery');
|
|
250
|
+
const { discoverRoutes } = await import('./route-discovery');
|
|
251
|
+
|
|
252
|
+
const srcDir = join(rootDir, 'src');
|
|
253
|
+
const agentMetadata = await discoverAgents(
|
|
254
|
+
srcDir,
|
|
255
|
+
projectId,
|
|
256
|
+
options.deploymentId || '',
|
|
257
|
+
logger
|
|
258
|
+
);
|
|
259
|
+
const { routes, routeInfoList } = await discoverRoutes(
|
|
260
|
+
srcDir,
|
|
261
|
+
projectId,
|
|
262
|
+
options.deploymentId || '',
|
|
263
|
+
logger
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
// Generate agent and route registries for type augmentation
|
|
267
|
+
generateAgentRegistry(srcDir, agentMetadata);
|
|
268
|
+
generateRouteRegistry(srcDir, routeInfoList);
|
|
269
|
+
logger.debug('Agent and route registries generated');
|
|
270
|
+
|
|
271
|
+
// Generate metadata
|
|
272
|
+
const metadata = await generateMetadata({
|
|
273
|
+
rootDir,
|
|
274
|
+
projectId,
|
|
275
|
+
orgId: options.orgId,
|
|
276
|
+
deploymentId: options.deploymentId,
|
|
277
|
+
agents: agentMetadata,
|
|
278
|
+
routes,
|
|
279
|
+
logger,
|
|
280
|
+
dev,
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
writeMetadataFile(rootDir, metadata, dev, logger);
|
|
284
|
+
logger.debug('Registry and metadata generation complete');
|
|
285
|
+
|
|
286
|
+
logger.debug('All builds complete');
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workbench file generator for Vite builds
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { mkdirSync, existsSync, cpSync } from 'node:fs';
|
|
7
|
+
import {
|
|
8
|
+
encodeWorkbenchConfig,
|
|
9
|
+
type WorkbenchConfig as CoreWorkbenchConfig,
|
|
10
|
+
} from '@agentuity/core';
|
|
11
|
+
import type { Logger, WorkbenchConfig } from '../../../types';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Find the @agentuity/workbench package path
|
|
15
|
+
*/
|
|
16
|
+
async function findWorkbenchPackage(rootDir: string, logger: Logger): Promise<string | null> {
|
|
17
|
+
// Try app-level node_modules first
|
|
18
|
+
const appLevel = join(rootDir, 'node_modules', '@agentuity', 'workbench');
|
|
19
|
+
if (existsSync(appLevel)) {
|
|
20
|
+
return appLevel;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Try workspace root (walk up looking for workspace)
|
|
24
|
+
let current = rootDir;
|
|
25
|
+
while (true) {
|
|
26
|
+
const pkgPath = join(current, 'package.json');
|
|
27
|
+
if (existsSync(pkgPath)) {
|
|
28
|
+
try {
|
|
29
|
+
const pkg = JSON.parse(await Bun.file(pkgPath).text());
|
|
30
|
+
if (pkg.workspaces) {
|
|
31
|
+
// Found workspace root
|
|
32
|
+
const workspaceWorkbench = join(current, 'node_modules', '@agentuity', 'workbench');
|
|
33
|
+
if (existsSync(workspaceWorkbench)) {
|
|
34
|
+
return workspaceWorkbench;
|
|
35
|
+
}
|
|
36
|
+
// Try workspace packages directory
|
|
37
|
+
const packagesWorkbench = join(current, 'packages', 'workbench');
|
|
38
|
+
if (existsSync(packagesWorkbench)) {
|
|
39
|
+
return packagesWorkbench;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch {
|
|
43
|
+
// Ignore parse errors
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const parent = join(current, '..');
|
|
47
|
+
if (parent === current) break;
|
|
48
|
+
current = parent;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
logger.warn('Could not find @agentuity/workbench package');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Generate workbench main.tsx file
|
|
57
|
+
*/
|
|
58
|
+
function generateMainTsx(config: CoreWorkbenchConfig): string {
|
|
59
|
+
const encodedConfig = encodeWorkbenchConfig(config);
|
|
60
|
+
return `// Generated workbench entry point
|
|
61
|
+
import React from 'react';
|
|
62
|
+
import { createRoot } from 'react-dom/client';
|
|
63
|
+
import { App } from '@agentuity/workbench';
|
|
64
|
+
import './styles.css'; // Import CSS for Vite HMR
|
|
65
|
+
|
|
66
|
+
// Root element
|
|
67
|
+
const rootElement = document.getElementById('root');
|
|
68
|
+
if (!rootElement) {
|
|
69
|
+
throw new Error('Root element not found');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Render the app
|
|
73
|
+
const root = createRoot(rootElement);
|
|
74
|
+
root.render(<App configBase64="${encodedConfig}" />);
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Generate workbench index.html file
|
|
80
|
+
*/
|
|
81
|
+
function generateIndexHtml(): string {
|
|
82
|
+
return `<!DOCTYPE html>
|
|
83
|
+
<html lang="en">
|
|
84
|
+
<head>
|
|
85
|
+
<meta charset="UTF-8">
|
|
86
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
87
|
+
<title>Agentuity Workbench</title>
|
|
88
|
+
</head>
|
|
89
|
+
<body>
|
|
90
|
+
<div id="root"></div>
|
|
91
|
+
<script type="module" src="./main.tsx"></script>
|
|
92
|
+
</body>
|
|
93
|
+
</html>`;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Generate workbench files in .agentuity/workbench-src/
|
|
98
|
+
* This keeps them separate from user's source code
|
|
99
|
+
*/
|
|
100
|
+
export async function generateWorkbenchFiles(
|
|
101
|
+
rootDir: string,
|
|
102
|
+
projectId: string,
|
|
103
|
+
config: WorkbenchConfig,
|
|
104
|
+
logger: Logger
|
|
105
|
+
): Promise<void> {
|
|
106
|
+
const workbenchDir = join(rootDir, '.agentuity', 'workbench-src');
|
|
107
|
+
|
|
108
|
+
// Create directory if it doesn't exist
|
|
109
|
+
if (!existsSync(workbenchDir)) {
|
|
110
|
+
mkdirSync(workbenchDir, { recursive: true });
|
|
111
|
+
logger.debug('Created workbench directory: %s', workbenchDir);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Create core workbench config
|
|
115
|
+
const coreConfig: CoreWorkbenchConfig = {
|
|
116
|
+
route: config.route ?? '/workbench',
|
|
117
|
+
headers: config.headers ?? {},
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// Generate main.tsx
|
|
121
|
+
const mainTsxPath = join(workbenchDir, 'main.tsx');
|
|
122
|
+
await Bun.write(mainTsxPath, generateMainTsx(coreConfig));
|
|
123
|
+
logger.debug('Generated workbench main.tsx');
|
|
124
|
+
|
|
125
|
+
// Generate index.html
|
|
126
|
+
const indexHtmlPath = join(workbenchDir, 'index.html');
|
|
127
|
+
await Bun.write(indexHtmlPath, generateIndexHtml());
|
|
128
|
+
logger.debug('Generated workbench index.html');
|
|
129
|
+
|
|
130
|
+
// Copy standalone CSS from @agentuity/workbench package
|
|
131
|
+
const workbenchPackage = await findWorkbenchPackage(rootDir, logger);
|
|
132
|
+
if (workbenchPackage) {
|
|
133
|
+
const distCss = join(workbenchPackage, 'dist', 'standalone.css');
|
|
134
|
+
const srcCss = join(workbenchPackage, 'src', 'standalone.css');
|
|
135
|
+
const destCss = join(workbenchDir, 'styles.css');
|
|
136
|
+
|
|
137
|
+
if (existsSync(distCss)) {
|
|
138
|
+
cpSync(distCss, destCss);
|
|
139
|
+
logger.debug('Copied workbench standalone.css from dist');
|
|
140
|
+
} else if (existsSync(srcCss)) {
|
|
141
|
+
cpSync(srcCss, destCss);
|
|
142
|
+
logger.warn('Using source standalone.css (ensure @agentuity/workbench is built)');
|
|
143
|
+
} else {
|
|
144
|
+
logger.error('Workbench styles not found in package: %s', workbenchPackage);
|
|
145
|
+
throw new Error('Workbench styles not found. Ensure @agentuity/workbench is installed.');
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
throw new Error('Could not find @agentuity/workbench package. Ensure it is installed.');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
logger.trace('Workbench files generated successfully');
|
|
152
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite-based bundler
|
|
3
|
+
*
|
|
4
|
+
* Replaces the Bun bundler with Vite for client and server builds
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { stat } from 'node:fs/promises';
|
|
9
|
+
import { StructuredError } from '@agentuity/core';
|
|
10
|
+
import type { Logger } from '../../types';
|
|
11
|
+
import { runAllBuilds } from './vite/vite-builder';
|
|
12
|
+
import { checkAndUpgradeDependencies } from '../../utils/dependency-checker';
|
|
13
|
+
import { checkBunVersion } from '../../utils/bun-version-checker';
|
|
14
|
+
import * as tui from '../../tui';
|
|
15
|
+
|
|
16
|
+
const AppFileNotFoundError = StructuredError('AppFileNotFoundError');
|
|
17
|
+
const BuildFailedError = StructuredError('BuildFailedError');
|
|
18
|
+
|
|
19
|
+
export interface ViteBundleOptions {
|
|
20
|
+
rootDir: string;
|
|
21
|
+
dev?: boolean;
|
|
22
|
+
projectId?: string;
|
|
23
|
+
orgId?: string;
|
|
24
|
+
region?: string;
|
|
25
|
+
deploymentId?: string;
|
|
26
|
+
port?: number;
|
|
27
|
+
logger: Logger;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Bundle the project using Vite
|
|
32
|
+
*/
|
|
33
|
+
export async function viteBundle(options: ViteBundleOptions): Promise<{ output: string[] }> {
|
|
34
|
+
const {
|
|
35
|
+
rootDir,
|
|
36
|
+
projectId = '',
|
|
37
|
+
orgId = '',
|
|
38
|
+
region = 'local',
|
|
39
|
+
deploymentId = '',
|
|
40
|
+
port = 3500,
|
|
41
|
+
logger,
|
|
42
|
+
} = options;
|
|
43
|
+
|
|
44
|
+
const output: string[] = [];
|
|
45
|
+
|
|
46
|
+
// Check Bun version meets minimum requirements
|
|
47
|
+
const versionOutput = await checkBunVersion();
|
|
48
|
+
output.push(...versionOutput);
|
|
49
|
+
|
|
50
|
+
// Verify app.ts exists
|
|
51
|
+
const appFile = join(rootDir, 'app.ts');
|
|
52
|
+
if (!(await Bun.file(appFile).exists())) {
|
|
53
|
+
throw new AppFileNotFoundError({
|
|
54
|
+
message: `App file not found at expected location: ${appFile}`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Verify src directory exists
|
|
59
|
+
const srcDir = join(rootDir, 'src');
|
|
60
|
+
const srcDirExists = await stat(srcDir)
|
|
61
|
+
.then((s) => s.isDirectory())
|
|
62
|
+
.catch(() => false);
|
|
63
|
+
if (!srcDirExists) {
|
|
64
|
+
throw new BuildFailedError({
|
|
65
|
+
message: `Source directory not found: ${srcDir}`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Check and upgrade @agentuity/* dependencies if needed
|
|
70
|
+
const upgradeResult = await checkAndUpgradeDependencies(rootDir, logger);
|
|
71
|
+
if (upgradeResult.failed.length > 0 && process.stdin.isTTY) {
|
|
72
|
+
throw new BuildFailedError({
|
|
73
|
+
message: `Failed to upgrade dependencies: ${upgradeResult.failed.join(', ')}`,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
// Run all Vite builds (client -> workbench -> server)
|
|
79
|
+
logger.debug('Starting Vite builds...');
|
|
80
|
+
|
|
81
|
+
const result = await runAllBuilds({
|
|
82
|
+
rootDir,
|
|
83
|
+
dev: options.dev || false, // Pass through dev flag for development builds
|
|
84
|
+
port,
|
|
85
|
+
projectId,
|
|
86
|
+
orgId,
|
|
87
|
+
region,
|
|
88
|
+
deploymentId,
|
|
89
|
+
logger,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (result.client.included) {
|
|
93
|
+
output.push(tui.muted(`✓ Client Built in ${result.client.duration}ms`));
|
|
94
|
+
}
|
|
95
|
+
if (result.workbench.included) {
|
|
96
|
+
output.push(tui.muted(`✓ Workbench Built in ${result.workbench.duration}ms`));
|
|
97
|
+
}
|
|
98
|
+
if (result.server.included) {
|
|
99
|
+
output.push(tui.muted(`✓ Server Built in ${result.server.duration}ms`));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
logger.debug('Vite builds complete');
|
|
103
|
+
|
|
104
|
+
return { output };
|
|
105
|
+
} catch (error) {
|
|
106
|
+
throw new BuildFailedError({
|
|
107
|
+
message: `Build failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -23,6 +23,8 @@ export const getSubcommand = createSubcommand({
|
|
|
23
23
|
}),
|
|
24
24
|
response: AgentSchema,
|
|
25
25
|
},
|
|
26
|
+
webUrl: (ctx) =>
|
|
27
|
+
`/projects/${encodeURIComponent(ctx.project.projectId)}/agents/${encodeURIComponent(ctx.args.agent_id)}`,
|
|
26
28
|
async handler(ctx) {
|
|
27
29
|
const { args, apiClient, project, options } = ctx;
|
|
28
30
|
const agentId = args.agent_id;
|
|
@@ -24,6 +24,7 @@ export const listSubcommand = createSubcommand({
|
|
|
24
24
|
}),
|
|
25
25
|
response: z.array(AgentSchema),
|
|
26
26
|
},
|
|
27
|
+
webUrl: (ctx) => `/projects/${encodeURIComponent(ctx.project.projectId)}/agents`,
|
|
27
28
|
async handler(ctx) {
|
|
28
29
|
const { opts, apiClient, project, options } = ctx;
|
|
29
30
|
const projectId = project.projectId;
|
package/src/cmd/cloud/db/get.ts
CHANGED
|
@@ -63,6 +63,7 @@ export const getSubcommand = createSubcommand({
|
|
|
63
63
|
}),
|
|
64
64
|
response: DBGetResponseSchema,
|
|
65
65
|
},
|
|
66
|
+
webUrl: (ctx) => `/services/database/${encodeURIComponent(ctx.args.name)}`,
|
|
66
67
|
|
|
67
68
|
async handler(ctx) {
|
|
68
69
|
const { logger, args, opts, options, orgId, region, auth } = ctx;
|