@agentuity/cli 1.0.59 → 2.0.0-beta.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.
Files changed (189) hide show
  1. package/bin/cli.ts +2 -3
  2. package/dist/cmd/build/app-config-extractor.d.ts +27 -0
  3. package/dist/cmd/build/app-config-extractor.d.ts.map +1 -0
  4. package/dist/cmd/build/app-config-extractor.js +152 -0
  5. package/dist/cmd/build/app-config-extractor.js.map +1 -0
  6. package/dist/cmd/build/app-router-detector.d.ts +2 -5
  7. package/dist/cmd/build/app-router-detector.d.ts.map +1 -1
  8. package/dist/cmd/build/app-router-detector.js +130 -154
  9. package/dist/cmd/build/app-router-detector.js.map +1 -1
  10. package/dist/cmd/build/ci.d.ts.map +1 -1
  11. package/dist/cmd/build/ci.js +5 -21
  12. package/dist/cmd/build/ci.js.map +1 -1
  13. package/dist/cmd/build/ids.d.ts +11 -0
  14. package/dist/cmd/build/ids.d.ts.map +1 -0
  15. package/dist/cmd/build/ids.js +18 -0
  16. package/dist/cmd/build/ids.js.map +1 -0
  17. package/dist/cmd/build/index.d.ts.map +1 -1
  18. package/dist/cmd/build/index.js +8 -0
  19. package/dist/cmd/build/index.js.map +1 -1
  20. package/dist/cmd/build/vite/agent-discovery.d.ts +8 -4
  21. package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
  22. package/dist/cmd/build/vite/agent-discovery.js +166 -487
  23. package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
  24. package/dist/cmd/build/vite/bun-dev-server.d.ts +43 -14
  25. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  26. package/dist/cmd/build/vite/bun-dev-server.js +290 -129
  27. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  28. package/dist/cmd/build/vite/config-loader.d.ts +15 -20
  29. package/dist/cmd/build/vite/config-loader.d.ts.map +1 -1
  30. package/dist/cmd/build/vite/config-loader.js +41 -74
  31. package/dist/cmd/build/vite/config-loader.js.map +1 -1
  32. package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
  33. package/dist/cmd/build/vite/docs-generator.js +0 -2
  34. package/dist/cmd/build/vite/docs-generator.js.map +1 -1
  35. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  36. package/dist/cmd/build/vite/index.js +0 -36
  37. package/dist/cmd/build/vite/index.js.map +1 -1
  38. package/dist/cmd/build/vite/lifecycle-generator.d.ts +10 -2
  39. package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -1
  40. package/dist/cmd/build/vite/lifecycle-generator.js +302 -23
  41. package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -1
  42. package/dist/cmd/build/vite/route-discovery.d.ts +11 -38
  43. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  44. package/dist/cmd/build/vite/route-discovery.js +97 -177
  45. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  46. package/dist/cmd/build/vite/server-bundler.js +1 -1
  47. package/dist/cmd/build/vite/server-bundler.js.map +1 -1
  48. package/dist/cmd/build/vite/static-renderer.d.ts +0 -2
  49. package/dist/cmd/build/vite/static-renderer.d.ts.map +1 -1
  50. package/dist/cmd/build/vite/static-renderer.js +19 -13
  51. package/dist/cmd/build/vite/static-renderer.js.map +1 -1
  52. package/dist/cmd/build/vite/vite-asset-server-config.d.ts +6 -3
  53. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  54. package/dist/cmd/build/vite/vite-asset-server-config.js +175 -69
  55. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  56. package/dist/cmd/build/vite/vite-asset-server.d.ts +8 -3
  57. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -1
  58. package/dist/cmd/build/vite/vite-asset-server.js +14 -13
  59. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -1
  60. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  61. package/dist/cmd/build/vite/vite-builder.js +42 -190
  62. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  63. package/dist/cmd/build/vite/ws-proxy.d.ts +53 -0
  64. package/dist/cmd/build/vite/ws-proxy.d.ts.map +1 -0
  65. package/dist/cmd/build/vite/ws-proxy.js +95 -0
  66. package/dist/cmd/build/vite/ws-proxy.js.map +1 -0
  67. package/dist/cmd/build/vite-bundler.d.ts.map +1 -1
  68. package/dist/cmd/build/vite-bundler.js +0 -3
  69. package/dist/cmd/build/vite-bundler.js.map +1 -1
  70. package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
  71. package/dist/cmd/cloud/deploy-fork.js +15 -36
  72. package/dist/cmd/cloud/deploy-fork.js.map +1 -1
  73. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  74. package/dist/cmd/cloud/sandbox/exec.js +28 -86
  75. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  76. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
  77. package/dist/cmd/cloud/sandbox/run.js +2 -9
  78. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  79. package/dist/cmd/cloud/sandbox/snapshot/build.js +2 -2
  80. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  81. package/dist/cmd/coder/hub-url.d.ts.map +1 -1
  82. package/dist/cmd/coder/hub-url.js +1 -3
  83. package/dist/cmd/coder/hub-url.js.map +1 -1
  84. package/dist/cmd/coder/start.js +6 -6
  85. package/dist/cmd/coder/start.js.map +1 -1
  86. package/dist/cmd/coder/tui-init.d.ts +2 -2
  87. package/dist/cmd/coder/tui-init.js +2 -2
  88. package/dist/cmd/coder/tui-init.js.map +1 -1
  89. package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
  90. package/dist/cmd/dev/file-watcher.js +2 -8
  91. package/dist/cmd/dev/file-watcher.js.map +1 -1
  92. package/dist/cmd/dev/index.d.ts.map +1 -1
  93. package/dist/cmd/dev/index.js +432 -752
  94. package/dist/cmd/dev/index.js.map +1 -1
  95. package/dist/cmd/dev/process-manager.d.ts +104 -0
  96. package/dist/cmd/dev/process-manager.d.ts.map +1 -0
  97. package/dist/cmd/dev/process-manager.js +204 -0
  98. package/dist/cmd/dev/process-manager.js.map +1 -0
  99. package/dist/errors.d.ts +10 -24
  100. package/dist/errors.d.ts.map +1 -1
  101. package/dist/errors.js +12 -42
  102. package/dist/errors.js.map +1 -1
  103. package/dist/schema-generator.d.ts.map +1 -1
  104. package/dist/schema-generator.js +12 -2
  105. package/dist/schema-generator.js.map +1 -1
  106. package/dist/tui.d.ts.map +1 -1
  107. package/dist/tui.js +5 -19
  108. package/dist/tui.js.map +1 -1
  109. package/dist/utils/version-mismatch.d.ts +39 -0
  110. package/dist/utils/version-mismatch.d.ts.map +1 -0
  111. package/dist/utils/version-mismatch.js +161 -0
  112. package/dist/utils/version-mismatch.js.map +1 -0
  113. package/package.json +6 -6
  114. package/src/cmd/ai/prompt/agent.md +0 -1
  115. package/src/cmd/ai/prompt/api.md +0 -7
  116. package/src/cmd/ai/prompt/web.md +51 -213
  117. package/src/cmd/build/app-config-extractor.ts +186 -0
  118. package/src/cmd/build/app-router-detector.ts +152 -182
  119. package/src/cmd/build/ci.ts +5 -21
  120. package/src/cmd/build/ids.ts +19 -0
  121. package/src/cmd/build/index.ts +10 -0
  122. package/src/cmd/build/vite/agent-discovery.ts +208 -679
  123. package/src/cmd/build/vite/bun-dev-server.ts +383 -146
  124. package/src/cmd/build/vite/config-loader.ts +45 -77
  125. package/src/cmd/build/vite/docs-generator.ts +0 -2
  126. package/src/cmd/build/vite/index.ts +1 -42
  127. package/src/cmd/build/vite/lifecycle-generator.ts +345 -21
  128. package/src/cmd/build/vite/route-discovery.ts +116 -274
  129. package/src/cmd/build/vite/server-bundler.ts +1 -1
  130. package/src/cmd/build/vite/static-renderer.ts +23 -15
  131. package/src/cmd/build/vite/vite-asset-server-config.ts +200 -70
  132. package/src/cmd/build/vite/vite-asset-server.ts +25 -15
  133. package/src/cmd/build/vite/vite-builder.ts +49 -220
  134. package/src/cmd/build/vite/ws-proxy.ts +126 -0
  135. package/src/cmd/build/vite-bundler.ts +0 -4
  136. package/src/cmd/cloud/deploy-fork.ts +16 -39
  137. package/src/cmd/cloud/sandbox/exec.ts +23 -130
  138. package/src/cmd/cloud/sandbox/run.ts +2 -9
  139. package/src/cmd/cloud/sandbox/snapshot/build.ts +2 -2
  140. package/src/cmd/coder/hub-url.ts +1 -3
  141. package/src/cmd/coder/start.ts +6 -6
  142. package/src/cmd/coder/tui-init.ts +4 -4
  143. package/src/cmd/dev/file-watcher.ts +2 -9
  144. package/src/cmd/dev/index.ts +476 -859
  145. package/src/cmd/dev/process-manager.ts +261 -0
  146. package/src/errors.ts +12 -44
  147. package/src/schema-generator.ts +12 -2
  148. package/src/tui.ts +5 -18
  149. package/src/utils/version-mismatch.ts +204 -0
  150. package/dist/cmd/build/ast.d.ts +0 -78
  151. package/dist/cmd/build/ast.d.ts.map +0 -1
  152. package/dist/cmd/build/ast.js +0 -2703
  153. package/dist/cmd/build/ast.js.map +0 -1
  154. package/dist/cmd/build/entry-generator.d.ts +0 -25
  155. package/dist/cmd/build/entry-generator.d.ts.map +0 -1
  156. package/dist/cmd/build/entry-generator.js +0 -695
  157. package/dist/cmd/build/entry-generator.js.map +0 -1
  158. package/dist/cmd/build/vite/api-mount-path.d.ts +0 -61
  159. package/dist/cmd/build/vite/api-mount-path.d.ts.map +0 -1
  160. package/dist/cmd/build/vite/api-mount-path.js +0 -83
  161. package/dist/cmd/build/vite/api-mount-path.js.map +0 -1
  162. package/dist/cmd/build/vite/registry-generator.d.ts +0 -19
  163. package/dist/cmd/build/vite/registry-generator.d.ts.map +0 -1
  164. package/dist/cmd/build/vite/registry-generator.js +0 -1108
  165. package/dist/cmd/build/vite/registry-generator.js.map +0 -1
  166. package/dist/cmd/build/webanalytics-generator.d.ts +0 -16
  167. package/dist/cmd/build/webanalytics-generator.d.ts.map +0 -1
  168. package/dist/cmd/build/webanalytics-generator.js +0 -178
  169. package/dist/cmd/build/webanalytics-generator.js.map +0 -1
  170. package/dist/cmd/build/workbench.d.ts +0 -7
  171. package/dist/cmd/build/workbench.d.ts.map +0 -1
  172. package/dist/cmd/build/workbench.js +0 -55
  173. package/dist/cmd/build/workbench.js.map +0 -1
  174. package/dist/utils/route-migration.d.ts +0 -62
  175. package/dist/utils/route-migration.d.ts.map +0 -1
  176. package/dist/utils/route-migration.js +0 -630
  177. package/dist/utils/route-migration.js.map +0 -1
  178. package/dist/utils/stream-capture.d.ts +0 -9
  179. package/dist/utils/stream-capture.d.ts.map +0 -1
  180. package/dist/utils/stream-capture.js +0 -34
  181. package/dist/utils/stream-capture.js.map +0 -1
  182. package/src/cmd/build/ast.ts +0 -3529
  183. package/src/cmd/build/entry-generator.ts +0 -760
  184. package/src/cmd/build/vite/api-mount-path.ts +0 -87
  185. package/src/cmd/build/vite/registry-generator.ts +0 -1267
  186. package/src/cmd/build/webanalytics-generator.ts +0 -197
  187. package/src/cmd/build/workbench.ts +0 -58
  188. package/src/utils/route-migration.ts +0 -757
  189. package/src/utils/stream-capture.ts +0 -39
@@ -1,630 +0,0 @@
1
- /**
2
- * Route Migration Utility
3
- *
4
- * Detects projects using file-based routing (multiple route files in src/api/)
5
- * and offers to migrate them to explicit routing — a single src/api/index.ts
6
- * root router that imports and mounts all sub-routers explicitly.
7
- *
8
- * Also updates src/app.ts to import the router and pass it to
9
- * createApp({ router }), completing the migration to explicit routing.
10
- *
11
- * Explicit routing will become the default in the next major release.
12
- *
13
- * Runs during `dev` and `build` after dependency upgrades.
14
- */
15
- import { join, basename, dirname, relative } from 'node:path';
16
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
17
- import * as tui from '../tui';
18
- // Sentinel file that tracks whether the user has been notified or has opted out
19
- const MIGRATION_SENTINEL = '.agentuity/.route-migration-state';
20
- function getMigrationStatePath(rootDir) {
21
- return join(rootDir, MIGRATION_SENTINEL);
22
- }
23
- function readMigrationState(rootDir) {
24
- const statePath = getMigrationStatePath(rootDir);
25
- if (!existsSync(statePath))
26
- return null;
27
- try {
28
- return JSON.parse(readFileSync(statePath, 'utf-8'));
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- function writeMigrationState(rootDir, state) {
35
- const statePath = getMigrationStatePath(rootDir);
36
- const dir = dirname(statePath);
37
- if (!existsSync(dir))
38
- mkdirSync(dir, { recursive: true });
39
- writeFileSync(statePath, JSON.stringify({
40
- state,
41
- timestamp: Date.now(),
42
- }) + '\n');
43
- }
44
- /**
45
- * Detect if a project uses file-based routing (has route files in src/api/).
46
- * Returns the list of discovered route files, or empty array if none found.
47
- */
48
- /**
49
- * Check if a file exports a router as its default export.
50
- * Matches patterns like:
51
- * export default router;
52
- * export default createRouter();
53
- * export default new Hono();
54
- * But NOT files that merely import/reference createRouter or Hono without exporting a router.
55
- */
56
- function isRouterFile(content) {
57
- // Strip single-line and multi-line comments to avoid false positives
58
- const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
59
- // Must have a default export
60
- if (!stripped.includes('export default'))
61
- return false;
62
- // Must actually create a router (not just import the function)
63
- return /createRouter\s*\(/.test(stripped) || /new\s+Hono\s*[<(]/.test(stripped);
64
- }
65
- export function detectFileBasedRoutes(rootDir) {
66
- const apiDir = join(rootDir, 'src', 'api');
67
- if (!existsSync(apiDir))
68
- return [];
69
- const routeFiles = [];
70
- const glob = new Bun.Glob('**/*.ts');
71
- for (const file of glob.scanSync(apiDir)) {
72
- const filePath = join(apiDir, file);
73
- try {
74
- const content = readFileSync(filePath, 'utf-8');
75
- if (isRouterFile(content)) {
76
- routeFiles.push(file);
77
- }
78
- }
79
- catch {
80
- // Skip unreadable files
81
- }
82
- }
83
- return routeFiles;
84
- }
85
- /**
86
- * Check if src/api/index.ts already exists and is a root router that mounts sub-routers.
87
- * This means the project has already migrated to explicit routing.
88
- */
89
- function hasExplicitRootRouter(rootDir) {
90
- const indexPath = join(rootDir, 'src', 'api', 'index.ts');
91
- if (!existsSync(indexPath))
92
- return false;
93
- try {
94
- const content = readFileSync(indexPath, 'utf-8');
95
- const stripped = content.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
96
- // An explicit root router both creates a router AND mounts sub-routers via .route()
97
- return ((/createRouter\s*\(/.test(stripped) || /new\s+Hono\s*[<(]/.test(stripped)) &&
98
- stripped.includes('.route(') &&
99
- content.includes('export default'));
100
- }
101
- catch {
102
- return false;
103
- }
104
- }
105
- /**
106
- * Check if the user's app.ts already passes a router to createApp().
107
- * If so, they've already adopted explicit routing and no migration is needed.
108
- */
109
- function hasExplicitRouterInCreateApp(rootDir) {
110
- const rootAppPath = join(rootDir, 'app.ts');
111
- const srcAppPath = join(rootDir, 'src', 'app.ts');
112
- const appPath = existsSync(rootAppPath)
113
- ? rootAppPath
114
- : existsSync(srcAppPath)
115
- ? srcAppPath
116
- : null;
117
- if (!appPath)
118
- return false;
119
- try {
120
- const content = readFileSync(appPath, 'utf-8');
121
- return /createApp\s*\(\s*\{[^}]*\brouter\b/.test(content);
122
- }
123
- catch {
124
- return false;
125
- }
126
- }
127
- /**
128
- * Check if a project is eligible for migration to explicit routing.
129
- * Returns info about the project's routing state without performing any action.
130
- *
131
- * A project is eligible when:
132
- * - createApp() does NOT already have a `router` property
133
- * - It has multiple route files in src/api/
134
- * - It does NOT already have an explicit src/api/index.ts root router
135
- */
136
- export function checkMigrationEligibility(rootDir) {
137
- // If createApp({ router }) is already present, they've adopted explicit routing
138
- if (hasExplicitRouterInCreateApp(rootDir)) {
139
- return { available: false, routeFiles: [], alreadyNotified: false };
140
- }
141
- const routeFiles = detectFileBasedRoutes(rootDir);
142
- // Need at least 2 route files for migration to be useful
143
- // (a single file already acts as an explicit root router)
144
- if (routeFiles.length < 2) {
145
- return { available: false, routeFiles: [], alreadyNotified: false };
146
- }
147
- // If there's already an explicit root router, check if all route files
148
- // are already imported. If so, nothing to do.
149
- if (hasExplicitRootRouter(rootDir)) {
150
- const indexPath = join(rootDir, 'src', 'api', 'index.ts');
151
- const indexContent = readFileSync(indexPath, 'utf-8');
152
- const filesToMount = routeFiles.filter((f) => f !== 'index.ts');
153
- const allImported = filesToMount.every((f) => {
154
- const importPath = `./${f.replace(/\.tsx?$/, '')}`;
155
- return indexContent.includes(importPath);
156
- });
157
- if (allImported) {
158
- return { available: false, routeFiles: [], alreadyNotified: false };
159
- }
160
- }
161
- const state = readMigrationState(rootDir);
162
- // Already migrated — don't prompt again
163
- if (state?.state === 'migrated') {
164
- return { available: false, routeFiles: [], alreadyNotified: true };
165
- }
166
- const alreadyNotified = state?.state === 'notified' || state?.state === 'dismissed';
167
- return { available: true, routeFiles, alreadyNotified };
168
- }
169
- /**
170
- * Convert a string segment into a valid camelCase identifier part.
171
- * Splits on non-alphanumeric characters (hyphens, dots, underscores, spaces, etc.)
172
- * and capitalizes each sub-word.
173
- *
174
- * e.g. "user-profile" → "userProfile"
175
- * "my_api" → "myApi"
176
- * "foo.bar" → "fooBar"
177
- * "123start" → "_123start" (leading digit gets underscore prefix)
178
- */
179
- function sanitizeSegment(segment, capitalize) {
180
- // Split on non-alphanumeric characters
181
- const parts = segment.split(/[^a-zA-Z0-9]+/).filter(Boolean);
182
- if (parts.length === 0)
183
- return '_';
184
- const result = parts
185
- .map((part, i) => {
186
- if (i === 0 && !capitalize)
187
- return part.toLowerCase();
188
- return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
189
- })
190
- .join('');
191
- // Prefix with underscore if starts with a digit
192
- if (/^\d/.test(result))
193
- return `_${result}`;
194
- return result;
195
- }
196
- /**
197
- * Derive a descriptive camelCase import name from a route file path.
198
- * Handles special characters (hyphens, dots, underscores) in file/directory names
199
- * by converting them to camelCase boundaries.
200
- *
201
- * e.g. "auth/route.ts" → "authRouter"
202
- * "users.ts" → "usersRouter"
203
- * "users/profile.ts" → "usersProfileRouter"
204
- * "health.ts" → "healthRouter"
205
- * "user-profile.ts" → "userProfileRouter"
206
- * "my-api/v2-routes.ts" → "myApiV2RoutesRouter"
207
- * "foo_bar/route.ts" → "fooBarRouter"
208
- */
209
- function deriveImportName(file) {
210
- const withoutExt = file.replace(/\.tsx?$/, '');
211
- const dir = dirname(withoutExt);
212
- const base = basename(withoutExt);
213
- let segments;
214
- if (dir === '.') {
215
- // Top-level file: users.ts → ["users"]
216
- segments = base === 'index' || base === 'route' ? ['root'] : [base];
217
- }
218
- else if (base === 'index' || base === 'route') {
219
- // Convention file in subdirectory: auth/route.ts → ["auth"]
220
- segments = dir.split('/');
221
- }
222
- else {
223
- // Named file in subdirectory: users/profile.ts → ["users", "profile"]
224
- segments = [...dir.split('/'), base];
225
- }
226
- // Convert to camelCase + "Router" suffix, sanitizing each segment
227
- const camel = segments.map((s, i) => sanitizeSegment(s, i > 0)).join('');
228
- return `${camel}Router`;
229
- }
230
- /**
231
- * Compute the mount path and import path for a route file.
232
- */
233
- function computeRouteMountInfo(file) {
234
- const withoutExt = file.replace(/\.tsx?$/, '');
235
- const importPath = `./${withoutExt}`;
236
- const importName = deriveImportName(file);
237
- const dir = dirname(file);
238
- const base = basename(withoutExt);
239
- let mountPath;
240
- if (dir === '.') {
241
- if (base === 'index' || base === 'route') {
242
- mountPath = '/';
243
- }
244
- else {
245
- mountPath = `/${base}`;
246
- }
247
- }
248
- else if (base === 'index' || base === 'route') {
249
- mountPath = `/${dir}`;
250
- }
251
- else {
252
- mountPath = `/${dir}/${base}`;
253
- }
254
- return { importPath, importName, mountPath };
255
- }
256
- /**
257
- * Deduplicate import names by appending a numeric suffix when collisions occur.
258
- */
259
- function deduplicateImportNames(infos) {
260
- const seen = new Map();
261
- return infos.map((info) => {
262
- const count = seen.get(info.importName) ?? 0;
263
- seen.set(info.importName, count + 1);
264
- if (count > 0) {
265
- return { ...info, importName: `${info.importName}${count}` };
266
- }
267
- return info;
268
- });
269
- }
270
- /**
271
- * Generate a fresh src/api/index.ts that imports and mounts all route files.
272
- */
273
- function generateRootRouter(routeFiles) {
274
- const sorted = [...routeFiles].sort();
275
- const infos = deduplicateImportNames(sorted.map(computeRouteMountInfo));
276
- const imports = infos.map((i) => `import ${i.importName} from '${i.importPath}';`);
277
- const mounts = infos.map((i) => `router.route('${i.mountPath}', ${i.importName});`);
278
- return `import { createRouter } from '@agentuity/runtime';
279
- ${imports.join('\n')}
280
-
281
- const router = createRouter();
282
-
283
- ${mounts.join('\n')}
284
-
285
- export default router;
286
- `;
287
- }
288
- /**
289
- * Detect the router variable name used in an existing file.
290
- * Looks for patterns like:
291
- * - `const router = createRouter()` / `const api = createRouter()`
292
- * - `const router = new Hono()` / `const app = new Hono()`
293
- * - Falls back to checking what identifier is default-exported
294
- *
295
- * Returns the variable name (e.g., 'router', 'api', 'app') or 'router' as fallback.
296
- */
297
- function detectRouterVariableName(content) {
298
- // Look for variable assigned from createRouter() or new Hono()
299
- const routerAssignMatch = content.match(/(?:const|let|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*(?:createRouter\s*\(|new\s+Hono\s*[<(])/);
300
- if (routerAssignMatch?.[1]) {
301
- return routerAssignMatch[1];
302
- }
303
- // Look for existing .route() calls to infer the variable name
304
- const routeCallMatch = content.match(/([a-zA-Z_$][a-zA-Z0-9_$]*)\.route\s*\(/);
305
- if (routeCallMatch?.[1]) {
306
- return routeCallMatch[1];
307
- }
308
- // Fall back to the default export identifier
309
- const exportMatch = content.match(/export\s+default\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*;?\s*$/m);
310
- if (exportMatch?.[1]) {
311
- return exportMatch[1];
312
- }
313
- return 'router';
314
- }
315
- /**
316
- * Modify an existing src/api/index.ts to add imports and route mounts for
317
- * route files that are not already imported. Inserts imports at the top
318
- * (after existing imports) and mounts just before the `export default` line.
319
- *
320
- * Detects the router variable name used in the file (e.g., 'router', 'api', 'app')
321
- * and uses it in the generated `.route()` calls.
322
- */
323
- function mergeIntoExistingIndex(existingContent, routeFiles) {
324
- const sorted = [...routeFiles].sort();
325
- const allInfos = deduplicateImportNames(sorted.map(computeRouteMountInfo));
326
- // Filter out files already imported in the existing content
327
- const newInfos = allInfos.filter((info) => !existingContent.includes(info.importPath));
328
- if (newInfos.length === 0) {
329
- return { content: existingContent, added: [] };
330
- }
331
- // Detect the router variable name used in this file
332
- const routerVar = detectRouterVariableName(existingContent);
333
- const newImports = newInfos.map((i) => `import ${i.importName} from '${i.importPath}';`);
334
- const newMounts = newInfos.map((i) => `${routerVar}.route('${i.mountPath}', ${i.importName});`);
335
- const lines = existingContent.split('\n');
336
- // Find the last import line to insert new imports after it
337
- let lastImportIndex = -1;
338
- for (let i = 0; i < lines.length; i++) {
339
- const trimmed = lines[i].trim();
340
- if (trimmed.startsWith('import ') || trimmed.startsWith('import{')) {
341
- lastImportIndex = i;
342
- }
343
- }
344
- // Find the export default line to insert mounts before it
345
- let exportDefaultIndex = -1;
346
- for (let i = lines.length - 1; i >= 0; i--) {
347
- if (lines[i].trim().startsWith('export default')) {
348
- exportDefaultIndex = i;
349
- break;
350
- }
351
- }
352
- if (exportDefaultIndex === -1) {
353
- // No export default found — append mounts at the end
354
- exportDefaultIndex = lines.length;
355
- }
356
- // Insert new imports after the last existing import
357
- const insertImportAt = lastImportIndex === -1 ? 0 : lastImportIndex + 1;
358
- lines.splice(insertImportAt, 0, ...newImports);
359
- // Adjust exportDefaultIndex since we inserted lines above it
360
- const adjustedExportIndex = exportDefaultIndex + newImports.length;
361
- // Insert mounts before export default, with a blank line separator
362
- lines.splice(adjustedExportIndex, 0, '', ...newMounts, '');
363
- return {
364
- content: lines.join('\n'),
365
- added: newInfos.map((i) => i.mountPath),
366
- };
367
- }
368
- /**
369
- * Detect the default export name from a router file.
370
- * Returns the identifier name if found (e.g., 'router', 'api', 'app'),
371
- * or 'router' as a fallback for anonymous/expression default exports.
372
- */
373
- function detectDefaultExportName(filePath) {
374
- if (!existsSync(filePath))
375
- return 'router';
376
- try {
377
- const content = readFileSync(filePath, 'utf-8');
378
- const lines = content.split('\n');
379
- for (const line of lines) {
380
- const trimmed = line.trim();
381
- // export default router;
382
- const identifierMatch = trimmed.match(/^export\s+default\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*;?\s*$/);
383
- if (identifierMatch && identifierMatch[1]) {
384
- return identifierMatch[1];
385
- }
386
- }
387
- // Check for `const X = createRouter(); ... export default X;` pattern
388
- // by finding the variable assigned from createRouter() or new Hono()
389
- const routerVarMatch = content.match(/(?:const|let|var)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*(?:createRouter\s*\(|new\s+Hono\s*[<(])/);
390
- if (routerVarMatch && routerVarMatch[1]) {
391
- // Verify this variable is actually the default export
392
- const exportPattern = new RegExp(`export\\s+default\\s+${routerVarMatch[1]}\\s*;?`);
393
- if (exportPattern.test(content)) {
394
- return routerVarMatch[1];
395
- }
396
- }
397
- }
398
- catch {
399
- // Fall through to default
400
- }
401
- return 'router';
402
- }
403
- /**
404
- * Update src/app.ts to import the explicit router and pass it to createApp().
405
- *
406
- * Handles these createApp patterns:
407
- * - `createApp()` → `createApp({ router })`
408
- * - `createApp({})` → `createApp({ router })`
409
- * - `createApp({ ... })` → `createApp({ router, ... })`
410
- * - `createApp({ router: x })` → already has router, skip
411
- *
412
- * The import name is derived from the default export of src/api/index.ts
413
- * (e.g., if it exports `api`, the import is `import api from './api/index'`
414
- * and the property is `router: api`).
415
- *
416
- * Returns null if app.ts doesn't exist or doesn't need changes.
417
- */
418
- function updateAppTs(rootDir, routerExportName) {
419
- // Try root app.ts first (standard convention), then src/app.ts
420
- const rootAppPath = join(rootDir, 'app.ts');
421
- const srcAppPath = join(rootDir, 'src', 'app.ts');
422
- const appPath = existsSync(rootAppPath)
423
- ? rootAppPath
424
- : existsSync(srcAppPath)
425
- ? srcAppPath
426
- : null;
427
- if (!appPath)
428
- return null;
429
- const content = readFileSync(appPath, 'utf-8');
430
- // Skip if already has a router property in createApp
431
- if (/createApp\s*\(\s*\{[^}]*\brouter\b/.test(content)) {
432
- return { content, changed: false, appPath };
433
- }
434
- // Skip if createApp is not used
435
- if (!content.includes('createApp')) {
436
- return { content, changed: false, appPath };
437
- }
438
- const lines = content.split('\n');
439
- // Step 1: Add import for the router after the last import
440
- // Import path depends on where app.ts lives:
441
- // root app.ts → './src/api/index'
442
- // src/app.ts → './api/index'
443
- const isRootAppTs = appPath === rootAppPath;
444
- const importName = routerExportName;
445
- const importPath = isRootAppTs ? './src/api/index' : './api/index';
446
- const importStatement = `import ${importName} from '${importPath}';`;
447
- // Check if this import already exists
448
- const alreadyImported = lines.some((line) => line.includes("from './api/index'") ||
449
- line.includes("from './api'") ||
450
- line.includes("from './src/api/index'") ||
451
- line.includes("from './src/api'"));
452
- if (!alreadyImported) {
453
- let lastImportIndex = -1;
454
- for (let i = 0; i < lines.length; i++) {
455
- const trimmed = lines[i].trim();
456
- if (trimmed.startsWith('import ') || trimmed.startsWith('import{')) {
457
- lastImportIndex = i;
458
- }
459
- }
460
- const insertAt = lastImportIndex === -1 ? 0 : lastImportIndex + 1;
461
- lines.splice(insertAt, 0, importStatement);
462
- }
463
- // Step 2: Add router property to createApp() call
464
- // Determine the property value: if export name is 'router', use shorthand
465
- // Otherwise use `router: exportName`
466
- const routerProp = importName === 'router' ? 'router' : `router: ${importName}`;
467
- let modified = false;
468
- for (let i = 0; i < lines.length; i++) {
469
- const line = lines[i];
470
- // Match createApp() with no arguments
471
- if (/createApp\s*\(\s*\)/.test(line)) {
472
- lines[i] = line.replace(/createApp\s*\(\s*\)/, `createApp({ ${routerProp} })`);
473
- modified = true;
474
- break;
475
- }
476
- // Match createApp({}) with empty object
477
- if (/createApp\s*\(\s*\{\s*\}\s*\)/.test(line)) {
478
- lines[i] = line.replace(/createApp\s*\(\s*\{\s*\}\s*\)/, `createApp({ ${routerProp} })`);
479
- modified = true;
480
- break;
481
- }
482
- // Match createApp({ ...existing }) with existing properties
483
- // Insert router as the first property after the opening brace
484
- if (/createApp\s*\(\s*\{/.test(line)) {
485
- lines[i] = line.replace(/createApp\s*\(\s*\{/, `createApp({ ${routerProp},`);
486
- modified = true;
487
- break;
488
- }
489
- }
490
- if (!modified && !alreadyImported) {
491
- // createApp pattern not recognized — don't write partial changes
492
- return null;
493
- }
494
- return { content: lines.join('\n'), changed: !alreadyImported || modified, appPath };
495
- }
496
- /**
497
- * Perform the migration to explicit routing.
498
- *
499
- * 1. Generates/updates `src/api/index.ts` to import and mount all route files
500
- * 2. Updates `src/app.ts` to import the router and pass it to `createApp({ router })`
501
- *
502
- * Existing route files are NOT modified — they already export routers.
503
- */
504
- export function performMigration(rootDir, routeFiles) {
505
- const filesCreated = [];
506
- const filesModified = [];
507
- try {
508
- const apiIndexPath = join(rootDir, 'src', 'api', 'index.ts');
509
- // Filter out index.ts itself from the route files to mount
510
- const filesToMount = routeFiles.filter((f) => f !== 'index.ts');
511
- if (filesToMount.length === 0) {
512
- return {
513
- success: false,
514
- filesCreated: [],
515
- filesModified: [],
516
- message: 'No route files to migrate (only index.ts found).',
517
- };
518
- }
519
- let indexMessage;
520
- if (existsSync(apiIndexPath)) {
521
- // Existing index.ts — merge new imports and mounts into it
522
- const existingContent = readFileSync(apiIndexPath, 'utf-8');
523
- const { content: merged, added } = mergeIntoExistingIndex(existingContent, filesToMount);
524
- if (added.length === 0) {
525
- // All routes already imported — still try to update app.ts
526
- const routerExportName = detectDefaultExportName(apiIndexPath);
527
- const appResult = updateAppTs(rootDir, routerExportName);
528
- if (appResult?.changed) {
529
- writeFileSync(appResult.appPath, appResult.content);
530
- const relAppPath = relative(rootDir, appResult.appPath);
531
- filesModified.push(relAppPath);
532
- return {
533
- success: true,
534
- filesCreated: [],
535
- filesModified,
536
- message: `All route files are already imported in src/api/index.ts. Updated ${relAppPath} with explicit router.`,
537
- };
538
- }
539
- return {
540
- success: true,
541
- filesCreated: [],
542
- filesModified: [],
543
- message: 'All route files are already imported in src/api/index.ts.',
544
- };
545
- }
546
- writeFileSync(apiIndexPath, merged);
547
- filesModified.push('src/api/index.ts');
548
- indexMessage = `Added ${added.length} route mount(s) to existing src/api/index.ts.`;
549
- }
550
- else {
551
- // No existing index.ts — generate a fresh one
552
- const rootRouterContent = generateRootRouter(filesToMount);
553
- const apiDir = join(rootDir, 'src', 'api');
554
- if (!existsSync(apiDir))
555
- mkdirSync(apiDir, { recursive: true });
556
- writeFileSync(apiIndexPath, rootRouterContent);
557
- filesCreated.push('src/api/index.ts');
558
- indexMessage = 'Migrated to explicit routing in src/api/index.ts.';
559
- }
560
- // Update app.ts to import and use the explicit router
561
- const routerExportName = detectDefaultExportName(apiIndexPath);
562
- const appResult = updateAppTs(rootDir, routerExportName);
563
- if (appResult?.changed) {
564
- writeFileSync(appResult.appPath, appResult.content);
565
- const relAppPath = relative(rootDir, appResult.appPath);
566
- filesModified.push(relAppPath);
567
- }
568
- writeMigrationState(rootDir, 'migrated');
569
- return {
570
- success: true,
571
- filesCreated,
572
- filesModified,
573
- message: indexMessage,
574
- };
575
- }
576
- catch (error) {
577
- return {
578
- success: false,
579
- filesCreated,
580
- filesModified: [],
581
- message: `Migration failed: ${error instanceof Error ? error.message : String(error)}`,
582
- };
583
- }
584
- }
585
- /**
586
- * Show the migration notice and optionally perform migration.
587
- *
588
- * Called during `dev` and `build` after dependency upgrades.
589
- * Shows an informational banner with instructions — never blocks on
590
- * interactive prompts (which would hang agents and CI pipelines).
591
- *
592
- * @returns true if migration was performed, false otherwise
593
- */
594
- export async function promptRouteMigration(rootDir, _logger, options) {
595
- const interactive = options?.interactive ?? process.stdin.isTTY;
596
- // Only show the migration notice in TTY sessions
597
- if (!interactive) {
598
- return false;
599
- }
600
- const eligibility = checkMigrationEligibility(rootDir);
601
- if (!eligibility.available) {
602
- return false;
603
- }
604
- const { routeFiles, alreadyNotified } = eligibility;
605
- // Only notify once — if the user has already been notified or dismissed, don't show again
606
- if (alreadyNotified) {
607
- return false;
608
- }
609
- tui.newline();
610
- tui.banner('✨ Migrate to Explicit Routing', 'Agentuity is moving to explicit routing, which will become the\n' +
611
- 'default in the next major release. File-based route discovery\n' +
612
- 'will be deprecated.\n' +
613
- '\n' +
614
- `Your project has ${routeFiles.length} route files in src/api/ that are\n` +
615
- 'auto-discovered at build time. Explicit routing gives you a single\n' +
616
- 'src/api/index.ts that imports and mounts all sub-routers — just\n' +
617
- 'like a standard Hono application.\n' +
618
- '\n' +
619
- `${tui.muted('Before:')} ${routeFiles.length} files auto-discovered from src/api/**/*.ts\n` +
620
- `${tui.muted('After:')} One src/api/index.ts that imports and mounts them\n` +
621
- '\n' +
622
- 'Your existing route files are not modified. Your app.ts will be\n' +
623
- 'updated to import the router and pass it to createApp({ router }).', { centerTitle: false });
624
- tui.newline();
625
- tui.info(`Migrate by running: ${tui.muted('agentuity dev --migrate-routes')}`);
626
- tui.newline();
627
- writeMigrationState(rootDir, 'notified');
628
- return false;
629
- }
630
- //# sourceMappingURL=route-migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-migration.js","sourceRoot":"","sources":["../../src/utils/route-migration.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Stream a ReadableStream of raw bytes to a file on disk.
3
- *
4
- * This mirrors the pattern used by the deploy fork wrapper to capture child
5
- * process stdout/stderr without accumulating the output in memory. Returns
6
- * the total number of bytes written.
7
- */
8
- export declare function captureStreamToFile(stream: ReadableStream<Uint8Array>, filePath: string): Promise<number>;
9
- //# sourceMappingURL=stream-capture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stream-capture.d.ts","sourceRoot":"","sources":["../../src/utils/stream-capture.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CA0BjB"}