@agentuity/cli 0.0.95 → 0.0.96

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 (267) hide show
  1. package/AGENTS.md +54 -0
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +8 -5
  5. package/dist/auth.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +190 -27
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cmd/build/entry-generator.d.ts +20 -0
  10. package/dist/cmd/build/entry-generator.d.ts.map +1 -0
  11. package/dist/cmd/build/entry-generator.js +366 -0
  12. package/dist/cmd/build/entry-generator.js.map +1 -0
  13. package/dist/cmd/build/index.d.ts.map +1 -1
  14. package/dist/cmd/build/index.js +5 -23
  15. package/dist/cmd/build/index.js.map +1 -1
  16. package/dist/cmd/build/vite/agent-discovery.d.ts +33 -0
  17. package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -0
  18. package/dist/cmd/build/vite/agent-discovery.js +297 -0
  19. package/dist/cmd/build/vite/agent-discovery.js.map +1 -0
  20. package/dist/cmd/build/vite/browser-env-plugin.d.ts +9 -0
  21. package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +1 -0
  22. package/dist/cmd/build/vite/browser-env-plugin.js +28 -0
  23. package/dist/cmd/build/vite/browser-env-plugin.js.map +1 -0
  24. package/dist/cmd/build/vite/bun-dev-server.d.ts +29 -0
  25. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -0
  26. package/dist/cmd/build/vite/bun-dev-server.js +54 -0
  27. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -0
  28. package/dist/cmd/build/vite/config-loader.d.ts +23 -0
  29. package/dist/cmd/build/vite/config-loader.d.ts.map +1 -0
  30. package/dist/cmd/build/vite/config-loader.js +50 -0
  31. package/dist/cmd/build/vite/config-loader.js.map +1 -0
  32. package/dist/cmd/build/vite/index.d.ts +26 -0
  33. package/dist/cmd/build/vite/index.d.ts.map +1 -0
  34. package/dist/cmd/build/vite/index.js +127 -0
  35. package/dist/cmd/build/vite/index.js.map +1 -0
  36. package/dist/cmd/build/vite/lifecycle-generator.d.ts +11 -0
  37. package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +1 -0
  38. package/dist/cmd/build/vite/lifecycle-generator.js +35 -0
  39. package/dist/cmd/build/vite/lifecycle-generator.js.map +1 -0
  40. package/dist/cmd/build/vite/metadata-generator.d.ts +32 -0
  41. package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -0
  42. package/dist/cmd/build/vite/metadata-generator.js +489 -0
  43. package/dist/cmd/build/vite/metadata-generator.js.map +1 -0
  44. package/dist/cmd/build/vite/patch-plugin.d.ts +21 -0
  45. package/dist/cmd/build/vite/patch-plugin.d.ts.map +1 -0
  46. package/dist/cmd/build/vite/patch-plugin.js +70 -0
  47. package/dist/cmd/build/vite/patch-plugin.js.map +1 -0
  48. package/dist/cmd/build/vite/registry-generator.d.ts +19 -0
  49. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -0
  50. package/dist/cmd/build/{route-registry.js → vite/registry-generator.js} +126 -48
  51. package/dist/cmd/build/vite/registry-generator.js.map +1 -0
  52. package/dist/cmd/build/vite/route-discovery.d.ts +58 -0
  53. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -0
  54. package/dist/cmd/build/vite/route-discovery.js +125 -0
  55. package/dist/cmd/build/vite/route-discovery.js.map +1 -0
  56. package/dist/cmd/build/vite/server-bundler.d.ts +16 -0
  57. package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -0
  58. package/dist/cmd/build/vite/server-bundler.js +194 -0
  59. package/dist/cmd/build/vite/server-bundler.js.map +1 -0
  60. package/dist/cmd/build/vite/vite-asset-server-config.d.ts +19 -0
  61. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -0
  62. package/dist/cmd/build/vite/vite-asset-server-config.js +105 -0
  63. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -0
  64. package/dist/cmd/build/vite/vite-asset-server.d.ts +23 -0
  65. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +1 -0
  66. package/dist/cmd/build/vite/vite-asset-server.js +40 -0
  67. package/dist/cmd/build/vite/vite-asset-server.js.map +1 -0
  68. package/dist/cmd/build/vite/vite-builder.d.ts +44 -0
  69. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -0
  70. package/dist/cmd/build/vite/vite-builder.js +232 -0
  71. package/dist/cmd/build/vite/vite-builder.js.map +1 -0
  72. package/dist/cmd/build/vite/workbench-generator.d.ts +10 -0
  73. package/dist/cmd/build/vite/workbench-generator.d.ts.map +1 -0
  74. package/dist/cmd/build/vite/workbench-generator.js +135 -0
  75. package/dist/cmd/build/vite/workbench-generator.js.map +1 -0
  76. package/dist/cmd/build/vite-bundler.d.ts +23 -0
  77. package/dist/cmd/build/vite-bundler.d.ts.map +1 -0
  78. package/dist/cmd/build/vite-bundler.js +79 -0
  79. package/dist/cmd/build/vite-bundler.js.map +1 -0
  80. package/dist/cmd/cloud/agent/get.d.ts.map +1 -1
  81. package/dist/cmd/cloud/agent/get.js +1 -0
  82. package/dist/cmd/cloud/agent/get.js.map +1 -1
  83. package/dist/cmd/cloud/agent/list.d.ts.map +1 -1
  84. package/dist/cmd/cloud/agent/list.js +1 -0
  85. package/dist/cmd/cloud/agent/list.js.map +1 -1
  86. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  87. package/dist/cmd/cloud/db/get.js +1 -0
  88. package/dist/cmd/cloud/db/get.js.map +1 -1
  89. package/dist/cmd/cloud/db/list.d.ts.map +1 -1
  90. package/dist/cmd/cloud/db/list.js +1 -0
  91. package/dist/cmd/cloud/db/list.js.map +1 -1
  92. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  93. package/dist/cmd/cloud/deploy.js +152 -128
  94. package/dist/cmd/cloud/deploy.js.map +1 -1
  95. package/dist/cmd/cloud/deployment/list.d.ts.map +1 -1
  96. package/dist/cmd/cloud/deployment/list.js +4 -0
  97. package/dist/cmd/cloud/deployment/list.js.map +1 -1
  98. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  99. package/dist/cmd/cloud/env/list.js +1 -0
  100. package/dist/cmd/cloud/env/list.js.map +1 -1
  101. package/dist/cmd/cloud/keyvalue/get.d.ts.map +1 -1
  102. package/dist/cmd/cloud/keyvalue/get.js +1 -0
  103. package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
  104. package/dist/cmd/cloud/keyvalue/keys.d.ts.map +1 -1
  105. package/dist/cmd/cloud/keyvalue/keys.js +1 -0
  106. package/dist/cmd/cloud/keyvalue/keys.js.map +1 -1
  107. package/dist/cmd/cloud/keyvalue/list-namespaces.d.ts.map +1 -1
  108. package/dist/cmd/cloud/keyvalue/list-namespaces.js +1 -0
  109. package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -1
  110. package/dist/cmd/cloud/keyvalue/stats.d.ts.map +1 -1
  111. package/dist/cmd/cloud/keyvalue/stats.js +1 -0
  112. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -1
  113. package/dist/cmd/cloud/secret/list.d.ts.map +1 -1
  114. package/dist/cmd/cloud/secret/list.js +1 -0
  115. package/dist/cmd/cloud/secret/list.js.map +1 -1
  116. package/dist/cmd/cloud/session/list.d.ts.map +1 -1
  117. package/dist/cmd/cloud/session/list.js +4 -0
  118. package/dist/cmd/cloud/session/list.js.map +1 -1
  119. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  120. package/dist/cmd/cloud/storage/get.js +1 -0
  121. package/dist/cmd/cloud/storage/get.js.map +1 -1
  122. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  123. package/dist/cmd/cloud/storage/list.js +3 -0
  124. package/dist/cmd/cloud/storage/list.js.map +1 -1
  125. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  126. package/dist/cmd/cloud/stream/get.js +1 -0
  127. package/dist/cmd/cloud/stream/get.js.map +1 -1
  128. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  129. package/dist/cmd/cloud/stream/list.js +1 -0
  130. package/dist/cmd/cloud/stream/list.js.map +1 -1
  131. package/dist/cmd/cloud/vector/get.d.ts.map +1 -1
  132. package/dist/cmd/cloud/vector/get.js +1 -0
  133. package/dist/cmd/cloud/vector/get.js.map +1 -1
  134. package/dist/cmd/cloud/vector/search.d.ts.map +1 -1
  135. package/dist/cmd/cloud/vector/search.js +1 -0
  136. package/dist/cmd/cloud/vector/search.js.map +1 -1
  137. package/dist/cmd/dev/index.d.ts.map +1 -1
  138. package/dist/cmd/dev/index.js +289 -758
  139. package/dist/cmd/dev/index.js.map +1 -1
  140. package/dist/cmd/dev/sync.d.ts +1 -1
  141. package/dist/cmd/dev/sync.d.ts.map +1 -1
  142. package/dist/cmd/dev/sync.js +3 -0
  143. package/dist/cmd/dev/sync.js.map +1 -1
  144. package/dist/cmd/profile/show.d.ts.map +1 -1
  145. package/dist/cmd/profile/show.js +3 -4
  146. package/dist/cmd/profile/show.js.map +1 -1
  147. package/dist/cmd/project/create.d.ts.map +1 -1
  148. package/dist/cmd/project/create.js +3 -4
  149. package/dist/cmd/project/create.js.map +1 -1
  150. package/dist/cmd/project/list.d.ts.map +1 -1
  151. package/dist/cmd/project/list.js +1 -0
  152. package/dist/cmd/project/list.js.map +1 -1
  153. package/dist/cmd/project/show.d.ts.map +1 -1
  154. package/dist/cmd/project/show.js +1 -0
  155. package/dist/cmd/project/show.js.map +1 -1
  156. package/dist/cmd/upgrade/index.d.ts.map +1 -1
  157. package/dist/cmd/upgrade/index.js +5 -3
  158. package/dist/cmd/upgrade/index.js.map +1 -1
  159. package/dist/config.d.ts +1 -1
  160. package/dist/config.d.ts.map +1 -1
  161. package/dist/config.js +29 -11
  162. package/dist/config.js.map +1 -1
  163. package/dist/index.d.ts +1 -1
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js.map +1 -1
  166. package/dist/runtime-bootstrap.d.ts +3 -2
  167. package/dist/runtime-bootstrap.d.ts.map +1 -1
  168. package/dist/runtime-bootstrap.js +7 -2
  169. package/dist/runtime-bootstrap.js.map +1 -1
  170. package/dist/schemas/deploy.d.ts +1 -1
  171. package/dist/types.d.ts +40 -1
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js.map +1 -1
  174. package/dist/utils/bun-version-checker.d.ts +11 -0
  175. package/dist/utils/bun-version-checker.d.ts.map +1 -0
  176. package/dist/utils/bun-version-checker.js +56 -0
  177. package/dist/utils/bun-version-checker.js.map +1 -0
  178. package/dist/version-check.d.ts.map +1 -1
  179. package/dist/version-check.js +5 -2
  180. package/dist/version-check.js.map +1 -1
  181. package/package.json +10 -3
  182. package/src/auth.ts +9 -5
  183. package/src/cli.ts +228 -29
  184. package/src/cmd/build/entry-generator.ts +404 -0
  185. package/src/cmd/build/index.ts +7 -28
  186. package/src/cmd/build/vite/agent-discovery.ts +467 -0
  187. package/src/cmd/build/vite/browser-env-plugin.ts +34 -0
  188. package/src/cmd/build/vite/bun-dev-server.ts +78 -0
  189. package/src/cmd/build/vite/config-loader.ts +70 -0
  190. package/src/cmd/build/vite/index.ts +166 -0
  191. package/src/cmd/build/vite/lifecycle-generator.ts +43 -0
  192. package/src/cmd/build/vite/metadata-generator.ts +602 -0
  193. package/src/cmd/build/vite/patch-plugin.ts +88 -0
  194. package/src/cmd/build/vite/registry-generator.ts +288 -0
  195. package/src/cmd/build/vite/route-discovery.ts +186 -0
  196. package/src/cmd/build/vite/server-bundler.ts +258 -0
  197. package/src/cmd/build/vite/vite-asset-server-config.ts +134 -0
  198. package/src/cmd/build/vite/vite-asset-server.ts +63 -0
  199. package/src/cmd/build/vite/vite-builder.ts +284 -0
  200. package/src/cmd/build/vite/workbench-generator.ts +152 -0
  201. package/src/cmd/build/vite-bundler.ts +110 -0
  202. package/src/cmd/cloud/agent/get.ts +2 -0
  203. package/src/cmd/cloud/agent/list.ts +1 -0
  204. package/src/cmd/cloud/db/get.ts +1 -0
  205. package/src/cmd/cloud/db/list.ts +1 -0
  206. package/src/cmd/cloud/deploy.ts +175 -144
  207. package/src/cmd/cloud/deployment/list.ts +4 -0
  208. package/src/cmd/cloud/env/list.ts +1 -0
  209. package/src/cmd/cloud/keyvalue/get.ts +1 -0
  210. package/src/cmd/cloud/keyvalue/keys.ts +1 -0
  211. package/src/cmd/cloud/keyvalue/list-namespaces.ts +1 -0
  212. package/src/cmd/cloud/keyvalue/stats.ts +2 -0
  213. package/src/cmd/cloud/secret/list.ts +1 -0
  214. package/src/cmd/cloud/session/list.ts +4 -0
  215. package/src/cmd/cloud/storage/get.ts +1 -0
  216. package/src/cmd/cloud/storage/list.ts +4 -0
  217. package/src/cmd/cloud/stream/get.ts +1 -0
  218. package/src/cmd/cloud/stream/list.ts +1 -0
  219. package/src/cmd/cloud/vector/get.ts +1 -0
  220. package/src/cmd/cloud/vector/search.ts +1 -0
  221. package/src/cmd/dev/index.ts +319 -921
  222. package/src/cmd/dev/sync.ts +5 -1
  223. package/src/cmd/profile/show.ts +3 -4
  224. package/src/cmd/project/create.ts +3 -4
  225. package/src/cmd/project/list.ts +1 -0
  226. package/src/cmd/project/show.ts +1 -0
  227. package/src/cmd/upgrade/index.ts +6 -3
  228. package/src/config.ts +31 -11
  229. package/src/index.ts +2 -0
  230. package/src/runtime-bootstrap.ts +8 -2
  231. package/src/types.ts +48 -1
  232. package/src/utils/bun-version-checker.ts +70 -0
  233. package/src/version-check.ts +6 -2
  234. package/dist/cmd/build/bundler.d.ts +0 -28
  235. package/dist/cmd/build/bundler.d.ts.map +0 -1
  236. package/dist/cmd/build/bundler.js +0 -800
  237. package/dist/cmd/build/bundler.js.map +0 -1
  238. package/dist/cmd/build/config-loader.d.ts +0 -16
  239. package/dist/cmd/build/config-loader.d.ts.map +0 -1
  240. package/dist/cmd/build/config-loader.js +0 -227
  241. package/dist/cmd/build/config-loader.js.map +0 -1
  242. package/dist/cmd/build/file.d.ts +0 -2
  243. package/dist/cmd/build/file.d.ts.map +0 -1
  244. package/dist/cmd/build/file.js +0 -10
  245. package/dist/cmd/build/file.js.map +0 -1
  246. package/dist/cmd/build/fix-duplicate-exports.d.ts +0 -2
  247. package/dist/cmd/build/fix-duplicate-exports.d.ts.map +0 -1
  248. package/dist/cmd/build/fix-duplicate-exports.js +0 -170
  249. package/dist/cmd/build/fix-duplicate-exports.js.map +0 -1
  250. package/dist/cmd/build/plugin.d.ts +0 -6
  251. package/dist/cmd/build/plugin.d.ts.map +0 -1
  252. package/dist/cmd/build/plugin.js +0 -645
  253. package/dist/cmd/build/plugin.js.map +0 -1
  254. package/dist/cmd/build/route-discovery.d.ts +0 -54
  255. package/dist/cmd/build/route-discovery.d.ts.map +0 -1
  256. package/dist/cmd/build/route-discovery.js +0 -148
  257. package/dist/cmd/build/route-discovery.js.map +0 -1
  258. package/dist/cmd/build/route-registry.d.ts +0 -38
  259. package/dist/cmd/build/route-registry.d.ts.map +0 -1
  260. package/dist/cmd/build/route-registry.js.map +0 -1
  261. package/src/cmd/build/bundler.ts +0 -965
  262. package/src/cmd/build/config-loader.ts +0 -268
  263. package/src/cmd/build/file.ts +0 -10
  264. package/src/cmd/build/fix-duplicate-exports.ts +0 -207
  265. package/src/cmd/build/plugin.ts +0 -782
  266. package/src/cmd/build/route-discovery.ts +0 -202
  267. package/src/cmd/build/route-registry.ts +0 -222
@@ -1,41 +1,144 @@
1
- import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
1
+ /**
2
+ * Registry Generator
3
+ *
4
+ * Generates .agentuity/registry.generated.ts from discovered agents
5
+ */
2
6
  import { join } from 'node:path';
7
+ import { writeFileSync, mkdirSync, existsSync, unlinkSync } from 'node:fs';
8
+ import { StructuredError } from '@agentuity/core';
9
+ import { toCamelCase, toPascalCase } from '../../../utils/string';
10
+ const AgentIdentifierCollisionError = StructuredError('AgentIdentifierCollisionError');
11
+ /**
12
+ * Generate .agentuity/registry.generated.ts with agent registry and types
13
+ */
14
+ export function generateAgentRegistry(srcDir, agents) {
15
+ const projectRoot = join(srcDir, '..');
16
+ const agentuityDir = join(projectRoot, '.agentuity');
17
+ const registryPath = join(agentuityDir, 'registry.generated.ts');
18
+ // Detect naming collisions in generated identifiers
19
+ const generatedNames = new Set();
20
+ const collisions = [];
21
+ for (const agent of agents) {
22
+ const camelName = toCamelCase(agent.name);
23
+ if (generatedNames.has(camelName)) {
24
+ collisions.push(`Identifier collision detected: "${camelName}" (from "${agent.name}")`);
25
+ }
26
+ generatedNames.add(camelName);
27
+ }
28
+ if (collisions.length > 0) {
29
+ throw new AgentIdentifierCollisionError({
30
+ message: `Agent identifier naming collisions detected:\n${collisions.join('\n')}\n\n` +
31
+ `This occurs when different agent names produce the same camelCase identifier.\n` +
32
+ `Please rename your agents to avoid this collision.`,
33
+ });
34
+ }
35
+ // Generate imports for all agents
36
+ const imports = agents
37
+ .map(({ name, filename }) => {
38
+ const camelName = toCamelCase(name);
39
+ // Handle both './agent/...' and 'src/agent/...' formats
40
+ let relativePath = filename;
41
+ if (relativePath.startsWith('./agent/')) {
42
+ relativePath = relativePath.replace(/^\.\/agent\//, '../src/agent/');
43
+ }
44
+ else if (relativePath.startsWith('src/agent/')) {
45
+ relativePath = '../' + relativePath;
46
+ }
47
+ return `import ${camelName} from '${relativePath}';`;
48
+ })
49
+ .join('\n');
50
+ // Generate flat registry structure
51
+ const registry = agents
52
+ .map(({ name }) => {
53
+ const camelName = toCamelCase(name);
54
+ return ` ${camelName}: ${camelName},`;
55
+ })
56
+ .join('\n');
57
+ // Generate type exports for all agents
58
+ const typeExports = agents
59
+ .map(({ name }) => {
60
+ const camelName = toCamelCase(name);
61
+ const pascalName = toPascalCase(name);
62
+ return `export type ${pascalName}Runner = AgentRunner<typeof ${camelName}['inputSchema'], typeof ${camelName}['outputSchema'], typeof ${camelName}['stream'] extends true ? true : false>;`;
63
+ })
64
+ .join('\n');
65
+ // Generate flat agent type definitions for AgentRegistry interface augmentation
66
+ const runtimeAgentTypes = agents
67
+ .map(({ name }) => {
68
+ const camelName = toCamelCase(name);
69
+ return ` ${camelName}: AgentRunner<typeof ${camelName}['inputSchema'], typeof ${camelName}['outputSchema'], typeof ${camelName}['stream'] extends true ? true : false>;`;
70
+ })
71
+ .join('\n');
72
+ const generatedContent = `/// <reference types="hono" />
73
+ // Auto-generated by Agentuity - do not edit manually
74
+ ${imports}
75
+ import type { AgentRunner, Logger } from '@agentuity/runtime';
76
+ import type { KeyValueStorage, StreamStorage, VectorStorage } from '@agentuity/core';
77
+
78
+ /**
79
+ * Registry of all agents in this application.
80
+ * Provides strongly-typed access to agent metadata and runner functions.
81
+ * Auto-generated from your agent files during build.
82
+ */
83
+ export const agentRegistry = {
84
+ ${registry}
85
+ } as const;
86
+
87
+ // Local type aliases for Hono augmentation
88
+ type LocalAgentName = keyof typeof agentRegistry;
89
+ type LocalAgentRegistry = typeof agentRegistry;
90
+
91
+ // Typed runners for each agent
92
+ ${typeExports}
93
+
94
+ // Augment @agentuity/runtime types with strongly-typed agents from this project
95
+ declare module "@agentuity/runtime" {
96
+ // Augment the AgentRegistry interface with project-specific strongly-typed agents
97
+ export interface AgentRegistry {
98
+ ${runtimeAgentTypes}
99
+ }
100
+ }
101
+
102
+ // NOTE: Hono Context properties are accessed via c.var (e.g., c.var.logger, c.var.kv)
103
+ // The Variables interface in @agentuity/runtime defines all available context properties
104
+ `;
105
+ const agentsDir = join(srcDir, 'agent');
106
+ const legacyTypesPath = join(agentsDir, 'types.generated.d.ts');
107
+ // Ensure .agentuity directory exists
108
+ if (!existsSync(agentuityDir)) {
109
+ mkdirSync(agentuityDir, { recursive: true });
110
+ }
111
+ writeFileSync(registryPath, generatedContent, 'utf-8');
112
+ // Remove legacy types.generated.d.ts if it exists (now consolidated into registry.generated.ts)
113
+ if (existsSync(legacyTypesPath)) {
114
+ unlinkSync(legacyTypesPath);
115
+ }
116
+ }
3
117
  /**
4
118
  * Generate RouteRegistry type definitions from discovered routes.
5
119
  *
6
120
  * Creates a module augmentation for @agentuity/react that provides
7
121
  * strongly-typed route keys with input/output schema information.
8
- *
9
- * @param srcDir - Source directory path
10
- * @param routes - Array of route information
11
122
  */
12
123
  export function generateRouteRegistry(srcDir, routes) {
13
- // Filter routes by type (include ALL routes, not just those with validators)
14
- // Note: 'stream' routes are HTTP routes that return ReadableStream, so include them with API routes
124
+ // Filter routes by type
15
125
  const apiRoutes = routes.filter((r) => r.routeType === 'api' || r.routeType === 'stream');
16
126
  const websocketRoutes = routes.filter((r) => r.routeType === 'websocket');
17
127
  const sseRoutes = routes.filter((r) => r.routeType === 'sse');
18
128
  if (apiRoutes.length === 0 && websocketRoutes.length === 0 && sseRoutes.length === 0) {
19
- // No routes, skip generation
20
129
  return;
21
130
  }
22
131
  // Generate imports for agents and schemas
23
132
  const imports = [];
24
- const agentImports = new Map(); // Maps agent variable to unique import name
25
- const schemaImports = new Set(); // Track which schema variables we've seen
26
- // Combine all routes for import collection
133
+ const agentImports = new Map();
134
+ const routeFileImports = new Map();
27
135
  const allRoutes = [...apiRoutes, ...websocketRoutes, ...sseRoutes];
28
- // First pass: collect all unique agents and schema variables (only for routes with validators)
136
+ // Collect agent imports
29
137
  allRoutes.forEach((route) => {
30
- // Skip routes without validators - they won't need imports
31
- if (!route.hasValidator) {
138
+ if (!route.hasValidator)
32
139
  return;
33
- }
34
- // If this route uses an agent, import it directly
35
140
  if (route.agentVariable && route.agentImportPath && !agentImports.has(route.agentVariable)) {
36
- // Resolve the import path (could be @agent/hello, ../shared, etc.)
37
141
  let resolvedPath = route.agentImportPath;
38
- // If it's a path alias like @agent/hello, convert to relative path
39
142
  if (resolvedPath.startsWith('@agent/')) {
40
143
  resolvedPath = `../src/agent/${resolvedPath.substring('@agent/'.length)}`;
41
144
  }
@@ -43,30 +146,14 @@ export function generateRouteRegistry(srcDir, routes) {
43
146
  resolvedPath = `../src/web/${resolvedPath.substring('@api/'.length)}`;
44
147
  }
45
148
  else if (resolvedPath.startsWith('./') || resolvedPath.startsWith('../')) {
46
- // Relative path - need to resolve relative to route file location
47
149
  const routeDir = route.filename.substring(0, route.filename.lastIndexOf('/'));
48
150
  resolvedPath = `../${routeDir}/${resolvedPath}`;
49
151
  }
50
- // Generate unique import name: agent_hello, agent_user, etc.
51
152
  const uniqueImportName = `agent_${route.agentVariable}`;
52
153
  imports.push(`import type ${uniqueImportName} from '${resolvedPath}';`);
53
154
  agentImports.set(route.agentVariable, uniqueImportName);
54
155
  }
55
- // Track schema variables for potential import from route file
56
- if (route.inputSchemaVariable) {
57
- schemaImports.add(route.inputSchemaVariable);
58
- }
59
- if (route.outputSchemaVariable) {
60
- schemaImports.add(route.outputSchemaVariable);
61
- }
62
- });
63
- // Import schema variables from route files
64
- const routeFileImports = new Map(); // Maps route file to schema variables
65
- allRoutes.forEach((route) => {
66
- // Only import schemas for routes with validators
67
- if (!route.hasValidator) {
68
- return;
69
- }
156
+ // Collect schema variable imports
70
157
  if (route.inputSchemaVariable || route.outputSchemaVariable) {
71
158
  const filename = route.filename.replace(/\\/g, '/');
72
159
  const importPath = `../${filename.replace(/\.ts$/, '')}`;
@@ -81,16 +168,15 @@ export function generateRouteRegistry(srcDir, routes) {
81
168
  }
82
169
  }
83
170
  });
84
- // Generate imports for schema variables
171
+ // Generate schema imports
85
172
  routeFileImports.forEach((schemas, importPath) => {
86
173
  const schemaList = Array.from(schemas).join(', ');
87
174
  imports.push(`import type { ${schemaList} } from '${importPath}';`);
88
175
  });
89
176
  const importsStr = imports.join('\n');
90
- // Helper function to generate route entry
177
+ // Helper to generate route entry
91
178
  const generateRouteEntry = (route) => {
92
- const routeKey = route.path; // Use path only for websocket/sse, or METHOD path for API
93
- // If route doesn't have a validator, use never for schemas
179
+ const routeKey = route.path;
94
180
  if (!route.hasValidator) {
95
181
  const streamValue = route.stream === true ? 'true' : 'false';
96
182
  return ` '${routeKey}': {
@@ -99,7 +185,6 @@ export function generateRouteRegistry(srcDir, routes) {
99
185
  stream: ${streamValue};
100
186
  };`;
101
187
  }
102
- // If we have an agent variable, we can infer types from it
103
188
  if (route.agentVariable) {
104
189
  const importName = agentImports.get(route.agentVariable);
105
190
  return ` '${routeKey}': {
@@ -108,7 +193,6 @@ export function generateRouteRegistry(srcDir, routes) {
108
193
  stream: typeof ${importName} extends { stream?: infer S } ? S : false;
109
194
  };`;
110
195
  }
111
- // If we have standalone validator with schema variables
112
196
  if (route.inputSchemaVariable || route.outputSchemaVariable) {
113
197
  const inputType = route.inputSchemaVariable
114
198
  ? `typeof ${route.inputSchemaVariable}`
@@ -123,23 +207,19 @@ export function generateRouteRegistry(srcDir, routes) {
123
207
  stream: ${streamValue};
124
208
  };`;
125
209
  }
126
- // Fall back to any if we can't determine the schema source
127
210
  return ` '${routeKey}': {
128
- // Unable to extract schema types - validator might use inline schemas
129
211
  inputSchema: any;
130
212
  outputSchema: any;
131
213
  };`;
132
214
  };
133
- // Generate RouteRegistry interface (API routes use METHOD path format)
215
+ // Generate route entries with METHOD prefix for API routes
134
216
  const apiRouteEntries = apiRoutes
135
217
  .map((route) => {
136
218
  const routeKey = `${route.method.toUpperCase()} ${route.path}`;
137
219
  return generateRouteEntry({ ...route, path: routeKey });
138
220
  })
139
221
  .join('\n');
140
- // Generate WebSocketRouteRegistry (path only, no method)
141
222
  const websocketRouteEntries = websocketRoutes.map(generateRouteEntry).join('\n');
142
- // Generate SSERouteRegistry (path only, no method)
143
223
  const sseRouteEntries = sseRoutes.map(generateRouteEntry).join('\n');
144
224
  const generatedContent = `// Auto-generated by Agentuity - do not edit manually
145
225
  ${importsStr}
@@ -159,14 +239,12 @@ ${sseRouteEntries}
159
239
  }
160
240
  }
161
241
  `;
162
- // Get the project root (parent of srcDir)
163
242
  const projectRoot = join(srcDir, '..');
164
243
  const agentuityDir = join(projectRoot, '.agentuity');
165
244
  const registryPath = join(agentuityDir, 'routes.generated.ts');
166
- // Ensure .agentuity directory exists
167
245
  if (!existsSync(agentuityDir)) {
168
246
  mkdirSync(agentuityDir, { recursive: true });
169
247
  }
170
248
  writeFileSync(registryPath, generatedContent, 'utf-8');
171
249
  }
172
- //# sourceMappingURL=route-registry.js.map
250
+ //# sourceMappingURL=registry-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-generator.js","sourceRoot":"","sources":["../../../../src/cmd/build/vite/registry-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Route Discovery - READ-ONLY AST analysis
3
+ *
4
+ * Discovers routes by scanning src/api/**\/*.ts files
5
+ * Extracts route definitions WITHOUT mutating source files
6
+ */
7
+ import type { Logger } from '../../../types';
8
+ export interface RouteMetadata {
9
+ id: string;
10
+ filename: string;
11
+ path: string;
12
+ method: string;
13
+ version: string;
14
+ type: 'api' | 'sms' | 'email' | 'cron' | 'websocket' | 'sse' | 'stream';
15
+ agentIds?: string[];
16
+ config?: Record<string, unknown>;
17
+ schema?: {
18
+ input?: string;
19
+ output?: string;
20
+ };
21
+ }
22
+ export interface RouteInfo {
23
+ method: string;
24
+ path: string;
25
+ filename: string;
26
+ hasValidator: boolean;
27
+ routeType: 'api' | 'sms' | 'email' | 'cron' | 'websocket' | 'sse' | 'stream';
28
+ agentVariable?: string;
29
+ agentImportPath?: string;
30
+ inputSchemaVariable?: string;
31
+ outputSchemaVariable?: string;
32
+ stream?: boolean;
33
+ }
34
+ /**
35
+ * Discover all routes in src/api directory (READ-ONLY)
36
+ */
37
+ export declare function discoverRoutes(srcDir: string, projectId: string, deploymentId: string, logger: Logger): Promise<{
38
+ routes: RouteMetadata[];
39
+ routeInfoList: RouteInfo[];
40
+ }>;
41
+ export interface RouteConflict {
42
+ type: 'duplicate';
43
+ routes: Array<{
44
+ method: string;
45
+ path: string;
46
+ filename: string;
47
+ }>;
48
+ message: string;
49
+ }
50
+ /**
51
+ * Detect conflicts between routes
52
+ */
53
+ export declare function detectRouteConflicts(routes: Array<{
54
+ method: string;
55
+ path: string;
56
+ filename: string;
57
+ }>): RouteConflict[];
58
+ //# sourceMappingURL=route-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-discovery.d.ts","sourceRoot":"","sources":["../../../../src/cmd/build/vite/route-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;IACxE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAAC,aAAa,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CAiGlE;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,aAAa,EAAE,CA2BjB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Route Discovery - READ-ONLY AST analysis
3
+ *
4
+ * Discovers routes by scanning src/api/**\/*.ts files
5
+ * Extracts route definitions WITHOUT mutating source files
6
+ */
7
+ import { join, relative } from 'node:path';
8
+ import { existsSync } from 'node:fs';
9
+ import { parseRoute } from '../ast';
10
+ /**
11
+ * Discover all routes in src/api directory (READ-ONLY)
12
+ */
13
+ export async function discoverRoutes(srcDir, projectId, deploymentId, logger) {
14
+ const apiDir = join(srcDir, 'api');
15
+ const routes = [];
16
+ const routeInfoList = [];
17
+ // Check if API directory exists
18
+ if (!existsSync(apiDir)) {
19
+ logger.trace('No api directory found at %s', apiDir);
20
+ return { routes, routeInfoList };
21
+ }
22
+ const transpiler = new Bun.Transpiler({ loader: 'ts', target: 'bun' });
23
+ // Scan all .ts files in api directory
24
+ const glob = new Bun.Glob('**/*.ts');
25
+ for await (const file of glob.scan(apiDir)) {
26
+ const filePath = join(apiDir, file);
27
+ try {
28
+ const source = await Bun.file(filePath).text();
29
+ const contents = transpiler.transformSync(source);
30
+ // Check if file has createRouter or Hono
31
+ if (!contents.includes('createRouter') && !contents.includes('new Hono')) {
32
+ logger.trace('Skipping %s (no router)', file);
33
+ continue;
34
+ }
35
+ const rootDir = join(srcDir, '..');
36
+ const relativeFilename = './' + relative(srcDir, filePath);
37
+ try {
38
+ const parsedRoutes = await parseRoute(rootDir, filePath, projectId, deploymentId);
39
+ if (parsedRoutes.length > 0) {
40
+ logger.trace('Discovered %d route(s) in %s', parsedRoutes.length, relativeFilename);
41
+ routes.push(...parsedRoutes);
42
+ // Convert to RouteInfo for registry
43
+ for (const route of parsedRoutes) {
44
+ routeInfoList.push({
45
+ method: route.method.toUpperCase(),
46
+ path: route.path,
47
+ filename: route.filename,
48
+ hasValidator: route.config?.hasValidator === true,
49
+ routeType: route.type || 'api',
50
+ agentVariable: route.config?.agentVariable,
51
+ agentImportPath: route.config?.agentImportPath,
52
+ inputSchemaVariable: route.config?.inputSchemaVariable,
53
+ outputSchemaVariable: route.config?.outputSchemaVariable,
54
+ stream: route.config?.stream !== undefined && route.config.stream !== null
55
+ ? Boolean(route.config.stream)
56
+ : route.type === 'stream'
57
+ ? true
58
+ : undefined,
59
+ });
60
+ }
61
+ }
62
+ }
63
+ catch (error) {
64
+ // Skip files that don't have proper router setup
65
+ if (error instanceof Error) {
66
+ if (error.message.includes('could not find default export') ||
67
+ error.message.includes('could not find an proper createRouter')) {
68
+ logger.trace('Skipping %s: %s', file, error.message);
69
+ }
70
+ else {
71
+ throw error;
72
+ }
73
+ }
74
+ else {
75
+ throw error;
76
+ }
77
+ }
78
+ }
79
+ catch (error) {
80
+ logger.warn(`Failed to parse route file ${filePath}: ${error}`);
81
+ }
82
+ }
83
+ logger.debug('Discovered %d route(s)', routes.length);
84
+ // Check for route conflicts
85
+ const conflicts = detectRouteConflicts(routeInfoList);
86
+ if (conflicts.length > 0) {
87
+ logger.error('Route conflicts detected:');
88
+ for (const conflict of conflicts) {
89
+ logger.error(' %s', conflict.message);
90
+ for (const route of conflict.routes) {
91
+ logger.error(' - %s %s in %s', route.method, route.path, route.filename);
92
+ }
93
+ }
94
+ throw new Error(`Found ${conflicts.length} route conflict(s). Fix the conflicts and try again.`);
95
+ }
96
+ return { routes, routeInfoList };
97
+ }
98
+ /**
99
+ * Detect conflicts between routes
100
+ */
101
+ export function detectRouteConflicts(routes) {
102
+ const conflicts = [];
103
+ // Group routes by method+path
104
+ const methodPathMap = new Map();
105
+ for (const route of routes) {
106
+ const key = `${route.method.toUpperCase()} ${route.path}`;
107
+ if (!methodPathMap.has(key)) {
108
+ methodPathMap.set(key, []);
109
+ }
110
+ methodPathMap.get(key).push({ path: route.path, filename: route.filename });
111
+ }
112
+ // Check for exact duplicates
113
+ for (const [methodPath, routeList] of methodPathMap.entries()) {
114
+ if (routeList.length > 1) {
115
+ const [method] = methodPath.split(' ', 2);
116
+ conflicts.push({
117
+ type: 'duplicate',
118
+ routes: routeList.map((r) => ({ method, path: r.path, filename: r.filename })),
119
+ message: `Duplicate route: ${methodPath} defined in ${routeList.length} files`,
120
+ });
121
+ }
122
+ }
123
+ return conflicts;
124
+ }
125
+ //# sourceMappingURL=route-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-discovery.js","sourceRoot":"","sources":["../../../../src/cmd/build/vite/route-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Server bundler using Bun.build with external dependency management
3
+ * Handles installing externals into .agentuity/node_modules for production
4
+ */
5
+ import type { Logger } from '../../../types';
6
+ export interface ServerBundleOptions {
7
+ rootDir: string;
8
+ dev: boolean;
9
+ logger: Logger;
10
+ }
11
+ /**
12
+ * Install external dependencies and build server bundle
13
+ * For production: installs externals into .agentuity/node_modules BEFORE bundling
14
+ */
15
+ export declare function installExternalsAndBuild(options: ServerBundleOptions): Promise<void>;
16
+ //# sourceMappingURL=server-bundler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-bundler.d.ts","sourceRoot":"","sources":["../../../../src/cmd/build/vite/server-bundler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8O1F"}