@agentuity/cli 2.0.10 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) 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.d.ts.map +1 -1
  66. package/dist/cmd/coder/create.js +18 -0
  67. package/dist/cmd/coder/create.js.map +1 -1
  68. package/dist/cmd/coder/index.d.ts.map +1 -1
  69. package/dist/cmd/coder/index.js +4 -0
  70. package/dist/cmd/coder/index.js.map +1 -1
  71. package/dist/cmd/coder/start.d.ts.map +1 -1
  72. package/dist/cmd/coder/start.js +49 -1
  73. package/dist/cmd/coder/start.js.map +1 -1
  74. package/dist/cmd/coder/update.d.ts.map +1 -1
  75. package/dist/cmd/coder/update.js +21 -1
  76. package/dist/cmd/coder/update.js.map +1 -1
  77. package/dist/cmd/coder/workspace/create.d.ts.map +1 -1
  78. package/dist/cmd/coder/workspace/create.js +17 -1
  79. package/dist/cmd/coder/workspace/create.js.map +1 -1
  80. package/dist/cmd/coder/workspace/list.js +2 -2
  81. package/dist/cmd/coder/workspace/list.js.map +1 -1
  82. package/dist/cmd/dev/index.d.ts +9 -0
  83. package/dist/cmd/dev/index.d.ts.map +1 -1
  84. package/dist/cmd/dev/index.js +127 -923
  85. package/dist/cmd/dev/index.js.map +1 -1
  86. package/dist/cmd/project/auth/shared.d.ts.map +1 -1
  87. package/dist/cmd/project/auth/shared.js +14 -38
  88. package/dist/cmd/project/auth/shared.js.map +1 -1
  89. package/dist/cmd/project/create.d.ts.map +1 -1
  90. package/dist/cmd/project/create.js +12 -19
  91. package/dist/cmd/project/create.js.map +1 -1
  92. package/dist/cmd/project/frameworks-ai-examples.d.ts +15 -0
  93. package/dist/cmd/project/frameworks-ai-examples.d.ts.map +1 -0
  94. package/dist/cmd/project/frameworks-ai-examples.js +160 -0
  95. package/dist/cmd/project/frameworks-ai-examples.js.map +1 -0
  96. package/dist/cmd/project/frameworks-landing-pages.d.ts +17 -0
  97. package/dist/cmd/project/frameworks-landing-pages.d.ts.map +1 -0
  98. package/dist/cmd/project/frameworks-landing-pages.js +242 -0
  99. package/dist/cmd/project/frameworks-landing-pages.js.map +1 -0
  100. package/dist/cmd/project/frameworks.d.ts +58 -0
  101. package/dist/cmd/project/frameworks.d.ts.map +1 -0
  102. package/dist/cmd/project/frameworks.js +152 -0
  103. package/dist/cmd/project/frameworks.js.map +1 -0
  104. package/dist/cmd/project/reconcile.d.ts.map +1 -1
  105. package/dist/cmd/project/reconcile.js +10 -23
  106. package/dist/cmd/project/reconcile.js.map +1 -1
  107. package/dist/cmd/project/remote-import.js +1 -1
  108. package/dist/cmd/project/scaffold.d.ts +58 -0
  109. package/dist/cmd/project/scaffold.d.ts.map +1 -0
  110. package/dist/cmd/project/scaffold.js +223 -0
  111. package/dist/cmd/project/scaffold.js.map +1 -0
  112. package/dist/cmd/project/template-flow.d.ts +8 -4
  113. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  114. package/dist/cmd/project/template-flow.js +93 -144
  115. package/dist/cmd/project/template-flow.js.map +1 -1
  116. package/dist/deploy-metadata.d.ts +49 -0
  117. package/dist/deploy-metadata.d.ts.map +1 -0
  118. package/dist/deploy-metadata.js +183 -0
  119. package/dist/deploy-metadata.js.map +1 -0
  120. package/dist/index.d.ts +1 -1
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js.map +1 -1
  123. package/dist/types.d.ts +25 -31
  124. package/dist/types.d.ts.map +1 -1
  125. package/dist/types.js.map +1 -1
  126. package/package.json +13 -8
  127. package/src/cmd/ai/prompt/index.ts +2 -7
  128. package/src/cmd/build/adapters/generic.ts +239 -0
  129. package/src/cmd/build/adapters/index.ts +30 -0
  130. package/src/cmd/build/adapters/nextjs.ts +146 -0
  131. package/src/cmd/build/adapters/static-server.ts +143 -0
  132. package/src/cmd/build/adapters/types.ts +93 -0
  133. package/src/cmd/build/detect/engine.ts +111 -0
  134. package/src/cmd/build/detect/frameworks.ts +335 -0
  135. package/src/cmd/build/detect/generic.ts +71 -0
  136. package/src/cmd/build/detect/index.ts +122 -0
  137. package/src/cmd/build/detect/types.ts +109 -0
  138. package/src/cmd/build/detect/util.ts +104 -0
  139. package/src/cmd/build/index.ts +64 -24
  140. package/src/cmd/build/package/index.ts +66 -0
  141. package/src/cmd/build/package/launch.ts +104 -0
  142. package/src/cmd/build/typecheck.ts +9 -0
  143. package/src/cmd/cloud/deploy.ts +86 -13
  144. package/src/cmd/coder/create.ts +24 -1
  145. package/src/cmd/coder/index.ts +4 -0
  146. package/src/cmd/coder/start.ts +60 -1
  147. package/src/cmd/coder/update.ts +18 -1
  148. package/src/cmd/coder/workspace/create.ts +20 -2
  149. package/src/cmd/coder/workspace/list.ts +2 -2
  150. package/src/cmd/dev/index.ts +155 -1059
  151. package/src/cmd/project/auth/shared.ts +14 -39
  152. package/src/cmd/project/create.ts +14 -19
  153. package/src/cmd/project/frameworks-ai-examples.ts +166 -0
  154. package/src/cmd/project/frameworks-landing-pages.ts +267 -0
  155. package/src/cmd/project/frameworks.ts +223 -0
  156. package/src/cmd/project/reconcile.ts +10 -22
  157. package/src/cmd/project/remote-import.ts +1 -1
  158. package/src/cmd/project/scaffold.ts +300 -0
  159. package/src/cmd/project/template-flow.ts +102 -156
  160. package/src/deploy-metadata.ts +253 -0
  161. package/src/index.ts +0 -2
  162. package/src/types.ts +0 -31
  163. package/dist/agents-docs.d.ts +0 -23
  164. package/dist/agents-docs.d.ts.map +0 -1
  165. package/dist/agents-docs.js +0 -56
  166. package/dist/agents-docs.js.map +0 -1
  167. package/dist/cmd/ai/prompt/agent.d.ts +0 -10
  168. package/dist/cmd/ai/prompt/agent.d.ts.map +0 -1
  169. package/dist/cmd/ai/prompt/agent.js +0 -28
  170. package/dist/cmd/ai/prompt/agent.js.map +0 -1
  171. package/dist/cmd/build/app-router-detector.d.ts +0 -39
  172. package/dist/cmd/build/app-router-detector.d.ts.map +0 -1
  173. package/dist/cmd/build/app-router-detector.js +0 -229
  174. package/dist/cmd/build/app-router-detector.js.map +0 -1
  175. package/dist/cmd/build/format-schema.d.ts +0 -6
  176. package/dist/cmd/build/format-schema.d.ts.map +0 -1
  177. package/dist/cmd/build/format-schema.js +0 -60
  178. package/dist/cmd/build/format-schema.js.map +0 -1
  179. package/dist/cmd/build/vite/agent-discovery.d.ts +0 -37
  180. package/dist/cmd/build/vite/agent-discovery.d.ts.map +0 -1
  181. package/dist/cmd/build/vite/agent-discovery.js +0 -263
  182. package/dist/cmd/build/vite/agent-discovery.js.map +0 -1
  183. package/dist/cmd/build/vite/beacon-plugin.d.ts +0 -19
  184. package/dist/cmd/build/vite/beacon-plugin.d.ts.map +0 -1
  185. package/dist/cmd/build/vite/beacon-plugin.js +0 -137
  186. package/dist/cmd/build/vite/beacon-plugin.js.map +0 -1
  187. package/dist/cmd/build/vite/browser-env-plugin.d.ts +0 -9
  188. package/dist/cmd/build/vite/browser-env-plugin.d.ts.map +0 -1
  189. package/dist/cmd/build/vite/browser-env-plugin.js +0 -28
  190. package/dist/cmd/build/vite/browser-env-plugin.js.map +0 -1
  191. package/dist/cmd/build/vite/bun-dev-server.d.ts +0 -67
  192. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +0 -1
  193. package/dist/cmd/build/vite/bun-dev-server.js +0 -340
  194. package/dist/cmd/build/vite/bun-dev-server.js.map +0 -1
  195. package/dist/cmd/build/vite/bundle-files.d.ts +0 -12
  196. package/dist/cmd/build/vite/bundle-files.d.ts.map +0 -1
  197. package/dist/cmd/build/vite/bundle-files.js +0 -107
  198. package/dist/cmd/build/vite/bundle-files.js.map +0 -1
  199. package/dist/cmd/build/vite/config-loader.d.ts +0 -29
  200. package/dist/cmd/build/vite/config-loader.d.ts.map +0 -1
  201. package/dist/cmd/build/vite/config-loader.js +0 -57
  202. package/dist/cmd/build/vite/config-loader.js.map +0 -1
  203. package/dist/cmd/build/vite/db-rewrite.d.ts +0 -50
  204. package/dist/cmd/build/vite/db-rewrite.d.ts.map +0 -1
  205. package/dist/cmd/build/vite/db-rewrite.js +0 -169
  206. package/dist/cmd/build/vite/db-rewrite.js.map +0 -1
  207. package/dist/cmd/build/vite/docs-generator.d.ts +0 -13
  208. package/dist/cmd/build/vite/docs-generator.d.ts.map +0 -1
  209. package/dist/cmd/build/vite/docs-generator.js +0 -97
  210. package/dist/cmd/build/vite/docs-generator.js.map +0 -1
  211. package/dist/cmd/build/vite/env-types-generator.d.ts +0 -26
  212. package/dist/cmd/build/vite/env-types-generator.d.ts.map +0 -1
  213. package/dist/cmd/build/vite/env-types-generator.js +0 -110
  214. package/dist/cmd/build/vite/env-types-generator.js.map +0 -1
  215. package/dist/cmd/build/vite/index.d.ts +0 -3
  216. package/dist/cmd/build/vite/index.d.ts.map +0 -1
  217. package/dist/cmd/build/vite/index.js +0 -4
  218. package/dist/cmd/build/vite/index.js.map +0 -1
  219. package/dist/cmd/build/vite/lifecycle-generator.d.ts +0 -19
  220. package/dist/cmd/build/vite/lifecycle-generator.d.ts.map +0 -1
  221. package/dist/cmd/build/vite/lifecycle-generator.js +0 -328
  222. package/dist/cmd/build/vite/lifecycle-generator.js.map +0 -1
  223. package/dist/cmd/build/vite/metadata-generator.d.ts +0 -36
  224. package/dist/cmd/build/vite/metadata-generator.d.ts.map +0 -1
  225. package/dist/cmd/build/vite/metadata-generator.js +0 -575
  226. package/dist/cmd/build/vite/metadata-generator.js.map +0 -1
  227. package/dist/cmd/build/vite/prompt-generator.d.ts +0 -23
  228. package/dist/cmd/build/vite/prompt-generator.d.ts.map +0 -1
  229. package/dist/cmd/build/vite/prompt-generator.js +0 -123
  230. package/dist/cmd/build/vite/prompt-generator.js.map +0 -1
  231. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts +0 -45
  232. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +0 -1
  233. package/dist/cmd/build/vite/public-asset-path-plugin.js +0 -166
  234. package/dist/cmd/build/vite/public-asset-path-plugin.js.map +0 -1
  235. package/dist/cmd/build/vite/route-discovery.d.ts +0 -64
  236. package/dist/cmd/build/vite/route-discovery.d.ts.map +0 -1
  237. package/dist/cmd/build/vite/route-discovery.js +0 -187
  238. package/dist/cmd/build/vite/route-discovery.js.map +0 -1
  239. package/dist/cmd/build/vite/server-bundler.d.ts +0 -20
  240. package/dist/cmd/build/vite/server-bundler.d.ts.map +0 -1
  241. package/dist/cmd/build/vite/server-bundler.js +0 -388
  242. package/dist/cmd/build/vite/server-bundler.js.map +0 -1
  243. package/dist/cmd/build/vite/static-renderer.d.ts +0 -26
  244. package/dist/cmd/build/vite/static-renderer.d.ts.map +0 -1
  245. package/dist/cmd/build/vite/static-renderer.js +0 -188
  246. package/dist/cmd/build/vite/static-renderer.js.map +0 -1
  247. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +0 -15
  248. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +0 -1
  249. package/dist/cmd/build/vite/tailwind-source-plugin.js +0 -61
  250. package/dist/cmd/build/vite/tailwind-source-plugin.js.map +0 -1
  251. package/dist/cmd/build/vite/vite-asset-server-config.d.ts +0 -24
  252. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +0 -1
  253. package/dist/cmd/build/vite/vite-asset-server-config.js +0 -285
  254. package/dist/cmd/build/vite/vite-asset-server-config.js.map +0 -1
  255. package/dist/cmd/build/vite/vite-asset-server.d.ts +0 -30
  256. package/dist/cmd/build/vite/vite-asset-server.d.ts.map +0 -1
  257. package/dist/cmd/build/vite/vite-asset-server.js +0 -109
  258. package/dist/cmd/build/vite/vite-asset-server.js.map +0 -1
  259. package/dist/cmd/build/vite/vite-builder.d.ts +0 -59
  260. package/dist/cmd/build/vite/vite-builder.d.ts.map +0 -1
  261. package/dist/cmd/build/vite/vite-builder.js +0 -401
  262. package/dist/cmd/build/vite/vite-builder.js.map +0 -1
  263. package/dist/cmd/build/vite/workbench-generator.d.ts +0 -10
  264. package/dist/cmd/build/vite/workbench-generator.d.ts.map +0 -1
  265. package/dist/cmd/build/vite/workbench-generator.js +0 -135
  266. package/dist/cmd/build/vite/workbench-generator.js.map +0 -1
  267. package/dist/cmd/build/vite/ws-proxy.d.ts +0 -53
  268. package/dist/cmd/build/vite/ws-proxy.d.ts.map +0 -1
  269. package/dist/cmd/build/vite/ws-proxy.js +0 -95
  270. package/dist/cmd/build/vite/ws-proxy.js.map +0 -1
  271. package/dist/cmd/build/vite-bundler.d.ts +0 -29
  272. package/dist/cmd/build/vite-bundler.d.ts.map +0 -1
  273. package/dist/cmd/build/vite-bundler.js +0 -93
  274. package/dist/cmd/build/vite-bundler.js.map +0 -1
  275. package/dist/cmd/dev/agents.d.ts +0 -2
  276. package/dist/cmd/dev/agents.d.ts.map +0 -1
  277. package/dist/cmd/dev/agents.js +0 -123
  278. package/dist/cmd/dev/agents.js.map +0 -1
  279. package/dist/cmd/dev/api.d.ts +0 -20
  280. package/dist/cmd/dev/api.d.ts.map +0 -1
  281. package/dist/cmd/dev/api.js +0 -42
  282. package/dist/cmd/dev/api.js.map +0 -1
  283. package/dist/cmd/dev/dev-lock.d.ts +0 -62
  284. package/dist/cmd/dev/dev-lock.d.ts.map +0 -1
  285. package/dist/cmd/dev/dev-lock.js +0 -250
  286. package/dist/cmd/dev/dev-lock.js.map +0 -1
  287. package/dist/cmd/dev/download.d.ts +0 -11
  288. package/dist/cmd/dev/download.d.ts.map +0 -1
  289. package/dist/cmd/dev/download.js +0 -94
  290. package/dist/cmd/dev/download.js.map +0 -1
  291. package/dist/cmd/dev/file-watcher.d.ts +0 -24
  292. package/dist/cmd/dev/file-watcher.d.ts.map +0 -1
  293. package/dist/cmd/dev/file-watcher.js +0 -349
  294. package/dist/cmd/dev/file-watcher.js.map +0 -1
  295. package/dist/cmd/dev/process-manager.d.ts +0 -104
  296. package/dist/cmd/dev/process-manager.d.ts.map +0 -1
  297. package/dist/cmd/dev/process-manager.js +0 -204
  298. package/dist/cmd/dev/process-manager.js.map +0 -1
  299. package/dist/cmd/dev/sync.d.ts +0 -12
  300. package/dist/cmd/dev/sync.d.ts.map +0 -1
  301. package/dist/cmd/dev/sync.js +0 -227
  302. package/dist/cmd/dev/sync.js.map +0 -1
  303. package/dist/cmd/dev/templates.d.ts +0 -3
  304. package/dist/cmd/dev/templates.d.ts.map +0 -1
  305. package/dist/cmd/dev/templates.js +0 -58
  306. package/dist/cmd/dev/templates.js.map +0 -1
  307. package/dist/cmd/project/download.d.ts +0 -35
  308. package/dist/cmd/project/download.d.ts.map +0 -1
  309. package/dist/cmd/project/download.js +0 -403
  310. package/dist/cmd/project/download.js.map +0 -1
  311. package/dist/cmd/project/templates.d.ts +0 -9
  312. package/dist/cmd/project/templates.d.ts.map +0 -1
  313. package/dist/cmd/project/templates.js +0 -34
  314. package/dist/cmd/project/templates.js.map +0 -1
  315. package/src/agents-docs.ts +0 -86
  316. package/src/cmd/ai/prompt/agent.md +0 -305
  317. package/src/cmd/ai/prompt/agent.ts +0 -31
  318. package/src/cmd/build/app-router-detector.ts +0 -320
  319. package/src/cmd/build/format-schema.ts +0 -66
  320. package/src/cmd/build/vite/agent-discovery.ts +0 -380
  321. package/src/cmd/build/vite/beacon-plugin.ts +0 -164
  322. package/src/cmd/build/vite/browser-env-plugin.ts +0 -34
  323. package/src/cmd/build/vite/bun-dev-server.ts +0 -458
  324. package/src/cmd/build/vite/bundle-files.ts +0 -135
  325. package/src/cmd/build/vite/config-loader.ts +0 -76
  326. package/src/cmd/build/vite/db-rewrite.ts +0 -189
  327. package/src/cmd/build/vite/docs-generator.ts +0 -103
  328. package/src/cmd/build/vite/env-types-generator.ts +0 -145
  329. package/src/cmd/build/vite/index.ts +0 -3
  330. package/src/cmd/build/vite/lifecycle-generator.ts +0 -381
  331. package/src/cmd/build/vite/metadata-generator.ts +0 -713
  332. package/src/cmd/build/vite/prompt-generator.ts +0 -169
  333. package/src/cmd/build/vite/public-asset-path-plugin.ts +0 -209
  334. package/src/cmd/build/vite/route-discovery.ts +0 -271
  335. package/src/cmd/build/vite/server-bundler.ts +0 -481
  336. package/src/cmd/build/vite/static-renderer.ts +0 -239
  337. package/src/cmd/build/vite/tailwind-source-plugin.ts +0 -73
  338. package/src/cmd/build/vite/vite-asset-server-config.ts +0 -349
  339. package/src/cmd/build/vite/vite-asset-server.ts +0 -154
  340. package/src/cmd/build/vite/vite-builder.ts +0 -503
  341. package/src/cmd/build/vite/workbench-generator.ts +0 -152
  342. package/src/cmd/build/vite/ws-proxy.ts +0 -126
  343. package/src/cmd/build/vite-bundler.ts +0 -137
  344. package/src/cmd/dev/agents.ts +0 -140
  345. package/src/cmd/dev/api.ts +0 -65
  346. package/src/cmd/dev/dev-lock.ts +0 -332
  347. package/src/cmd/dev/download.ts +0 -117
  348. package/src/cmd/dev/file-watcher.ts +0 -423
  349. package/src/cmd/dev/process-manager.ts +0 -261
  350. package/src/cmd/dev/sync.ts +0 -411
  351. package/src/cmd/dev/templates.ts +0 -66
  352. package/src/cmd/project/download.ts +0 -505
  353. package/src/cmd/project/templates.ts +0 -56
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Project creation flow — framework-first scaffolding.
3
+ *
4
+ * Instead of custom Agentuity templates, the user picks a framework
5
+ * and we run its official create CLI, then augment with Agentuity integration.
6
+ */
1
7
  import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
2
8
  import { homedir } from 'node:os';
3
9
  import { basename, resolve } from 'node:path';
@@ -12,28 +18,12 @@ import * as tui from '../../tui';
12
18
  import { createPrompt, note } from '../../tui';
13
19
  import { getGithubBotIdentity } from '../git/api';
14
20
  import { ensureAuthDependencies, generateAuthFileContent, generateAuthSchemaSql, printIntegrationExamples, runAuthMigrations, } from './auth/shared';
15
- import { downloadTemplate, initGitRepo, setupProject } from './download';
16
- import { fetchTemplates } from './templates';
21
+ import { scaffoldFramework, setupProject, initGitRepo } from './scaffold';
22
+ import { frameworkCatalog } from './frameworks';
17
23
  export async function runCreateFlow(options) {
18
- const { projectName: initialProjectName, dir: targetDir, template: initialTemplate, templateDir, templateBranch, skipPrompts, logger, auth, config, orgId: selectedOrgId, region, apiClient, domains, database: databaseOption, storage: storageOption, enableAuth: enableAuthOption, } = options;
24
+ const { projectName: initialProjectName, dir: targetDir, framework: initialFramework, skipPrompts, logger, auth, config, orgId: selectedOrgId, region, apiClient, domains, database: databaseOption, storage: storageOption, enableAuth: enableAuthOption, } = options;
19
25
  const isHeadless = !process.stdin.isTTY || !process.stdout.isTTY;
20
26
  const isInteractive = !skipPrompts && !isHeadless;
21
- // Fetch available templates
22
- if (templateDir) {
23
- tui.info(`📋 Loading templates from local directory: ${templateDir}...\n`);
24
- }
25
- const templates = await tui.spinner({
26
- message: 'Fetching templates',
27
- clearOnSuccess: true,
28
- callback: async () => {
29
- return fetchTemplates(logger, templateDir, templateBranch);
30
- },
31
- });
32
- if (templates.length === 0) {
33
- logger.fatal('No templates available', ErrorCode.RESOURCE_NOT_FOUND);
34
- }
35
- // Get project name
36
- let projectName = initialProjectName;
37
27
  // Organization is now automatically selected by the CLI framework via optional: { org: true }
38
28
  const orgId = selectedOrgId;
39
29
  let catalystClient;
@@ -47,6 +37,8 @@ export async function runCreateFlow(options) {
47
37
  if (isInteractive) {
48
38
  prompt.intro('Create Agentuity Project');
49
39
  }
40
+ // Step 1: Get project name
41
+ let projectName = initialProjectName;
50
42
  if (!projectName && isInteractive) {
51
43
  projectName = await prompt.text({
52
44
  message: 'What is the name of your project?',
@@ -69,11 +61,10 @@ export async function runCreateFlow(options) {
69
61
  },
70
62
  });
71
63
  }
72
- projectName = projectName || 'My First Agent';
64
+ projectName = projectName || 'My First App';
73
65
  // Generate disk-friendly directory name
74
66
  const dirName = projectName === '.' ? '.' : sanitizeDirectoryName(projectName);
75
67
  // Determine destination directory
76
- // Expand ~ to home directory
77
68
  let expandedTargetDir = targetDir;
78
69
  if (expandedTargetDir?.startsWith('~')) {
79
70
  expandedTargetDir = expandedTargetDir.replace(/^~/, homedir());
@@ -84,7 +75,6 @@ export async function runCreateFlow(options) {
84
75
  const destIsDir = destExists ? statSync(dest).isDirectory() : false;
85
76
  const destEmpty = destIsDir ? readdirSync(dest).length === 0 : !destExists;
86
77
  if (destExists && !destEmpty && dirName !== '.') {
87
- // In interactive mode, ask if they want to overwrite
88
78
  if (isInteractive) {
89
79
  tui.warning(`Directory ${dest} already exists and is not empty.`, true);
90
80
  console.log(tui.tuiColors.secondary('│'));
@@ -96,7 +86,6 @@ export async function runCreateFlow(options) {
96
86
  tui.info('Operation cancelled');
97
87
  process.exit(0);
98
88
  }
99
- // Extra safety: refuse to delete root or home directories
100
89
  const home = homedir();
101
90
  if (dest === '/' || dest === home) {
102
91
  logger.fatal(`Refusing to delete protected path: ${dest}`, ErrorCode.VALIDATION_FAILED);
@@ -110,87 +99,93 @@ export async function runCreateFlow(options) {
110
99
  logger.fatal(`Directory ${dest} already exists and is not empty.`, ErrorCode.RESOURCE_ALREADY_EXISTS);
111
100
  }
112
101
  }
113
- // Step 5: Select template
114
- let selectedTemplate;
115
- if (initialTemplate) {
116
- const found = templates.find((t) => t.id === initialTemplate);
102
+ // Step 2: Select framework
103
+ let selectedFramework;
104
+ if (initialFramework) {
105
+ const found = frameworkCatalog.find((f) => f.slug === initialFramework);
117
106
  if (!found) {
118
- const availableTemplates = templates
119
- .map((t) => ` - ${t.id.padEnd(20)} ${t.description}`)
107
+ const available = frameworkCatalog
108
+ .map((f) => ` - ${f.slug.padEnd(15)} ${f.description}`)
120
109
  .join('\n');
121
- logger.fatal(`Template "${initialTemplate}" not found\n\nAvailable templates:\n${availableTemplates}`, ErrorCode.RESOURCE_NOT_FOUND);
110
+ logger.fatal(`Framework "${initialFramework}" not found\n\nAvailable frameworks:\n${available}`, ErrorCode.RESOURCE_NOT_FOUND);
122
111
  return undefined;
123
112
  }
124
- selectedTemplate = found;
113
+ selectedFramework = found;
125
114
  }
126
- else if (!isInteractive || templates.length === 1) {
127
- const firstTemplate = templates[0];
128
- if (!firstTemplate) {
129
- logger.fatal('No templates available', ErrorCode.RESOURCE_NOT_FOUND);
115
+ else if (!isInteractive || frameworkCatalog.length === 1) {
116
+ const firstFramework = frameworkCatalog[0];
117
+ if (!firstFramework) {
118
+ logger.fatal('No frameworks available', ErrorCode.RESOURCE_NOT_FOUND);
130
119
  return undefined;
131
120
  }
132
- selectedTemplate = firstTemplate;
121
+ selectedFramework = firstFramework;
133
122
  }
134
123
  else {
135
124
  let maxLength = 15;
136
- templates.forEach((t) => {
137
- if (maxLength < t.name.length) {
138
- maxLength = t.name.length;
125
+ frameworkCatalog.forEach((f) => {
126
+ if (maxLength < f.name.length) {
127
+ maxLength = f.name.length;
139
128
  }
140
129
  });
141
130
  maxLength = Math.min(maxLength + 1, 40);
142
131
  const [_winWidth] = process.stdout.getWindowSize();
143
- const winWidth = _winWidth - maxLength - 8; // space for the name and left indent
144
- const templateId = await prompt.select({
145
- message: 'Select a template:',
146
- options: templates.map((t) => ({
147
- value: t.id,
148
- label: t.name.padEnd(maxLength),
149
- hint: t.description.length > winWidth
150
- ? t.description.substring(0, winWidth - 3) + '...'
151
- : t.description,
132
+ const winWidth = _winWidth - maxLength - 8;
133
+ const frameworkId = await prompt.select({
134
+ message: 'Select a framework:',
135
+ options: frameworkCatalog.map((f) => ({
136
+ value: f.slug,
137
+ label: f.name.padEnd(maxLength),
138
+ hint: f.description.length > winWidth
139
+ ? f.description.substring(0, winWidth - 3) + '...'
140
+ : f.description,
152
141
  })),
153
142
  });
154
- const found = templates.find((t) => t.id === templateId);
143
+ const found = frameworkCatalog.find((f) => f.slug === frameworkId);
155
144
  if (!found) {
156
- logger.fatal('Template selection failed', ErrorCode.USER_CANCELLED);
145
+ logger.fatal('Framework selection failed', ErrorCode.USER_CANCELLED);
157
146
  return undefined;
158
147
  }
159
- selectedTemplate = found;
148
+ selectedFramework = found;
149
+ }
150
+ // Step 3: Ask about AI example
151
+ let includeAiExample = true;
152
+ if (isInteractive && selectedFramework.aiExample) {
153
+ includeAiExample = await prompt.confirm({
154
+ message: 'Include an AI example? (OpenAI API route)',
155
+ initial: true,
156
+ });
160
157
  }
161
- // Download template
162
- await downloadTemplate({
158
+ // Step 4: Scaffold the framework
159
+ await scaffoldFramework({
163
160
  dest,
164
- template: selectedTemplate,
165
- templateDir,
166
- templateBranch,
161
+ dirName,
162
+ framework: selectedFramework,
163
+ includeAiExample,
167
164
  logger,
168
165
  });
169
- // Setup project (replace placeholders, install deps, build)
166
+ // Step 5: Setup project (install deps)
170
167
  const setupResult = await setupProject({
171
168
  dest,
172
169
  projectName: projectName === '.' ? basename(dest) : projectName,
173
- dirName: dirName === '.' ? basename(dest) : dirName,
174
170
  noInstall: options.noInstall,
175
- noBuild: options.noBuild,
176
171
  logger,
177
172
  });
178
- // If setup failed, skip resource prompts and registration - just show error and return
173
+ // If setup failed, skip resource prompts and registration
179
174
  if (!setupResult.success) {
180
175
  tui.warning('Project setup failed. Skipping resource configuration.');
181
176
  return {
182
177
  name: projectName,
183
178
  path: dest,
184
- template: selectedTemplate.id,
179
+ framework: selectedFramework.slug,
185
180
  installed: !options.noInstall,
186
181
  built: false,
187
182
  success: false,
188
183
  error: 'Project setup completed with errors',
189
184
  };
190
185
  }
191
- // Add separator bar if we're going to show resource prompts
186
+ // ─── Resource provisioning (DB, storage, auth, DNS) ─────────────────────
187
+ // This section is unchanged from the original flow.
192
188
  const canProvision = auth && apiClient && catalystClient && orgId && region;
193
- // Only count as resource flags if actually requesting provisioning (not explicit skip)
194
189
  const hasResourceFlags = (databaseOption !== undefined && databaseOption.toLowerCase() !== 'skip') ||
195
190
  (storageOption !== undefined && storageOption.toLowerCase() !== 'skip');
196
191
  if (isInteractive && canProvision) {
@@ -199,18 +194,15 @@ export async function runCreateFlow(options) {
199
194
  }
200
195
  let _domains = domains;
201
196
  const resourceEnvVars = {};
202
- // Validate that resource flags require authentication and registration
203
197
  if (hasResourceFlags && !canProvision) {
204
198
  logger.fatal('Cannot provision database/storage without being authenticated and registering the project.\n' +
205
199
  'Remove --no-register or omit --database/--storage flags.', ErrorCode.VALIDATION_FAILED);
206
200
  }
207
- // Validate that --enable-auth requires authentication and registration
208
201
  if (enableAuthOption && !canProvision) {
209
202
  logger.fatal('Cannot enable Agentuity Auth without being authenticated and registering the project.\n' +
210
203
  'Remove --no-register or omit --enable-auth flag.', ErrorCode.VALIDATION_FAILED);
211
204
  }
212
205
  if (canProvision) {
213
- // Fetch resources for selected org and region using Catalyst API (needed for both interactive and CLI flags)
214
206
  let resources;
215
207
  const needResources = isInteractive ||
216
208
  (databaseOption && databaseOption !== 'skip' && databaseOption !== 'new') ||
@@ -223,15 +215,11 @@ export async function runCreateFlow(options) {
223
215
  return listResources(catalystClient, orgId, region);
224
216
  },
225
217
  });
226
- // Log sanitized summary (avoid exposing DATABASE_URL, tokens, secrets)
227
218
  logger.debug(`Resources for org ${orgId} in region ${region}: ${resources.db.length} databases, ${resources.s3.length} storage buckets`);
228
- logger.debug(`Database names: ${resources.db.map((d) => d.name).join(', ') || '(none)'}`);
229
- logger.debug(`Storage buckets: ${resources.s3.map((b) => b.bucket_name).join(', ') || '(none)'}`);
230
219
  }
231
- // Determine database action: CLI flag > interactive prompt > skip (headless)
220
+ // Database action
232
221
  let db_action;
233
222
  if (databaseOption !== undefined) {
234
- // CLI flag provided - normalize to expected values
235
223
  if (databaseOption.toLowerCase() === 'new') {
236
224
  db_action = 'Create New';
237
225
  }
@@ -239,7 +227,6 @@ export async function runCreateFlow(options) {
239
227
  db_action = 'Skip';
240
228
  }
241
229
  else {
242
- // Existing database name - validate it exists
243
230
  const existingDb = resources?.db.find((d) => d.name === databaseOption);
244
231
  if (!existingDb) {
245
232
  logger.fatal(`Database '${databaseOption}' not found. Use 'new' to create a new database or 'skip' to skip.`, ErrorCode.RESOURCE_NOT_FOUND);
@@ -261,13 +248,11 @@ export async function runCreateFlow(options) {
261
248
  });
262
249
  }
263
250
  else {
264
- // Headless without flag - skip
265
251
  db_action = 'Skip';
266
252
  }
267
- // Determine storage action: CLI flag > interactive prompt > skip (headless)
253
+ // Storage action
268
254
  let s3_action;
269
255
  if (storageOption !== undefined) {
270
- // CLI flag provided - normalize to expected values
271
256
  if (storageOption.toLowerCase() === 'new') {
272
257
  s3_action = 'Create New';
273
258
  }
@@ -275,7 +260,6 @@ export async function runCreateFlow(options) {
275
260
  s3_action = 'Skip';
276
261
  }
277
262
  else {
278
- // Existing bucket name - validate it exists
279
263
  const existingBucket = resources?.s3.find((b) => b.bucket_name === storageOption);
280
264
  if (!existingBucket) {
281
265
  logger.fatal(`Storage bucket '${storageOption}' not found. Use 'new' to create a new bucket or 'skip' to skip.`, ErrorCode.RESOURCE_NOT_FOUND);
@@ -297,10 +281,9 @@ export async function runCreateFlow(options) {
297
281
  });
298
282
  }
299
283
  else {
300
- // Headless without flag - skip
301
284
  s3_action = 'Skip';
302
285
  }
303
- // Custom DNS: only prompt in interactive mode if not already provided
286
+ // Custom DNS
304
287
  if (!domains?.length && isInteractive) {
305
288
  const customDns = await prompt.text({
306
289
  message: 'Setup custom DNS?',
@@ -313,12 +296,11 @@ export async function runCreateFlow(options) {
313
296
  _domains = [customDns];
314
297
  }
315
298
  }
316
- // Process storage action
299
+ // Process storage
317
300
  switch (s3_action) {
318
301
  case 'Create New': {
319
302
  let bucketName;
320
303
  let bucketDescription;
321
- // Only prompt for name/description in interactive mode
322
304
  if (isInteractive) {
323
305
  const bucketNameInput = await prompt.text({
324
306
  message: 'Bucket name',
@@ -351,17 +333,14 @@ export async function runCreateFlow(options) {
351
333
  ]);
352
334
  },
353
335
  });
354
- // Collect env vars from newly created resource
355
336
  if (created[0]?.env) {
356
337
  Object.assign(resourceEnvVars, created[0].env);
357
338
  }
358
339
  break;
359
340
  }
360
- case 'Skip': {
341
+ case 'Skip':
361
342
  break;
362
- }
363
343
  default: {
364
- // User selected an existing bucket - get env vars from the resources list
365
344
  const selectedBucket = resources?.s3.find((b) => b.bucket_name === s3_action);
366
345
  if (selectedBucket?.env) {
367
346
  Object.assign(resourceEnvVars, selectedBucket.env);
@@ -369,12 +348,11 @@ export async function runCreateFlow(options) {
369
348
  break;
370
349
  }
371
350
  }
372
- // Process database action
351
+ // Process database
373
352
  switch (db_action) {
374
353
  case 'Create New': {
375
354
  let dbName;
376
355
  let dbDescription;
377
- // Only prompt for name/description in interactive mode
378
356
  if (isInteractive) {
379
357
  const dbNameInput = await prompt.text({
380
358
  message: 'Database name',
@@ -407,17 +385,14 @@ export async function runCreateFlow(options) {
407
385
  ]);
408
386
  },
409
387
  });
410
- // Collect env vars from newly created resource
411
388
  if (created[0]?.env) {
412
389
  Object.assign(resourceEnvVars, created[0].env);
413
390
  }
414
391
  break;
415
392
  }
416
- case 'Skip': {
393
+ case 'Skip':
417
394
  break;
418
- }
419
395
  default: {
420
- // User selected an existing database - get env vars from the resources list
421
396
  const selectedDb = resources?.db.find((d) => d.name === db_action);
422
397
  if (selectedDb?.env) {
423
398
  Object.assign(resourceEnvVars, selectedDb.env);
@@ -426,18 +401,14 @@ export async function runCreateFlow(options) {
426
401
  }
427
402
  }
428
403
  }
429
- // Auth setup - either from template, CLI flag, or user choice
430
- const templateHasAuth = selectedTemplate.id === 'agentuity-auth';
431
- let authEnabled = templateHasAuth; // Auth templates have auth enabled by default
404
+ // ─── Auth setup ─────────────────────────────────────────────────────────
405
+ let authEnabled = false;
432
406
  let authDatabaseName;
433
407
  let authDatabaseUrl;
434
- // Handle auth enablement: CLI flag > interactive prompt > disabled (headless)
435
408
  if (enableAuthOption !== undefined) {
436
- // CLI flag provided
437
409
  authEnabled = enableAuthOption;
438
410
  }
439
- else if (canProvision && isInteractive && !templateHasAuth) {
440
- // For non-auth templates in interactive mode, ask if they want to enable auth
411
+ else if (canProvision && isInteractive) {
441
412
  const enableAuth = await prompt.select({
442
413
  message: 'Enable Agentuity Authentication?',
443
414
  options: [
@@ -449,27 +420,21 @@ export async function runCreateFlow(options) {
449
420
  authEnabled = true;
450
421
  }
451
422
  }
452
- // In headless mode without --enable-auth flag, authEnabled stays false (unless template has auth)
453
- // Set up database and secret for any auth-enabled project
454
423
  if (authEnabled && canProvision) {
455
- // If a database was already selected/created above, use it for auth
456
424
  if (resourceEnvVars.DATABASE_URL) {
457
425
  authDatabaseUrl = resourceEnvVars.DATABASE_URL;
458
- // Extract database name from URL using proper URL parsing
459
426
  try {
460
427
  const dbUrl = new URL(authDatabaseUrl);
461
- const dbName = dbUrl.pathname.replace(/^\/+/, ''); // Remove leading slashes
462
- // Validate: non-empty and contains only safe characters
428
+ const dbName = dbUrl.pathname.replace(/^\/+/, '');
463
429
  if (dbName && /^[A-Za-z0-9_-]+$/.test(dbName)) {
464
430
  authDatabaseName = dbName;
465
431
  }
466
432
  }
467
433
  catch {
468
- // Invalid URL format, authDatabaseName stays undefined
434
+ // Invalid URL format
469
435
  }
470
436
  }
471
437
  else {
472
- // No database selected yet, create one for auth
473
438
  const created = await tui.spinner({
474
439
  message: 'Provisioning database for auth',
475
440
  clearOnSuccess: true,
@@ -483,30 +448,23 @@ export async function runCreateFlow(options) {
483
448
  return undefined;
484
449
  }
485
450
  authDatabaseName = createdDb.name;
486
- // Get env vars from created resource
487
451
  if (createdDb.env) {
488
452
  authDatabaseUrl = createdDb.env.DATABASE_URL;
489
- // Also add to resourceEnvVars if not already set
490
453
  if (!resourceEnvVars.DATABASE_URL) {
491
454
  Object.assign(resourceEnvVars, createdDb.env);
492
455
  }
493
456
  }
494
457
  }
495
- // Install auth dependencies (skip for agentuity-auth template which has them)
496
- if (!templateHasAuth) {
497
- await ensureAuthDependencies({ projectDir: dest, logger });
498
- // Generate auth.ts
499
- const authFilePath = resolve(dest, 'src', 'auth.ts');
500
- if (!existsSync(authFilePath)) {
501
- const srcDir = resolve(dest, 'src');
502
- if (!existsSync(srcDir)) {
503
- await Bun.write(resolve(srcDir, '.gitkeep'), '');
504
- }
505
- await Bun.write(authFilePath, generateAuthFileContent());
506
- tui.success('Created src/auth.ts');
458
+ await ensureAuthDependencies({ projectDir: dest, logger });
459
+ const authFilePath = resolve(dest, 'src', 'auth.ts');
460
+ if (!existsSync(authFilePath)) {
461
+ const srcDir = resolve(dest, 'src');
462
+ if (!existsSync(srcDir)) {
463
+ await Bun.write(resolve(srcDir, '.gitkeep'), '');
507
464
  }
465
+ await Bun.write(authFilePath, generateAuthFileContent());
466
+ tui.success('Created src/auth.ts');
508
467
  }
509
- // Run migrations
510
468
  if (authDatabaseName) {
511
469
  const sql = await tui.spinner({
512
470
  message: 'Preparing auth database schema...',
@@ -524,6 +482,7 @@ export async function runCreateFlow(options) {
524
482
  });
525
483
  }
526
484
  }
485
+ // ─── Cloud registration ─────────────────────────────────────────────────
527
486
  let projectId;
528
487
  if (auth && apiClient && orgId) {
529
488
  const cloudRegion = region ?? process.env.AGENTUITY_REGION ?? 'usc';
@@ -558,15 +517,14 @@ export async function runCreateFlow(options) {
558
517
  });
559
518
  },
560
519
  });
561
- // Add auth secret to resourceEnvVars if auth is enabled
520
+ // Add auth secret
562
521
  if (authEnabled && !resourceEnvVars.AGENTUITY_AUTH_SECRET) {
563
522
  const devSecret = `dev-${crypto.randomUUID()}`;
564
523
  resourceEnvVars.AGENTUITY_AUTH_SECRET = devSecret;
565
524
  }
566
- // Write resource environment variables to .env
525
+ // Write resource env vars
567
526
  if (Object.keys(resourceEnvVars).length > 0) {
568
527
  await addResourceEnvVars(dest, resourceEnvVars);
569
- // Show user feedback for auth-related env vars
570
528
  if (authEnabled) {
571
529
  if (resourceEnvVars.DATABASE_URL) {
572
530
  tui.success('DATABASE_URL added to .env');
@@ -577,7 +535,7 @@ export async function runCreateFlow(options) {
577
535
  }
578
536
  }
579
537
  }
580
- // After registration, push any existing env/secrets from .env
538
+ // Sync env vars to cloud
581
539
  if (projectId) {
582
540
  await tui.spinner({
583
541
  message: 'Syncing environment variables',
@@ -598,14 +556,13 @@ export async function runCreateFlow(options) {
598
556
  }
599
557
  }
600
558
  catch (error) {
601
- // Non-fatal: just log the error
602
559
  logger.debug('Failed to sync environment variables:', error);
603
560
  }
604
561
  },
605
562
  });
606
563
  }
607
564
  }
608
- // Fetch GitHub App bot identity for commit authorship (if authenticated)
565
+ // ─── Git initialization ─────────────────────────────────────────────────
609
566
  let botAuthor;
610
567
  if (apiClient) {
611
568
  try {
@@ -615,13 +572,12 @@ export async function runCreateFlow(options) {
615
572
  // Non-fatal: fall back to generic Agentuity author
616
573
  }
617
574
  }
618
- // Initialize git repository after all files are generated
619
575
  await initGitRepo(dest, {
620
576
  projectName,
621
- source: `template: ${selectedTemplate.name}`,
577
+ source: `framework: ${selectedFramework.name}`,
622
578
  author: botAuthor,
623
579
  });
624
- // Show completion message
580
+ // ─── Completion ─────────────────────────────────────────────────────────
625
581
  if (isInteractive) {
626
582
  if (setupResult.success) {
627
583
  tui.success('✨ Project created successfully!\n');
@@ -629,9 +585,7 @@ export async function runCreateFlow(options) {
629
585
  else {
630
586
  tui.warning('Project created with errors (see above)\n');
631
587
  }
632
- // Show next steps in a box with primary color for commands
633
588
  if (dirName !== '.') {
634
- // Use relative path if dest is under cwd, otherwise show full path
635
589
  const currentDir = cwd();
636
590
  const dirDisplay = dest.startsWith(currentDir) ? basename(dest) : dest;
637
591
  note(`${tui.tuiColors.primary(`cd ${dirDisplay}`)}\n${tui.tuiColors.primary('bun run dev')}`, 'Next steps');
@@ -659,8 +613,7 @@ export async function runCreateFlow(options) {
659
613
  await promptForDNS(projectId, _domains, cloudRegion, config);
660
614
  }
661
615
  }
662
- // Print auth integration examples if auth was enabled (skip for auth template - already set up)
663
- if (authEnabled && !templateHasAuth) {
616
+ if (authEnabled) {
664
617
  printIntegrationExamples();
665
618
  }
666
619
  return {
@@ -668,7 +621,7 @@ export async function runCreateFlow(options) {
668
621
  orgId,
669
622
  name: projectName,
670
623
  path: dest,
671
- template: selectedTemplate.id,
624
+ framework: selectedFramework.slug,
672
625
  installed: !options.noInstall,
673
626
  built: !options.noBuild && setupResult.success,
674
627
  domains: _domains,
@@ -678,20 +631,16 @@ export async function runCreateFlow(options) {
678
631
  }
679
632
  /**
680
633
  * Sanitize a project name to create a safe directory/package name
681
- * - Converts to lowercase
682
- * - Replaces spaces and underscores with hyphens
683
- * - Removes unsafe characters
684
- * - Ensures it starts with a letter or number
685
634
  */
686
635
  function sanitizeDirectoryName(name) {
687
636
  return name
688
637
  .toLowerCase()
689
638
  .trim()
690
- .replace(/\s+/g, '-') // Replace spaces with hyphens
691
- .replace(/_+/g, '-') // Replace underscores with hyphens
692
- .replace(/[^a-z0-9-]/g, '') // Remove non-alphanumeric except hyphens
693
- .replace(/-+/g, '-') // Collapse multiple hyphens
694
- .replace(/^-+|-+$/g, '') // Remove leading/trailing hyphens
695
- .replace(/^[^a-z0-9]+/, ''); // Remove leading non-alphanumeric
639
+ .replace(/\s+/g, '-')
640
+ .replace(/_+/g, '-')
641
+ .replace(/[^a-z0-9-]/g, '')
642
+ .replace(/-+/g, '-')
643
+ .replace(/^-+|-+$/g, '')
644
+ .replace(/^[^a-z0-9]+/, '');
696
645
  }
697
646
  //# sourceMappingURL=template-flow.js.map