@agentuity/cli 2.0.11 → 3.0.0-alpha.1

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