@agentuity/cli 2.0.0-beta.0 → 2.0.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 (505) hide show
  1. package/bin/cli.ts +8 -1
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +12 -1
  5. package/dist/auth.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +29 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/cmd/auth/ssh/delete.js +1 -1
  10. package/dist/cmd/auth/ssh/delete.js.map +1 -1
  11. package/dist/cmd/build/app-config-extractor.d.ts +27 -0
  12. package/dist/cmd/build/app-config-extractor.d.ts.map +1 -0
  13. package/dist/cmd/build/app-config-extractor.js +152 -0
  14. package/dist/cmd/build/app-config-extractor.js.map +1 -0
  15. package/dist/cmd/build/ci.d.ts +18 -0
  16. package/dist/cmd/build/ci.d.ts.map +1 -0
  17. package/dist/cmd/build/ci.js +188 -0
  18. package/dist/cmd/build/ci.js.map +1 -0
  19. package/dist/cmd/build/index.d.ts.map +1 -1
  20. package/dist/cmd/build/index.js +50 -14
  21. package/dist/cmd/build/index.js.map +1 -1
  22. package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
  23. package/dist/cmd/build/vite/agent-discovery.js +26 -2
  24. package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
  25. package/dist/cmd/build/vite/bun-dev-server.d.ts +35 -0
  26. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  27. package/dist/cmd/build/vite/bun-dev-server.js +232 -4
  28. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  29. package/dist/cmd/build/vite/config-loader.d.ts +15 -20
  30. package/dist/cmd/build/vite/config-loader.d.ts.map +1 -1
  31. package/dist/cmd/build/vite/config-loader.js +41 -74
  32. package/dist/cmd/build/vite/config-loader.js.map +1 -1
  33. package/dist/cmd/build/vite/route-discovery.d.ts +5 -0
  34. package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
  35. package/dist/cmd/build/vite/route-discovery.js +13 -11
  36. package/dist/cmd/build/vite/route-discovery.js.map +1 -1
  37. package/dist/cmd/build/vite/static-renderer.d.ts +3 -4
  38. package/dist/cmd/build/vite/static-renderer.d.ts.map +1 -1
  39. package/dist/cmd/build/vite/static-renderer.js +28 -44
  40. package/dist/cmd/build/vite/static-renderer.js.map +1 -1
  41. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts +15 -0
  42. package/dist/cmd/build/vite/tailwind-source-plugin.d.ts.map +1 -0
  43. package/dist/cmd/build/vite/tailwind-source-plugin.js +61 -0
  44. package/dist/cmd/build/vite/tailwind-source-plugin.js.map +1 -0
  45. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  46. package/dist/cmd/build/vite/vite-asset-server-config.js +4 -48
  47. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  48. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  49. package/dist/cmd/build/vite/vite-builder.js +70 -155
  50. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  51. package/dist/cmd/cloud/agent/get.d.ts.map +1 -1
  52. package/dist/cmd/cloud/agent/get.js +1 -0
  53. package/dist/cmd/cloud/agent/get.js.map +1 -1
  54. package/dist/cmd/cloud/apikey/delete.js +1 -1
  55. package/dist/cmd/cloud/apikey/delete.js.map +1 -1
  56. package/dist/cmd/cloud/apikey/get.d.ts.map +1 -1
  57. package/dist/cmd/cloud/apikey/get.js +1 -0
  58. package/dist/cmd/cloud/apikey/get.js.map +1 -1
  59. package/dist/cmd/cloud/apikey/index.d.ts.map +1 -1
  60. package/dist/cmd/cloud/apikey/index.js +1 -0
  61. package/dist/cmd/cloud/apikey/index.js.map +1 -1
  62. package/dist/cmd/cloud/db/delete.js +1 -1
  63. package/dist/cmd/cloud/db/delete.js.map +1 -1
  64. package/dist/cmd/cloud/deploy-fork.d.ts +10 -0
  65. package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
  66. package/dist/cmd/cloud/deploy-fork.js +71 -32
  67. package/dist/cmd/cloud/deploy-fork.js.map +1 -1
  68. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  69. package/dist/cmd/cloud/deploy.js +54 -12
  70. package/dist/cmd/cloud/deploy.js.map +1 -1
  71. package/dist/cmd/cloud/deployment/remove.js +17 -17
  72. package/dist/cmd/cloud/deployment/remove.js.map +1 -1
  73. package/dist/cmd/cloud/deployment/show.js +1 -1
  74. package/dist/cmd/cloud/deployment/show.js.map +1 -1
  75. package/dist/cmd/cloud/email/create.js +1 -1
  76. package/dist/cmd/cloud/email/create.js.map +1 -1
  77. package/dist/cmd/cloud/email/delete.js +1 -1
  78. package/dist/cmd/cloud/email/delete.js.map +1 -1
  79. package/dist/cmd/cloud/email/destination/delete.js +1 -1
  80. package/dist/cmd/cloud/email/destination/delete.js.map +1 -1
  81. package/dist/cmd/cloud/email/get.d.ts.map +1 -1
  82. package/dist/cmd/cloud/email/get.js +1 -0
  83. package/dist/cmd/cloud/email/get.js.map +1 -1
  84. package/dist/cmd/cloud/email/inbound/get.d.ts.map +1 -1
  85. package/dist/cmd/cloud/email/inbound/get.js +1 -0
  86. package/dist/cmd/cloud/email/inbound/get.js.map +1 -1
  87. package/dist/cmd/cloud/email/outbound/get.d.ts.map +1 -1
  88. package/dist/cmd/cloud/email/outbound/get.js +1 -0
  89. package/dist/cmd/cloud/email/outbound/get.js.map +1 -1
  90. package/dist/cmd/cloud/env/delete.js +1 -1
  91. package/dist/cmd/cloud/env/delete.js.map +1 -1
  92. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  93. package/dist/cmd/cloud/env/get.js +1 -0
  94. package/dist/cmd/cloud/env/get.js.map +1 -1
  95. package/dist/cmd/cloud/eval/get.d.ts.map +1 -1
  96. package/dist/cmd/cloud/eval/get.js +1 -0
  97. package/dist/cmd/cloud/eval/get.js.map +1 -1
  98. package/dist/cmd/cloud/eval/index.d.ts.map +1 -1
  99. package/dist/cmd/cloud/eval/index.js +1 -0
  100. package/dist/cmd/cloud/eval/index.js.map +1 -1
  101. package/dist/cmd/cloud/eval/list.js +1 -1
  102. package/dist/cmd/cloud/eval/list.js.map +1 -1
  103. package/dist/cmd/cloud/eval-run/get.d.ts.map +1 -1
  104. package/dist/cmd/cloud/eval-run/get.js +1 -0
  105. package/dist/cmd/cloud/eval-run/get.js.map +1 -1
  106. package/dist/cmd/cloud/eval-run/index.d.ts.map +1 -1
  107. package/dist/cmd/cloud/eval-run/index.js +1 -0
  108. package/dist/cmd/cloud/eval-run/index.js.map +1 -1
  109. package/dist/cmd/cloud/eval-run/list.js +1 -1
  110. package/dist/cmd/cloud/eval-run/list.js.map +1 -1
  111. package/dist/cmd/cloud/keyvalue/delete-namespace.js +1 -1
  112. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
  113. package/dist/cmd/cloud/keyvalue/delete.js +1 -1
  114. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
  115. package/dist/cmd/cloud/keyvalue/get.d.ts.map +1 -1
  116. package/dist/cmd/cloud/keyvalue/get.js +1 -0
  117. package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
  118. package/dist/cmd/cloud/keyvalue/index.js +1 -1
  119. package/dist/cmd/cloud/keyvalue/index.js.map +1 -1
  120. package/dist/cmd/cloud/machine/delete.js +1 -1
  121. package/dist/cmd/cloud/machine/delete.js.map +1 -1
  122. package/dist/cmd/cloud/oidc/delete.js +1 -1
  123. package/dist/cmd/cloud/oidc/delete.js.map +1 -1
  124. package/dist/cmd/cloud/oidc/get.d.ts.map +1 -1
  125. package/dist/cmd/cloud/oidc/get.js +1 -0
  126. package/dist/cmd/cloud/oidc/get.js.map +1 -1
  127. package/dist/cmd/cloud/queue/create.d.ts.map +1 -1
  128. package/dist/cmd/cloud/queue/create.js +1 -0
  129. package/dist/cmd/cloud/queue/create.js.map +1 -1
  130. package/dist/cmd/cloud/queue/delete.js +1 -1
  131. package/dist/cmd/cloud/queue/delete.js.map +1 -1
  132. package/dist/cmd/cloud/queue/get.d.ts.map +1 -1
  133. package/dist/cmd/cloud/queue/get.js +1 -0
  134. package/dist/cmd/cloud/queue/get.js.map +1 -1
  135. package/dist/cmd/cloud/redis/get.js +1 -1
  136. package/dist/cmd/cloud/redis/get.js.map +1 -1
  137. package/dist/cmd/cloud/sandbox/checkpoint/create.d.ts.map +1 -1
  138. package/dist/cmd/cloud/sandbox/checkpoint/create.js +1 -0
  139. package/dist/cmd/cloud/sandbox/checkpoint/create.js.map +1 -1
  140. package/dist/cmd/cloud/sandbox/checkpoint/delete.js +1 -1
  141. package/dist/cmd/cloud/sandbox/checkpoint/delete.js.map +1 -1
  142. package/dist/cmd/cloud/sandbox/checkpoint/index.js +1 -1
  143. package/dist/cmd/cloud/sandbox/checkpoint/index.js.map +1 -1
  144. package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
  145. package/dist/cmd/cloud/sandbox/create.js +14 -0
  146. package/dist/cmd/cloud/sandbox/create.js.map +1 -1
  147. package/dist/cmd/cloud/sandbox/delete.js +1 -1
  148. package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
  149. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  150. package/dist/cmd/cloud/sandbox/exec.js +76 -66
  151. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  152. package/dist/cmd/cloud/sandbox/execution/index.js +1 -1
  153. package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -1
  154. package/dist/cmd/cloud/sandbox/execution/list.js +2 -2
  155. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -1
  156. package/dist/cmd/cloud/sandbox/fs/cp.d.ts +3 -0
  157. package/dist/cmd/cloud/sandbox/fs/cp.d.ts.map +1 -0
  158. package/dist/cmd/cloud/sandbox/{cp.js → fs/cp.js} +13 -13
  159. package/dist/cmd/cloud/sandbox/fs/cp.js.map +1 -0
  160. package/dist/cmd/cloud/sandbox/fs/download.d.ts +3 -0
  161. package/dist/cmd/cloud/sandbox/fs/download.d.ts.map +1 -0
  162. package/dist/cmd/cloud/sandbox/{download.js → fs/download.js} +7 -7
  163. package/dist/cmd/cloud/sandbox/fs/download.js.map +1 -0
  164. package/dist/cmd/cloud/sandbox/fs/index.d.ts +2 -0
  165. package/dist/cmd/cloud/sandbox/fs/index.d.ts.map +1 -0
  166. package/dist/cmd/cloud/sandbox/fs/index.js +36 -0
  167. package/dist/cmd/cloud/sandbox/fs/index.js.map +1 -0
  168. package/dist/cmd/cloud/sandbox/fs/ls.d.ts +3 -0
  169. package/dist/cmd/cloud/sandbox/fs/ls.d.ts.map +1 -0
  170. package/dist/cmd/cloud/sandbox/{ls.js → fs/ls.js} +10 -10
  171. package/dist/cmd/cloud/sandbox/fs/ls.js.map +1 -0
  172. package/dist/cmd/cloud/sandbox/fs/mkdir.d.ts +3 -0
  173. package/dist/cmd/cloud/sandbox/fs/mkdir.d.ts.map +1 -0
  174. package/dist/cmd/cloud/sandbox/{mkdir.js → fs/mkdir.js} +6 -6
  175. package/dist/cmd/cloud/sandbox/fs/mkdir.js.map +1 -0
  176. package/dist/cmd/cloud/sandbox/fs/rm.d.ts +3 -0
  177. package/dist/cmd/cloud/sandbox/fs/rm.d.ts.map +1 -0
  178. package/dist/cmd/cloud/sandbox/{rm.js → fs/rm.js} +6 -5
  179. package/dist/cmd/cloud/sandbox/fs/rm.js.map +1 -0
  180. package/dist/cmd/cloud/sandbox/fs/rmdir.d.ts +3 -0
  181. package/dist/cmd/cloud/sandbox/fs/rmdir.d.ts.map +1 -0
  182. package/dist/cmd/cloud/sandbox/{rmdir.js → fs/rmdir.js} +6 -6
  183. package/dist/cmd/cloud/sandbox/fs/rmdir.js.map +1 -0
  184. package/dist/cmd/cloud/sandbox/fs/upload.d.ts +3 -0
  185. package/dist/cmd/cloud/sandbox/fs/upload.d.ts.map +1 -0
  186. package/dist/cmd/cloud/sandbox/{upload.js → fs/upload.js} +7 -7
  187. package/dist/cmd/cloud/sandbox/fs/upload.js.map +1 -0
  188. package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
  189. package/dist/cmd/cloud/sandbox/index.js +4 -14
  190. package/dist/cmd/cloud/sandbox/index.js.map +1 -1
  191. package/dist/cmd/cloud/sandbox/job/create.d.ts +3 -0
  192. package/dist/cmd/cloud/sandbox/job/create.d.ts.map +1 -0
  193. package/dist/cmd/cloud/sandbox/job/create.js +52 -0
  194. package/dist/cmd/cloud/sandbox/job/create.js.map +1 -0
  195. package/dist/cmd/cloud/sandbox/job/destroy.d.ts +3 -0
  196. package/dist/cmd/cloud/sandbox/job/destroy.d.ts.map +1 -0
  197. package/dist/cmd/cloud/sandbox/job/destroy.js +59 -0
  198. package/dist/cmd/cloud/sandbox/job/destroy.js.map +1 -0
  199. package/dist/cmd/cloud/sandbox/job/get.d.ts +3 -0
  200. package/dist/cmd/cloud/sandbox/job/get.d.ts.map +1 -0
  201. package/dist/cmd/cloud/sandbox/job/get.js +66 -0
  202. package/dist/cmd/cloud/sandbox/job/get.js.map +1 -0
  203. package/dist/cmd/cloud/sandbox/job/index.d.ts +3 -0
  204. package/dist/cmd/cloud/sandbox/job/index.d.ts.map +1 -0
  205. package/dist/cmd/cloud/sandbox/job/index.js +41 -0
  206. package/dist/cmd/cloud/sandbox/job/index.js.map +1 -0
  207. package/dist/cmd/cloud/sandbox/job/list.d.ts +3 -0
  208. package/dist/cmd/cloud/sandbox/job/list.d.ts.map +1 -0
  209. package/dist/cmd/cloud/sandbox/job/list.js +67 -0
  210. package/dist/cmd/cloud/sandbox/job/list.js.map +1 -0
  211. package/dist/cmd/cloud/sandbox/job/logs.d.ts +3 -0
  212. package/dist/cmd/cloud/sandbox/job/logs.d.ts.map +1 -0
  213. package/dist/cmd/cloud/sandbox/job/logs.js +124 -0
  214. package/dist/cmd/cloud/sandbox/job/logs.js.map +1 -0
  215. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -1
  216. package/dist/cmd/cloud/sandbox/run.js +14 -2
  217. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  218. package/dist/cmd/cloud/sandbox/runtime/index.js +1 -1
  219. package/dist/cmd/cloud/sandbox/runtime/index.js.map +1 -1
  220. package/dist/cmd/cloud/sandbox/snapshot/build.js +2 -2
  221. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  222. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
  223. package/dist/cmd/cloud/sandbox/snapshot/create.js +1 -0
  224. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
  225. package/dist/cmd/cloud/sandbox/snapshot/delete.js +1 -1
  226. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -1
  227. package/dist/cmd/cloud/sandbox/snapshot/index.js +1 -1
  228. package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -1
  229. package/dist/cmd/cloud/schedule/create.d.ts.map +1 -1
  230. package/dist/cmd/cloud/schedule/create.js +1 -0
  231. package/dist/cmd/cloud/schedule/create.js.map +1 -1
  232. package/dist/cmd/cloud/schedule/delete.js +1 -1
  233. package/dist/cmd/cloud/schedule/delete.js.map +1 -1
  234. package/dist/cmd/cloud/schedule/delivery/get.d.ts.map +1 -1
  235. package/dist/cmd/cloud/schedule/delivery/get.js +1 -0
  236. package/dist/cmd/cloud/schedule/delivery/get.js.map +1 -1
  237. package/dist/cmd/cloud/schedule/destination/create.d.ts.map +1 -1
  238. package/dist/cmd/cloud/schedule/destination/create.js +1 -0
  239. package/dist/cmd/cloud/schedule/destination/create.js.map +1 -1
  240. package/dist/cmd/cloud/schedule/destination/delete.js +1 -1
  241. package/dist/cmd/cloud/schedule/destination/delete.js.map +1 -1
  242. package/dist/cmd/cloud/schedule/destination/get.d.ts.map +1 -1
  243. package/dist/cmd/cloud/schedule/destination/get.js +1 -0
  244. package/dist/cmd/cloud/schedule/destination/get.js.map +1 -1
  245. package/dist/cmd/cloud/schedule/get.d.ts.map +1 -1
  246. package/dist/cmd/cloud/schedule/get.js +1 -0
  247. package/dist/cmd/cloud/schedule/get.js.map +1 -1
  248. package/dist/cmd/cloud/session/get.d.ts.map +1 -1
  249. package/dist/cmd/cloud/session/get.js +1 -0
  250. package/dist/cmd/cloud/session/get.js.map +1 -1
  251. package/dist/cmd/cloud/session/index.d.ts.map +1 -1
  252. package/dist/cmd/cloud/session/index.js +1 -0
  253. package/dist/cmd/cloud/session/index.js.map +1 -1
  254. package/dist/cmd/cloud/session/list.js +1 -1
  255. package/dist/cmd/cloud/session/list.js.map +1 -1
  256. package/dist/cmd/cloud/storage/delete.js +1 -1
  257. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  258. package/dist/cmd/cloud/stream/delete.js +1 -1
  259. package/dist/cmd/cloud/stream/delete.js.map +1 -1
  260. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  261. package/dist/cmd/cloud/stream/get.js +1 -0
  262. package/dist/cmd/cloud/stream/get.js.map +1 -1
  263. package/dist/cmd/cloud/task/delete.js +1 -1
  264. package/dist/cmd/cloud/task/delete.js.map +1 -1
  265. package/dist/cmd/cloud/task/index.d.ts.map +1 -1
  266. package/dist/cmd/cloud/task/index.js +1 -0
  267. package/dist/cmd/cloud/task/index.js.map +1 -1
  268. package/dist/cmd/cloud/thread/delete.js +1 -1
  269. package/dist/cmd/cloud/thread/delete.js.map +1 -1
  270. package/dist/cmd/cloud/thread/get.d.ts.map +1 -1
  271. package/dist/cmd/cloud/thread/get.js +1 -0
  272. package/dist/cmd/cloud/thread/get.js.map +1 -1
  273. package/dist/cmd/cloud/thread/index.d.ts.map +1 -1
  274. package/dist/cmd/cloud/thread/index.js +1 -0
  275. package/dist/cmd/cloud/thread/index.js.map +1 -1
  276. package/dist/cmd/cloud/thread/list.js +1 -1
  277. package/dist/cmd/cloud/thread/list.js.map +1 -1
  278. package/dist/cmd/cloud/vector/delete-namespace.js +1 -1
  279. package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -1
  280. package/dist/cmd/cloud/vector/delete.js +1 -1
  281. package/dist/cmd/cloud/vector/delete.js.map +1 -1
  282. package/dist/cmd/cloud/vector/get.d.ts.map +1 -1
  283. package/dist/cmd/cloud/vector/get.js +1 -0
  284. package/dist/cmd/cloud/vector/get.js.map +1 -1
  285. package/dist/cmd/cloud/vector/index.js +1 -1
  286. package/dist/cmd/cloud/vector/index.js.map +1 -1
  287. package/dist/cmd/cloud/webhook/create.d.ts.map +1 -1
  288. package/dist/cmd/cloud/webhook/create.js +1 -0
  289. package/dist/cmd/cloud/webhook/create.js.map +1 -1
  290. package/dist/cmd/cloud/webhook/delete.js +1 -1
  291. package/dist/cmd/cloud/webhook/delete.js.map +1 -1
  292. package/dist/cmd/cloud/webhook/get.d.ts.map +1 -1
  293. package/dist/cmd/cloud/webhook/get.js +1 -0
  294. package/dist/cmd/cloud/webhook/get.js.map +1 -1
  295. package/dist/cmd/coder/hub-url.d.ts.map +1 -1
  296. package/dist/cmd/coder/hub-url.js +3 -1
  297. package/dist/cmd/coder/hub-url.js.map +1 -1
  298. package/dist/cmd/coder/start.js +6 -6
  299. package/dist/cmd/coder/start.js.map +1 -1
  300. package/dist/cmd/coder/tui-init.d.ts +2 -2
  301. package/dist/cmd/coder/tui-init.js +2 -2
  302. package/dist/cmd/coder/tui-init.js.map +1 -1
  303. package/dist/cmd/dev/index.d.ts.map +1 -1
  304. package/dist/cmd/dev/index.js +161 -130
  305. package/dist/cmd/dev/index.js.map +1 -1
  306. package/dist/cmd/dev/process-manager.d.ts +104 -0
  307. package/dist/cmd/dev/process-manager.d.ts.map +1 -0
  308. package/dist/cmd/dev/process-manager.js +204 -0
  309. package/dist/cmd/dev/process-manager.js.map +1 -0
  310. package/dist/cmd/git/account/remove.d.ts.map +1 -1
  311. package/dist/cmd/git/account/remove.js +1 -0
  312. package/dist/cmd/git/account/remove.js.map +1 -1
  313. package/dist/cmd/profile/delete.js +1 -1
  314. package/dist/cmd/profile/delete.js.map +1 -1
  315. package/dist/cmd/project/delete.js +1 -1
  316. package/dist/cmd/project/delete.js.map +1 -1
  317. package/dist/cmd/project/hostname/get.d.ts.map +1 -1
  318. package/dist/cmd/project/hostname/get.js +1 -0
  319. package/dist/cmd/project/hostname/get.js.map +1 -1
  320. package/dist/cmd/project/show.d.ts.map +1 -1
  321. package/dist/cmd/project/show.js +9 -0
  322. package/dist/cmd/project/show.js.map +1 -1
  323. package/dist/cmd/support/report.d.ts.map +1 -1
  324. package/dist/cmd/support/report.js +19 -10
  325. package/dist/cmd/support/report.js.map +1 -1
  326. package/dist/cmd/upgrade/index.d.ts.map +1 -1
  327. package/dist/cmd/upgrade/index.js +3 -16
  328. package/dist/cmd/upgrade/index.js.map +1 -1
  329. package/dist/errors.d.ts +24 -10
  330. package/dist/errors.d.ts.map +1 -1
  331. package/dist/errors.js +42 -12
  332. package/dist/errors.js.map +1 -1
  333. package/dist/schema-generator.d.ts.map +1 -1
  334. package/dist/schema-generator.js +3 -13
  335. package/dist/schema-generator.js.map +1 -1
  336. package/dist/schema-parser.d.ts.map +1 -1
  337. package/dist/schema-parser.js +8 -0
  338. package/dist/schema-parser.js.map +1 -1
  339. package/dist/steps.d.ts.map +1 -1
  340. package/dist/steps.js +38 -0
  341. package/dist/steps.js.map +1 -1
  342. package/dist/tui.d.ts.map +1 -1
  343. package/dist/tui.js +25 -9
  344. package/dist/tui.js.map +1 -1
  345. package/dist/utils/stream-capture.d.ts +9 -0
  346. package/dist/utils/stream-capture.d.ts.map +1 -0
  347. package/dist/utils/stream-capture.js +34 -0
  348. package/dist/utils/stream-capture.js.map +1 -0
  349. package/dist/utils/stream-url.d.ts +23 -0
  350. package/dist/utils/stream-url.d.ts.map +1 -0
  351. package/dist/utils/stream-url.js +153 -0
  352. package/dist/utils/stream-url.js.map +1 -0
  353. package/dist/utils/version-mismatch.d.ts +39 -0
  354. package/dist/utils/version-mismatch.d.ts.map +1 -0
  355. package/dist/utils/version-mismatch.js +161 -0
  356. package/dist/utils/version-mismatch.js.map +1 -0
  357. package/dist/utils/zip.d.ts.map +1 -1
  358. package/dist/utils/zip.js +19 -10
  359. package/dist/utils/zip.js.map +1 -1
  360. package/package.json +11 -7
  361. package/src/auth.ts +12 -2
  362. package/src/cli.ts +33 -1
  363. package/src/cmd/auth/ssh/delete.ts +1 -1
  364. package/src/cmd/build/app-config-extractor.ts +186 -0
  365. package/src/cmd/build/ci.ts +225 -0
  366. package/src/cmd/build/index.ts +61 -14
  367. package/src/cmd/build/vite/agent-discovery.ts +30 -5
  368. package/src/cmd/build/vite/bun-dev-server.ts +319 -6
  369. package/src/cmd/build/vite/config-loader.ts +45 -77
  370. package/src/cmd/build/vite/route-discovery.ts +25 -12
  371. package/src/cmd/build/vite/static-renderer.ts +34 -47
  372. package/src/cmd/build/vite/tailwind-source-plugin.ts +73 -0
  373. package/src/cmd/build/vite/vite-asset-server-config.ts +4 -47
  374. package/src/cmd/build/vite/vite-builder.ts +80 -168
  375. package/src/cmd/cloud/agent/get.ts +1 -0
  376. package/src/cmd/cloud/apikey/delete.ts +1 -1
  377. package/src/cmd/cloud/apikey/get.ts +1 -0
  378. package/src/cmd/cloud/apikey/index.ts +1 -0
  379. package/src/cmd/cloud/db/delete.ts +1 -1
  380. package/src/cmd/cloud/deploy-fork.ts +90 -33
  381. package/src/cmd/cloud/deploy.ts +69 -13
  382. package/src/cmd/cloud/deployment/remove.ts +17 -17
  383. package/src/cmd/cloud/deployment/show.ts +1 -1
  384. package/src/cmd/cloud/email/create.ts +1 -1
  385. package/src/cmd/cloud/email/delete.ts +1 -1
  386. package/src/cmd/cloud/email/destination/delete.ts +1 -1
  387. package/src/cmd/cloud/email/get.ts +1 -0
  388. package/src/cmd/cloud/email/inbound/get.ts +1 -0
  389. package/src/cmd/cloud/email/outbound/get.ts +1 -0
  390. package/src/cmd/cloud/env/delete.ts +1 -1
  391. package/src/cmd/cloud/env/get.ts +1 -0
  392. package/src/cmd/cloud/eval/get.ts +1 -0
  393. package/src/cmd/cloud/eval/index.ts +1 -0
  394. package/src/cmd/cloud/eval/list.ts +1 -1
  395. package/src/cmd/cloud/eval-run/get.ts +1 -0
  396. package/src/cmd/cloud/eval-run/index.ts +1 -0
  397. package/src/cmd/cloud/eval-run/list.ts +1 -1
  398. package/src/cmd/cloud/keyvalue/delete-namespace.ts +1 -1
  399. package/src/cmd/cloud/keyvalue/delete.ts +1 -1
  400. package/src/cmd/cloud/keyvalue/get.ts +1 -0
  401. package/src/cmd/cloud/keyvalue/index.ts +1 -1
  402. package/src/cmd/cloud/machine/delete.ts +1 -1
  403. package/src/cmd/cloud/oidc/delete.ts +1 -1
  404. package/src/cmd/cloud/oidc/get.ts +1 -0
  405. package/src/cmd/cloud/queue/create.ts +1 -0
  406. package/src/cmd/cloud/queue/delete.ts +1 -1
  407. package/src/cmd/cloud/queue/get.ts +1 -0
  408. package/src/cmd/cloud/redis/get.ts +1 -1
  409. package/src/cmd/cloud/sandbox/checkpoint/create.ts +1 -0
  410. package/src/cmd/cloud/sandbox/checkpoint/delete.ts +1 -1
  411. package/src/cmd/cloud/sandbox/checkpoint/index.ts +1 -1
  412. package/src/cmd/cloud/sandbox/create.ts +16 -0
  413. package/src/cmd/cloud/sandbox/delete.ts +1 -1
  414. package/src/cmd/cloud/sandbox/exec.ts +102 -90
  415. package/src/cmd/cloud/sandbox/execution/index.ts +1 -1
  416. package/src/cmd/cloud/sandbox/execution/list.ts +2 -2
  417. package/src/cmd/cloud/sandbox/{cp.ts → fs/cp.ts} +13 -13
  418. package/src/cmd/cloud/sandbox/{download.ts → fs/download.ts} +7 -7
  419. package/src/cmd/cloud/sandbox/fs/index.ts +36 -0
  420. package/src/cmd/cloud/sandbox/{ls.ts → fs/ls.ts} +10 -10
  421. package/src/cmd/cloud/sandbox/{mkdir.ts → fs/mkdir.ts} +6 -6
  422. package/src/cmd/cloud/sandbox/{rm.ts → fs/rm.ts} +6 -5
  423. package/src/cmd/cloud/sandbox/{rmdir.ts → fs/rmdir.ts} +6 -6
  424. package/src/cmd/cloud/sandbox/{upload.ts → fs/upload.ts} +7 -7
  425. package/src/cmd/cloud/sandbox/index.ts +4 -14
  426. package/src/cmd/cloud/sandbox/job/create.ts +63 -0
  427. package/src/cmd/cloud/sandbox/job/destroy.ts +67 -0
  428. package/src/cmd/cloud/sandbox/job/get.ts +78 -0
  429. package/src/cmd/cloud/sandbox/job/index.ts +42 -0
  430. package/src/cmd/cloud/sandbox/job/list.ts +81 -0
  431. package/src/cmd/cloud/sandbox/job/logs.ts +139 -0
  432. package/src/cmd/cloud/sandbox/run.ts +16 -2
  433. package/src/cmd/cloud/sandbox/runtime/index.ts +1 -1
  434. package/src/cmd/cloud/sandbox/snapshot/build.ts +2 -2
  435. package/src/cmd/cloud/sandbox/snapshot/create.ts +1 -0
  436. package/src/cmd/cloud/sandbox/snapshot/delete.ts +1 -1
  437. package/src/cmd/cloud/sandbox/snapshot/index.ts +1 -1
  438. package/src/cmd/cloud/schedule/create.ts +1 -0
  439. package/src/cmd/cloud/schedule/delete.ts +1 -1
  440. package/src/cmd/cloud/schedule/delivery/get.ts +1 -0
  441. package/src/cmd/cloud/schedule/destination/create.ts +1 -0
  442. package/src/cmd/cloud/schedule/destination/delete.ts +1 -1
  443. package/src/cmd/cloud/schedule/destination/get.ts +1 -0
  444. package/src/cmd/cloud/schedule/get.ts +1 -0
  445. package/src/cmd/cloud/session/get.ts +1 -0
  446. package/src/cmd/cloud/session/index.ts +1 -0
  447. package/src/cmd/cloud/session/list.ts +1 -1
  448. package/src/cmd/cloud/storage/delete.ts +1 -1
  449. package/src/cmd/cloud/stream/delete.ts +1 -1
  450. package/src/cmd/cloud/stream/get.ts +1 -0
  451. package/src/cmd/cloud/task/delete.ts +1 -1
  452. package/src/cmd/cloud/task/index.ts +1 -0
  453. package/src/cmd/cloud/thread/delete.ts +1 -1
  454. package/src/cmd/cloud/thread/get.ts +1 -0
  455. package/src/cmd/cloud/thread/index.ts +1 -0
  456. package/src/cmd/cloud/thread/list.ts +1 -1
  457. package/src/cmd/cloud/vector/delete-namespace.ts +1 -1
  458. package/src/cmd/cloud/vector/delete.ts +1 -1
  459. package/src/cmd/cloud/vector/get.ts +1 -0
  460. package/src/cmd/cloud/vector/index.ts +1 -1
  461. package/src/cmd/cloud/webhook/create.ts +1 -0
  462. package/src/cmd/cloud/webhook/delete.ts +1 -1
  463. package/src/cmd/cloud/webhook/get.ts +1 -0
  464. package/src/cmd/coder/hub-url.ts +3 -1
  465. package/src/cmd/coder/start.ts +6 -6
  466. package/src/cmd/coder/tui-init.ts +4 -4
  467. package/src/cmd/dev/index.ts +171 -131
  468. package/src/cmd/dev/process-manager.ts +261 -0
  469. package/src/cmd/git/account/remove.ts +1 -0
  470. package/src/cmd/profile/delete.ts +1 -1
  471. package/src/cmd/project/delete.ts +1 -1
  472. package/src/cmd/project/hostname/get.ts +1 -0
  473. package/src/cmd/project/show.ts +9 -0
  474. package/src/cmd/support/report.ts +21 -10
  475. package/src/cmd/upgrade/index.ts +3 -18
  476. package/src/errors.ts +44 -12
  477. package/src/schema-generator.ts +3 -13
  478. package/src/schema-parser.ts +11 -0
  479. package/src/steps.ts +38 -0
  480. package/src/tui.ts +24 -9
  481. package/src/utils/stream-capture.ts +39 -0
  482. package/src/utils/stream-url.ts +226 -0
  483. package/src/utils/version-mismatch.ts +204 -0
  484. package/src/utils/zip.ts +22 -10
  485. package/dist/cmd/cloud/sandbox/cp.d.ts +0 -3
  486. package/dist/cmd/cloud/sandbox/cp.d.ts.map +0 -1
  487. package/dist/cmd/cloud/sandbox/cp.js.map +0 -1
  488. package/dist/cmd/cloud/sandbox/download.d.ts +0 -3
  489. package/dist/cmd/cloud/sandbox/download.d.ts.map +0 -1
  490. package/dist/cmd/cloud/sandbox/download.js.map +0 -1
  491. package/dist/cmd/cloud/sandbox/ls.d.ts +0 -3
  492. package/dist/cmd/cloud/sandbox/ls.d.ts.map +0 -1
  493. package/dist/cmd/cloud/sandbox/ls.js.map +0 -1
  494. package/dist/cmd/cloud/sandbox/mkdir.d.ts +0 -3
  495. package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +0 -1
  496. package/dist/cmd/cloud/sandbox/mkdir.js.map +0 -1
  497. package/dist/cmd/cloud/sandbox/rm.d.ts +0 -3
  498. package/dist/cmd/cloud/sandbox/rm.d.ts.map +0 -1
  499. package/dist/cmd/cloud/sandbox/rm.js.map +0 -1
  500. package/dist/cmd/cloud/sandbox/rmdir.d.ts +0 -3
  501. package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +0 -1
  502. package/dist/cmd/cloud/sandbox/rmdir.js.map +0 -1
  503. package/dist/cmd/cloud/sandbox/upload.d.ts +0 -3
  504. package/dist/cmd/cloud/sandbox/upload.d.ts.map +0 -1
  505. package/dist/cmd/cloud/sandbox/upload.js.map +0 -1
@@ -18,7 +18,7 @@ export const deleteSubcommand = createSubcommand({
18
18
  name: 'delete',
19
19
  description: 'Delete a project',
20
20
  tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth'],
21
- aliases: ['rm', 'del'],
21
+ aliases: ['rm', 'del', 'remove', 'terminate'],
22
22
  requires: { auth: true, apiClient: true },
23
23
  idempotent: false,
24
24
  examples: [
@@ -12,6 +12,7 @@ const HostnameGetResponseSchema = z.object({
12
12
 
13
13
  export const getSubcommand = createSubcommand({
14
14
  name: 'get',
15
+ aliases: ['show', 'info'],
15
16
  description: 'Show the current vanity hostname for the project',
16
17
  tags: ['read-only', 'fast', 'requires-auth', 'requires-project'],
17
18
  requires: { auth: true, apiClient: true, project: true },
@@ -12,6 +12,14 @@ const ProjectShowResponseSchema = z.object({
12
12
  orgId: z.string().describe('Organization ID'),
13
13
  secrets: z.record(z.string(), z.string()).optional().describe('Project secrets (masked)'),
14
14
  env: z.record(z.string(), z.string()).optional().describe('Environment variables'),
15
+ urls: z
16
+ .object({
17
+ dashboard: z.string().describe('Dashboard URL for the project'),
18
+ app: z.string().describe('Public URL for the latest deployment'),
19
+ custom: z.array(z.string()).describe('Custom domain URLs'),
20
+ })
21
+ .optional()
22
+ .describe('Project URLs'),
15
23
  });
16
24
 
17
25
  export const showSubcommand = createSubcommand({
@@ -60,6 +68,7 @@ export const showSubcommand = createSubcommand({
60
68
  orgId: project.orgId,
61
69
  secrets: project.secrets,
62
70
  env: project.env,
71
+ urls: project.urls,
63
72
  };
64
73
  },
65
74
  });
@@ -1,12 +1,12 @@
1
1
  import { createSubcommand } from '../../types';
2
2
  import { z } from 'zod';
3
- import { readFileSync } from 'node:fs';
3
+ import { createWriteStream, readFileSync } from 'node:fs';
4
4
  import { join, basename } from 'node:path';
5
5
  import { tmpdir } from 'node:os';
6
6
  import { getLogSessionsInCurrentWindow } from '../../internal-logger';
7
7
  import * as tui from '../../tui';
8
8
  import { randomBytes } from 'node:crypto';
9
- import AdmZip from 'adm-zip';
9
+ import archiver from 'archiver';
10
10
  import { APIResponseSchema } from '@agentuity/server';
11
11
  import { StructuredError } from '@agentuity/core';
12
12
 
@@ -61,10 +61,19 @@ async function createReportZip(sessionDirs: string[]): Promise<string> {
61
61
  throw NoSessionDirectoriesError();
62
62
  }
63
63
 
64
- // Create zip in temp directory
64
+ // Create zip in temp directory, streaming to disk instead of buffering in memory
65
65
  const tempZip = join(tmpdir(), `agentuity-report-${randomBytes(8).toString('hex')}.zip`);
66
66
 
67
- const zip = new AdmZip();
67
+ const output = createWriteStream(tempZip);
68
+ const zip = archiver('zip', { zlib: { level: 9 } });
69
+
70
+ const writeDone = new Promise<void>((resolve, reject) => {
71
+ output.on('close', resolve);
72
+ output.on('error', reject);
73
+ zip.on('error', reject);
74
+ });
75
+
76
+ zip.pipe(output);
68
77
 
69
78
  for (const sessionDir of sessionDirs) {
70
79
  const sessionFile = join(sessionDir, 'session.json');
@@ -75,14 +84,15 @@ async function createReportZip(sessionDirs: string[]): Promise<string> {
75
84
 
76
85
  // Add files with session ID prefix to avoid conflicts
77
86
  if (await Bun.file(sessionFile).exists()) {
78
- zip.addLocalFile(sessionFile, sessionId);
87
+ zip.file(sessionFile, { name: `${sessionId}/session.json` });
79
88
  }
80
89
  if (await Bun.file(logsFile).exists()) {
81
- zip.addLocalFile(logsFile, sessionId);
90
+ zip.file(logsFile, { name: `${sessionId}/logs.jsonl` });
82
91
  }
83
92
  }
84
93
 
85
- zip.writeZip(tempZip);
94
+ await zip.finalize();
95
+ await writeDone;
86
96
 
87
97
  return tempZip;
88
98
  }
@@ -95,14 +105,15 @@ async function uploadReport(
95
105
  zipPath: string,
96
106
  logger: import('../../types').Logger
97
107
  ): Promise<void> {
98
- const fileBuffer = readFileSync(zipPath);
108
+ // Use Bun.file() to stream the zip to S3 without loading it into memory.
109
+ // Bun automatically sets Content-Length from the file size.
110
+ const file = Bun.file(zipPath);
99
111
 
100
112
  const response = await fetch(presignedUrl, {
101
113
  method: 'PUT',
102
- body: fileBuffer,
114
+ body: file,
103
115
  headers: {
104
116
  'Content-Type': 'application/zip',
105
- 'Content-Length': fileBuffer.length.toString(),
106
117
  },
107
118
  });
108
119
 
@@ -3,6 +3,7 @@ import { getVersion, getCompareUrl, getReleaseUrl, toTag } from '../../version';
3
3
  import { getCommand } from '../../command-prefix';
4
4
  import { z } from 'zod';
5
5
  import { ErrorCode, createError, exitWithError } from '../../errors';
6
+ import { isJSONMode } from '../../output';
6
7
  import * as tui from '../../tui';
7
8
  import { tmpdir } from 'node:os';
8
9
  import { getInstallationType, type InstallationType } from '../../utils/installation-type';
@@ -235,8 +236,8 @@ export const command = createCommand({
235
236
  };
236
237
  }
237
238
 
238
- // Show version info
239
- if (!force) {
239
+ // Show version info (suppress in JSON mode)
240
+ if (!isJSONMode(options)) {
240
241
  tui.info(`Current version: ${tui.muted(normalizedCurrent)}`);
241
242
  tui.info(`Latest version: ${tui.bold(normalizedLatest)}`);
242
243
  tui.newline();
@@ -249,22 +250,6 @@ export const command = createCommand({
249
250
  tui.newline();
250
251
  }
251
252
 
252
- // Confirm upgrade
253
- if (!force) {
254
- const shouldUpgrade = await tui.confirm('Do you want to upgrade?', true);
255
-
256
- if (!shouldUpgrade) {
257
- const message = 'Upgrade cancelled';
258
- tui.info(message);
259
- return {
260
- upgraded: false,
261
- from: currentVersion,
262
- to: latestVersion,
263
- message,
264
- };
265
- }
266
- }
267
-
268
253
  // Perform the upgrade using bun
269
254
  await tui.spinner({
270
255
  type: 'logger',
package/src/errors.ts CHANGED
@@ -1,22 +1,51 @@
1
1
  import type { Logger } from './types';
2
2
 
3
3
  /**
4
- * Standard exit codes for the CLI
4
+ * Standard exit codes for the CLI.
5
+ *
6
+ * Values start at 10 to avoid collisions with Unix signal numbers (1-9)
7
+ * and shell conventions (e.g. 2 = misuse of builtins, 9 = SIGKILL/OOM).
8
+ * Range 10-125 is safe — below shell-reserved 126-128 and signal-death
9
+ * codes 128+N.
10
+ *
11
+ * 0 and 1 are kept as universal success/failure codes.
5
12
  */
6
13
  export enum ExitCode {
7
14
  SUCCESS = 0,
8
15
  GENERAL_ERROR = 1,
9
- VALIDATION_ERROR = 2,
10
- AUTH_ERROR = 3,
11
- NOT_FOUND = 4,
12
- PERMISSION_ERROR = 5,
13
- NETWORK_ERROR = 6,
14
- FILE_ERROR = 7,
15
- USER_CANCELLED = 8,
16
- BUILD_FAILED = 9,
17
- SECURITY_ERROR = 10,
16
+ VALIDATION_ERROR = 10,
17
+ AUTH_ERROR = 11,
18
+ NOT_FOUND = 12,
19
+ PERMISSION_ERROR = 13,
20
+ NETWORK_ERROR = 14,
21
+ FILE_ERROR = 15,
22
+ USER_CANCELLED = 16,
23
+ BUILD_FAILED = 17,
24
+ SECURITY_ERROR = 18,
25
+ PAYMENT_REQUIRED = 19,
26
+ UPGRADE_REQUIRED = 20,
18
27
  }
19
28
 
29
+ /**
30
+ * Human-readable descriptions for each exit code.
31
+ * This is the single source of truth consumed by the schema generator and AI help.
32
+ */
33
+ export const exitCodeDescriptions: Record<number, string> = {
34
+ [ExitCode.SUCCESS]: 'Success',
35
+ [ExitCode.GENERAL_ERROR]: 'General error',
36
+ [ExitCode.VALIDATION_ERROR]: 'Validation error (invalid arguments or options)',
37
+ [ExitCode.AUTH_ERROR]: 'Authentication error (login required or credentials invalid)',
38
+ [ExitCode.NOT_FOUND]: 'Resource not found (project, file, deployment, etc.)',
39
+ [ExitCode.PERMISSION_ERROR]: 'Permission denied (insufficient access rights)',
40
+ [ExitCode.NETWORK_ERROR]: 'Network error (API unreachable or timeout)',
41
+ [ExitCode.FILE_ERROR]: 'File system error (file read/write failed)',
42
+ [ExitCode.USER_CANCELLED]: 'User cancelled (operation aborted by user)',
43
+ [ExitCode.BUILD_FAILED]: 'Build failed',
44
+ [ExitCode.SECURITY_ERROR]: 'Security error (malware detected)',
45
+ [ExitCode.PAYMENT_REQUIRED]: 'Payment required (plan upgrade needed)',
46
+ [ExitCode.UPGRADE_REQUIRED]: 'Upgrade required (CLI version too old)',
47
+ };
48
+
20
49
  /**
21
50
  * Standard error codes for the CLI
22
51
  */
@@ -152,7 +181,11 @@ export function getExitCode(errorCode: ErrorCode): ExitCode {
152
181
 
153
182
  // Payment required - user needs to upgrade their plan
154
183
  case ErrorCode.PAYMENT_REQUIRED:
155
- return ExitCode.GENERAL_ERROR;
184
+ return ExitCode.PAYMENT_REQUIRED;
185
+
186
+ // Upgrade required - CLI version too old
187
+ case ErrorCode.UPGRADE_REQUIRED:
188
+ return ExitCode.UPGRADE_REQUIRED;
156
189
 
157
190
  // Resource conflicts and other errors
158
191
  case ErrorCode.RESOURCE_ALREADY_EXISTS:
@@ -162,7 +195,6 @@ export function getExitCode(errorCode: ErrorCode): ExitCode {
162
195
  case ErrorCode.RUNTIME_ERROR:
163
196
  case ErrorCode.INTERNAL_ERROR:
164
197
  case ErrorCode.NOT_IMPLEMENTED:
165
- case ErrorCode.UPGRADE_REQUIRED:
166
198
  default:
167
199
  return ExitCode.GENERAL_ERROR;
168
200
  }
@@ -1,5 +1,6 @@
1
1
  import type { Command } from 'commander';
2
2
  import type { CommandDefinition, SubcommandDefinition, CommandSchemas } from './types';
3
+ import { exitCodeDescriptions } from './errors';
3
4
  import { parseArgsSchema, parseOptionsSchema } from './schema-parser';
4
5
  import * as z from 'zod';
5
6
 
@@ -313,18 +314,7 @@ export function generateCLISchema(
313
314
  name: 'agentuity',
314
315
  version,
315
316
  description: 'Agentuity CLI',
316
- exitCodes: {
317
- 0: 'Success',
318
- 1: 'General error',
319
- 2: 'Validation error (invalid arguments or options)',
320
- 3: 'Authentication error (login required or credentials invalid)',
321
- 4: 'Resource not found (project, file, deployment, etc.)',
322
- 5: 'Permission denied (insufficient access rights)',
323
- 6: 'Network error (API unreachable or timeout)',
324
- 7: 'File system error (file read/write failed)',
325
- 8: 'User cancelled (operation aborted by user)',
326
- 9: 'Build failed',
327
- },
317
+ exitCodes: { ...exitCodeDescriptions },
328
318
  globalOptions: [
329
319
  {
330
320
  name: 'config',
@@ -358,7 +348,7 @@ export function generateCLISchema(
358
348
  name: 'org-id',
359
349
  type: 'string',
360
350
  required: false,
361
- description: 'Use a specific organization when performing operations',
351
+ description: 'Use a specific organization when performing operations (alias: --org)',
362
352
  },
363
353
  {
364
354
  name: 'color-scheme',
@@ -454,6 +454,17 @@ export function buildValidationInput(
454
454
  value = true;
455
455
  }
456
456
 
457
+ // Handle --org alias for --org-id: if orgId is not set but org is, use that value
458
+ // Only treat --org as an --org-id alias if the schema does NOT declare a separate 'org' option
459
+ if (
460
+ (opt.name === 'orgId' || opt.name === 'org-id') &&
461
+ value === undefined &&
462
+ rawOptions.org !== undefined &&
463
+ !parsed.some((o) => o.name === 'org')
464
+ ) {
465
+ value = rawOptions.org;
466
+ }
467
+
457
468
  if (value !== undefined) {
458
469
  result.options[opt.name] = value;
459
470
  }
package/src/steps.ts CHANGED
@@ -10,6 +10,7 @@ import type { LogLevel } from './types';
10
10
  import { ValidationInputError, ValidationOutputError, type IssuesType } from '@agentuity/server';
11
11
  import { clearLastLines, isTTYLike } from './tui';
12
12
  import { appendLog, isLogCollectionEnabled } from './log-collector';
13
+ import { getOutputOptions, isJSONMode } from './output';
13
14
 
14
15
  /**
15
16
  * Error thrown when step execution is interrupted by a signal (e.g., Ctrl+C).
@@ -700,6 +701,43 @@ async function runStepsPlain(steps: Step[]): Promise<void> {
700
701
  * Run a series of steps with animated progress
701
702
  */
702
703
  export async function runSteps(steps: Step[], logLevel?: LogLevel): Promise<void> {
704
+ const outputOptions = getOutputOptions();
705
+
706
+ // In JSON mode, skip all UI rendering
707
+ if (outputOptions && isJSONMode(outputOptions)) {
708
+ const abortController = new AbortController();
709
+ for (const step of steps) {
710
+ if (abortController.signal.aborted) break;
711
+ if (step) {
712
+ const ctx: StepContext = {
713
+ signal: abortController.signal,
714
+ progress: () => {},
715
+ };
716
+ let outcome: StepOutcome;
717
+ try {
718
+ outcome = await step.run(ctx);
719
+ } catch (err) {
720
+ if (err instanceof Error && err.name === 'AbortError') {
721
+ throw new StepInterruptError();
722
+ }
723
+ outcome = {
724
+ status: 'error',
725
+ message: err instanceof Error ? err.message : String(err),
726
+ cause: err instanceof Error ? err : undefined,
727
+ };
728
+ }
729
+ if (outcome.status === 'error') {
730
+ if (outcome.cause instanceof Error && outcome.cause.name === 'AbortError') {
731
+ throw new StepInterruptError();
732
+ }
733
+ const errorMsg = outcome.message || 'An unknown error occurred';
734
+ throw new Error(errorMsg);
735
+ }
736
+ }
737
+ }
738
+ return;
739
+ }
740
+
703
741
  const useTUI = isTTYLike() && (!logLevel || ['info', 'warn', 'error'].includes(logLevel));
704
742
 
705
743
  if (useTUI) {
package/src/tui.ts CHANGED
@@ -25,6 +25,12 @@ function ensureCursorRestoration(): void {
25
25
  exitHandlerInstalled = true;
26
26
 
27
27
  const restoreCursor = () => {
28
+ // Only write ANSI escape sequences when stderr is a real terminal.
29
+ // Writing to non-TTY streams (pipes, command substitution, etc.)
30
+ // pollutes captured output with invisible control characters.
31
+ if (!process.stderr.isTTY) {
32
+ return;
33
+ }
28
34
  // Skip cursor restoration in CI - terminals don't support these sequences
29
35
  if (process.env.CI) {
30
36
  return;
@@ -293,8 +299,13 @@ export function getSeverityColor(severity: string): (text: string) => string {
293
299
  export function success(message: string): void {
294
300
  const color = getColor('success');
295
301
  const reset = getColor('reset');
296
- // Clear line first to ensure no leftover content from previous output
297
- process.stderr.write(`\r\x1b[2K${color}${ICONS.success} ${message}${reset}\n`);
302
+ if (process.stderr.isTTY) {
303
+ // Clear line first to ensure no leftover content from previous output
304
+ process.stderr.write(`\r\x1b[2K${color}${ICONS.success} ${message}${reset}\n`);
305
+ } else {
306
+ // No ANSI control sequences for non-TTY streams (pipes, command substitution)
307
+ process.stderr.write(`${ICONS.success} ${message}\n`);
308
+ }
298
309
  }
299
310
 
300
311
  /**
@@ -1242,18 +1253,23 @@ export async function spinner<T>(
1242
1253
  const { getOutputOptions, shouldDisableProgress } = await import('./output');
1243
1254
  const outputOptions = getOutputOptions();
1244
1255
  const noProgress = outputOptions ? shouldDisableProgress(outputOptions) : false;
1256
+ const isJsonMode = outputOptions?.json === true;
1245
1257
 
1246
- // If no interactive TTY-like environment or progress disabled, just execute
1247
- // the callback without animation
1248
- if (!isTTYLike() || noProgress) {
1258
+ // If stderr is not a real terminal or progress disabled, just execute
1259
+ // the callback without animation. We check stderr specifically because
1260
+ // the spinner writes ANSI sequences to stderr — isTTYLike() may return
1261
+ // true when stdout is a TTY but stderr is piped (e.g. 2>&1 in $()).
1262
+ if (!process.stderr.isTTY || noProgress) {
1249
1263
  try {
1250
1264
  const result =
1251
1265
  options.type === 'progress'
1252
1266
  ? await options.callback(() => {})
1253
1267
  : options.type === 'logger'
1254
1268
  ? await options.callback((logMessage: string) => {
1255
- // In non-TTY mode, just write logs directly to stdout
1256
- process.stdout.write(logMessage + '\n');
1269
+ // In JSON mode, don't write logs to stdout
1270
+ if (!isJsonMode) {
1271
+ process.stdout.write(logMessage + '\n');
1272
+ }
1257
1273
  })
1258
1274
  : options.type === 'countdown'
1259
1275
  ? await options.callback()
@@ -1263,7 +1279,6 @@ export async function spinner<T>(
1263
1279
 
1264
1280
  // If clearOnSuccess is true, don't show success message
1265
1281
  // Also skip success message in JSON mode
1266
- const isJsonMode = outputOptions?.json === true;
1267
1282
  if (!options.clearOnSuccess && !isJsonMode) {
1268
1283
  const successColor = getColor('success');
1269
1284
  console.error(`${successColor}${ICONS.success} ${message}${reset}`);
@@ -1273,7 +1288,7 @@ export async function spinner<T>(
1273
1288
  } catch (err) {
1274
1289
  const clearOnError =
1275
1290
  (options.type === 'progress' || options.type === 'simple') && options.clearOnError;
1276
- if (!clearOnError) {
1291
+ if (!clearOnError && !isJsonMode) {
1277
1292
  const errorColor = getColor('error');
1278
1293
  console.error(`${errorColor}${ICONS.error} ${message}${reset}`);
1279
1294
  }
@@ -0,0 +1,39 @@
1
+ import { createWriteStream } from 'node:fs';
2
+
3
+ /**
4
+ * Stream a ReadableStream of raw bytes to a file on disk.
5
+ *
6
+ * This mirrors the pattern used by the deploy fork wrapper to capture child
7
+ * process stdout/stderr without accumulating the output in memory. Returns
8
+ * the total number of bytes written.
9
+ */
10
+ export async function captureStreamToFile(
11
+ stream: ReadableStream<Uint8Array>,
12
+ filePath: string
13
+ ): Promise<number> {
14
+ const writer = createWriteStream(filePath);
15
+ const reader = stream.getReader();
16
+ let totalBytes = 0;
17
+
18
+ try {
19
+ while (true) {
20
+ const { done, value } = await reader.read();
21
+ if (done) break;
22
+
23
+ const ok = writer.write(value);
24
+ totalBytes += value.byteLength;
25
+
26
+ // Respect backpressure: wait for drain when the internal buffer is full
27
+ if (!ok) {
28
+ await new Promise<void>((resolve) => writer.once('drain', resolve));
29
+ }
30
+ }
31
+ } finally {
32
+ await new Promise<void>((resolve, reject) => {
33
+ writer.once('error', reject);
34
+ writer.end(resolve);
35
+ });
36
+ }
37
+
38
+ return totalBytes;
39
+ }
@@ -0,0 +1,226 @@
1
+ import { writeAndDrain } from '@agentuity/server';
2
+ import type { Logger } from '@agentuity/core';
3
+ import * as tui from '../tui';
4
+
5
+ export interface StreamUrlOptions {
6
+ signal?: AbortSignal;
7
+ follow?: boolean;
8
+ timestamps?: boolean;
9
+ grep?: string;
10
+ tail?: number;
11
+ json?: boolean;
12
+ label?: string;
13
+ raw?: boolean;
14
+ v2?: boolean;
15
+ }
16
+
17
+ export interface StreamUrlResult {
18
+ bytesRead: number;
19
+ chunks: number;
20
+ }
21
+
22
+ export class StreamFetchError extends Error {
23
+ constructor(
24
+ public status: number,
25
+ public statusText: string,
26
+ message: string
27
+ ) {
28
+ super(message);
29
+ this.name = 'StreamFetchError';
30
+ }
31
+ }
32
+
33
+ function escapeRegExp(str: string): string {
34
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
35
+ }
36
+
37
+ export async function streamUrlToWritable(
38
+ url: string,
39
+ writable: NodeJS.WritableStream,
40
+ logger: Logger,
41
+ options: StreamUrlOptions = {}
42
+ ): Promise<StreamUrlResult> {
43
+ const {
44
+ signal,
45
+ follow,
46
+ timestamps,
47
+ grep,
48
+ tail,
49
+ json,
50
+ label = 'stream',
51
+ raw = false,
52
+ v2 = false,
53
+ } = options;
54
+ const streamStart = Date.now();
55
+ let bytesRead = 0;
56
+ let chunks = 0;
57
+
58
+ try {
59
+ const fetchUrl = new URL(url);
60
+
61
+ if (follow || v2) {
62
+ fetchUrl.searchParams.set('v', '2');
63
+ }
64
+ if (follow) {
65
+ fetchUrl.searchParams.set('follow', 'true');
66
+ }
67
+
68
+ const redactedUrl =
69
+ fetchUrl.origin + fetchUrl.pathname + (fetchUrl.search ? '?REDACTED' : '');
70
+ logger.debug('[%s] fetching: %s', label, redactedUrl);
71
+ const response = await fetch(fetchUrl.href, { signal });
72
+ logger.debug(
73
+ '[%s] response status=%d in %dms',
74
+ label,
75
+ response.status,
76
+ Date.now() - streamStart
77
+ );
78
+
79
+ if (!response.ok || !response.body) {
80
+ logger.debug('[%s] not ok or no body', label);
81
+ if (!json) {
82
+ tui.error(`Failed to fetch stream: ${response.status} ${response.statusText}`);
83
+ }
84
+ throw new StreamFetchError(
85
+ response.status,
86
+ response.statusText,
87
+ `Failed to fetch stream: ${response.status} ${response.statusText}`
88
+ );
89
+ }
90
+
91
+ const reader = response.body.getReader();
92
+
93
+ if (raw) {
94
+ while (true) {
95
+ const { done, value } = await reader.read();
96
+ if (done) {
97
+ logger.debug(
98
+ '[%s] EOF after %dms (%d chunks, %d bytes)',
99
+ label,
100
+ Date.now() - streamStart,
101
+ chunks,
102
+ bytesRead
103
+ );
104
+ break;
105
+ }
106
+
107
+ if (value) {
108
+ chunks++;
109
+ bytesRead += value.length;
110
+ if (chunks <= 3 || chunks % 100 === 0) {
111
+ logger.debug(
112
+ '[%s] chunk #%d: %d bytes (total: %d bytes, +%dms)',
113
+ label,
114
+ chunks,
115
+ value.length,
116
+ bytesRead,
117
+ Date.now() - streamStart
118
+ );
119
+ }
120
+ await writeAndDrain(writable, value);
121
+ }
122
+ }
123
+ } else {
124
+ const decoder = new TextDecoder();
125
+ let leftover = '';
126
+ const grepPattern = grep ? new RegExp(escapeRegExp(grep), 'i') : null;
127
+ const needsFiltering = tail !== undefined || grepPattern !== null;
128
+ const tailBuffer: string[] = [];
129
+ const maxTail = tail ?? Infinity;
130
+ const liveOutput = follow && needsFiltering;
131
+
132
+ const outputLine = async (line: string) => {
133
+ if (json) {
134
+ const obj = {
135
+ timestamp: new Date().toISOString(),
136
+ stream: label,
137
+ message: line,
138
+ };
139
+ await writeAndDrain(writable, Buffer.from(JSON.stringify(obj) + '\n'));
140
+ } else {
141
+ const formatted = timestamps ? formatLineWithTimestamp(line) : line;
142
+ await writeAndDrain(writable, Buffer.from(formatted + '\n'));
143
+ }
144
+ };
145
+
146
+ const processFilteredLine = async (line: string) => {
147
+ if (grepPattern && !grepPattern.test(line)) {
148
+ return;
149
+ }
150
+ if (tail !== undefined) {
151
+ tailBuffer.push(line);
152
+ if (tailBuffer.length > maxTail) {
153
+ tailBuffer.shift();
154
+ }
155
+ if (liveOutput) {
156
+ await outputLine(line);
157
+ }
158
+ } else {
159
+ await outputLine(line);
160
+ }
161
+ };
162
+
163
+ while (true) {
164
+ const { done, value } = await reader.read();
165
+ if (done) {
166
+ if (leftover) {
167
+ if (needsFiltering) {
168
+ await processFilteredLine(leftover);
169
+ } else {
170
+ await outputLine(leftover);
171
+ }
172
+ }
173
+ logger.debug(
174
+ '[%s] EOF after %dms (%d chunks, %d bytes)',
175
+ label,
176
+ Date.now() - streamStart,
177
+ chunks,
178
+ bytesRead
179
+ );
180
+ break;
181
+ }
182
+
183
+ if (value) {
184
+ chunks++;
185
+ bytesRead += value.length;
186
+ const text = leftover + decoder.decode(value, { stream: true });
187
+ const lines = text.split('\n');
188
+ leftover = lines.pop() ?? '';
189
+
190
+ for (const line of lines) {
191
+ if (needsFiltering) {
192
+ await processFilteredLine(line);
193
+ } else {
194
+ await outputLine(line);
195
+ }
196
+ }
197
+ }
198
+ }
199
+
200
+ if (!liveOutput && needsFiltering && tailBuffer.length > 0) {
201
+ for (const line of tailBuffer) {
202
+ await outputLine(line);
203
+ }
204
+ }
205
+ }
206
+
207
+ return { bytesRead, chunks };
208
+ } catch (err) {
209
+ if (err instanceof Error && err.name === 'AbortError') {
210
+ logger.debug('[%s] aborted after %dms', label, Date.now() - streamStart);
211
+ return { bytesRead, chunks };
212
+ }
213
+ logger.debug('[%s] error after %dms: %s', label, Date.now() - streamStart, err);
214
+ throw err;
215
+ }
216
+ }
217
+
218
+ function formatLineWithTimestamp(line: string): string {
219
+ const timestamp = new Date().toLocaleTimeString('en-US', {
220
+ hour12: false,
221
+ hour: '2-digit',
222
+ minute: '2-digit',
223
+ second: '2-digit',
224
+ });
225
+ return `${tui.muted(timestamp)} ${line}`;
226
+ }