@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,505 +0,0 @@
1
- import {
2
- cpSync,
3
- createReadStream,
4
- existsSync,
5
- mkdirSync,
6
- mkdtempSync,
7
- readdirSync,
8
- renameSync,
9
- rmSync,
10
- } from 'node:fs';
11
- import { tmpdir } from 'node:os';
12
- import { join, resolve } from 'node:path';
13
- import { finished } from 'node:stream/promises';
14
- import { createGunzip } from 'node:zlib';
15
- import { type Logger, StructuredError } from '@agentuity/core';
16
- import { extract, type Headers } from 'tar-fs';
17
- import { writeAgentsDocs } from '../../agents-docs';
18
- import { downloadWithSpinner } from '../../download';
19
- import * as tui from '../../tui';
20
- import type { TemplateInfo } from './templates';
21
-
22
- const GITHUB_BRANCH = 'main';
23
- const BASE_TEMPLATE_DIR = '_base';
24
-
25
- interface DownloadOptions {
26
- dest: string;
27
- template: TemplateInfo;
28
- templateDir?: string;
29
- templateBranch?: string;
30
- logger: Logger;
31
- }
32
-
33
- interface SetupOptions {
34
- dest: string;
35
- projectName: string;
36
- dirName: string;
37
- noInstall: boolean;
38
- noBuild: boolean;
39
- logger: Logger;
40
- }
41
-
42
- const TemplateDirectoryNotFoundError = StructuredError('TemplateDirectoryNotFoundError')<{
43
- directory: string;
44
- }>();
45
-
46
- async function copyTemplateFiles(sourceDir: string, dest: string, skipGitignoreRename = false) {
47
- if (!existsSync(sourceDir)) {
48
- return; // Source directory doesn't exist, skip (overlay may be empty)
49
- }
50
-
51
- // Copy all files from source to dest (overlay wins on conflicts)
52
- const files = readdirSync(sourceDir);
53
- for (const file of files) {
54
- // Skip package.overlay.json - it's handled separately for merging
55
- if (file === 'package.overlay.json') {
56
- continue;
57
- }
58
- // Skip .gitkeep files - they're just placeholders for empty directories
59
- if (file === '.gitkeep') {
60
- continue;
61
- }
62
- cpSync(join(sourceDir, file), join(dest, file), { recursive: true });
63
- }
64
-
65
- // Rename gitignore -> .gitignore (only do this once, after all copies)
66
- if (!skipGitignoreRename) {
67
- const gi = join(dest, 'gitignore');
68
- if (existsSync(gi)) {
69
- renameSync(gi, join(dest, '.gitignore'));
70
- }
71
- }
72
- }
73
-
74
- async function mergePackageJson(dest: string, overlayDir: string) {
75
- const basePackagePath = join(dest, 'package.json');
76
- const overlayPackagePath = join(overlayDir, 'package.overlay.json');
77
-
78
- // If no overlay package.json exists, nothing to merge
79
- if (!existsSync(overlayPackagePath)) {
80
- return;
81
- }
82
-
83
- // Read base package.json
84
- const basePackage = JSON.parse(await Bun.file(basePackagePath).text());
85
-
86
- // Read overlay package.json
87
- const overlayPackage = JSON.parse(await Bun.file(overlayPackagePath).text());
88
-
89
- // Merge dependencies (overlay wins on conflicts)
90
- if (overlayPackage.dependencies) {
91
- basePackage.dependencies = {
92
- ...basePackage.dependencies,
93
- ...overlayPackage.dependencies,
94
- };
95
- }
96
-
97
- // Merge devDependencies (overlay wins on conflicts)
98
- if (overlayPackage.devDependencies) {
99
- basePackage.devDependencies = {
100
- ...basePackage.devDependencies,
101
- ...overlayPackage.devDependencies,
102
- };
103
- }
104
-
105
- // Merge scripts (overlay wins on conflicts)
106
- if (overlayPackage.scripts) {
107
- basePackage.scripts = {
108
- ...basePackage.scripts,
109
- ...overlayPackage.scripts,
110
- };
111
- }
112
-
113
- // Write merged package.json
114
- await Bun.write(basePackagePath, JSON.stringify(basePackage, null, '\t') + '\n');
115
- }
116
-
117
- async function _cleanup(sourceDir: string, dest: string) {
118
- if (!existsSync(sourceDir)) {
119
- throw new TemplateDirectoryNotFoundError({
120
- directory: sourceDir,
121
- message: `Template directory not found: ${sourceDir}`,
122
- });
123
- }
124
-
125
- await tui.spinner('📦 Copying template files...', async () => {
126
- // Copy all files from source to dest
127
- const files = readdirSync(sourceDir);
128
- for (const file of files) {
129
- cpSync(join(sourceDir, file), join(dest, file), { recursive: true });
130
- }
131
-
132
- // Rename gitignore -> .gitignore
133
- const gi = join(dest, 'gitignore');
134
- if (existsSync(gi)) {
135
- renameSync(gi, join(dest, '.gitignore'));
136
- }
137
- });
138
- }
139
-
140
- export async function downloadTemplate(options: DownloadOptions): Promise<void> {
141
- const { dest, template, templateDir, templateBranch, logger } = options;
142
-
143
- mkdirSync(dest, { recursive: true });
144
-
145
- // Copy from local directory if provided
146
- if (templateDir) {
147
- const baseDir = resolve(join(templateDir, BASE_TEMPLATE_DIR));
148
- const overlayDir = resolve(join(templateDir, template.directory));
149
-
150
- // Base template must exist
151
- if (!existsSync(baseDir)) {
152
- throw new TemplateDirectoryNotFoundError({
153
- directory: baseDir,
154
- message: `Base template directory not found: ${baseDir}`,
155
- });
156
- }
157
-
158
- // Overlay directory must exist (even if empty)
159
- if (!existsSync(overlayDir)) {
160
- throw new TemplateDirectoryNotFoundError({
161
- directory: overlayDir,
162
- message: `Template directory not found: ${overlayDir}`,
163
- });
164
- }
165
-
166
- await tui.spinner({
167
- type: 'progress',
168
- message: '📦 Copying template files...',
169
- clearOnSuccess: true,
170
- callback: async (progress) => {
171
- // Step 1: Copy base template files (skip gitignore rename for now)
172
- await copyTemplateFiles(baseDir, dest, true);
173
- progress(33);
174
-
175
- // Step 2: Copy overlay template files (overlay wins on conflicts)
176
- await copyTemplateFiles(overlayDir, dest, false);
177
- progress(66);
178
-
179
- // Step 3: Merge package.json with overlay dependencies
180
- await mergePackageJson(dest, overlayDir);
181
- progress(100);
182
- },
183
- });
184
-
185
- return;
186
- }
187
-
188
- // Download from GitHub
189
- const branch = templateBranch || GITHUB_BRANCH;
190
- const basePath = `templates/${BASE_TEMPLATE_DIR}`;
191
- const overlayPath = `templates/${template.directory}`;
192
- const url = `https://agentuity.sh/template/sdk/${branch}/tar.gz`;
193
- const tempDir = mkdtempSync(join(tmpdir(), 'agentuity-'));
194
- const tarballPath = join(tempDir, 'download.tar.gz');
195
-
196
- logger.debug('[download] URL: %s', url);
197
- logger.debug('[download] Branch: %s', branch);
198
- logger.debug('[download] Base path: %s', basePath);
199
- logger.debug('[download] Overlay path: %s', overlayPath);
200
- logger.debug('[download] Temp dir: %s', tempDir);
201
-
202
- try {
203
- // Step 1: Download tarball to temp file
204
- // We download to a file first rather than piping directly to tar-fs
205
- // because this avoids Bun/Node stream compatibility issues
206
- await downloadWithSpinner(
207
- {
208
- url,
209
- message: templateBranch
210
- ? `Downloading template files from branch ${branch}...`
211
- : 'Downloading template files...',
212
- },
213
- async (stream) => {
214
- // Collect all chunks from the download stream
215
- const chunks: Buffer[] = [];
216
- for await (const chunk of stream) {
217
- chunks.push(Buffer.from(chunk));
218
- }
219
- const buffer = Buffer.concat(chunks);
220
- await Bun.write(tarballPath, buffer);
221
-
222
- logger.debug('[download] Downloaded bytes: %dbytes', buffer.length);
223
- logger.debug('[download] Tarball path: %s', tarballPath);
224
- }
225
- );
226
-
227
- // Step 2: Extract tarball - extract both base and overlay templates
228
- // The tarball structure is: sdk-{branch}/templates/{template.directory}/...
229
- const baseExtractDir = join(tempDir, 'base');
230
- const overlayExtractDir = join(tempDir, 'overlay');
231
- mkdirSync(baseExtractDir, { recursive: true });
232
- mkdirSync(overlayExtractDir, { recursive: true });
233
-
234
- const basePrefix = `sdk-${branch}/${basePath}/`;
235
- const overlayPrefix = `sdk-${branch}/${overlayPath}/`;
236
- logger.debug('[extract] Base extract dir: %s', baseExtractDir);
237
- logger.debug('[extract] Overlay extract dir: %s', overlayExtractDir);
238
- logger.debug('[extract] Base prefix: %s', basePrefix);
239
- logger.debug('[extract] Overlay prefix: %s', overlayPrefix);
240
-
241
- // Track extraction stats for debugging
242
- let ignoredCount = 0;
243
- let baseExtractedCount = 0;
244
- let overlayExtractedCount = 0;
245
-
246
- // Track which entries we've mapped so we don't ignore them later
247
- // Note: tar-fs calls map BEFORE ignore (despite what docs say)
248
- const mappedEntries = new Set<string>();
249
-
250
- const extractor = extract(tempDir, {
251
- // map callback: called FIRST, allows modifying the entry before extraction
252
- // We extract base files to baseExtractDir and overlay files to overlayExtractDir
253
- map: (header: Headers) => {
254
- const originalName = header.name;
255
-
256
- // Check if this is a base template file
257
- if (header.name.startsWith(basePrefix) && header.name.length > basePrefix.length) {
258
- header.name = `base/${header.name.substring(basePrefix.length)}`;
259
- mappedEntries.add(header.name);
260
- logger.debug('[extract] MAP BASE: %s -> %s', originalName, header.name);
261
- baseExtractedCount++;
262
- }
263
- // Check if this is an overlay template file
264
- else if (
265
- header.name.startsWith(overlayPrefix) &&
266
- header.name.length > overlayPrefix.length
267
- ) {
268
- header.name = `overlay/${header.name.substring(overlayPrefix.length)}`;
269
- mappedEntries.add(header.name);
270
- logger.debug('[extract] MAP OVERLAY: %s -> %s', originalName, header.name);
271
- overlayExtractedCount++;
272
- }
273
-
274
- return header;
275
- },
276
- // ignore callback: called AFTER map, receives the MAPPED name
277
- // Return true to skip the entry, false to extract it
278
- ignore: (_name: string, header?: Headers) => {
279
- if (!header) {
280
- ignoredCount++;
281
- return true;
282
- }
283
-
284
- // If we already mapped this entry, don't ignore it
285
- if (mappedEntries.has(header.name)) {
286
- return false;
287
- }
288
-
289
- // Otherwise, ignore it
290
- logger.debug('[extract] IGNORE: %s', header.name);
291
- ignoredCount++;
292
- return true;
293
- },
294
- });
295
-
296
- // Pipe: tarball file -> gunzip -> tar extractor
297
- createReadStream(tarballPath).pipe(createGunzip()).pipe(extractor);
298
- await finished(extractor);
299
-
300
- logger.debug('[extract] Extraction complete');
301
- logger.debug('[extract] Ignored entries: %d', ignoredCount);
302
- logger.debug('[extract] Base extracted entries: %d', baseExtractedCount);
303
- logger.debug('[extract] Overlay extracted entries: %d', overlayExtractedCount);
304
-
305
- // Step 3: Copy base template files, then overlay template files
306
- await tui.spinner({
307
- type: 'progress',
308
- message: '📦 Copying template files...',
309
- clearOnSuccess: true,
310
- callback: async (progress) => {
311
- // Copy base template files (skip gitignore rename for now)
312
- await copyTemplateFiles(baseExtractDir, dest, true);
313
- progress(33);
314
-
315
- // Copy overlay template files (overlay wins on conflicts)
316
- await copyTemplateFiles(overlayExtractDir, dest, false);
317
- progress(66);
318
-
319
- // Merge package.json with overlay dependencies
320
- await mergePackageJson(dest, overlayExtractDir);
321
- progress(100);
322
- },
323
- });
324
- } finally {
325
- // Clean up temp directory
326
- logger.debug('[cleanup] Removing temp dir: %s', tempDir);
327
- rmSync(tempDir, { recursive: true, force: true });
328
- }
329
- }
330
-
331
- export async function setupProject(options: SetupOptions): Promise<{ success: boolean }> {
332
- const { dest, projectName, dirName, noInstall, noBuild, logger } = options;
333
- let hasError = false;
334
-
335
- // Replace {{PROJECT_NAME}} in files
336
- tui.info(`🔧 Setting up ${projectName}...`);
337
- await replaceInFiles(dest, projectName, dirName);
338
-
339
- // Install dependencies
340
- if (!noInstall) {
341
- const exitCode = await tui.runCommand({
342
- command: 'bun install',
343
- cwd: dest,
344
- cmd: ['bun', 'install'],
345
- clearOnSuccess: true,
346
- });
347
- if (exitCode !== 0) {
348
- logger.error('Failed to install dependencies');
349
- hasError = true;
350
- }
351
- }
352
-
353
- // Run optional template setup script if it exists
354
- // This allows templates to run custom setup logic after bun install
355
- const setupScriptPath = join(dest, '_setup.ts');
356
- if (existsSync(setupScriptPath)) {
357
- try {
358
- const exitCode = await tui.runCommand({
359
- command: 'bun _setup.ts',
360
- cwd: dest,
361
- cmd: ['bun', '_setup.ts'],
362
- clearOnSuccess: true,
363
- });
364
- if (exitCode !== 0) {
365
- logger.error('Template setup script failed');
366
- hasError = true;
367
- }
368
- } finally {
369
- // Always delete the setup script after running (or attempting to run)
370
- try {
371
- rmSync(setupScriptPath);
372
- } catch {
373
- // Ignore errors when deleting the setup script
374
- }
375
- }
376
- }
377
-
378
- // Build project
379
- if (!noBuild) {
380
- const exitCode = await tui.runCommand({
381
- command: 'bun run build --dev',
382
- cwd: dest,
383
- cmd: ['bun', 'run', 'build', '--dev'],
384
- clearOnSuccess: true,
385
- });
386
- if (exitCode !== 0) {
387
- logger.error('Failed to build project');
388
- hasError = true;
389
- }
390
- }
391
-
392
- // Generate and write AGENTS.md files for the CLI and source folders
393
- // Always overwrite during project setup to ensure fresh content
394
- await writeAgentsDocs(dest);
395
-
396
- return { success: !hasError };
397
- }
398
-
399
- interface InitGitRepoOptions {
400
- /** Project name (e.g. "My Agent") */
401
- projectName?: string;
402
- /** Where the template came from (e.g. "github.com/owner/repo" or "TypeScript / Hello World") */
403
- source?: string;
404
- /** Git commit author (e.g. { name: "app-slug[bot]", email: "id+slug[bot]@users.noreply.github.com" }) */
405
- author?: { name: string; email: string };
406
- }
407
-
408
- export async function initGitRepo(dest: string, options?: InitGitRepoOptions): Promise<void> {
409
- // Safety: refuse to init if .git already exists (prevents clobbering existing repos)
410
- if (existsSync(join(dest, '.git'))) {
411
- throw new Error(`Refusing to initialize git: "${dest}" already contains a .git directory.`);
412
- }
413
-
414
- // Initialize git repository if git is available
415
- // Check for real git (not macOS stub that triggers Xcode CLT popup)
416
- const { isGitAvailable, getDefaultBranch } = await import('../../git-helper');
417
- const gitAvailable = await isGitAvailable();
418
-
419
- if (gitAvailable) {
420
- // Get default branch from git config, fallback to 'main'
421
- const defaultBranch = (await getDefaultBranch()) || 'main';
422
-
423
- // Git is available, initialize repository
424
- await tui.runCommand({
425
- command: `git init -b ${defaultBranch}`,
426
- cwd: dest,
427
- cmd: ['git', 'init', '-b', defaultBranch],
428
- clearOnSuccess: true,
429
- });
430
-
431
- // Configure git user in CI/sandbox environments (where git config may not be set)
432
- if (process.env.CI || process.env.AGENTUITY_SANDBOX_ID) {
433
- const cfgEmail = options?.author?.email ?? 'bot@agentuity.com';
434
- const cfgName = options?.author?.name ?? 'Agentuity';
435
-
436
- await tui.runCommand({
437
- command: 'git config user.email',
438
- cwd: dest,
439
- cmd: ['git', 'config', 'user.email', cfgEmail],
440
- clearOnSuccess: true,
441
- });
442
-
443
- await tui.runCommand({
444
- command: 'git config user.name',
445
- cwd: dest,
446
- cmd: ['git', 'config', 'user.name', cfgName],
447
- clearOnSuccess: true,
448
- });
449
- }
450
-
451
- // Add all files
452
- await tui.runCommand({
453
- command: 'git add .',
454
- cwd: dest,
455
- cmd: ['git', 'add', '.'],
456
- clearOnSuccess: true,
457
- });
458
-
459
- const commitMessage = 'Initial Setup';
460
-
461
- // Create initial commit — authored by the GitHub App bot if available,
462
- // otherwise fallback to generic Agentuity identity
463
- const authorName = options?.author?.name ?? 'Agentuity';
464
- const authorEmail = options?.author?.email ?? 'bot@agentuity.com';
465
- const authorStr = `${authorName} <${authorEmail}>`;
466
-
467
- await tui.runCommand({
468
- command: 'git commit',
469
- cwd: dest,
470
- cmd: [
471
- 'git',
472
- '-c',
473
- 'commit.gpgsign=false',
474
- 'commit',
475
- `--author=${authorStr}`,
476
- '-m',
477
- commitMessage,
478
- ],
479
- env: {
480
- GIT_COMMITTER_NAME: authorName,
481
- GIT_COMMITTER_EMAIL: authorEmail,
482
- },
483
- clearOnSuccess: true,
484
- });
485
- }
486
- }
487
-
488
- async function replaceInFiles(dir: string, projectName: string, dirName: string): Promise<void> {
489
- const filesToReplace = ['package.json', 'README.md', 'AGENTS.md'];
490
-
491
- for (const file of filesToReplace) {
492
- const filePath = join(dir, file);
493
- const bunFile = Bun.file(filePath);
494
- if (await bunFile.exists()) {
495
- let content = await bunFile.text();
496
- // Replace human-readable name in most places
497
- content = content.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
498
- // Replace with directory name for package.json "name" field (npm package name)
499
- if (file === 'package.json') {
500
- content = content.replace(/"name":\s*".*?"/, `"name": "${dirName}"`);
501
- }
502
- await Bun.write(filePath, content);
503
- }
504
- }
505
- }
@@ -1,56 +0,0 @@
1
- import { StructuredError, Logger } from '@agentuity/core';
2
-
3
- const GITHUB_BRANCH = 'main';
4
-
5
- export interface TemplateInfo {
6
- id: string;
7
- name: string;
8
- description: string;
9
- directory: string;
10
- }
11
-
12
- interface TemplatesManifest {
13
- templates: TemplateInfo[];
14
- }
15
-
16
- const TemplateMissingConfigurationError = StructuredError('TemplateMissingConfigurationError');
17
- const TemplateDownloadError = StructuredError('TemplateDownloadError')<{ status: number }>();
18
-
19
- export async function fetchTemplates(
20
- logger: Logger,
21
- localDir?: string,
22
- branch?: string
23
- ): Promise<TemplateInfo[]> {
24
- // Load from local directory if provided
25
- if (localDir) {
26
- const { join } = await import('node:path');
27
- const { resolve } = await import('node:path');
28
- const manifestPath = resolve(join(localDir, 'templates.json'));
29
- const file = Bun.file(manifestPath);
30
-
31
- if (!(await file.exists())) {
32
- throw new TemplateMissingConfigurationError({
33
- message: `templates.json not found at ${manifestPath}`,
34
- });
35
- }
36
-
37
- const manifest = (await file.json()) as TemplatesManifest;
38
- return manifest.templates;
39
- }
40
-
41
- // Fetch from GitHub
42
- const branchToUse = branch || GITHUB_BRANCH;
43
- const url = `https://agentuity.sh/template/sdk/${branchToUse}`;
44
-
45
- const response = await fetch(url);
46
- if (!response.ok) {
47
- logger.trace('error fetching template from %s. %s', url, await response.text());
48
- throw new TemplateDownloadError({
49
- status: response.status,
50
- message: `Failed to fetch templates: ${response.statusText}`,
51
- });
52
- }
53
-
54
- const manifest = (await response.json()) as TemplatesManifest;
55
- return manifest.templates;
56
- }