@agentuity/cli 1.0.48 → 2.0.0-beta.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.
Files changed (124) hide show
  1. package/dist/cmd/build/app-router-detector.d.ts +2 -5
  2. package/dist/cmd/build/app-router-detector.d.ts.map +1 -1
  3. package/dist/cmd/build/app-router-detector.js +130 -154
  4. package/dist/cmd/build/app-router-detector.js.map +1 -1
  5. package/dist/cmd/build/ids.d.ts +11 -0
  6. package/dist/cmd/build/ids.d.ts.map +1 -0
  7. package/dist/cmd/build/ids.js +18 -0
  8. package/dist/cmd/build/ids.js.map +1 -0
  9. package/dist/cmd/build/vite/agent-discovery.d.ts +8 -4
  10. package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
  11. package/dist/cmd/build/vite/agent-discovery.js +166 -487
  12. package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
  13. package/dist/cmd/build/vite/bun-dev-server.d.ts +10 -16
  14. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  15. package/dist/cmd/build/vite/bun-dev-server.js +67 -134
  16. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  17. package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
  18. package/dist/cmd/build/vite/docs-generator.js +0 -2
  19. package/dist/cmd/build/vite/docs-generator.js.map +1 -1
  20. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  21. package/dist/cmd/build/vite/index.js +0 -36
  22. package/dist/cmd/build/vite/index.js.map +1 -1
  23. package/dist/cmd/build/vite/lifecycle-generator.d.ts +10 -2
  24. package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
  25. package/dist/cmd/build/vite/lifecycle-generator.js +302 -23
  26. package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
  27. package/dist/cmd/build/vite/route-discovery.d.ts +11 -38
  28. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  29. package/dist/cmd/build/vite/route-discovery.js +97 -177
  30. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  31. package/dist/cmd/build/vite/server-bundler.js +1 -1
  32. package/dist/cmd/build/vite/server-bundler.js.map +1 -1
  33. package/dist/cmd/build/vite/static-renderer.d.ts.map +1 -1
  34. package/dist/cmd/build/vite/static-renderer.js +1 -9
  35. package/dist/cmd/build/vite/static-renderer.js.map +1 -1
  36. package/dist/cmd/build/vite/vite-asset-server-config.d.ts +6 -3
  37. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  38. package/dist/cmd/build/vite/vite-asset-server-config.js +171 -21
  39. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  40. package/dist/cmd/build/vite/vite-asset-server.d.ts +8 -3
  41. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  42. package/dist/cmd/build/vite/vite-asset-server.js +14 -13
  43. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  44. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  45. package/dist/cmd/build/vite/vite-builder.js +6 -36
  46. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  47. package/dist/cmd/build/vite/ws-proxy.d.ts +53 -0
  48. package/dist/cmd/build/vite/ws-proxy.d.ts.map +1 -0
  49. package/dist/cmd/build/vite/ws-proxy.js +95 -0
  50. package/dist/cmd/build/vite/ws-proxy.js.map +1 -0
  51. package/dist/cmd/build/vite-bundler.d.ts.map +1 -1
  52. package/dist/cmd/build/vite-bundler.js +0 -3
  53. package/dist/cmd/build/vite-bundler.js.map +1 -1
  54. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  55. package/dist/cmd/cloud/deploy.js +0 -1
  56. package/dist/cmd/cloud/deploy.js.map +1 -1
  57. package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
  58. package/dist/cmd/dev/file-watcher.js +2 -8
  59. package/dist/cmd/dev/file-watcher.js.map +1 -1
  60. package/dist/cmd/dev/index.d.ts.map +1 -1
  61. package/dist/cmd/dev/index.js +369 -720
  62. package/dist/cmd/dev/index.js.map +1 -1
  63. package/package.json +6 -8
  64. package/src/cmd/ai/prompt/agent.md +0 -1
  65. package/src/cmd/ai/prompt/api.md +0 -7
  66. package/src/cmd/ai/prompt/web.md +51 -213
  67. package/src/cmd/build/app-router-detector.ts +152 -182
  68. package/src/cmd/build/ids.ts +19 -0
  69. package/src/cmd/build/vite/agent-discovery.ts +208 -679
  70. package/src/cmd/build/vite/bun-dev-server.ts +78 -154
  71. package/src/cmd/build/vite/docs-generator.ts +0 -2
  72. package/src/cmd/build/vite/index.ts +1 -42
  73. package/src/cmd/build/vite/lifecycle-generator.ts +345 -21
  74. package/src/cmd/build/vite/route-discovery.ts +116 -274
  75. package/src/cmd/build/vite/server-bundler.ts +1 -1
  76. package/src/cmd/build/vite/static-renderer.ts +1 -11
  77. package/src/cmd/build/vite/vite-asset-server-config.ts +196 -23
  78. package/src/cmd/build/vite/vite-asset-server.ts +25 -15
  79. package/src/cmd/build/vite/vite-builder.ts +6 -53
  80. package/src/cmd/build/vite/ws-proxy.ts +126 -0
  81. package/src/cmd/build/vite-bundler.ts +0 -4
  82. package/src/cmd/cloud/deploy.ts +0 -1
  83. package/src/cmd/dev/file-watcher.ts +2 -9
  84. package/src/cmd/dev/index.ts +409 -832
  85. package/dist/cmd/build/ast.d.ts +0 -78
  86. package/dist/cmd/build/ast.d.ts.map +0 -1
  87. package/dist/cmd/build/ast.js +0 -2703
  88. package/dist/cmd/build/ast.js.map +0 -1
  89. package/dist/cmd/build/entry-generator.d.ts +0 -25
  90. package/dist/cmd/build/entry-generator.d.ts.map +0 -1
  91. package/dist/cmd/build/entry-generator.js +0 -695
  92. package/dist/cmd/build/entry-generator.js.map +0 -1
  93. package/dist/cmd/build/vite/api-mount-path.d.ts +0 -61
  94. package/dist/cmd/build/vite/api-mount-path.d.ts.map +0 -1
  95. package/dist/cmd/build/vite/api-mount-path.js +0 -83
  96. package/dist/cmd/build/vite/api-mount-path.js.map +0 -1
  97. package/dist/cmd/build/vite/registry-generator.d.ts +0 -19
  98. package/dist/cmd/build/vite/registry-generator.d.ts.map +0 -1
  99. package/dist/cmd/build/vite/registry-generator.js +0 -1108
  100. package/dist/cmd/build/vite/registry-generator.js.map +0 -1
  101. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +0 -13
  102. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +0 -1
  103. package/dist/cmd/build/vite/tailwind-source-plugin.js +0 -44
  104. package/dist/cmd/build/vite/tailwind-source-plugin.js.map +0 -1
  105. package/dist/cmd/build/webanalytics-generator.d.ts +0 -16
  106. package/dist/cmd/build/webanalytics-generator.d.ts.map +0 -1
  107. package/dist/cmd/build/webanalytics-generator.js +0 -178
  108. package/dist/cmd/build/webanalytics-generator.js.map +0 -1
  109. package/dist/cmd/build/workbench.d.ts +0 -7
  110. package/dist/cmd/build/workbench.d.ts.map +0 -1
  111. package/dist/cmd/build/workbench.js +0 -55
  112. package/dist/cmd/build/workbench.js.map +0 -1
  113. package/dist/utils/route-migration.d.ts +0 -62
  114. package/dist/utils/route-migration.d.ts.map +0 -1
  115. package/dist/utils/route-migration.js +0 -630
  116. package/dist/utils/route-migration.js.map +0 -1
  117. package/src/cmd/build/ast.ts +0 -3529
  118. package/src/cmd/build/entry-generator.ts +0 -760
  119. package/src/cmd/build/vite/api-mount-path.ts +0 -87
  120. package/src/cmd/build/vite/registry-generator.ts +0 -1267
  121. package/src/cmd/build/vite/tailwind-source-plugin.ts +0 -54
  122. package/src/cmd/build/webanalytics-generator.ts +0 -197
  123. package/src/cmd/build/workbench.ts +0 -58
  124. package/src/utils/route-migration.ts +0 -757
@@ -5,8 +5,8 @@
5
5
  * to `createApp()`. If detected, resolves the router variable(s) to their import
6
6
  * sources and mount paths.
7
7
  *
8
- * This allows the build tooling to derive route metadata from the actual code-based
9
- * route tree instead of relying on filesystem-based discovery.
8
+ * Uses TypeScript's compiler API to reliably detect the pattern, consistent with
9
+ * the lifecycle generator approach.
10
10
  */
11
11
  import type { Logger } from '../../types';
12
12
  /**
@@ -30,9 +30,6 @@ export interface AppRouterDetection {
30
30
  /**
31
31
  * Detect whether `src/app.ts` uses `createApp({ router })`.
32
32
  *
33
- * Parses the file with acorn-loose, finds `createApp()` calls,
34
- * and resolves router variables to their import source files.
35
- *
36
33
  * Returns `{ detected: false, mounts: [] }` when:
37
34
  * - `src/app.ts` doesn't exist
38
35
  * - `createApp()` is called without a `router` property
@@ -1 +1 @@
1
- {"version":3,"file":"app-router-detector.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/app-router-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAU1C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAgHD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAgB7B"}
1
+ {"version":3,"file":"app-router-detector.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/app-router-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAuLD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CA2F7B"}
@@ -5,23 +5,24 @@
5
5
  * to `createApp()`. If detected, resolves the router variable(s) to their import
6
6
  * sources and mount paths.
7
7
  *
8
- * This allows the build tooling to derive route metadata from the actual code-based
9
- * route tree instead of relying on filesystem-based discovery.
8
+ * Uses TypeScript's compiler API to reliably detect the pattern, consistent with
9
+ * the lifecycle generator approach.
10
10
  */
11
- import * as acornLoose from 'acorn-loose';
11
+ import ts from 'typescript';
12
12
  import { join, dirname, resolve } from 'node:path';
13
- import { existsSync, statSync } from 'node:fs';
13
+ import { statSync } from 'node:fs';
14
14
  /**
15
15
  * Resolve an import path to an actual file on disk.
16
16
  * Tries the path as-is, then with common extensions.
17
17
  */
18
- function resolveImportFile(fromDir, importPath) {
18
+ async function resolveImportFile(fromDir, importPath) {
19
19
  if (!importPath.startsWith('.') && !importPath.startsWith('/')) {
20
20
  return null; // Package import — can't resolve
21
21
  }
22
22
  const basePath = resolve(fromDir, importPath);
23
23
  const extensions = ['.ts', '.tsx', '/index.ts', '/index.tsx'];
24
- if (existsSync(basePath)) {
24
+ const baseFile = Bun.file(basePath);
25
+ if (await baseFile.exists()) {
25
26
  try {
26
27
  if (statSync(basePath).isFile())
27
28
  return basePath;
@@ -32,82 +33,138 @@ function resolveImportFile(fromDir, importPath) {
32
33
  }
33
34
  for (const ext of extensions) {
34
35
  const candidate = basePath + ext;
35
- if (existsSync(candidate)) {
36
+ if (await Bun.file(candidate).exists()) {
36
37
  return candidate;
37
38
  }
38
39
  }
39
40
  return null;
40
41
  }
41
42
  /**
42
- * Extract the `router` property value from a `createApp()` call's argument object.
43
- *
44
- * Handles three forms:
45
- * - `createApp({ router: myVar })` → plain Hono, default /api mount
46
- * - `createApp({ router: { path: '/v1', router: myVar } })` → single RouteMount
47
- * - `createApp({ router: [{ path: '/v1', router: v1 }, ...] })` → array of RouteMounts
43
+ * Extract router mounts from a createApp() call using TypeScript's AST.
44
+ * Returns null if no router property found.
48
45
  */
49
- function extractRouterFromCreateApp(callNode) {
50
- // createApp() must have at least one argument (the config object)
51
- if (!callNode.arguments || callNode.arguments.length === 0) {
52
- return null;
53
- }
54
- const configArg = callNode.arguments[0];
55
- if (configArg.type !== 'ObjectExpression') {
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
+ }
56
52
  return null;
57
53
  }
58
- // Find the `router` property
59
- const routerProp = configArg.properties?.find((p) => p.type === 'Property' && p.key?.type === 'Identifier' && p.key?.name === 'router');
60
- if (!routerProp) {
61
- return null; // No router property — file-based routing
62
- }
63
- const routerValue = routerProp.value;
64
- // Form 1: Plain Hono variable → createApp({ router: myRouter })
65
- if (routerValue.type === 'Identifier') {
66
- return [{ path: '/api', varName: routerValue.name }];
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;
67
76
  }
68
- // Form 2: Single RouteMount → createApp({ router: { path: '/v1', router: myRouter } })
69
- if (routerValue.type === 'ObjectExpression') {
70
- const mount = extractRouteMountFromObject(routerValue);
71
- return mount ? [mount] : null;
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;
72
100
  }
73
- // Form 3: Array of RouteMounts → createApp({ router: [{ path: '/v1', router: v1 }, ...] })
74
- if (routerValue.type === 'ArrayExpression') {
75
- const mounts = [];
76
- for (const element of routerValue.elements || []) {
77
- if (element?.type === 'ObjectExpression') {
78
- const mount = extractRouteMountFromObject(element);
79
- if (mount)
80
- mounts.push(mount);
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;
81
114
  }
82
115
  }
83
- return mounts.length > 0 ? mounts : null;
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);
84
136
  }
85
- return null;
137
+ visit(sourceFile);
138
+ return result;
86
139
  }
87
140
  /**
88
- * Extract { path, router } from an object literal AST node.
141
+ * Build import map from the source file: variable name import path
89
142
  */
90
- function extractRouteMountFromObject(objNode) {
91
- let path;
92
- let varName;
93
- for (const prop of objNode.properties || []) {
94
- if (prop.type !== 'Property' || prop.key?.type !== 'Identifier')
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)
95
151
  continue;
96
- if (prop.key.name === 'path' && prop.value?.type === 'Literal') {
97
- path = String(prop.value.value);
152
+ // Default import: import router from './api'
153
+ if (clause.name) {
154
+ importMap.set(clause.name.text, importPath);
98
155
  }
99
- if (prop.key.name === 'router' && prop.value?.type === 'Identifier') {
100
- varName = prop.value.name;
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
+ }
101
161
  }
102
162
  }
103
- return path && varName ? { path, varName } : null;
163
+ return importMap;
104
164
  }
105
165
  /**
106
166
  * Detect whether `src/app.ts` uses `createApp({ router })`.
107
167
  *
108
- * Parses the file with acorn-loose, finds `createApp()` calls,
109
- * and resolves router variables to their import source files.
110
- *
111
168
  * Returns `{ detected: false, mounts: [] }` when:
112
169
  * - `src/app.ts` doesn't exist
113
170
  * - `createApp()` is called without a `router` property
@@ -115,63 +172,41 @@ function extractRouteMountFromObject(objNode) {
115
172
  */
116
173
  export async function detectExplicitRouter(rootDir, logger) {
117
174
  const noDetection = { detected: false, mounts: [] };
118
- // Look for app.ts in src/ (standard location)
119
- const appFile = join(rootDir, 'src', 'app.ts');
120
- if (!existsSync(appFile)) {
121
- // Also try root-level app.ts
122
- const rootAppFile = join(rootDir, 'app.ts');
123
- if (!existsSync(rootAppFile)) {
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())) {
124
180
  logger.trace('[router-detect] No app.ts found');
125
181
  return noDetection;
126
182
  }
127
- return detectInFile(rootAppFile, logger);
128
183
  }
129
- return detectInFile(appFile, logger);
130
- }
131
- async function detectInFile(appFile, logger) {
132
- const noDetection = { detected: false, mounts: [] };
133
- const appDir = dirname(appFile);
134
184
  try {
135
185
  const source = await Bun.file(appFile).text();
136
- const transpiler = new Bun.Transpiler({ loader: 'ts', target: 'bun' });
137
- const contents = transpiler.transformSync(source);
138
- // Quick check: skip AST parsing if createApp is not called with router
139
- if (!contents.includes('createApp') || !contents.includes('router')) {
186
+ const appDir = dirname(appFile);
187
+ // Quick bail-out before parsing
188
+ if (!source.includes('createApp') || !source.includes('router')) {
140
189
  logger.trace('[router-detect] No createApp + router pattern found in %s', appFile);
141
190
  return noDetection;
142
191
  }
143
- const ast = acornLoose.parse(contents, {
144
- locations: true,
145
- ecmaVersion: 'latest',
146
- sourceType: 'module',
147
- });
148
- // Build import map: variable name → import path
149
- const importMap = new Map();
150
- for (const node of ast.body || []) {
151
- if (node.type === 'ImportDeclaration' && node.source?.value) {
152
- for (const spec of node.specifiers || []) {
153
- if (spec.local?.name) {
154
- importMap.set(spec.local.name, String(node.source.value));
155
- }
156
- }
157
- }
158
- }
159
- // Walk all statements looking for createApp() calls
160
- const routerMounts = findCreateAppRouterCalls(ast, importMap);
161
- if (!routerMounts || routerMounts.length === 0) {
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) {
162
196
  logger.trace('[router-detect] createApp() found but no router property');
163
197
  return noDetection;
164
198
  }
199
+ // Build import map to resolve variable names to file paths
200
+ const importMap = buildImportMap(sourceFile);
165
201
  // Resolve each router variable to its file
166
202
  const mounts = [];
167
- for (const { path, varName } of routerMounts) {
203
+ for (const { path, varName } of rawMounts) {
168
204
  const importPath = importMap.get(varName);
169
205
  if (!importPath) {
170
206
  logger.debug('[router-detect] Router variable %s is not imported — may be defined locally', varName);
171
- // Could be defined in the same file — skip for now
172
207
  continue;
173
208
  }
174
- const resolvedFile = resolveImportFile(appDir, importPath);
209
+ const resolvedFile = await resolveImportFile(appDir, importPath);
175
210
  if (!resolvedFile) {
176
211
  logger.warn('[router-detect] Could not resolve import %s for router variable %s', importPath, varName);
177
212
  continue;
@@ -191,63 +226,4 @@ async function detectInFile(appFile, logger) {
191
226
  return noDetection;
192
227
  }
193
228
  }
194
- /**
195
- * Walk the AST looking for `createApp({ router: ... })` calls.
196
- * Handles:
197
- * - `createApp({ router })` (top-level expression)
198
- * - `const app = await createApp({ router })` (variable declaration)
199
- * - `export const app = await createApp({ router })` (exported)
200
- */
201
- function findCreateAppRouterCalls(ast, importMap) {
202
- for (const node of ast.body || []) {
203
- // Check expression statements: createApp({ router })
204
- if (node.type === 'ExpressionStatement') {
205
- const result = checkForCreateAppCall(node.expression, importMap);
206
- if (result)
207
- return result;
208
- }
209
- // Check variable declarations: const app = await createApp({ router })
210
- if (node.type === 'VariableDeclaration') {
211
- for (const decl of node.declarations || []) {
212
- if (decl.init) {
213
- const result = checkForCreateAppCall(decl.init, importMap);
214
- if (result)
215
- return result;
216
- }
217
- }
218
- }
219
- // Check exports: export const app = await createApp({ router })
220
- if (node.type === 'ExportNamedDeclaration' && node.declaration) {
221
- if (node.declaration.type === 'VariableDeclaration') {
222
- for (const decl of node.declaration.declarations || []) {
223
- if (decl.init) {
224
- const result = checkForCreateAppCall(decl.init, importMap);
225
- if (result)
226
- return result;
227
- }
228
- }
229
- }
230
- }
231
- }
232
- return null;
233
- }
234
- /**
235
- * Check if an expression node is a `createApp({ router })` call.
236
- * Unwraps `await` expressions.
237
- */
238
- function checkForCreateAppCall(expr, importMap) {
239
- if (!expr)
240
- return null;
241
- // Unwrap AwaitExpression: await createApp(...)
242
- if (expr.type === 'AwaitExpression' && expr.argument) {
243
- return checkForCreateAppCall(expr.argument, importMap);
244
- }
245
- // Check for createApp({ router })
246
- if (expr.type === 'CallExpression' &&
247
- expr.callee?.type === 'Identifier' &&
248
- expr.callee?.name === 'createApp') {
249
- return extractRouterFromCreateApp(expr);
250
- }
251
- return null;
252
- }
253
229
  //# sourceMappingURL=app-router-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-router-detector.js","sourceRoot":"","sources":["../../../src/cmd/build/app-router-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-router-detector.js","sourceRoot":"","sources":["../../../src/cmd/build/app-router-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Build-time ID generation utilities.
3
+ *
4
+ * Pure hash functions for generating deterministic IDs.
5
+ * No AST parsing — just SHA1 hashing.
6
+ */
7
+ /**
8
+ * Generate a deterministic deployment ID for devmode.
9
+ */
10
+ export declare function getDevmodeDeploymentId(projectId: string, endpointId: string): string;
11
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/cmd/build/ids.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Build-time ID generation utilities.
3
+ *
4
+ * Pure hash functions for generating deterministic IDs.
5
+ * No AST parsing — just SHA1 hashing.
6
+ */
7
+ function hashSHA1(...val) {
8
+ const hasher = new Bun.CryptoHasher('sha1');
9
+ val.map((val) => hasher.update(val));
10
+ return hasher.digest().toHex();
11
+ }
12
+ /**
13
+ * Generate a deterministic deployment ID for devmode.
14
+ */
15
+ export function getDevmodeDeploymentId(projectId, endpointId) {
16
+ return `devmode_${hashSHA1(projectId, endpointId)}`;
17
+ }
18
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../src/cmd/build/ids.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS,QAAQ,CAAC,GAAG,GAAa;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,UAAkB;IAC3E,OAAO,WAAW,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;AACrD,CAAC"}
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Agent Discovery - READ-ONLY AST analysis
2
+ * Agent Discovery import-based
3
3
  *
4
- * Discovers agents by scanning src/agent/**\/*.ts files
5
- * Extracts metadata WITHOUT mutating source files
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.
6
7
  */
7
8
  import type { Logger } from '../../../types';
8
9
  export interface AgentMetadata {
@@ -27,7 +28,10 @@ export interface EvalMetadata {
27
28
  projectId: string;
28
29
  }
29
30
  /**
30
- * Discover all agents in src/agent directory (READ-ONLY)
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.
31
35
  */
32
36
  export declare function discoverAgents(srcDir: string, projectId: string, deploymentId: string, logger: Logger): Promise<AgentMetadata[]>;
33
37
  //# sourceMappingURL=agent-discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-discovery.d.ts","sourceRoot":"","sources":["../../../../src/cmd/build/vite/agent-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAwL7C,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;AAqeD;;GAEG;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,CAoH1B"}
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;AA2PD;;;;;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,CAqD1B"}