@agentuity/cli 2.0.11 → 3.0.0-alpha.0
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/dist/cmd/ai/prompt/index.d.ts.map +1 -1
- package/dist/cmd/ai/prompt/index.js +2 -7
- package/dist/cmd/ai/prompt/index.js.map +1 -1
- package/dist/cmd/build/adapters/generic.d.ts +29 -0
- package/dist/cmd/build/adapters/generic.d.ts.map +1 -0
- package/dist/cmd/build/adapters/generic.js +190 -0
- package/dist/cmd/build/adapters/generic.js.map +1 -0
- package/dist/cmd/build/adapters/index.d.ts +15 -0
- package/dist/cmd/build/adapters/index.d.ts.map +1 -0
- package/dist/cmd/build/adapters/index.js +24 -0
- package/dist/cmd/build/adapters/index.js.map +1 -0
- package/dist/cmd/build/adapters/nextjs.d.ts +11 -0
- package/dist/cmd/build/adapters/nextjs.d.ts.map +1 -0
- package/dist/cmd/build/adapters/nextjs.js +118 -0
- package/dist/cmd/build/adapters/nextjs.js.map +1 -0
- package/dist/cmd/build/adapters/static-server.d.ts +23 -0
- package/dist/cmd/build/adapters/static-server.d.ts.map +1 -0
- package/dist/cmd/build/adapters/static-server.js +137 -0
- package/dist/cmd/build/adapters/static-server.js.map +1 -0
- package/dist/cmd/build/adapters/types.d.ts +71 -0
- package/dist/cmd/build/adapters/types.d.ts.map +1 -0
- package/dist/cmd/build/adapters/types.js +8 -0
- package/dist/cmd/build/adapters/types.js.map +1 -0
- package/dist/cmd/build/detect/engine.d.ts +24 -0
- package/dist/cmd/build/detect/engine.d.ts.map +1 -0
- package/dist/cmd/build/detect/engine.js +91 -0
- package/dist/cmd/build/detect/engine.js.map +1 -0
- package/dist/cmd/build/detect/frameworks.d.ts +66 -0
- package/dist/cmd/build/detect/frameworks.d.ts.map +1 -0
- package/dist/cmd/build/detect/frameworks.js +278 -0
- package/dist/cmd/build/detect/frameworks.js.map +1 -0
- package/dist/cmd/build/detect/generic.d.ts +13 -0
- package/dist/cmd/build/detect/generic.d.ts.map +1 -0
- package/dist/cmd/build/detect/generic.js +62 -0
- package/dist/cmd/build/detect/generic.js.map +1 -0
- package/dist/cmd/build/detect/index.d.ts +27 -0
- package/dist/cmd/build/detect/index.d.ts.map +1 -0
- package/dist/cmd/build/detect/index.js +76 -0
- package/dist/cmd/build/detect/index.js.map +1 -0
- package/dist/cmd/build/detect/types.d.ts +91 -0
- package/dist/cmd/build/detect/types.d.ts.map +1 -0
- package/dist/cmd/build/detect/types.js +9 -0
- package/dist/cmd/build/detect/types.js.map +1 -0
- package/dist/cmd/build/detect/util.d.ts +41 -0
- package/dist/cmd/build/detect/util.d.ts.map +1 -0
- package/dist/cmd/build/detect/util.js +101 -0
- package/dist/cmd/build/detect/util.js.map +1 -0
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +49 -22
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/package/index.d.ts +30 -0
- package/dist/cmd/build/package/index.d.ts.map +1 -0
- package/dist/cmd/build/package/index.js +39 -0
- package/dist/cmd/build/package/index.js.map +1 -0
- package/dist/cmd/build/package/launch.d.ts +56 -0
- package/dist/cmd/build/package/launch.d.ts.map +1 -0
- package/dist/cmd/build/package/launch.js +56 -0
- package/dist/cmd/build/package/launch.js.map +1 -0
- package/dist/cmd/build/typecheck.d.ts.map +1 -1
- package/dist/cmd/build/typecheck.js +8 -0
- package/dist/cmd/build/typecheck.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +63 -13
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/coder/create.js +7 -7
- package/dist/cmd/coder/create.js.map +1 -1
- package/dist/cmd/coder/update.js +8 -8
- package/dist/cmd/coder/update.js.map +1 -1
- package/dist/cmd/coder/workspace/create.js +9 -9
- package/dist/cmd/coder/workspace/create.js.map +1 -1
- package/dist/cmd/dev/index.d.ts +9 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +127 -923
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/project/auth/shared.d.ts.map +1 -1
- package/dist/cmd/project/auth/shared.js +14 -38
- package/dist/cmd/project/auth/shared.js.map +1 -1
- package/dist/cmd/project/create.d.ts.map +1 -1
- package/dist/cmd/project/create.js +12 -19
- package/dist/cmd/project/create.js.map +1 -1
- package/dist/cmd/project/frameworks-ai-examples.d.ts +15 -0
- package/dist/cmd/project/frameworks-ai-examples.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-ai-examples.js +160 -0
- package/dist/cmd/project/frameworks-ai-examples.js.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts +17 -0
- package/dist/cmd/project/frameworks-landing-pages.d.ts.map +1 -0
- package/dist/cmd/project/frameworks-landing-pages.js +242 -0
- package/dist/cmd/project/frameworks-landing-pages.js.map +1 -0
- package/dist/cmd/project/frameworks.d.ts +58 -0
- package/dist/cmd/project/frameworks.d.ts.map +1 -0
- package/dist/cmd/project/frameworks.js +152 -0
- package/dist/cmd/project/frameworks.js.map +1 -0
- package/dist/cmd/project/reconcile.d.ts.map +1 -1
- package/dist/cmd/project/reconcile.js +10 -23
- package/dist/cmd/project/reconcile.js.map +1 -1
- package/dist/cmd/project/remote-import.js +1 -1
- package/dist/cmd/project/scaffold.d.ts +58 -0
- package/dist/cmd/project/scaffold.d.ts.map +1 -0
- package/dist/cmd/project/scaffold.js +223 -0
- package/dist/cmd/project/scaffold.js.map +1 -0
- package/dist/cmd/project/template-flow.d.ts +8 -4
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +93 -144
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/deploy-metadata.d.ts +49 -0
- package/dist/deploy-metadata.d.ts.map +1 -0
- package/dist/deploy-metadata.js +183 -0
- package/dist/deploy-metadata.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -30
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +13 -8
- package/src/cmd/ai/prompt/index.ts +2 -7
- package/src/cmd/build/adapters/generic.ts +239 -0
- package/src/cmd/build/adapters/index.ts +30 -0
- package/src/cmd/build/adapters/nextjs.ts +146 -0
- package/src/cmd/build/adapters/static-server.ts +143 -0
- package/src/cmd/build/adapters/types.ts +93 -0
- package/src/cmd/build/detect/engine.ts +111 -0
- package/src/cmd/build/detect/frameworks.ts +335 -0
- package/src/cmd/build/detect/generic.ts +71 -0
- package/src/cmd/build/detect/index.ts +122 -0
- package/src/cmd/build/detect/types.ts +109 -0
- package/src/cmd/build/detect/util.ts +104 -0
- package/src/cmd/build/index.ts +64 -24
- package/src/cmd/build/package/index.ts +66 -0
- package/src/cmd/build/package/launch.ts +104 -0
- package/src/cmd/build/typecheck.ts +9 -0
- package/src/cmd/cloud/deploy.ts +86 -13
- package/src/cmd/coder/create.ts +8 -8
- package/src/cmd/coder/update.ts +7 -7
- package/src/cmd/coder/workspace/create.ts +10 -10
- package/src/cmd/dev/index.ts +155 -1059
- package/src/cmd/project/auth/shared.ts +14 -39
- package/src/cmd/project/create.ts +14 -19
- package/src/cmd/project/frameworks-ai-examples.ts +166 -0
- package/src/cmd/project/frameworks-landing-pages.ts +267 -0
- package/src/cmd/project/frameworks.ts +223 -0
- package/src/cmd/project/reconcile.ts +10 -22
- package/src/cmd/project/remote-import.ts +1 -1
- package/src/cmd/project/scaffold.ts +300 -0
- package/src/cmd/project/template-flow.ts +102 -156
- package/src/deploy-metadata.ts +253 -0
- package/src/index.ts +0 -2
- package/src/types.ts +0 -31
- package/dist/agents-docs.d.ts +0 -23
- package/dist/agents-docs.d.ts.map +0 -1
- package/dist/agents-docs.js +0 -56
- package/dist/agents-docs.js.map +0 -1
- package/dist/cmd/ai/prompt/agent.d.ts +0 -10
- package/dist/cmd/ai/prompt/agent.d.ts.map +0 -1
- package/dist/cmd/ai/prompt/agent.js +0 -28
- package/dist/cmd/ai/prompt/agent.js.map +0 -1
- package/dist/cmd/build/app-router-detector.d.ts +0 -39
- package/dist/cmd/build/app-router-detector.d.ts.map +0 -1
- package/dist/cmd/build/app-router-detector.js +0 -229
- package/dist/cmd/build/app-router-detector.js.map +0 -1
- package/dist/cmd/build/format-schema.d.ts +0 -6
- package/dist/cmd/build/format-schema.d.ts.map +0 -1
- package/dist/cmd/build/format-schema.js +0 -60
- package/dist/cmd/build/format-schema.js.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +0 -37
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/agent-discovery.js +0 -263
- package/dist/cmd/build/vite/agent-discovery.js.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.d.ts +0 -19
- package/dist/cmd/build/vite/beacon-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/beacon-plugin.js +0 -137
- package/dist/cmd/build/vite/beacon-plugin.js.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.d.ts +0 -9
- package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/browser-env-plugin.js +0 -28
- package/dist/cmd/build/vite/browser-env-plugin.js.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.d.ts +0 -67
- package/dist/cmd/build/vite/bun-dev-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/bun-dev-server.js +0 -340
- package/dist/cmd/build/vite/bun-dev-server.js.map +0 -1
- package/dist/cmd/build/vite/bundle-files.d.ts +0 -12
- package/dist/cmd/build/vite/bundle-files.d.ts.map +0 -1
- package/dist/cmd/build/vite/bundle-files.js +0 -107
- package/dist/cmd/build/vite/bundle-files.js.map +0 -1
- package/dist/cmd/build/vite/config-loader.d.ts +0 -29
- package/dist/cmd/build/vite/config-loader.d.ts.map +0 -1
- package/dist/cmd/build/vite/config-loader.js +0 -57
- package/dist/cmd/build/vite/config-loader.js.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.d.ts +0 -50
- package/dist/cmd/build/vite/db-rewrite.d.ts.map +0 -1
- package/dist/cmd/build/vite/db-rewrite.js +0 -169
- package/dist/cmd/build/vite/db-rewrite.js.map +0 -1
- package/dist/cmd/build/vite/docs-generator.d.ts +0 -13
- package/dist/cmd/build/vite/docs-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/docs-generator.js +0 -97
- package/dist/cmd/build/vite/docs-generator.js.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.d.ts +0 -26
- package/dist/cmd/build/vite/env-types-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/env-types-generator.js +0 -110
- package/dist/cmd/build/vite/env-types-generator.js.map +0 -1
- package/dist/cmd/build/vite/index.d.ts +0 -3
- package/dist/cmd/build/vite/index.d.ts.map +0 -1
- package/dist/cmd/build/vite/index.js +0 -4
- package/dist/cmd/build/vite/index.js.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.d.ts +0 -19
- package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/lifecycle-generator.js +0 -328
- package/dist/cmd/build/vite/lifecycle-generator.js.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts +0 -36
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/metadata-generator.js +0 -575
- package/dist/cmd/build/vite/metadata-generator.js.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.d.ts +0 -23
- package/dist/cmd/build/vite/prompt-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/prompt-generator.js +0 -123
- package/dist/cmd/build/vite/prompt-generator.js.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +0 -45
- package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/public-asset-path-plugin.js +0 -166
- package/dist/cmd/build/vite/public-asset-path-plugin.js.map +0 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +0 -64
- package/dist/cmd/build/vite/route-discovery.d.ts.map +0 -1
- package/dist/cmd/build/vite/route-discovery.js +0 -187
- package/dist/cmd/build/vite/route-discovery.js.map +0 -1
- package/dist/cmd/build/vite/server-bundler.d.ts +0 -20
- package/dist/cmd/build/vite/server-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite/server-bundler.js +0 -388
- package/dist/cmd/build/vite/server-bundler.js.map +0 -1
- package/dist/cmd/build/vite/static-renderer.d.ts +0 -26
- package/dist/cmd/build/vite/static-renderer.d.ts.map +0 -1
- package/dist/cmd/build/vite/static-renderer.js +0 -188
- package/dist/cmd/build/vite/static-renderer.js.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +0 -15
- package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +0 -1
- package/dist/cmd/build/vite/tailwind-source-plugin.js +0 -61
- package/dist/cmd/build/vite/tailwind-source-plugin.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts +0 -24
- package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server-config.js +0 -285
- package/dist/cmd/build/vite/vite-asset-server-config.js.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.d.ts +0 -30
- package/dist/cmd/build/vite/vite-asset-server.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-asset-server.js +0 -109
- package/dist/cmd/build/vite/vite-asset-server.js.map +0 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +0 -59
- package/dist/cmd/build/vite/vite-builder.d.ts.map +0 -1
- package/dist/cmd/build/vite/vite-builder.js +0 -401
- package/dist/cmd/build/vite/vite-builder.js.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.d.ts +0 -10
- package/dist/cmd/build/vite/workbench-generator.d.ts.map +0 -1
- package/dist/cmd/build/vite/workbench-generator.js +0 -135
- package/dist/cmd/build/vite/workbench-generator.js.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.d.ts +0 -53
- package/dist/cmd/build/vite/ws-proxy.d.ts.map +0 -1
- package/dist/cmd/build/vite/ws-proxy.js +0 -95
- package/dist/cmd/build/vite/ws-proxy.js.map +0 -1
- package/dist/cmd/build/vite-bundler.d.ts +0 -29
- package/dist/cmd/build/vite-bundler.d.ts.map +0 -1
- package/dist/cmd/build/vite-bundler.js +0 -93
- package/dist/cmd/build/vite-bundler.js.map +0 -1
- package/dist/cmd/dev/agents.d.ts +0 -2
- package/dist/cmd/dev/agents.d.ts.map +0 -1
- package/dist/cmd/dev/agents.js +0 -123
- package/dist/cmd/dev/agents.js.map +0 -1
- package/dist/cmd/dev/api.d.ts +0 -20
- package/dist/cmd/dev/api.d.ts.map +0 -1
- package/dist/cmd/dev/api.js +0 -42
- package/dist/cmd/dev/api.js.map +0 -1
- package/dist/cmd/dev/dev-lock.d.ts +0 -62
- package/dist/cmd/dev/dev-lock.d.ts.map +0 -1
- package/dist/cmd/dev/dev-lock.js +0 -250
- package/dist/cmd/dev/dev-lock.js.map +0 -1
- package/dist/cmd/dev/download.d.ts +0 -11
- package/dist/cmd/dev/download.d.ts.map +0 -1
- package/dist/cmd/dev/download.js +0 -94
- package/dist/cmd/dev/download.js.map +0 -1
- package/dist/cmd/dev/file-watcher.d.ts +0 -24
- package/dist/cmd/dev/file-watcher.d.ts.map +0 -1
- package/dist/cmd/dev/file-watcher.js +0 -349
- package/dist/cmd/dev/file-watcher.js.map +0 -1
- package/dist/cmd/dev/process-manager.d.ts +0 -104
- package/dist/cmd/dev/process-manager.d.ts.map +0 -1
- package/dist/cmd/dev/process-manager.js +0 -204
- package/dist/cmd/dev/process-manager.js.map +0 -1
- package/dist/cmd/dev/sync.d.ts +0 -12
- package/dist/cmd/dev/sync.d.ts.map +0 -1
- package/dist/cmd/dev/sync.js +0 -227
- package/dist/cmd/dev/sync.js.map +0 -1
- package/dist/cmd/dev/templates.d.ts +0 -3
- package/dist/cmd/dev/templates.d.ts.map +0 -1
- package/dist/cmd/dev/templates.js +0 -58
- package/dist/cmd/dev/templates.js.map +0 -1
- package/dist/cmd/project/download.d.ts +0 -35
- package/dist/cmd/project/download.d.ts.map +0 -1
- package/dist/cmd/project/download.js +0 -403
- package/dist/cmd/project/download.js.map +0 -1
- package/dist/cmd/project/templates.d.ts +0 -9
- package/dist/cmd/project/templates.d.ts.map +0 -1
- package/dist/cmd/project/templates.js +0 -34
- package/dist/cmd/project/templates.js.map +0 -1
- package/src/agents-docs.ts +0 -86
- package/src/cmd/ai/prompt/agent.md +0 -305
- package/src/cmd/ai/prompt/agent.ts +0 -31
- package/src/cmd/build/app-router-detector.ts +0 -320
- package/src/cmd/build/format-schema.ts +0 -66
- package/src/cmd/build/vite/agent-discovery.ts +0 -380
- package/src/cmd/build/vite/beacon-plugin.ts +0 -164
- package/src/cmd/build/vite/browser-env-plugin.ts +0 -34
- package/src/cmd/build/vite/bun-dev-server.ts +0 -458
- package/src/cmd/build/vite/bundle-files.ts +0 -135
- package/src/cmd/build/vite/config-loader.ts +0 -76
- package/src/cmd/build/vite/db-rewrite.ts +0 -189
- package/src/cmd/build/vite/docs-generator.ts +0 -103
- package/src/cmd/build/vite/env-types-generator.ts +0 -145
- package/src/cmd/build/vite/index.ts +0 -3
- package/src/cmd/build/vite/lifecycle-generator.ts +0 -381
- package/src/cmd/build/vite/metadata-generator.ts +0 -713
- package/src/cmd/build/vite/prompt-generator.ts +0 -169
- package/src/cmd/build/vite/public-asset-path-plugin.ts +0 -209
- package/src/cmd/build/vite/route-discovery.ts +0 -271
- package/src/cmd/build/vite/server-bundler.ts +0 -481
- package/src/cmd/build/vite/static-renderer.ts +0 -239
- package/src/cmd/build/vite/tailwind-source-plugin.ts +0 -73
- package/src/cmd/build/vite/vite-asset-server-config.ts +0 -349
- package/src/cmd/build/vite/vite-asset-server.ts +0 -154
- package/src/cmd/build/vite/vite-builder.ts +0 -503
- package/src/cmd/build/vite/workbench-generator.ts +0 -152
- package/src/cmd/build/vite/ws-proxy.ts +0 -126
- package/src/cmd/build/vite-bundler.ts +0 -137
- package/src/cmd/dev/agents.ts +0 -140
- package/src/cmd/dev/api.ts +0 -65
- package/src/cmd/dev/dev-lock.ts +0 -332
- package/src/cmd/dev/download.ts +0 -117
- package/src/cmd/dev/file-watcher.ts +0 -423
- package/src/cmd/dev/process-manager.ts +0 -261
- package/src/cmd/dev/sync.ts +0 -411
- package/src/cmd/dev/templates.ts +0 -66
- package/src/cmd/project/download.ts +0 -505
- package/src/cmd/project/templates.ts +0 -56
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite Dev Server (Primary)
|
|
3
|
-
*
|
|
4
|
-
* Starts Vite as the primary dev server on the user-facing port.
|
|
5
|
-
* Serves frontend assets natively and proxies API/WebSocket requests
|
|
6
|
-
* to the Bun backend server.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { createRequire } from 'node:module';
|
|
11
|
-
import { createServer as createNetServer } from 'node:net';
|
|
12
|
-
import type { ViteDevServer } from 'vite';
|
|
13
|
-
import type { Logger } from '../../../types';
|
|
14
|
-
import { generateAssetServerConfig } from './vite-asset-server-config';
|
|
15
|
-
|
|
16
|
-
export interface ViteAssetServerResult {
|
|
17
|
-
server: ViteDevServer;
|
|
18
|
-
port: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface StartViteAssetServerOptions {
|
|
22
|
-
rootDir: string;
|
|
23
|
-
logger: Logger;
|
|
24
|
-
workbenchPath?: string;
|
|
25
|
-
port?: number; // Preferred user-facing port (default: 3500)
|
|
26
|
-
backendPort: number; // Port of the Bun backend server
|
|
27
|
-
/** User-defined route mount paths from createApp({ router }) */
|
|
28
|
-
routePaths?: string[];
|
|
29
|
-
/** Live tunnel hostname to add to Vite's allowedHosts */
|
|
30
|
-
liveHostname?: string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Check if a specific port is available on the given host.
|
|
35
|
-
*/
|
|
36
|
-
function isPortAvailable(port: number, host: string): Promise<boolean> {
|
|
37
|
-
return new Promise((resolve) => {
|
|
38
|
-
const server = createNetServer();
|
|
39
|
-
server.once('error', () => {
|
|
40
|
-
resolve(false);
|
|
41
|
-
});
|
|
42
|
-
server.listen(port, host, () => {
|
|
43
|
-
server.close(() => {
|
|
44
|
-
resolve(true);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Find an available port starting from the preferred port.
|
|
52
|
-
* Tries incrementing ports up to maxAttempts times.
|
|
53
|
-
*/
|
|
54
|
-
async function findAvailablePort(
|
|
55
|
-
preferredPort: number,
|
|
56
|
-
host: string = '127.0.0.1',
|
|
57
|
-
maxAttempts: number = 20
|
|
58
|
-
): Promise<number> {
|
|
59
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
60
|
-
const port = preferredPort + attempt;
|
|
61
|
-
const available = await isPortAvailable(port, host);
|
|
62
|
-
if (available) {
|
|
63
|
-
return port;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
throw new Error(
|
|
67
|
-
`Could not find an available port after ${maxAttempts} attempts starting from ${preferredPort}`
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Start Vite asset server on a dynamically-chosen port
|
|
73
|
-
* Returns the server instance and the actual port number
|
|
74
|
-
*/
|
|
75
|
-
export async function startViteAssetServer(
|
|
76
|
-
options: StartViteAssetServerOptions
|
|
77
|
-
): Promise<ViteAssetServerResult> {
|
|
78
|
-
const {
|
|
79
|
-
rootDir,
|
|
80
|
-
logger,
|
|
81
|
-
workbenchPath,
|
|
82
|
-
port: preferredPort = 3500,
|
|
83
|
-
backendPort,
|
|
84
|
-
routePaths,
|
|
85
|
-
liveHostname,
|
|
86
|
-
} = options;
|
|
87
|
-
|
|
88
|
-
logger.debug('Starting Vite dev server (primary, proxying backend on port %d)...', backendPort);
|
|
89
|
-
|
|
90
|
-
// Find an available port for the user-facing Vite server
|
|
91
|
-
const availablePort = await findAvailablePort(preferredPort, '127.0.0.1');
|
|
92
|
-
|
|
93
|
-
if (availablePort !== preferredPort) {
|
|
94
|
-
logger.info(
|
|
95
|
-
`Port ${preferredPort} is in use, using port ${availablePort} for Vite dev server`
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Generate config with proxy to Bun backend
|
|
100
|
-
const config = await generateAssetServerConfig({
|
|
101
|
-
rootDir,
|
|
102
|
-
logger,
|
|
103
|
-
workbenchPath,
|
|
104
|
-
port: availablePort,
|
|
105
|
-
backendPort,
|
|
106
|
-
routePaths,
|
|
107
|
-
liveHostname,
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
// Dynamically import vite from the project's node_modules
|
|
111
|
-
// This ensures we resolve from the target project directory, not the CWD
|
|
112
|
-
const projectRequire = createRequire(join(rootDir, 'package.json'));
|
|
113
|
-
const { createServer } = await import(projectRequire.resolve('vite'));
|
|
114
|
-
|
|
115
|
-
// Create Vite server with config
|
|
116
|
-
const server = await createServer(config);
|
|
117
|
-
|
|
118
|
-
// Start listening with timeout to prevent hangs
|
|
119
|
-
const STARTUP_TIMEOUT_MS = 30000; // 30 seconds
|
|
120
|
-
|
|
121
|
-
try {
|
|
122
|
-
await Promise.race([
|
|
123
|
-
server.listen(),
|
|
124
|
-
new Promise<never>((_, reject) => {
|
|
125
|
-
const timeoutId = setTimeout(() => {
|
|
126
|
-
reject(
|
|
127
|
-
new Error(
|
|
128
|
-
`Vite asset server failed to start within ${STARTUP_TIMEOUT_MS / 1000}s`
|
|
129
|
-
)
|
|
130
|
-
);
|
|
131
|
-
}, STARTUP_TIMEOUT_MS);
|
|
132
|
-
// Clean up timeout when listen succeeds (via finally in the outer try)
|
|
133
|
-
server.httpServer?.once('listening', () => clearTimeout(timeoutId));
|
|
134
|
-
}),
|
|
135
|
-
]);
|
|
136
|
-
} catch (error) {
|
|
137
|
-
// Attempt to close the server on failure
|
|
138
|
-
try {
|
|
139
|
-
await server.close();
|
|
140
|
-
} catch {
|
|
141
|
-
// Ignore close errors
|
|
142
|
-
}
|
|
143
|
-
throw error;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Port was pre-verified and strictPort:true ensures Vite uses exactly this port
|
|
147
|
-
const actualPort = availablePort;
|
|
148
|
-
|
|
149
|
-
logger.debug(`Vite dev server running on port ${actualPort} (primary)`);
|
|
150
|
-
logger.debug(`Frontend: HMR, React transformation, source maps (native)`);
|
|
151
|
-
logger.debug(`Backend: proxying to Bun on port ${backendPort}`);
|
|
152
|
-
|
|
153
|
-
return { server, port: actualPort };
|
|
154
|
-
}
|
|
@@ -1,503 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite Builder
|
|
3
|
-
*
|
|
4
|
-
* Utilities for running Vite builds (client, server, workbench)
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
import { existsSync, rmSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';
|
|
9
|
-
import { createHash } from 'node:crypto';
|
|
10
|
-
import { createRequire } from 'node:module';
|
|
11
|
-
import type { InlineConfig } from 'vite';
|
|
12
|
-
import type { Logger, DeployOptions } from '../../../types';
|
|
13
|
-
import type { BuildReportCollector } from '../../../build-report';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Read the pre-built beacon script from @agentuity/frontend package.
|
|
17
|
-
* Tries multiple resolution strategies for workspace/installed/symlink scenarios.
|
|
18
|
-
*/
|
|
19
|
-
async function readBeaconScript(projectRoot: string): Promise<string> {
|
|
20
|
-
let frontendPath: string | null = null;
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
frontendPath = await Bun.resolve('@agentuity/frontend', projectRoot);
|
|
24
|
-
} catch {
|
|
25
|
-
// Not found from project root
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (!frontendPath) {
|
|
29
|
-
try {
|
|
30
|
-
const thisDir = new URL('.', import.meta.url).pathname;
|
|
31
|
-
frontendPath = await Bun.resolve('@agentuity/frontend', thisDir);
|
|
32
|
-
} catch {
|
|
33
|
-
// Not found from CLI directory
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!frontendPath) {
|
|
38
|
-
try {
|
|
39
|
-
const projectRequire = createRequire(join(projectRoot, 'package.json'));
|
|
40
|
-
frontendPath = projectRequire.resolve('@agentuity/frontend');
|
|
41
|
-
} catch {
|
|
42
|
-
// Not found via createRequire
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (!frontendPath) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
'Could not resolve @agentuity/frontend. Ensure the package is installed and built.'
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const packageDir = join(frontendPath, '..');
|
|
53
|
-
const beaconPath = join(packageDir, 'beacon.js');
|
|
54
|
-
|
|
55
|
-
const beaconFile = Bun.file(beaconPath);
|
|
56
|
-
if (!(await beaconFile.exists())) {
|
|
57
|
-
throw new Error(
|
|
58
|
-
`Beacon script not found at ${beaconPath}. Run "bun run build" in @agentuity/frontend first.`
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return beaconFile.text();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Post-build step: inject the analytics beacon into the built index.html.
|
|
67
|
-
*
|
|
68
|
-
* 1. Reads the beacon script from @agentuity/frontend
|
|
69
|
-
* 2. Writes it as a content-hashed asset file
|
|
70
|
-
* 3. Injects a <script data-agentuity-beacon> tag into the HTML
|
|
71
|
-
*
|
|
72
|
-
* This runs after `vite build` completes so it works regardless of the
|
|
73
|
-
* user's vite.config.ts — no Vite plugin required.
|
|
74
|
-
*/
|
|
75
|
-
async function injectBeacon(rootDir: string, cdnBaseUrl: string, logger: Logger): Promise<void> {
|
|
76
|
-
const clientDir = join(rootDir, '.agentuity/client');
|
|
77
|
-
const indexHtmlPath = join(clientDir, 'index.html');
|
|
78
|
-
|
|
79
|
-
if (!existsSync(indexHtmlPath)) {
|
|
80
|
-
logger.debug('No index.html found, skipping beacon injection');
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
let beaconCode: string;
|
|
85
|
-
try {
|
|
86
|
-
beaconCode = await readBeaconScript(rootDir);
|
|
87
|
-
} catch (error) {
|
|
88
|
-
logger.warn(
|
|
89
|
-
'Failed to read beacon script, skipping injection: %s',
|
|
90
|
-
error instanceof Error ? error.message : String(error)
|
|
91
|
-
);
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Write beacon as a content-hashed asset (matches Vite's naming convention)
|
|
96
|
-
const hash = createHash('sha256').update(beaconCode).digest('hex').slice(0, 8);
|
|
97
|
-
const beaconFileName = `agentuity-beacon-${hash}.js`;
|
|
98
|
-
const assetsDir = join(clientDir, 'assets');
|
|
99
|
-
mkdirSync(assetsDir, { recursive: true });
|
|
100
|
-
writeFileSync(join(assetsDir, beaconFileName), beaconCode);
|
|
101
|
-
|
|
102
|
-
// If a Vite manifest exists, add the beacon so the metadata generator
|
|
103
|
-
// includes it in the asset list. When no manifest exists, the directory
|
|
104
|
-
// scanner in metadata-generator.ts picks up assets/ directly.
|
|
105
|
-
const manifestPath = join(clientDir, '.vite', 'manifest.json');
|
|
106
|
-
if (existsSync(manifestPath)) {
|
|
107
|
-
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
108
|
-
manifest['agentuity-beacon'] = { file: `assets/${beaconFileName}` };
|
|
109
|
-
writeFileSync(manifestPath, JSON.stringify(manifest));
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Build the beacon URL using the CDN base
|
|
113
|
-
const normalizedBase = cdnBaseUrl.endsWith('/') ? cdnBaseUrl : `${cdnBaseUrl}/`;
|
|
114
|
-
const beaconUrl = `${normalizedBase}assets/${beaconFileName}`;
|
|
115
|
-
|
|
116
|
-
// Inject the script tag into index.html
|
|
117
|
-
// The script must be sync (no async/defer) to patch history API before router loads.
|
|
118
|
-
// The data-agentuity-beacon attribute is the marker the runtime looks for.
|
|
119
|
-
const beaconScript = `<script data-agentuity-beacon src="${beaconUrl}"></script>`;
|
|
120
|
-
|
|
121
|
-
let html = readFileSync(indexHtmlPath, 'utf-8');
|
|
122
|
-
if (html.includes('</head>')) {
|
|
123
|
-
html = html.replace('</head>', `${beaconScript}</head>`);
|
|
124
|
-
} else if (html.includes('<body')) {
|
|
125
|
-
html = html.replace(/<body([^>]*)>/, `<body$1>${beaconScript}`);
|
|
126
|
-
} else {
|
|
127
|
-
html = beaconScript + html;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
writeFileSync(indexHtmlPath, html);
|
|
131
|
-
logger.debug('Injected analytics beacon: %s', beaconUrl);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export interface ViteBuildOptions {
|
|
135
|
-
rootDir: string;
|
|
136
|
-
mode: 'client' | 'server' | 'workbench';
|
|
137
|
-
dev?: boolean;
|
|
138
|
-
port?: number;
|
|
139
|
-
projectId?: string;
|
|
140
|
-
orgId?: string;
|
|
141
|
-
region?: string;
|
|
142
|
-
deploymentId?: string;
|
|
143
|
-
workbenchRoute?: string;
|
|
144
|
-
workbenchEnabled?: boolean;
|
|
145
|
-
/** Whether analytics is enabled (for beacon injection in client build) */
|
|
146
|
-
analyticsEnabled?: boolean;
|
|
147
|
-
logger: Logger;
|
|
148
|
-
deploymentOptions?: DeployOptions;
|
|
149
|
-
/** Deployment config from agentuity.json (resources, mode, dependencies, domains) */
|
|
150
|
-
deploymentConfig?: Record<string, unknown>;
|
|
151
|
-
/** Optional collector for structured error reporting */
|
|
152
|
-
collector?: BuildReportCollector;
|
|
153
|
-
/** Optional config profile name (e.g., 'staging', 'test') for .env.{profile} files */
|
|
154
|
-
profile?: string;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Run a Vite build for the specified mode
|
|
159
|
-
* Uses inline Vite config (customizable via agentuity.config.ts)
|
|
160
|
-
*/
|
|
161
|
-
export async function runViteBuild(options: ViteBuildOptions): Promise<void> {
|
|
162
|
-
const { rootDir, mode, dev = false, logger, profile } = options;
|
|
163
|
-
|
|
164
|
-
logger.debug(`Running Vite build for mode: ${mode}`);
|
|
165
|
-
|
|
166
|
-
// For server mode, use Bun.build (preserves process.env at runtime)
|
|
167
|
-
if (mode === 'server') {
|
|
168
|
-
const srcDir = join(rootDir, 'src');
|
|
169
|
-
|
|
170
|
-
// Generate documentation files (if they don't exist)
|
|
171
|
-
const { generateDocumentation } = await import('./docs-generator');
|
|
172
|
-
await generateDocumentation(srcDir, logger);
|
|
173
|
-
|
|
174
|
-
// Generate/update prompt files in dev mode only (non-blocking)
|
|
175
|
-
if (dev) {
|
|
176
|
-
import('./prompt-generator')
|
|
177
|
-
.then(({ generatePromptFiles }) => generatePromptFiles(srcDir, logger))
|
|
178
|
-
.catch((err) => logger.warn('Failed to generate prompt files: %s', err.message));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Generate lifecycle types (if setup() exists)
|
|
182
|
-
const { generateLifecycleTypes } = await import('./lifecycle-generator');
|
|
183
|
-
await generateLifecycleTypes(rootDir, srcDir, logger);
|
|
184
|
-
|
|
185
|
-
// Generate environment types from local .env files
|
|
186
|
-
const { generateEnvTypes } = await import('./env-types-generator');
|
|
187
|
-
await generateEnvTypes({
|
|
188
|
-
rootDir,
|
|
189
|
-
srcDir,
|
|
190
|
-
logger,
|
|
191
|
-
isProduction: !dev,
|
|
192
|
-
profile,
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
// Build with Bun.build (app.ts is the entrypoint)
|
|
196
|
-
const { installExternalsAndBuild } = await import('./server-bundler');
|
|
197
|
-
await installExternalsAndBuild({
|
|
198
|
-
rootDir,
|
|
199
|
-
dev,
|
|
200
|
-
logger,
|
|
201
|
-
});
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Dynamically import vite for workbench builds
|
|
206
|
-
const { build: viteBuild } = await import('vite');
|
|
207
|
-
|
|
208
|
-
// For client/workbench, use inline config with vite.config.ts loading
|
|
209
|
-
let viteConfig: InlineConfig;
|
|
210
|
-
|
|
211
|
-
if (mode === 'client') {
|
|
212
|
-
// For client builds, spawn vite as a subprocess.
|
|
213
|
-
// This avoids issues with Bun's module loading that cause problems
|
|
214
|
-
// with certain plugins like @sveltejs/vite-plugin-svelte.
|
|
215
|
-
// The vite.config.ts in the project handles all configuration.
|
|
216
|
-
const buildMode = dev ? 'development' : 'production';
|
|
217
|
-
const clientOutDir = join(rootDir, '.agentuity/client');
|
|
218
|
-
|
|
219
|
-
// Ensure vite.config.ts exists (fallback for projects created before v2 template update)
|
|
220
|
-
const viteConfigPath = join(rootDir, 'vite.config.ts');
|
|
221
|
-
if (!existsSync(viteConfigPath)) {
|
|
222
|
-
logger.debug('Generating fallback vite.config.ts');
|
|
223
|
-
const fallbackConfig = `import react from '@vitejs/plugin-react';
|
|
224
|
-
import { defineConfig } from 'vite';
|
|
225
|
-
import { join } from 'node:path';
|
|
226
|
-
|
|
227
|
-
export default defineConfig({
|
|
228
|
-
plugins: [react()],
|
|
229
|
-
root: '.',
|
|
230
|
-
build: {
|
|
231
|
-
rollupOptions: {
|
|
232
|
-
input: join(__dirname, 'src/web/index.html'),
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
});
|
|
236
|
-
`;
|
|
237
|
-
await Bun.write(viteConfigPath, fallbackConfig);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Construct CDN base URL for production builds so Vite prefixes all
|
|
241
|
-
// asset URLs (CSS, JS chunks) with the CDN origin instead of "/".
|
|
242
|
-
const cdnBaseUrl =
|
|
243
|
-
!dev && options.deploymentId
|
|
244
|
-
? `https://${options.region === 'local' ? 'localstack-static-assets.t3.storageapi.dev' : 'cdn.agentuity.com'}/${options.deploymentId}/client/`
|
|
245
|
-
: undefined;
|
|
246
|
-
|
|
247
|
-
const args = [
|
|
248
|
-
'bun',
|
|
249
|
-
'x',
|
|
250
|
-
'vite',
|
|
251
|
-
'build',
|
|
252
|
-
'--mode',
|
|
253
|
-
buildMode,
|
|
254
|
-
'--outDir',
|
|
255
|
-
clientOutDir,
|
|
256
|
-
'--logLevel',
|
|
257
|
-
'error',
|
|
258
|
-
'--clearScreen',
|
|
259
|
-
'false',
|
|
260
|
-
];
|
|
261
|
-
if (cdnBaseUrl) {
|
|
262
|
-
args.push('--base', cdnBaseUrl);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
logger.debug('Spawning vite build for client (subprocess mode)');
|
|
266
|
-
logger.debug(' outDir: %s', clientOutDir);
|
|
267
|
-
logger.debug(' mode: %s', buildMode);
|
|
268
|
-
if (cdnBaseUrl) {
|
|
269
|
-
logger.debug(' base (CDN): %s', cdnBaseUrl);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
const viteProcess = Bun.spawn(args, {
|
|
273
|
-
cwd: rootDir,
|
|
274
|
-
stdout: 'inherit',
|
|
275
|
-
stderr: 'inherit',
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
const exitCode = await viteProcess.exited;
|
|
279
|
-
|
|
280
|
-
if (exitCode !== 0) {
|
|
281
|
-
throw new Error(`Vite build exited with code ${exitCode}`);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
logger.debug('Vite build complete for mode: client');
|
|
285
|
-
return;
|
|
286
|
-
} else if (mode === 'workbench') {
|
|
287
|
-
const { workbenchRoute = '/workbench' } = options;
|
|
288
|
-
// Ensure route ends with / for Vite base
|
|
289
|
-
const base = workbenchRoute.endsWith('/') ? workbenchRoute : `${workbenchRoute}/`;
|
|
290
|
-
|
|
291
|
-
// Workbench is built with React (internal UI)
|
|
292
|
-
// Use CLI's bundled React plugin since workbench is our code
|
|
293
|
-
const reactModule = await import('@vitejs/plugin-react');
|
|
294
|
-
const react = reactModule.default;
|
|
295
|
-
|
|
296
|
-
viteConfig = {
|
|
297
|
-
root: join(rootDir, '.agentuity/workbench-src'), // Use generated workbench source
|
|
298
|
-
base, // All workbench assets are under the configured route
|
|
299
|
-
plugins: [react()],
|
|
300
|
-
envPrefix: ['VITE_', 'AGENTUITY_PUBLIC_', 'PUBLIC_'],
|
|
301
|
-
build: {
|
|
302
|
-
outDir: join(rootDir, '.agentuity/workbench'),
|
|
303
|
-
rollupOptions: {
|
|
304
|
-
input: join(rootDir, '.agentuity/workbench-src/index.html'),
|
|
305
|
-
},
|
|
306
|
-
manifest: true,
|
|
307
|
-
emptyOutDir: true,
|
|
308
|
-
},
|
|
309
|
-
logLevel: 'warn',
|
|
310
|
-
};
|
|
311
|
-
} else {
|
|
312
|
-
throw new Error(`Unknown build mode: ${mode}`);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// For workbench mode, use programmatic vite build
|
|
316
|
-
const buildMode = dev ? 'development' : 'production';
|
|
317
|
-
|
|
318
|
-
await viteBuild({
|
|
319
|
-
...viteConfig,
|
|
320
|
-
mode: buildMode,
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
logger.debug(`Vite build complete for mode: ${mode}`);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
interface BuildResult {
|
|
327
|
-
workbench: { included: boolean; duration: number };
|
|
328
|
-
client: { included: boolean; duration: number };
|
|
329
|
-
server: { included: boolean; duration: number };
|
|
330
|
-
static: { included: boolean; duration: number; routes: number };
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Run all builds in sequence: client -> workbench (if enabled) -> server
|
|
335
|
-
*/
|
|
336
|
-
export async function runAllBuilds(options: Omit<ViteBuildOptions, 'mode'>): Promise<BuildResult> {
|
|
337
|
-
const { rootDir, projectId = '', dev = false, logger, collector } = options;
|
|
338
|
-
|
|
339
|
-
if (!dev) {
|
|
340
|
-
rmSync(join(rootDir, '.agentuity'), { force: true, recursive: true });
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
const result: BuildResult = {
|
|
344
|
-
workbench: { included: false, duration: 0 },
|
|
345
|
-
client: { included: false, duration: 0 },
|
|
346
|
-
server: { included: false, duration: 0 },
|
|
347
|
-
static: { included: false, duration: 0, routes: 0 },
|
|
348
|
-
};
|
|
349
|
-
|
|
350
|
-
// Load runtime config from createApp() in app.ts (v2 approach)
|
|
351
|
-
const { getWorkbenchConfig, loadRuntimeConfig } = await import('./config-loader');
|
|
352
|
-
const runtimeConfig = await loadRuntimeConfig(rootDir, logger);
|
|
353
|
-
|
|
354
|
-
const workbenchConfig = getWorkbenchConfig(dev, runtimeConfig);
|
|
355
|
-
// Generate workbench files BEFORE any builds if enabled (dev mode only)
|
|
356
|
-
if (workbenchConfig.enabled) {
|
|
357
|
-
logger.debug('Workbench enabled (dev mode), generating files before build...');
|
|
358
|
-
const { generateWorkbenchFiles } = await import('./workbench-generator');
|
|
359
|
-
await generateWorkbenchFiles(rootDir, projectId, workbenchConfig, logger);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// 1. Discover agents and routes BEFORE builds
|
|
363
|
-
logger.debug('Discovering agents and routes...');
|
|
364
|
-
const { discoverAgents } = await import('./agent-discovery');
|
|
365
|
-
const { discoverRoutes } = await import('./route-discovery');
|
|
366
|
-
|
|
367
|
-
const srcDir = join(rootDir, 'src');
|
|
368
|
-
const agentMetadata = await discoverAgents(
|
|
369
|
-
srcDir,
|
|
370
|
-
projectId,
|
|
371
|
-
options.deploymentId || '',
|
|
372
|
-
logger
|
|
373
|
-
);
|
|
374
|
-
const { routes } = await discoverRoutes(srcDir, projectId, options.deploymentId || '', logger);
|
|
375
|
-
|
|
376
|
-
// Agent metadata is used for metadata.json generation (no registry codegen needed)
|
|
377
|
-
|
|
378
|
-
// Check if web frontend exists
|
|
379
|
-
const hasWebFrontend = await Bun.file(join(rootDir, 'src', 'web', 'index.html')).exists();
|
|
380
|
-
|
|
381
|
-
// Check if analytics is enabled
|
|
382
|
-
// v2: analytics config comes from createApp()
|
|
383
|
-
const analyticsFromRuntime = runtimeConfig?.analytics;
|
|
384
|
-
const analyticsEnabled =
|
|
385
|
-
analyticsFromRuntime !== undefined ? analyticsFromRuntime !== false : true;
|
|
386
|
-
|
|
387
|
-
// 2. Build client (only if web frontend exists)
|
|
388
|
-
if (hasWebFrontend) {
|
|
389
|
-
logger.debug('Building client assets...');
|
|
390
|
-
const endClientDiagnostic = collector?.startDiagnostic('client-build');
|
|
391
|
-
const started = Date.now();
|
|
392
|
-
await runViteBuild({
|
|
393
|
-
...options,
|
|
394
|
-
mode: 'client',
|
|
395
|
-
workbenchEnabled: workbenchConfig.enabled,
|
|
396
|
-
workbenchRoute: workbenchConfig.route,
|
|
397
|
-
analyticsEnabled,
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
// Normalize index.html location: vite may output to src/web/index.html
|
|
401
|
-
// depending on the project's vite.config.ts configuration
|
|
402
|
-
const clientDir = join(rootDir, '.agentuity/client');
|
|
403
|
-
const nestedIndexHtml = join(clientDir, 'src/web/index.html');
|
|
404
|
-
const rootIndexHtml = join(clientDir, 'index.html');
|
|
405
|
-
if (existsSync(nestedIndexHtml) && !existsSync(rootIndexHtml)) {
|
|
406
|
-
const { renameSync, mkdirSync: mkdirSyncFs } = await import('node:fs');
|
|
407
|
-
// Ensure target directory exists
|
|
408
|
-
mkdirSyncFs(clientDir, { recursive: true });
|
|
409
|
-
renameSync(nestedIndexHtml, rootIndexHtml);
|
|
410
|
-
logger.debug('Moved index.html from src/web/ to client root');
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Post-build: inject analytics beacon into the built HTML.
|
|
414
|
-
// Must run AFTER the index.html normalization above (Vite may
|
|
415
|
-
// output to src/web/index.html which gets moved to the client root).
|
|
416
|
-
const isLocalRegion = options.region === 'local';
|
|
417
|
-
const cdnDomain = isLocalRegion
|
|
418
|
-
? 'localstack-static-assets.t3.storageapi.dev'
|
|
419
|
-
: 'cdn.agentuity.com';
|
|
420
|
-
const cdnBaseUrl =
|
|
421
|
-
!dev && options.deploymentId
|
|
422
|
-
? `https://${cdnDomain}/${options.deploymentId}/client/`
|
|
423
|
-
: undefined;
|
|
424
|
-
|
|
425
|
-
if (cdnBaseUrl && analyticsEnabled) {
|
|
426
|
-
await injectBeacon(rootDir, cdnBaseUrl, logger);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
result.client.included = true;
|
|
430
|
-
result.client.duration = Date.now() - started;
|
|
431
|
-
endClientDiagnostic?.();
|
|
432
|
-
} else {
|
|
433
|
-
logger.debug('Skipping client build - no src/web/index.html found');
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
// 2b. Static rendering (if entry-server.tsx exists)
|
|
437
|
-
const entryServerPath = join(rootDir, 'src', 'web', 'entry-server.tsx');
|
|
438
|
-
if (existsSync(entryServerPath) && hasWebFrontend) {
|
|
439
|
-
logger.debug('Running static rendering (pre-rendering all routes)...');
|
|
440
|
-
const endStaticDiagnostic = collector?.startDiagnostic('static-render');
|
|
441
|
-
const { runStaticRender } = await import('./static-renderer');
|
|
442
|
-
const staticResult = await runStaticRender({
|
|
443
|
-
rootDir,
|
|
444
|
-
logger,
|
|
445
|
-
dev,
|
|
446
|
-
});
|
|
447
|
-
result.static.included = true;
|
|
448
|
-
result.static.duration = staticResult.duration;
|
|
449
|
-
result.static.routes = staticResult.routes;
|
|
450
|
-
endStaticDiagnostic?.();
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// 3. Build workbench (if enabled in config)
|
|
454
|
-
if (workbenchConfig.enabled) {
|
|
455
|
-
logger.debug('Building workbench assets...');
|
|
456
|
-
const endWorkbenchDiagnostic = collector?.startDiagnostic('workbench-build');
|
|
457
|
-
const started = Date.now();
|
|
458
|
-
await runViteBuild({
|
|
459
|
-
...options,
|
|
460
|
-
mode: 'workbench',
|
|
461
|
-
workbenchRoute: workbenchConfig.route,
|
|
462
|
-
workbenchEnabled: true,
|
|
463
|
-
});
|
|
464
|
-
result.workbench.included = true;
|
|
465
|
-
result.workbench.duration = Date.now() - started;
|
|
466
|
-
endWorkbenchDiagnostic?.();
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
// 4. Build server
|
|
470
|
-
logger.debug('Building server...');
|
|
471
|
-
const endServerDiagnostic = collector?.startDiagnostic('server-build');
|
|
472
|
-
const serverStarted = Date.now();
|
|
473
|
-
await runViteBuild({ ...options, mode: 'server' });
|
|
474
|
-
result.server.included = true;
|
|
475
|
-
result.server.duration = Date.now() - serverStarted;
|
|
476
|
-
endServerDiagnostic?.();
|
|
477
|
-
|
|
478
|
-
// 5. Generate metadata (after all builds complete)
|
|
479
|
-
logger.debug('Generating metadata...');
|
|
480
|
-
const endMetadataDiagnostic = collector?.startDiagnostic('metadata-generation');
|
|
481
|
-
const { generateMetadata, writeMetadataFile } = await import('./metadata-generator');
|
|
482
|
-
|
|
483
|
-
// Generate metadata
|
|
484
|
-
const metadata = await generateMetadata({
|
|
485
|
-
rootDir,
|
|
486
|
-
projectId,
|
|
487
|
-
orgId: options.orgId,
|
|
488
|
-
deploymentId: options.deploymentId,
|
|
489
|
-
agents: agentMetadata,
|
|
490
|
-
routes,
|
|
491
|
-
logger,
|
|
492
|
-
dev,
|
|
493
|
-
deploymentOptions: options.deploymentOptions,
|
|
494
|
-
deploymentConfig: options.deploymentConfig,
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
writeMetadataFile(rootDir, metadata, dev, logger);
|
|
498
|
-
endMetadataDiagnostic?.();
|
|
499
|
-
logger.debug('Registry and metadata generation complete');
|
|
500
|
-
|
|
501
|
-
logger.debug('All builds complete');
|
|
502
|
-
return result;
|
|
503
|
-
}
|