@agentuity/cli 2.0.11 → 3.0.0-alpha.1
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,713 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metadata Generator
|
|
3
|
-
*
|
|
4
|
-
* Generates agentuity.metadata.json and .routemapping.json from discovered agents and routes
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
import { writeFileSync, mkdirSync, existsSync, readFileSync, statSync, readdirSync } from 'node:fs';
|
|
9
|
-
import { type BuildMetadata, DeploymentConfig, getContentType } from '@agentuity/server';
|
|
10
|
-
import type { z } from 'zod';
|
|
11
|
-
import type { AgentMetadata } from './agent-discovery';
|
|
12
|
-
import type { RouteMetadata } from './route-discovery';
|
|
13
|
-
import type { Logger, DeployOptions } from '../../../types';
|
|
14
|
-
import { toForwardSlash } from '../../../utils/normalize-path';
|
|
15
|
-
import { getVersion } from '../../../version';
|
|
16
|
-
import { getGitInfo, buildGitTags } from '../../../utils/git';
|
|
17
|
-
|
|
18
|
-
interface ViteManifestEntry {
|
|
19
|
-
file: string;
|
|
20
|
-
src?: string;
|
|
21
|
-
isEntry?: boolean;
|
|
22
|
-
css?: string[];
|
|
23
|
-
assets?: string[];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
interface AssetInfo {
|
|
27
|
-
filename: string;
|
|
28
|
-
kind: string;
|
|
29
|
-
contentType: string;
|
|
30
|
-
size: number;
|
|
31
|
-
contentEncoding?: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Determine if an asset should be compressed with gzip.
|
|
36
|
-
* The result is included in asset metadata so the API can generate
|
|
37
|
-
* presigned URLs with matching Content-Encoding.
|
|
38
|
-
*/
|
|
39
|
-
function shouldCompressAsset(asset: {
|
|
40
|
-
filename: string;
|
|
41
|
-
contentType: string;
|
|
42
|
-
kind: string;
|
|
43
|
-
}): boolean {
|
|
44
|
-
const ct = asset.contentType.toLowerCase();
|
|
45
|
-
const filename = asset.filename.toLowerCase();
|
|
46
|
-
|
|
47
|
-
if (ct.startsWith('image/') && ct !== 'image/svg+xml') {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
if (ct.startsWith('video/') || ct.startsWith('audio/')) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
if (ct === 'font/woff' || ct === 'font/woff2') {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
if (/\.(zip|gz|tgz|tar|bz2|br)$/.test(filename)) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (
|
|
61
|
-
ct.startsWith('text/') ||
|
|
62
|
-
ct === 'application/javascript' ||
|
|
63
|
-
ct === 'application/json' ||
|
|
64
|
-
ct === 'application/xml' ||
|
|
65
|
-
ct === 'application/xhtml+xml' ||
|
|
66
|
-
ct === 'image/svg+xml'
|
|
67
|
-
) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (ct === 'font/ttf' || ct === 'application/vnd.ms-fontobject') {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (
|
|
76
|
-
asset.kind === 'entry-point' ||
|
|
77
|
-
asset.kind === 'script' ||
|
|
78
|
-
asset.kind === 'stylesheet' ||
|
|
79
|
-
asset.kind === 'sourcemap'
|
|
80
|
-
) {
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function getAssetKind(filename: string, isEntry: boolean = false): string {
|
|
88
|
-
const ext = filename.split('.').pop()?.toLowerCase();
|
|
89
|
-
|
|
90
|
-
// Check for sourcemap
|
|
91
|
-
if (filename.endsWith('.js.map') || filename.endsWith('.css.map')) {
|
|
92
|
-
return 'sourcemap';
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
switch (ext) {
|
|
96
|
-
case 'js':
|
|
97
|
-
case 'mjs':
|
|
98
|
-
// Distinguish entry-point from regular scripts
|
|
99
|
-
return isEntry ? 'entry-point' : 'script';
|
|
100
|
-
case 'css':
|
|
101
|
-
return 'stylesheet';
|
|
102
|
-
case 'png':
|
|
103
|
-
case 'jpg':
|
|
104
|
-
case 'jpeg':
|
|
105
|
-
case 'gif':
|
|
106
|
-
case 'svg':
|
|
107
|
-
case 'webp':
|
|
108
|
-
return 'image';
|
|
109
|
-
case 'ico':
|
|
110
|
-
return 'asset';
|
|
111
|
-
case 'woff':
|
|
112
|
-
case 'woff2':
|
|
113
|
-
case 'ttf':
|
|
114
|
-
case 'eot':
|
|
115
|
-
return 'font';
|
|
116
|
-
default:
|
|
117
|
-
return 'other';
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export interface MetadataGeneratorOptions {
|
|
122
|
-
rootDir: string;
|
|
123
|
-
projectId: string;
|
|
124
|
-
orgId?: string;
|
|
125
|
-
deploymentId?: string;
|
|
126
|
-
agents: AgentMetadata[];
|
|
127
|
-
routes: RouteMetadata[];
|
|
128
|
-
dev?: boolean;
|
|
129
|
-
logger: Logger;
|
|
130
|
-
deploymentOptions?: DeployOptions;
|
|
131
|
-
/** Deployment config from agentuity.json (resources, mode, dependencies, domains) */
|
|
132
|
-
deploymentConfig?: z.infer<typeof DeploymentConfig>;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Normalize an agent filename/import path into a key for lookup
|
|
137
|
-
*/
|
|
138
|
-
function normalizeImportKey(path: string): string {
|
|
139
|
-
// Strip leading './' or 'src/' or '@'
|
|
140
|
-
let p = toForwardSlash(path).replace(/^src\//, '');
|
|
141
|
-
if (p.startsWith('./')) p = p.slice(2);
|
|
142
|
-
if (p.startsWith('@')) p = p.slice(1);
|
|
143
|
-
|
|
144
|
-
// Drop extension
|
|
145
|
-
p = p.replace(/\.(t|j)sx?$/, '');
|
|
146
|
-
|
|
147
|
-
// Drop common module file suffixes (agent.ts, index.ts become just the directory)
|
|
148
|
-
p = p.replace(/\/(agent|index)$/, '');
|
|
149
|
-
|
|
150
|
-
return p;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Generate agentuity.metadata.json
|
|
155
|
-
*/
|
|
156
|
-
export async function generateMetadata(options: MetadataGeneratorOptions): Promise<BuildMetadata> {
|
|
157
|
-
const { rootDir, projectId, orgId = '', agents, routes, logger } = options;
|
|
158
|
-
|
|
159
|
-
// Build agent lookup by import path for route schema enrichment
|
|
160
|
-
const agentsByImportKey = new Map<string, AgentMetadata>();
|
|
161
|
-
for (const agent of agents) {
|
|
162
|
-
if (!agent.filename) continue;
|
|
163
|
-
const key = normalizeImportKey(agent.filename);
|
|
164
|
-
agentsByImportKey.set(key, agent);
|
|
165
|
-
logger.trace(`Agent lookup: ${key} -> ${agent.name}`);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Enrich routes with schemas from agents (if not already set)
|
|
169
|
-
const enrichedRoutes = routes.map((route) => {
|
|
170
|
-
let schema = route.schema ? { ...route.schema } : undefined;
|
|
171
|
-
|
|
172
|
-
const importPath = route.config?.agentImportPath as string | undefined;
|
|
173
|
-
|
|
174
|
-
if (importPath) {
|
|
175
|
-
const key = normalizeImportKey(importPath);
|
|
176
|
-
const agent = agentsByImportKey.get(key);
|
|
177
|
-
|
|
178
|
-
if (agent && (agent.inputSchemaCode || agent.outputSchemaCode)) {
|
|
179
|
-
// Initialize schema object if needed
|
|
180
|
-
if (!schema) schema = {};
|
|
181
|
-
|
|
182
|
-
// Only fill in missing pieces; allow explicit route schema to override
|
|
183
|
-
if (!schema.input && agent.inputSchemaCode) {
|
|
184
|
-
schema.input = agent.inputSchemaCode;
|
|
185
|
-
logger.trace(`Route ${route.path}: added input schema from agent ${agent.name}`);
|
|
186
|
-
}
|
|
187
|
-
if (!schema.output && agent.outputSchemaCode) {
|
|
188
|
-
schema.output = agent.outputSchemaCode;
|
|
189
|
-
logger.trace(`Route ${route.path}: added output schema from agent ${agent.name}`);
|
|
190
|
-
}
|
|
191
|
-
} else {
|
|
192
|
-
logger.trace(`No agent found for import path ${importPath} in route ${route.filename}`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return {
|
|
197
|
-
...route,
|
|
198
|
-
schema,
|
|
199
|
-
};
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Read package.json for project metadata
|
|
203
|
-
const pkgPath = join(rootDir, 'package.json');
|
|
204
|
-
let pkgContents: {
|
|
205
|
-
name?: string;
|
|
206
|
-
version?: string;
|
|
207
|
-
description?: string;
|
|
208
|
-
keywords?: string[];
|
|
209
|
-
dependencies?: Record<string, string>;
|
|
210
|
-
} = {};
|
|
211
|
-
|
|
212
|
-
if (existsSync(pkgPath)) {
|
|
213
|
-
try {
|
|
214
|
-
const pkgText = Bun.file(pkgPath);
|
|
215
|
-
pkgContents = JSON.parse(await pkgText.text());
|
|
216
|
-
} catch (error) {
|
|
217
|
-
logger.warn(`Failed to read package.json: ${error}`);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Read asset manifests from Vite builds
|
|
222
|
-
const assets: AssetInfo[] = [];
|
|
223
|
-
const agentuityDir = join(rootDir, '.agentuity');
|
|
224
|
-
const seenAssets = new Set<string>(); // Track unique assets to avoid duplicates
|
|
225
|
-
|
|
226
|
-
// Helper to add asset with metadata
|
|
227
|
-
const addAsset = (relativePath: string, prefix: string, isEntry: boolean = false) => {
|
|
228
|
-
const assetPath = `${prefix}/${relativePath}`;
|
|
229
|
-
|
|
230
|
-
// Skip if already added
|
|
231
|
-
if (seenAssets.has(assetPath)) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const fullPath = join(agentuityDir, prefix, relativePath);
|
|
236
|
-
if (existsSync(fullPath)) {
|
|
237
|
-
const stats = statSync(fullPath);
|
|
238
|
-
|
|
239
|
-
// Skip empty marker files (.gitkeep, .keep, etc.)
|
|
240
|
-
if (stats.size === 0) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
seenAssets.add(assetPath);
|
|
245
|
-
const kind = getAssetKind(relativePath, isEntry);
|
|
246
|
-
const contentType = getContentType(relativePath);
|
|
247
|
-
const assetInfo: AssetInfo = {
|
|
248
|
-
filename: assetPath,
|
|
249
|
-
kind,
|
|
250
|
-
contentType,
|
|
251
|
-
size: stats.size,
|
|
252
|
-
};
|
|
253
|
-
if (shouldCompressAsset(assetInfo)) {
|
|
254
|
-
assetInfo.contentEncoding = 'gzip';
|
|
255
|
-
}
|
|
256
|
-
assets.push(assetInfo);
|
|
257
|
-
}
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
// Read client manifest
|
|
261
|
-
let hasClientManifest = false;
|
|
262
|
-
const clientManifestPath = join(agentuityDir, 'client', '.vite', 'manifest.json');
|
|
263
|
-
if (existsSync(clientManifestPath)) {
|
|
264
|
-
hasClientManifest = true;
|
|
265
|
-
try {
|
|
266
|
-
const clientManifest: Record<string, ViteManifestEntry> = JSON.parse(
|
|
267
|
-
readFileSync(clientManifestPath, 'utf-8')
|
|
268
|
-
);
|
|
269
|
-
for (const entry of Object.values(clientManifest)) {
|
|
270
|
-
// Mark JS files as entry-point if they are entry files
|
|
271
|
-
const isEntry = entry.isEntry === true && entry.file.endsWith('.js');
|
|
272
|
-
addAsset(entry.file, 'client', isEntry);
|
|
273
|
-
|
|
274
|
-
// Add sourcemap if it exists
|
|
275
|
-
const sourcemapPath = entry.file + '.map';
|
|
276
|
-
const fullSourcemapPath = join(agentuityDir, 'client', sourcemapPath);
|
|
277
|
-
if (existsSync(fullSourcemapPath)) {
|
|
278
|
-
addAsset(sourcemapPath, 'client');
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if (entry.css) {
|
|
282
|
-
entry.css.forEach((css) => {
|
|
283
|
-
addAsset(css, 'client');
|
|
284
|
-
// Add CSS sourcemap if it exists
|
|
285
|
-
const cssMapPath = css + '.map';
|
|
286
|
-
const fullCssMapPath = join(agentuityDir, 'client', cssMapPath);
|
|
287
|
-
if (existsSync(fullCssMapPath)) {
|
|
288
|
-
addAsset(cssMapPath, 'client');
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
if (entry.assets) {
|
|
293
|
-
entry.assets.forEach((asset) => addAsset(asset, 'client'));
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
logger.trace(`Found ${assets.length} client assets from manifest`);
|
|
297
|
-
} catch (error) {
|
|
298
|
-
logger.warn(`Failed to read client manifest: ${error}`);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// Read workbench manifest (optional)
|
|
303
|
-
const workbenchManifestPath = join(agentuityDir, 'workbench', '.vite', 'manifest.json');
|
|
304
|
-
if (existsSync(workbenchManifestPath)) {
|
|
305
|
-
try {
|
|
306
|
-
const workbenchManifest: Record<string, ViteManifestEntry> = JSON.parse(
|
|
307
|
-
readFileSync(workbenchManifestPath, 'utf-8')
|
|
308
|
-
);
|
|
309
|
-
for (const entry of Object.values(workbenchManifest)) {
|
|
310
|
-
const isEntry = entry.isEntry === true && entry.file.endsWith('.js');
|
|
311
|
-
addAsset(entry.file, 'workbench', isEntry);
|
|
312
|
-
|
|
313
|
-
// Add sourcemap if it exists
|
|
314
|
-
const sourcemapPath = entry.file + '.map';
|
|
315
|
-
const fullSourcemapPath = join(agentuityDir, 'workbench', sourcemapPath);
|
|
316
|
-
if (existsSync(fullSourcemapPath)) {
|
|
317
|
-
addAsset(sourcemapPath, 'workbench');
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
if (entry.css) {
|
|
321
|
-
entry.css.forEach((css) => {
|
|
322
|
-
addAsset(css, 'workbench');
|
|
323
|
-
// Add CSS sourcemap if it exists
|
|
324
|
-
const cssMapPath = css + '.map';
|
|
325
|
-
const fullCssMapPath = join(agentuityDir, 'workbench', cssMapPath);
|
|
326
|
-
if (existsSync(fullCssMapPath)) {
|
|
327
|
-
addAsset(cssMapPath, 'workbench');
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
if (entry.assets) {
|
|
332
|
-
entry.assets.forEach((asset) => addAsset(asset, 'workbench'));
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
logger.trace(`Found ${assets.length} total assets (including workbench)`);
|
|
336
|
-
} catch (error) {
|
|
337
|
-
logger.warn(`Failed to read workbench manifest: ${error}`);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// Scan client directory for static files copied from public/
|
|
342
|
-
// Vite copies src/web/public/* to .agentuity/client/* (at root, not in public/ subfolder)
|
|
343
|
-
// We need to find these files and add them to assets for CDN upload
|
|
344
|
-
const clientDir = join(agentuityDir, 'client');
|
|
345
|
-
if (existsSync(clientDir)) {
|
|
346
|
-
try {
|
|
347
|
-
function scanClientDirectory(dir: string, prefix: string = '') {
|
|
348
|
-
const entries = readdirSync(dir, { withFileTypes: true });
|
|
349
|
-
for (const entry of entries) {
|
|
350
|
-
const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
351
|
-
const fullPath = join(dir, entry.name);
|
|
352
|
-
|
|
353
|
-
// Skip .vite metadata dir always; skip assets/ only if manifest
|
|
354
|
-
// was found (the manifest already enumerates those files).
|
|
355
|
-
if (entry.isDirectory()) {
|
|
356
|
-
if (entry.name === '.vite') {
|
|
357
|
-
continue;
|
|
358
|
-
}
|
|
359
|
-
if (entry.name === 'assets' && hasClientManifest) {
|
|
360
|
-
continue;
|
|
361
|
-
}
|
|
362
|
-
scanClientDirectory(fullPath, relativePath);
|
|
363
|
-
} else if (entry.isFile()) {
|
|
364
|
-
// Skip files we already added from manifest (index.html is the entry point)
|
|
365
|
-
if (entry.name === 'index.html') {
|
|
366
|
-
continue;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
const stats = statSync(fullPath);
|
|
370
|
-
// Skip empty files
|
|
371
|
-
if (stats.size === 0) continue;
|
|
372
|
-
|
|
373
|
-
const assetPath = `client/${relativePath}`;
|
|
374
|
-
if (!seenAssets.has(assetPath)) {
|
|
375
|
-
seenAssets.add(assetPath);
|
|
376
|
-
const contentType = getContentType(entry.name);
|
|
377
|
-
const assetInfo: AssetInfo = {
|
|
378
|
-
filename: assetPath,
|
|
379
|
-
kind: 'static',
|
|
380
|
-
contentType,
|
|
381
|
-
size: stats.size,
|
|
382
|
-
};
|
|
383
|
-
if (shouldCompressAsset(assetInfo)) {
|
|
384
|
-
assetInfo.contentEncoding = 'gzip';
|
|
385
|
-
}
|
|
386
|
-
assets.push(assetInfo);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
scanClientDirectory(clientDir);
|
|
393
|
-
logger.trace(`Found ${assets.length} total assets (including static files)`);
|
|
394
|
-
} catch (error) {
|
|
395
|
-
logger.warn(`Failed to scan client directory for static files: ${error}`);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
// Build metadata structure
|
|
400
|
-
const metadata: BuildMetadata = {
|
|
401
|
-
routes: enrichedRoutes.map((route) => ({
|
|
402
|
-
id: route.id,
|
|
403
|
-
filename: route.filename,
|
|
404
|
-
path: route.path,
|
|
405
|
-
method: route.method as 'get' | 'post' | 'put' | 'delete' | 'patch',
|
|
406
|
-
version: route.version,
|
|
407
|
-
type: route.type,
|
|
408
|
-
agentIds: route.agentIds,
|
|
409
|
-
config: route.config,
|
|
410
|
-
schema: route.schema,
|
|
411
|
-
})),
|
|
412
|
-
agents: agents.map((agent) => ({
|
|
413
|
-
filename: agent.filename,
|
|
414
|
-
id: agent.id,
|
|
415
|
-
agentId: agent.agentId,
|
|
416
|
-
version: agent.version,
|
|
417
|
-
name: agent.name,
|
|
418
|
-
description: agent.description,
|
|
419
|
-
projectId,
|
|
420
|
-
schema:
|
|
421
|
-
agent.inputSchemaCode || agent.outputSchemaCode
|
|
422
|
-
? {
|
|
423
|
-
input: agent.inputSchemaCode,
|
|
424
|
-
output: agent.outputSchemaCode,
|
|
425
|
-
}
|
|
426
|
-
: undefined,
|
|
427
|
-
evals: agent.evals?.map((evalItem) => ({
|
|
428
|
-
filename: evalItem.filename,
|
|
429
|
-
id: evalItem.id,
|
|
430
|
-
identifier: evalItem.identifier,
|
|
431
|
-
name: evalItem.name,
|
|
432
|
-
version: evalItem.version,
|
|
433
|
-
description: evalItem.description,
|
|
434
|
-
agentIdentifier: evalItem.agentIdentifier,
|
|
435
|
-
projectId: evalItem.projectId,
|
|
436
|
-
})),
|
|
437
|
-
})),
|
|
438
|
-
assets,
|
|
439
|
-
project: {
|
|
440
|
-
id: projectId,
|
|
441
|
-
name: pkgContents.name || 'unknown',
|
|
442
|
-
version: pkgContents.version,
|
|
443
|
-
description: pkgContents.description,
|
|
444
|
-
keywords: pkgContents.keywords,
|
|
445
|
-
orgId,
|
|
446
|
-
},
|
|
447
|
-
deployment: {
|
|
448
|
-
...options.deploymentConfig, // deployment config from agentuity.json (resources, mode, dependencies, domains)
|
|
449
|
-
id: options.deploymentId || '',
|
|
450
|
-
date: new Date().toISOString(),
|
|
451
|
-
build: {
|
|
452
|
-
bun: Bun.version,
|
|
453
|
-
agentuity: getVersion(), // CLI version used to build
|
|
454
|
-
arch: process.arch,
|
|
455
|
-
platform: process.platform,
|
|
456
|
-
},
|
|
457
|
-
git: await getGitInfo(rootDir, logger),
|
|
458
|
-
},
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
// Build tags from git info (includes 'latest', branch, and short commit)
|
|
462
|
-
const gitInfo = metadata.deployment.git;
|
|
463
|
-
if (gitInfo) {
|
|
464
|
-
gitInfo.tags = buildGitTags(gitInfo);
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
if (options.deploymentOptions) {
|
|
468
|
-
const git = { ...(metadata.deployment.git ?? {}), ...options.deploymentOptions };
|
|
469
|
-
if (options.deploymentOptions.pullRequestNumber) {
|
|
470
|
-
git.pull_request = {
|
|
471
|
-
number: options.deploymentOptions.pullRequestNumber,
|
|
472
|
-
url: options.deploymentOptions.pullRequestUrl,
|
|
473
|
-
};
|
|
474
|
-
delete git.pullRequestNumber;
|
|
475
|
-
delete git.pullRequestUrl;
|
|
476
|
-
}
|
|
477
|
-
metadata.deployment.git = git;
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
return metadata;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* Generate AGENTS.md content for AI coding agents
|
|
485
|
-
*/
|
|
486
|
-
function generateAgentsMd(metadata: BuildMetadata): string {
|
|
487
|
-
const lines: string[] = [];
|
|
488
|
-
|
|
489
|
-
lines.push('# Compiled Agentuity Application');
|
|
490
|
-
lines.push('');
|
|
491
|
-
lines.push(
|
|
492
|
-
'This directory contains compiled and bundled source code from an Agentuity application.'
|
|
493
|
-
);
|
|
494
|
-
lines.push('');
|
|
495
|
-
|
|
496
|
-
// Add source repository info if available
|
|
497
|
-
if (metadata.deployment?.git?.repo) {
|
|
498
|
-
lines.push('## Source Repository');
|
|
499
|
-
lines.push('');
|
|
500
|
-
lines.push(`**Repository:** ${metadata.deployment.git.repo}`);
|
|
501
|
-
|
|
502
|
-
if (metadata.deployment.git.branch) {
|
|
503
|
-
lines.push(`**Branch:** ${metadata.deployment.git.branch}`);
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
if (metadata.deployment.git.commit) {
|
|
507
|
-
const shortCommit = metadata.deployment.git.commit.substring(0, 7);
|
|
508
|
-
const commitUrl = metadata.deployment.git.repo.endsWith('.git')
|
|
509
|
-
? metadata.deployment.git.repo.slice(0, -4)
|
|
510
|
-
: metadata.deployment.git.repo;
|
|
511
|
-
lines.push(
|
|
512
|
-
`**Commit:** [\`${shortCommit}\`](${commitUrl}/commit/${metadata.deployment.git.commit})`
|
|
513
|
-
);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
if (metadata.deployment.git.message) {
|
|
517
|
-
lines.push(`**Message:** ${metadata.deployment.git.message}`);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
lines.push('');
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
// Add build info
|
|
524
|
-
lines.push('## Build Information');
|
|
525
|
-
lines.push('');
|
|
526
|
-
if (metadata.project?.name) {
|
|
527
|
-
lines.push(
|
|
528
|
-
`**Project:** ${metadata.project.name}${metadata.project.version ? ` v${metadata.project.version}` : ''}`
|
|
529
|
-
);
|
|
530
|
-
}
|
|
531
|
-
if (metadata.project?.id) {
|
|
532
|
-
lines.push(`**Project ID:** ${metadata.project.id}`);
|
|
533
|
-
}
|
|
534
|
-
if (metadata.project?.orgId) {
|
|
535
|
-
lines.push(`**Org ID:** ${metadata.project.orgId}`);
|
|
536
|
-
}
|
|
537
|
-
if (metadata.deployment.id) {
|
|
538
|
-
lines.push(`**Deployment ID:** ${metadata.deployment.id}`);
|
|
539
|
-
}
|
|
540
|
-
if (metadata.deployment?.build) {
|
|
541
|
-
lines.push(
|
|
542
|
-
`**Built with:** Agentuity CLI v${metadata.deployment.build.agentuity}, Bun v${metadata.deployment.build.bun}`
|
|
543
|
-
);
|
|
544
|
-
lines.push(
|
|
545
|
-
`**Platform:** ${metadata.deployment.build.platform}-${metadata.deployment.build.arch}`
|
|
546
|
-
);
|
|
547
|
-
}
|
|
548
|
-
if (metadata.deployment?.date) {
|
|
549
|
-
lines.push(`**Build date:** ${metadata.deployment.date}`);
|
|
550
|
-
}
|
|
551
|
-
lines.push('');
|
|
552
|
-
|
|
553
|
-
// Add structure overview
|
|
554
|
-
lines.push('## Structure');
|
|
555
|
-
lines.push('');
|
|
556
|
-
lines.push('```');
|
|
557
|
-
lines.push('.agentuity/');
|
|
558
|
-
lines.push('├── app.js # Bundled server application');
|
|
559
|
-
lines.push('├── agentuity.metadata.json # Build metadata and schemas');
|
|
560
|
-
if (metadata.assets?.some((a: { filename: string }) => a.filename.startsWith('client/'))) {
|
|
561
|
-
lines.push('├── client/ # Frontend assets (fallback, CDN by default)');
|
|
562
|
-
}
|
|
563
|
-
if (metadata.assets?.some((a: { filename: string }) => a.filename.startsWith('public/'))) {
|
|
564
|
-
lines.push('├── public/ # Static assets');
|
|
565
|
-
}
|
|
566
|
-
lines.push('└── AGENTS.md # This file');
|
|
567
|
-
lines.push('```');
|
|
568
|
-
lines.push('');
|
|
569
|
-
|
|
570
|
-
// Add agent/route details
|
|
571
|
-
if (metadata.agents && metadata.agents.length > 0) {
|
|
572
|
-
lines.push('## Agents');
|
|
573
|
-
lines.push('');
|
|
574
|
-
lines.push(`This application defines ${metadata.agents.length} agent(s):`);
|
|
575
|
-
lines.push('');
|
|
576
|
-
for (const agent of metadata.agents) {
|
|
577
|
-
lines.push(`- **${agent.name}** (ID: \`${agent.id}\`)`);
|
|
578
|
-
}
|
|
579
|
-
lines.push('');
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
if (metadata.routes && metadata.routes.length > 0) {
|
|
583
|
-
lines.push('## Routes');
|
|
584
|
-
lines.push('');
|
|
585
|
-
lines.push(`This application defines ${metadata.routes.length} route(s):`);
|
|
586
|
-
lines.push('');
|
|
587
|
-
for (const route of metadata.routes) {
|
|
588
|
-
lines.push(`- \`${route.method.toUpperCase()} ${route.path}\` (${route.type})`);
|
|
589
|
-
}
|
|
590
|
-
lines.push('');
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
// Add runtime environment info
|
|
594
|
-
lines.push('## Runtime Environment');
|
|
595
|
-
lines.push('');
|
|
596
|
-
lines.push('When deployed, this application runs in a managed runtime environment with:');
|
|
597
|
-
lines.push('');
|
|
598
|
-
lines.push('**User & Permissions:**');
|
|
599
|
-
lines.push('- User: `agentuity` (UID: 1022, GID: 1777)');
|
|
600
|
-
lines.push('- Home directory: `/home/agentuity`');
|
|
601
|
-
lines.push('- Working directory: `/home/agentuity` (application code deployed here)');
|
|
602
|
-
lines.push('- Logs directory: `/home/agentuity/logs`');
|
|
603
|
-
lines.push('- Temp directory: `/home/agentuity/tmp`');
|
|
604
|
-
lines.push('');
|
|
605
|
-
lines.push('**Pre-installed Tools:**');
|
|
606
|
-
lines.push('- **Runtimes:** Node.js 24, Bun 1.x');
|
|
607
|
-
lines.push('- **AI Tools:** Amp, Opencode AI, Claude Code');
|
|
608
|
-
lines.push('- **Version Control:** git, GitHub CLI (gh)');
|
|
609
|
-
lines.push('- **Browser Automation:** Chromium, ChromeDriver, Xvfb (headless display)');
|
|
610
|
-
lines.push('- **Media Processing:** ffmpeg');
|
|
611
|
-
lines.push('- **Network Tools:** curl, wget, netcat, dnsutils');
|
|
612
|
-
lines.push('- **Other:** openssh-client, openssh-sftp-server, strace, unzip, fuse');
|
|
613
|
-
lines.push('');
|
|
614
|
-
lines.push('**Environment Variables:**');
|
|
615
|
-
lines.push('- `AGENTUITY_DATA_DIR=/home/agentuity/data` - Persistent data storage');
|
|
616
|
-
lines.push('- `AGENTUITY_LOG_DIR=/home/agentuity/logs` - Application logs');
|
|
617
|
-
lines.push('- `CHROME_BIN=/usr/bin/chromium` - Chromium browser path');
|
|
618
|
-
lines.push('- `DISPLAY=:99` - X11 display for headless browser');
|
|
619
|
-
lines.push(
|
|
620
|
-
'- `PATH` includes `/home/agentuity/.local/bin` and `/home/agentuity/.agentuity/bin`'
|
|
621
|
-
);
|
|
622
|
-
lines.push('');
|
|
623
|
-
lines.push('**Ports:**');
|
|
624
|
-
lines.push(
|
|
625
|
-
'- `3000: This default port that the project is running. Use PORT environment if not available'
|
|
626
|
-
);
|
|
627
|
-
lines.push('');
|
|
628
|
-
|
|
629
|
-
// Add note about metadata
|
|
630
|
-
lines.push('## For AI Coding Agents');
|
|
631
|
-
lines.push('');
|
|
632
|
-
lines.push(
|
|
633
|
-
'This is production-ready compiled code. For development and source code modifications:'
|
|
634
|
-
);
|
|
635
|
-
lines.push('');
|
|
636
|
-
if (metadata.deployment?.git?.repo) {
|
|
637
|
-
lines.push(`1. Clone the source repository: ${metadata.deployment.git.repo}`);
|
|
638
|
-
lines.push('2. Make changes to source files in `src/`');
|
|
639
|
-
lines.push('3. Run `agentuity build` to rebuild this bundle');
|
|
640
|
-
} else {
|
|
641
|
-
lines.push('1. Locate the original source repository');
|
|
642
|
-
lines.push('2. Make changes to source files in `src/`');
|
|
643
|
-
lines.push('3. Run `agentuity build` to rebuild this bundle');
|
|
644
|
-
}
|
|
645
|
-
lines.push('');
|
|
646
|
-
lines.push(
|
|
647
|
-
'See `agentuity.metadata.json` for detailed information about agents, routes, and schemas.'
|
|
648
|
-
);
|
|
649
|
-
|
|
650
|
-
return lines.join('\n');
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
/**
|
|
654
|
-
* Write agentuity.metadata.json to .agentuity directory
|
|
655
|
-
*/
|
|
656
|
-
export function writeMetadataFile(
|
|
657
|
-
rootDir: string,
|
|
658
|
-
metadata: BuildMetadata,
|
|
659
|
-
dev: boolean,
|
|
660
|
-
logger: Logger
|
|
661
|
-
): void {
|
|
662
|
-
const agentuityDir = join(rootDir, '.agentuity');
|
|
663
|
-
|
|
664
|
-
// Ensure .agentuity directory exists
|
|
665
|
-
if (!existsSync(agentuityDir)) {
|
|
666
|
-
mkdirSync(agentuityDir, { recursive: true });
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
const metadataPath = join(agentuityDir, 'agentuity.metadata.json');
|
|
670
|
-
const metadataContent = dev ? JSON.stringify(metadata, null, 2) : JSON.stringify(metadata);
|
|
671
|
-
|
|
672
|
-
writeFileSync(metadataPath, metadataContent, 'utf-8');
|
|
673
|
-
logger.trace('Wrote agentuity.metadata.json');
|
|
674
|
-
|
|
675
|
-
// Write AGENTS.md for AI coding agents
|
|
676
|
-
if (!dev) {
|
|
677
|
-
const agentMdPath = join(agentuityDir, 'AGENTS.md');
|
|
678
|
-
const agentMdContent = generateAgentsMd(metadata);
|
|
679
|
-
|
|
680
|
-
writeFileSync(agentMdPath, agentMdContent, 'utf-8');
|
|
681
|
-
logger.trace('Wrote AGENTS.md');
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
/**
|
|
686
|
-
* Generate .routemapping.json for runtime route tracking
|
|
687
|
-
*/
|
|
688
|
-
export function generateRouteMapping(
|
|
689
|
-
rootDir: string,
|
|
690
|
-
routes: RouteMetadata[],
|
|
691
|
-
dev: boolean,
|
|
692
|
-
logger: Logger
|
|
693
|
-
): void {
|
|
694
|
-
const agentuityDir = join(rootDir, '.agentuity');
|
|
695
|
-
|
|
696
|
-
// Ensure .agentuity directory exists
|
|
697
|
-
if (!existsSync(agentuityDir)) {
|
|
698
|
-
mkdirSync(agentuityDir, { recursive: true });
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
const routeMapping: Record<string, string> = {};
|
|
702
|
-
for (const route of routes) {
|
|
703
|
-
routeMapping[`${route.method} ${route.path}`] = route.id;
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
const routeMappingPath = join(agentuityDir, '.routemapping.json');
|
|
707
|
-
const routeMappingContent = dev
|
|
708
|
-
? JSON.stringify(routeMapping, null, 2)
|
|
709
|
-
: JSON.stringify(routeMapping);
|
|
710
|
-
|
|
711
|
-
writeFileSync(routeMappingPath, routeMappingContent, 'utf-8');
|
|
712
|
-
logger.trace('Wrote .routemapping.json');
|
|
713
|
-
}
|