@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,229 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* App Router Detector
|
|
3
|
-
*
|
|
4
|
-
* Parses the user's `src/app.ts` to detect whether they pass a `router` property
|
|
5
|
-
* to `createApp()`. If detected, resolves the router variable(s) to their import
|
|
6
|
-
* sources and mount paths.
|
|
7
|
-
*
|
|
8
|
-
* Uses TypeScript's compiler API to reliably detect the pattern, consistent with
|
|
9
|
-
* the lifecycle generator approach.
|
|
10
|
-
*/
|
|
11
|
-
import ts from 'typescript';
|
|
12
|
-
import { join, dirname, resolve } from 'node:path';
|
|
13
|
-
import { statSync } from 'node:fs';
|
|
14
|
-
/**
|
|
15
|
-
* Resolve an import path to an actual file on disk.
|
|
16
|
-
* Tries the path as-is, then with common extensions.
|
|
17
|
-
*/
|
|
18
|
-
async function resolveImportFile(fromDir, importPath) {
|
|
19
|
-
if (!importPath.startsWith('.') && !importPath.startsWith('/')) {
|
|
20
|
-
return null; // Package import — can't resolve
|
|
21
|
-
}
|
|
22
|
-
const basePath = resolve(fromDir, importPath);
|
|
23
|
-
const extensions = ['.ts', '.tsx', '/index.ts', '/index.tsx'];
|
|
24
|
-
const baseFile = Bun.file(basePath);
|
|
25
|
-
if (await baseFile.exists()) {
|
|
26
|
-
try {
|
|
27
|
-
if (statSync(basePath).isFile())
|
|
28
|
-
return basePath;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// ignore
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
for (const ext of extensions) {
|
|
35
|
-
const candidate = basePath + ext;
|
|
36
|
-
if (await Bun.file(candidate).exists()) {
|
|
37
|
-
return candidate;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Extract router mounts from a createApp() call using TypeScript's AST.
|
|
44
|
-
* Returns null if no router property found.
|
|
45
|
-
*/
|
|
46
|
-
function extractRouterMounts(sourceFile) {
|
|
47
|
-
let result = null;
|
|
48
|
-
function getStringLiteral(node) {
|
|
49
|
-
if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {
|
|
50
|
-
return node.text;
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
function extractMountFromObject(obj) {
|
|
55
|
-
let path;
|
|
56
|
-
let varName;
|
|
57
|
-
for (const prop of obj.properties) {
|
|
58
|
-
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
59
|
-
continue;
|
|
60
|
-
if (prop.name.text === 'path') {
|
|
61
|
-
path = getStringLiteral(prop.initializer) ?? undefined;
|
|
62
|
-
}
|
|
63
|
-
if (prop.name.text === 'router') {
|
|
64
|
-
if (ts.isIdentifier(prop.initializer)) {
|
|
65
|
-
varName = prop.initializer.text;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Also handle shorthand: { path: '/v1', router } where router is shorthand
|
|
70
|
-
for (const prop of obj.properties) {
|
|
71
|
-
if (ts.isShorthandPropertyAssignment(prop) && prop.name.text === 'router') {
|
|
72
|
-
varName = prop.name.text;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return path && varName ? { path, varName } : null;
|
|
76
|
-
}
|
|
77
|
-
function processRouterValue(value) {
|
|
78
|
-
// Form 1: Identifier → createApp({ router: myRouter })
|
|
79
|
-
if (ts.isIdentifier(value)) {
|
|
80
|
-
return [{ path: '/api', varName: value.text }];
|
|
81
|
-
}
|
|
82
|
-
// Form 2: Object → createApp({ router: { path: '/v1', router: myRouter } })
|
|
83
|
-
if (ts.isObjectLiteralExpression(value)) {
|
|
84
|
-
const mount = extractMountFromObject(value);
|
|
85
|
-
return mount ? [mount] : null;
|
|
86
|
-
}
|
|
87
|
-
// Form 3: Array → createApp({ router: [...] })
|
|
88
|
-
if (ts.isArrayLiteralExpression(value)) {
|
|
89
|
-
const mounts = [];
|
|
90
|
-
for (const element of value.elements) {
|
|
91
|
-
if (ts.isObjectLiteralExpression(element)) {
|
|
92
|
-
const mount = extractMountFromObject(element);
|
|
93
|
-
if (mount)
|
|
94
|
-
mounts.push(mount);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return mounts.length > 0 ? mounts : null;
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
function visit(node) {
|
|
102
|
-
if (result)
|
|
103
|
-
return;
|
|
104
|
-
// Find createApp(...) — with or without await
|
|
105
|
-
let callExpr;
|
|
106
|
-
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
|
|
107
|
-
if (node.expression.text === 'createApp')
|
|
108
|
-
callExpr = node;
|
|
109
|
-
}
|
|
110
|
-
else if (ts.isAwaitExpression(node) && ts.isCallExpression(node.expression)) {
|
|
111
|
-
const call = node.expression;
|
|
112
|
-
if (ts.isIdentifier(call.expression) && call.expression.text === 'createApp') {
|
|
113
|
-
callExpr = call;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (callExpr && callExpr.arguments.length > 0) {
|
|
117
|
-
const configArg = callExpr.arguments[0];
|
|
118
|
-
if (configArg && ts.isObjectLiteralExpression(configArg)) {
|
|
119
|
-
for (const prop of configArg.properties) {
|
|
120
|
-
// Handle: router: value
|
|
121
|
-
if (ts.isPropertyAssignment(prop) &&
|
|
122
|
-
ts.isIdentifier(prop.name) &&
|
|
123
|
-
prop.name.text === 'router') {
|
|
124
|
-
result = processRouterValue(prop.initializer);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
// Handle shorthand: createApp({ router })
|
|
128
|
-
if (ts.isShorthandPropertyAssignment(prop) && prop.name.text === 'router') {
|
|
129
|
-
result = [{ path: '/api', varName: 'router' }];
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
ts.forEachChild(node, visit);
|
|
136
|
-
}
|
|
137
|
-
visit(sourceFile);
|
|
138
|
-
return result;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Build import map from the source file: variable name → import path
|
|
142
|
-
*/
|
|
143
|
-
function buildImportMap(sourceFile) {
|
|
144
|
-
const importMap = new Map();
|
|
145
|
-
for (const stmt of sourceFile.statements) {
|
|
146
|
-
if (!ts.isImportDeclaration(stmt) || !ts.isStringLiteral(stmt.moduleSpecifier))
|
|
147
|
-
continue;
|
|
148
|
-
const importPath = stmt.moduleSpecifier.text;
|
|
149
|
-
const clause = stmt.importClause;
|
|
150
|
-
if (!clause)
|
|
151
|
-
continue;
|
|
152
|
-
// Default import: import router from './api'
|
|
153
|
-
if (clause.name) {
|
|
154
|
-
importMap.set(clause.name.text, importPath);
|
|
155
|
-
}
|
|
156
|
-
// Named imports: import { v1, v2 } from './routers'
|
|
157
|
-
if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {
|
|
158
|
-
for (const spec of clause.namedBindings.elements) {
|
|
159
|
-
importMap.set(spec.name.text, importPath);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return importMap;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Detect whether `src/app.ts` uses `createApp({ router })`.
|
|
167
|
-
*
|
|
168
|
-
* Returns `{ detected: false, mounts: [] }` when:
|
|
169
|
-
* - `src/app.ts` doesn't exist
|
|
170
|
-
* - `createApp()` is called without a `router` property
|
|
171
|
-
* - Router variables can't be resolved to files
|
|
172
|
-
*/
|
|
173
|
-
export async function detectExplicitRouter(rootDir, logger) {
|
|
174
|
-
const noDetection = { detected: false, mounts: [] };
|
|
175
|
-
// Look for app.ts in src/ (standard location), then root
|
|
176
|
-
let appFile = join(rootDir, 'src', 'app.ts');
|
|
177
|
-
if (!(await Bun.file(appFile).exists())) {
|
|
178
|
-
appFile = join(rootDir, 'app.ts');
|
|
179
|
-
if (!(await Bun.file(appFile).exists())) {
|
|
180
|
-
logger.trace('[router-detect] No app.ts found');
|
|
181
|
-
return noDetection;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
try {
|
|
185
|
-
const source = await Bun.file(appFile).text();
|
|
186
|
-
const appDir = dirname(appFile);
|
|
187
|
-
// Quick bail-out before parsing
|
|
188
|
-
if (!source.includes('createApp') || !source.includes('router')) {
|
|
189
|
-
logger.trace('[router-detect] No createApp + router pattern found in %s', appFile);
|
|
190
|
-
return noDetection;
|
|
191
|
-
}
|
|
192
|
-
// Parse with TypeScript
|
|
193
|
-
const sourceFile = ts.createSourceFile(appFile, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
194
|
-
const rawMounts = extractRouterMounts(sourceFile);
|
|
195
|
-
if (!rawMounts || rawMounts.length === 0) {
|
|
196
|
-
logger.trace('[router-detect] createApp() found but no router property');
|
|
197
|
-
return noDetection;
|
|
198
|
-
}
|
|
199
|
-
// Build import map to resolve variable names to file paths
|
|
200
|
-
const importMap = buildImportMap(sourceFile);
|
|
201
|
-
// Resolve each router variable to its file
|
|
202
|
-
const mounts = [];
|
|
203
|
-
for (const { path, varName } of rawMounts) {
|
|
204
|
-
const importPath = importMap.get(varName);
|
|
205
|
-
if (!importPath) {
|
|
206
|
-
logger.debug('[router-detect] Router variable %s is not imported — may be defined locally', varName);
|
|
207
|
-
continue;
|
|
208
|
-
}
|
|
209
|
-
const resolvedFile = await resolveImportFile(appDir, importPath);
|
|
210
|
-
if (!resolvedFile) {
|
|
211
|
-
logger.warn('[router-detect] Could not resolve import %s for router variable %s', importPath, varName);
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
logger.trace('[router-detect] Found router mount: %s → %s (%s)', path, varName, resolvedFile);
|
|
215
|
-
mounts.push({ path, routerFile: resolvedFile });
|
|
216
|
-
}
|
|
217
|
-
if (mounts.length === 0) {
|
|
218
|
-
logger.debug('[router-detect] Router variables found but none could be resolved to files');
|
|
219
|
-
return noDetection;
|
|
220
|
-
}
|
|
221
|
-
logger.debug('[router-detect] Detected %d explicit router mount(s) in %s', mounts.length, appFile);
|
|
222
|
-
return { detected: true, mounts };
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
logger.warn('[router-detect] Failed to parse %s: %s', appFile, error instanceof Error ? error.message : String(error));
|
|
226
|
-
return noDetection;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
//# sourceMappingURL=app-router-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-router-detector.js","sourceRoot":"","sources":["../../../src/cmd/build/app-router-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format-schema.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/format-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6DrD"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple formatter for schema code strings.
|
|
3
|
-
* Adds basic indentation and line breaks for readability.
|
|
4
|
-
*/
|
|
5
|
-
export function formatSchemaCode(code) {
|
|
6
|
-
if (!code)
|
|
7
|
-
return code;
|
|
8
|
-
let indentLevel = 0;
|
|
9
|
-
const indentSize = 2;
|
|
10
|
-
const lines = [];
|
|
11
|
-
let currentLine = '';
|
|
12
|
-
for (let i = 0; i < code.length; i++) {
|
|
13
|
-
const char = code[i];
|
|
14
|
-
const nextChar = code[i + 1];
|
|
15
|
-
const prevChar = i > 0 ? code[i - 1] : '';
|
|
16
|
-
// Skip existing whitespace/newlines
|
|
17
|
-
if (char === '\n' || char === '\r' || (char === ' ' && prevChar === ' ')) {
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
// Handle opening braces
|
|
21
|
-
if (char === '{') {
|
|
22
|
-
currentLine += char;
|
|
23
|
-
lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim());
|
|
24
|
-
indentLevel++;
|
|
25
|
-
currentLine = '';
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
// Handle closing braces
|
|
29
|
-
if (char === '}') {
|
|
30
|
-
if (currentLine.trim()) {
|
|
31
|
-
lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim());
|
|
32
|
-
currentLine = '';
|
|
33
|
-
}
|
|
34
|
-
indentLevel--;
|
|
35
|
-
// Check if next char is closing paren - if so, put on same line
|
|
36
|
-
if (nextChar === ')') {
|
|
37
|
-
currentLine = '}';
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
lines.push(' '.repeat(indentLevel * indentSize) + char);
|
|
41
|
-
}
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
// Handle commas - add line break after
|
|
45
|
-
if (char === ',') {
|
|
46
|
-
currentLine += char;
|
|
47
|
-
lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim());
|
|
48
|
-
currentLine = '';
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
// Accumulate characters
|
|
52
|
-
currentLine += char;
|
|
53
|
-
}
|
|
54
|
-
// Add any remaining content
|
|
55
|
-
if (currentLine.trim()) {
|
|
56
|
-
lines.push(' '.repeat(indentLevel * indentSize) + currentLine.trim());
|
|
57
|
-
}
|
|
58
|
-
return lines.join('\n');
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=format-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format-schema.js","sourceRoot":"","sources":["../../../src/cmd/build/format-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE1C,oCAAoC;QACpC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;YAC1E,SAAS;QACV,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClB,WAAW,IAAI,IAAI,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,WAAW,EAAE,CAAC;YACd,WAAW,GAAG,EAAE,CAAC;YACjB,SAAS;QACV,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClB,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtE,WAAW,GAAG,EAAE,CAAC;YAClB,CAAC;YACD,WAAW,EAAE,CAAC;YACd,gEAAgE;YAChE,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtB,WAAW,GAAG,GAAG,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,SAAS;QACV,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClB,WAAW,IAAI,IAAI,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,WAAW,GAAG,EAAE,CAAC;YACjB,SAAS;QACV,CAAC;QAED,wBAAwB;QACxB,WAAW,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,4BAA4B;IAC5B,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Discovery — import-based
|
|
3
|
-
*
|
|
4
|
-
* Discovers agents by scanning src/agent/**\/*.ts files and importing them
|
|
5
|
-
* at build time. The agent instance already knows its own metadata, schemas,
|
|
6
|
-
* and evals — no AST parsing needed.
|
|
7
|
-
*/
|
|
8
|
-
import type { Logger } from '../../../types';
|
|
9
|
-
export interface AgentMetadata {
|
|
10
|
-
filename: string;
|
|
11
|
-
name: string;
|
|
12
|
-
id: string;
|
|
13
|
-
agentId: string;
|
|
14
|
-
version: string;
|
|
15
|
-
description?: string;
|
|
16
|
-
inputSchemaCode?: string;
|
|
17
|
-
outputSchemaCode?: string;
|
|
18
|
-
evals?: EvalMetadata[];
|
|
19
|
-
}
|
|
20
|
-
export interface EvalMetadata {
|
|
21
|
-
id: string;
|
|
22
|
-
identifier: string;
|
|
23
|
-
name: string;
|
|
24
|
-
filename: string;
|
|
25
|
-
version: string;
|
|
26
|
-
description?: string;
|
|
27
|
-
agentIdentifier: string;
|
|
28
|
-
projectId: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Discover all agents in src/agent directory.
|
|
32
|
-
*
|
|
33
|
-
* Imports each agent file at build time — the agent instance already knows
|
|
34
|
-
* its own metadata, schemas, and evals. No AST parsing needed.
|
|
35
|
-
*/
|
|
36
|
-
export declare function discoverAgents(srcDir: string, projectId: string, deploymentId: string, logger: Logger): Promise<AgentMetadata[]>;
|
|
37
|
-
//# sourceMappingURL=agent-discovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-discovery.d.ts","sourceRoot":"","sources":["../../../../src/cmd/build/vite/agent-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAS7C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CAClB;AAwQD;;;;;GAKG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CAiE1B"}
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Discovery — import-based
|
|
3
|
-
*
|
|
4
|
-
* Discovers agents by scanning src/agent/**\/*.ts files and importing them
|
|
5
|
-
* at build time. The agent instance already knows its own metadata, schemas,
|
|
6
|
-
* and evals — no AST parsing needed.
|
|
7
|
-
*/
|
|
8
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
9
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
10
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
11
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
return path;
|
|
15
|
-
};
|
|
16
|
-
import { dirname, join, relative } from 'node:path';
|
|
17
|
-
import { StructuredError } from '@agentuity/core';
|
|
18
|
-
import { toForwardSlash } from '../../../utils/normalize-path';
|
|
19
|
-
const DuplicateEvalNameError = StructuredError('DuplicateEvalNameError')();
|
|
20
|
-
/**
|
|
21
|
-
* Hash function for generating stable IDs
|
|
22
|
-
*/
|
|
23
|
-
function hash(...val) {
|
|
24
|
-
const hasher = new Bun.CryptoHasher('sha256');
|
|
25
|
-
for (const v of val)
|
|
26
|
-
hasher.update(v);
|
|
27
|
-
return hasher.digest().toHex();
|
|
28
|
-
}
|
|
29
|
-
function hashSHA1(...val) {
|
|
30
|
-
const hasher = new Bun.CryptoHasher('sha1');
|
|
31
|
-
for (const v of val)
|
|
32
|
-
hasher.update(v);
|
|
33
|
-
return hasher.digest().toHex();
|
|
34
|
-
}
|
|
35
|
-
function getAgentId(projectId, deploymentId, filename, version) {
|
|
36
|
-
return `agentid_${hashSHA1(projectId, deploymentId, filename, version)}`;
|
|
37
|
-
}
|
|
38
|
-
function generateStableAgentId(projectId, name) {
|
|
39
|
-
return `agent_${hashSHA1(projectId, name)}`.substring(0, 64);
|
|
40
|
-
}
|
|
41
|
-
function getEvalId(projectId, deploymentId, filename, name, version) {
|
|
42
|
-
return `evalid_${hashSHA1(projectId, deploymentId, filename, name, version)}`;
|
|
43
|
-
}
|
|
44
|
-
function generateStableEvalId(projectId, agentId, name) {
|
|
45
|
-
return `eval_${hashSHA1(projectId, agentId, name)}`.substring(0, 64);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Convert a StandardSchemaV1-compatible schema to a JSON Schema string.
|
|
49
|
-
* Dynamically imports toJSONSchema from @agentuity/schema (available in user's project).
|
|
50
|
-
*/
|
|
51
|
-
async function schemaToJsonString(schema, rootDir, logger) {
|
|
52
|
-
if (!schema)
|
|
53
|
-
return undefined;
|
|
54
|
-
try {
|
|
55
|
-
// Resolve @agentuity/schema from the user's project and import its public entry point.
|
|
56
|
-
// The CLI doesn't declare @agentuity/schema as its own dependency — it lives in the
|
|
57
|
-
// user's node_modules, so we resolve the path dynamically.
|
|
58
|
-
const schemaPackageDir = join(rootDir, 'node_modules', '@agentuity', 'schema');
|
|
59
|
-
if (!(await Bun.file(join(schemaPackageDir, 'package.json')).exists())) {
|
|
60
|
-
logger.debug('[agent-discovery] @agentuity/schema not found in user project');
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
const { toJSONSchema } = await import(__rewriteRelativeImportExtension(schemaPackageDir));
|
|
64
|
-
const jsonSchema = toJSONSchema(schema);
|
|
65
|
-
return JSON.stringify(jsonSchema);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
logger.debug('[agent-discovery] Failed to convert schema to JSON Schema: %s', error instanceof Error ? error.message : String(error));
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Import an agent file and extract metadata from the agent instance.
|
|
74
|
-
*/
|
|
75
|
-
async function importAgentMetadata(filePath, relativeFilename, rootDir, projectId, deploymentId, logger) {
|
|
76
|
-
try {
|
|
77
|
-
const source = await Bun.file(filePath).text();
|
|
78
|
-
const version = hash(source);
|
|
79
|
-
// Import the agent file — Bun handles TS natively
|
|
80
|
-
// No source-level gate: files may re-export agents created elsewhere
|
|
81
|
-
const mod = await import(__rewriteRelativeImportExtension(filePath));
|
|
82
|
-
const agent = mod.default;
|
|
83
|
-
if (!agent?.metadata?.name) {
|
|
84
|
-
logger.debug('[agent-discovery] No valid agent found in %s', relativeFilename);
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
const name = agent.metadata.name;
|
|
88
|
-
const description = agent.metadata.description;
|
|
89
|
-
const id = getAgentId(projectId, deploymentId, relativeFilename, version);
|
|
90
|
-
const agentId = generateStableAgentId(projectId, name);
|
|
91
|
-
// Extract schemas as JSON Schema strings
|
|
92
|
-
const inputSchemaCode = await schemaToJsonString(agent.inputSchema, rootDir, logger);
|
|
93
|
-
const outputSchemaCode = await schemaToJsonString(agent.outputSchema, rootDir, logger);
|
|
94
|
-
// Extract evals from agent.evals array (self-registered by createEval())
|
|
95
|
-
const evals = [];
|
|
96
|
-
if (agent.evals && Array.isArray(agent.evals) && agent.evals.length > 0) {
|
|
97
|
-
for (const evalItem of agent.evals) {
|
|
98
|
-
const evalName = evalItem.metadata?.name ?? evalItem.name;
|
|
99
|
-
if (!evalName)
|
|
100
|
-
continue;
|
|
101
|
-
const evalDescription = evalItem.metadata?.description ?? evalItem.description;
|
|
102
|
-
const evalVersion = version; // same file version
|
|
103
|
-
const evalId = getEvalId(projectId, deploymentId, relativeFilename, evalName, evalVersion);
|
|
104
|
-
const evalIdentifier = generateStableEvalId(projectId, agentId, evalName);
|
|
105
|
-
logger.trace('Found eval "%s" in %s (identifier: %s)', evalName, relativeFilename, evalIdentifier);
|
|
106
|
-
evals.push({
|
|
107
|
-
id: evalId,
|
|
108
|
-
identifier: evalIdentifier,
|
|
109
|
-
name: evalName,
|
|
110
|
-
filename: relativeFilename,
|
|
111
|
-
version: evalVersion,
|
|
112
|
-
description: evalDescription,
|
|
113
|
-
agentIdentifier: agentId,
|
|
114
|
-
projectId,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Also check for evals in separate eval.ts file in same directory
|
|
119
|
-
const agentDir = dirname(filePath);
|
|
120
|
-
const evalsPath = join(agentDir, 'eval.ts');
|
|
121
|
-
if (await Bun.file(evalsPath).exists()) {
|
|
122
|
-
const evalsSource = await Bun.file(evalsPath).text();
|
|
123
|
-
if (evalsSource.includes('createEval')) {
|
|
124
|
-
try {
|
|
125
|
-
await import(__rewriteRelativeImportExtension(evalsPath));
|
|
126
|
-
// After importing, the evals self-register on the agent via agent.createEval()
|
|
127
|
-
// Re-check agent.evals for any newly registered evals
|
|
128
|
-
if (agent.evals && Array.isArray(agent.evals)) {
|
|
129
|
-
const relativeEvalsPath = toForwardSlash(relative(join(rootDir), evalsPath));
|
|
130
|
-
const evalVersion = hash(evalsSource);
|
|
131
|
-
for (const evalItem of agent.evals) {
|
|
132
|
-
const evalName = evalItem.metadata?.name ?? evalItem.name;
|
|
133
|
-
if (!evalName)
|
|
134
|
-
continue;
|
|
135
|
-
// Skip if already collected from agent file
|
|
136
|
-
if (evals.some((e) => e.name === evalName))
|
|
137
|
-
continue;
|
|
138
|
-
const evalDescription = evalItem.metadata?.description ?? evalItem.description;
|
|
139
|
-
const evalId = getEvalId(projectId, deploymentId, relativeEvalsPath, evalName, evalVersion);
|
|
140
|
-
const evalIdentifier = generateStableEvalId(projectId, agentId, evalName);
|
|
141
|
-
logger.trace('Found eval "%s" in eval.ts for agent %s (identifier: %s)', evalName, name, evalIdentifier);
|
|
142
|
-
evals.push({
|
|
143
|
-
id: evalId,
|
|
144
|
-
identifier: evalIdentifier,
|
|
145
|
-
name: evalName,
|
|
146
|
-
filename: relativeEvalsPath,
|
|
147
|
-
version: evalVersion,
|
|
148
|
-
description: evalDescription,
|
|
149
|
-
agentIdentifier: agentId,
|
|
150
|
-
projectId,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
catch (error) {
|
|
156
|
-
logger.warn('[agent-discovery] Failed to import evals from %s: %s', evalsPath, error instanceof Error ? error.message : String(error));
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// Check for duplicate eval names across sources (agent file + eval.ts).
|
|
161
|
-
// Same name + same agent = same stable identifier → duplicate key error
|
|
162
|
-
// on the backend database.
|
|
163
|
-
if (evals.length > 1) {
|
|
164
|
-
const seen = new Map();
|
|
165
|
-
for (const evalItem of evals) {
|
|
166
|
-
const prev = seen.get(evalItem.name);
|
|
167
|
-
if (prev && prev !== evalItem.filename) {
|
|
168
|
-
throw new DuplicateEvalNameError({
|
|
169
|
-
message: `Duplicate eval name '${evalItem.name}' for agent '${name}': ` +
|
|
170
|
-
`defined in both '${prev}' and '${evalItem.filename}'. ` +
|
|
171
|
-
'Eval names must be unique per agent.',
|
|
172
|
-
agent: name,
|
|
173
|
-
filename: evalItem.filename,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
seen.set(evalItem.name, evalItem.filename);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return {
|
|
180
|
-
filename: relativeFilename,
|
|
181
|
-
name,
|
|
182
|
-
id,
|
|
183
|
-
agentId,
|
|
184
|
-
version,
|
|
185
|
-
description,
|
|
186
|
-
inputSchemaCode,
|
|
187
|
-
outputSchemaCode,
|
|
188
|
-
evals: evals.length > 0 ? evals : undefined,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
193
|
-
throw new Error(`Failed to import agent at ${relativeFilename}:\n` +
|
|
194
|
-
` ${errorMsg}\n\n` +
|
|
195
|
-
`Agent files are imported at build time to extract metadata. Code that ` +
|
|
196
|
-
`runs at module scope (outside of setup() or handler()) will execute ` +
|
|
197
|
-
`during the build — including SDK client constructors that require API ` +
|
|
198
|
-
`keys or environment variables.\n\n` +
|
|
199
|
-
`To fix this, move initialization code into setup() or handler():\n\n` +
|
|
200
|
-
` // ❌ Don't do this — runs at import time:\n` +
|
|
201
|
-
` const client = new OpenAI();\n` +
|
|
202
|
-
` export default createAgent('my-agent', { handler: async (ctx) => { ... } });\n\n` +
|
|
203
|
-
` // ✅ Do this instead — runs at startup:\n` +
|
|
204
|
-
` export default createAgent('my-agent', {\n` +
|
|
205
|
-
` setup: async () => ({ client: new OpenAI() }),\n` +
|
|
206
|
-
` handler: async (ctx) => { const { client } = ctx.config; ... },\n` +
|
|
207
|
-
` });\n\n` +
|
|
208
|
-
`See https://agentuity.dev/agents/creating-agents for more information.`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Discover all agents in src/agent directory.
|
|
213
|
-
*
|
|
214
|
-
* Imports each agent file at build time — the agent instance already knows
|
|
215
|
-
* its own metadata, schemas, and evals. No AST parsing needed.
|
|
216
|
-
*/
|
|
217
|
-
export async function discoverAgents(srcDir, projectId, deploymentId, logger) {
|
|
218
|
-
const agentsDir = join(srcDir, 'agent');
|
|
219
|
-
const agents = [];
|
|
220
|
-
const rootDir = join(srcDir, '..');
|
|
221
|
-
// Scan all .ts files in agent directory
|
|
222
|
-
const glob = new Bun.Glob('**/*.ts');
|
|
223
|
-
let files;
|
|
224
|
-
try {
|
|
225
|
-
files = await Array.fromAsync(glob.scan(agentsDir));
|
|
226
|
-
}
|
|
227
|
-
catch {
|
|
228
|
-
logger.trace('No agent directory found at %s', agentsDir);
|
|
229
|
-
return agents;
|
|
230
|
-
}
|
|
231
|
-
// Track seen agent names to deduplicate — e.g., index.ts re-exporting agent.ts
|
|
232
|
-
const seenAgentNames = new Set();
|
|
233
|
-
for (const file of files) {
|
|
234
|
-
const filePath = join(agentsDir, file);
|
|
235
|
-
// Skip eval.ts files (processed as part of agent discovery)
|
|
236
|
-
if (file.endsWith('/eval.ts') || file === 'eval.ts') {
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
// Skip test files (*.test.ts, *.spec.ts) and test directories
|
|
240
|
-
if (file.startsWith('test/') ||
|
|
241
|
-
file.includes('/test/') ||
|
|
242
|
-
file.startsWith('__tests__/') ||
|
|
243
|
-
file.includes('/__tests__/') ||
|
|
244
|
-
file.endsWith('.test.ts') ||
|
|
245
|
-
file.endsWith('.spec.ts')) {
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
const relativeFilename = toForwardSlash(relative(rootDir, filePath));
|
|
249
|
-
const agentMetadata = await importAgentMetadata(filePath, relativeFilename, rootDir, projectId, deploymentId, logger);
|
|
250
|
-
if (agentMetadata) {
|
|
251
|
-
if (seenAgentNames.has(agentMetadata.name)) {
|
|
252
|
-
logger.trace('Skipping duplicate agent %s from %s (already discovered)', agentMetadata.name, relativeFilename);
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
seenAgentNames.add(agentMetadata.name);
|
|
256
|
-
logger.trace('Discovered agent: %s at %s', agentMetadata.name, relativeFilename);
|
|
257
|
-
agents.push(agentMetadata);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
logger.debug('Discovered %d agent(s)', agents.length);
|
|
261
|
-
return agents;
|
|
262
|
-
}
|
|
263
|
-
//# sourceMappingURL=agent-discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-discovery.js","sourceRoot":"","sources":["../../../../src/cmd/build/vite/agent-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;;;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,sBAAsB,GAAG,eAAe,CAAC,wBAAwB,CAAC,EAGpE,CAAC;AAyBL;;GAEG;AACH,SAAS,IAAI,CAAC,GAAG,GAAa;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,GAAa;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAClB,SAAiB,EACjB,YAAoB,EACpB,QAAgB,EAChB,OAAe;IAEf,OAAO,WAAW,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,IAAY;IAC7D,OAAO,SAAS,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,SAAS,CACjB,SAAiB,EACjB,YAAoB,EACpB,QAAgB,EAChB,IAAY,EACZ,OAAe;IAEf,OAAO,UAAU,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB,EAAE,OAAe,EAAE,IAAY;IAC7E,OAAO,QAAQ,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAChC,MAAe,EACf,OAAe,EACf,MAAc;IAEd,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,CAAC;QACJ,uFAAuF;QACvF,oFAAoF;QACpF,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC9E,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,kCAAC,gBAAgB,EAAC,CAAC;QACxD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CACX,+DAA+D,EAC/D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACtD,CAAC;QACF,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CACjC,QAAgB,EAChB,gBAAwB,EACxB,OAAe,EACf,SAAiB,EACjB,YAAoB,EACpB,MAAc;IAEd,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7B,kDAAkD;QAClD,qEAAqE;QACrE,MAAM,GAAG,GAAG,MAAM,MAAM,kCAAC,QAAQ,EAAC,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;QAE1B,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,gBAAgB,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEvD,yCAAyC;QACzC,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrF,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEvF,yEAAyE;QACzE,MAAM,KAAK,GAAmB,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;gBAC1D,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;gBAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,oBAAoB;gBACjD,MAAM,MAAM,GAAG,SAAS,CACvB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,WAAW,CACX,CAAC;gBACF,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAE1E,MAAM,CAAC,KAAK,CACX,wCAAwC,EACxC,QAAQ,EACR,gBAAgB,EAChB,cAAc,CACd,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,MAAM;oBACV,UAAU,EAAE,cAAc;oBAC1B,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,gBAAgB;oBAC1B,OAAO,EAAE,WAAW;oBACpB,WAAW,EAAE,eAAe;oBAC5B,eAAe,EAAE,OAAO;oBACxB,SAAS;iBACT,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,kEAAkE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACJ,MAAM,MAAM,kCAAC,SAAS,EAAC,CAAC;oBACxB,+EAA+E;oBAC/E,sDAAsD;oBACtD,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC/C,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;wBAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;wBAEtC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;4BACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;4BAC1D,IAAI,CAAC,QAAQ;gCAAE,SAAS;4BAExB,4CAA4C;4BAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;gCAAE,SAAS;4BAErD,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC;4BAC/E,MAAM,MAAM,GAAG,SAAS,CACvB,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,WAAW,CACX,CAAC;4BACF,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;4BAE1E,MAAM,CAAC,KAAK,CACX,0DAA0D,EAC1D,QAAQ,EACR,IAAI,EACJ,cAAc,CACd,CAAC;4BAEF,KAAK,CAAC,IAAI,CAAC;gCACV,EAAE,EAAE,MAAM;gCACV,UAAU,EAAE,cAAc;gCAC1B,IAAI,EAAE,QAAQ;gCACd,QAAQ,EAAE,iBAAiB;gCAC3B,OAAO,EAAE,WAAW;gCACpB,WAAW,EAAE,eAAe;gCAC5B,eAAe,EAAE,OAAO;gCACxB,SAAS;6BACT,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,CACV,sDAAsD,EACtD,SAAS,EACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACtD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAED,wEAAwE;QACxE,wEAAwE;QACxE,2BAA2B;QAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACxC,MAAM,IAAI,sBAAsB,CAAC;wBAChC,OAAO,EACN,wBAAwB,QAAQ,CAAC,IAAI,gBAAgB,IAAI,KAAK;4BAC9D,oBAAoB,IAAI,UAAU,QAAQ,CAAC,QAAQ,KAAK;4BACxD,sCAAsC;wBACvC,KAAK,EAAE,IAAI;wBACX,QAAQ,EAAE,QAAQ,CAAC,QAAQ;qBAC3B,CAAC,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;QAED,OAAO;YACN,QAAQ,EAAE,gBAAgB;YAC1B,IAAI;YACJ,EAAE;YACF,OAAO;YACP,OAAO;YACP,WAAW;YACX,eAAe;YACf,gBAAgB;YAChB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,IAAI,KAAK,CACd,6BAA6B,gBAAgB,KAAK;YACjD,KAAK,QAAQ,MAAM;YACnB,wEAAwE;YACxE,sEAAsE;YACtE,wEAAwE;YACxE,oCAAoC;YACpC,sEAAsE;YACtE,+CAA+C;YAC/C,kCAAkC;YAClC,oFAAoF;YACpF,6CAA6C;YAC7C,8CAA8C;YAC9C,sDAAsD;YACtD,uEAAuE;YACvE,WAAW;YACX,wEAAwE,CACzE,CAAC;IACH,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,MAAc,EACd,SAAiB,EACjB,YAAoB,EACpB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEnC,wCAAwC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACJ,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IACf,CAAC;IAED,+EAA+E;IAC/E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEvC,4DAA4D;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrD,SAAS;QACV,CAAC;QAED,8DAA8D;QAC9D,IACC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACxB,CAAC;YACF,SAAS;QACV,CAAC;QAED,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAC9C,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,MAAM,CACN,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CACX,0DAA0D,EAC1D,aAAa,CAAC,IAAI,EAClB,gBAAgB,CAChB,CAAC;gBACF,SAAS;YACV,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACjF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC;AACf,CAAC"}
|