@agentuity/cli 1.0.1 → 1.0.3

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 (331) hide show
  1. package/AGENTS.md +40 -24
  2. package/bin/cli.ts +47 -22
  3. package/dist/agent-detection.d.ts +23 -38
  4. package/dist/agent-detection.d.ts.map +1 -1
  5. package/dist/agent-detection.js +412 -153
  6. package/dist/agent-detection.js.map +1 -1
  7. package/dist/ai-help.d.ts +23 -0
  8. package/dist/ai-help.d.ts.map +1 -0
  9. package/dist/ai-help.js +328 -0
  10. package/dist/ai-help.js.map +1 -0
  11. package/dist/api.js +1 -1
  12. package/dist/api.js.map +1 -1
  13. package/dist/auth.d.ts +10 -1
  14. package/dist/auth.d.ts.map +1 -1
  15. package/dist/auth.js +176 -16
  16. package/dist/auth.js.map +1 -1
  17. package/dist/banner.d.ts.map +1 -1
  18. package/dist/banner.js +5 -0
  19. package/dist/banner.js.map +1 -1
  20. package/dist/cache/agent-intro.d.ts +13 -0
  21. package/dist/cache/agent-intro.d.ts.map +1 -0
  22. package/dist/cache/agent-intro.js +54 -0
  23. package/dist/cache/agent-intro.js.map +1 -0
  24. package/dist/cache/index.d.ts +1 -0
  25. package/dist/cache/index.d.ts.map +1 -1
  26. package/dist/cache/index.js +1 -0
  27. package/dist/cache/index.js.map +1 -1
  28. package/dist/cache/resource-region.d.ts +3 -2
  29. package/dist/cache/resource-region.d.ts.map +1 -1
  30. package/dist/cache/resource-region.js +13 -4
  31. package/dist/cache/resource-region.js.map +1 -1
  32. package/dist/catalyst.d.ts +7 -0
  33. package/dist/catalyst.d.ts.map +1 -0
  34. package/dist/catalyst.js +15 -0
  35. package/dist/catalyst.js.map +1 -0
  36. package/dist/cli.d.ts +12 -1
  37. package/dist/cli.d.ts.map +1 -1
  38. package/dist/cli.js +290 -67
  39. package/dist/cli.js.map +1 -1
  40. package/dist/cmd/ai/detect.d.ts +3 -0
  41. package/dist/cmd/ai/detect.d.ts.map +1 -0
  42. package/dist/cmd/ai/detect.js +49 -0
  43. package/dist/cmd/ai/detect.js.map +1 -0
  44. package/dist/cmd/ai/index.d.ts.map +1 -1
  45. package/dist/cmd/ai/index.js +18 -1
  46. package/dist/cmd/ai/index.js.map +1 -1
  47. package/dist/cmd/ai/intro.d.ts +7 -0
  48. package/dist/cmd/ai/intro.d.ts.map +1 -0
  49. package/dist/cmd/ai/intro.js +141 -0
  50. package/dist/cmd/ai/intro.js.map +1 -0
  51. package/dist/cmd/ai/opencode/run.d.ts.map +1 -1
  52. package/dist/cmd/ai/opencode/run.js +5 -0
  53. package/dist/cmd/ai/opencode/run.js.map +1 -1
  54. package/dist/cmd/build/ast.d.ts.map +1 -1
  55. package/dist/cmd/build/ast.js +79 -0
  56. package/dist/cmd/build/ast.js.map +1 -1
  57. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  58. package/dist/cmd/build/vite/bun-dev-server.js +2 -0
  59. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  60. package/dist/cmd/build/vite/docs-generator.d.ts.map +1 -1
  61. package/dist/cmd/build/vite/docs-generator.js +15 -1
  62. package/dist/cmd/build/vite/docs-generator.js.map +1 -1
  63. package/dist/cmd/build/vite/env-types-generator.d.ts +26 -0
  64. package/dist/cmd/build/vite/env-types-generator.d.ts.map +1 -0
  65. package/dist/cmd/build/vite/env-types-generator.js +110 -0
  66. package/dist/cmd/build/vite/env-types-generator.js.map +1 -0
  67. package/dist/cmd/build/vite/index.d.ts +2 -0
  68. package/dist/cmd/build/vite/index.d.ts.map +1 -1
  69. package/dist/cmd/build/vite/index.js +12 -1
  70. package/dist/cmd/build/vite/index.js.map +1 -1
  71. package/dist/cmd/build/vite/public-asset-path-plugin.d.ts.map +1 -1
  72. package/dist/cmd/build/vite/public-asset-path-plugin.js.map +1 -1
  73. package/dist/cmd/build/vite/vite-builder.d.ts +2 -0
  74. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  75. package/dist/cmd/build/vite/vite-builder.js +10 -1
  76. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  77. package/dist/cmd/cloud/db/create.js.map +1 -1
  78. package/dist/cmd/cloud/db/delete.js.map +1 -1
  79. package/dist/cmd/cloud/db/get.d.ts.map +1 -1
  80. package/dist/cmd/cloud/db/get.js +27 -12
  81. package/dist/cmd/cloud/db/get.js.map +1 -1
  82. package/dist/cmd/cloud/deploy-fork.d.ts.map +1 -1
  83. package/dist/cmd/cloud/deploy-fork.js +2 -0
  84. package/dist/cmd/cloud/deploy-fork.js.map +1 -1
  85. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  86. package/dist/cmd/cloud/deploy.js +17 -0
  87. package/dist/cmd/cloud/deploy.js.map +1 -1
  88. package/dist/cmd/cloud/env/import.js.map +1 -1
  89. package/dist/cmd/cloud/env/list.js.map +1 -1
  90. package/dist/cmd/cloud/env/push.js.map +1 -1
  91. package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
  92. package/dist/cmd/cloud/keyvalue/util.js +3 -3
  93. package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
  94. package/dist/cmd/cloud/machine/list.js +3 -3
  95. package/dist/cmd/cloud/machine/list.js.map +1 -1
  96. package/dist/cmd/cloud/region/index.js.map +1 -1
  97. package/dist/cmd/cloud/region-lookup.d.ts +7 -4
  98. package/dist/cmd/cloud/region-lookup.d.ts.map +1 -1
  99. package/dist/cmd/cloud/region-lookup.js +59 -14
  100. package/dist/cmd/cloud/region-lookup.js.map +1 -1
  101. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -1
  102. package/dist/cmd/cloud/sandbox/cp.js +7 -5
  103. package/dist/cmd/cloud/sandbox/cp.js.map +1 -1
  104. package/dist/cmd/cloud/sandbox/create.js +2 -2
  105. package/dist/cmd/cloud/sandbox/create.js.map +1 -1
  106. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
  107. package/dist/cmd/cloud/sandbox/delete.js +8 -7
  108. package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
  109. package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -1
  110. package/dist/cmd/cloud/sandbox/download.js +7 -5
  111. package/dist/cmd/cloud/sandbox/download.js.map +1 -1
  112. package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -1
  113. package/dist/cmd/cloud/sandbox/env.js +7 -5
  114. package/dist/cmd/cloud/sandbox/env.js.map +1 -1
  115. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -1
  116. package/dist/cmd/cloud/sandbox/exec.js +7 -5
  117. package/dist/cmd/cloud/sandbox/exec.js.map +1 -1
  118. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
  119. package/dist/cmd/cloud/sandbox/get.js +12 -7
  120. package/dist/cmd/cloud/sandbox/get.js.map +1 -1
  121. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
  122. package/dist/cmd/cloud/sandbox/list.js +40 -63
  123. package/dist/cmd/cloud/sandbox/list.js.map +1 -1
  124. package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -1
  125. package/dist/cmd/cloud/sandbox/ls.js +7 -5
  126. package/dist/cmd/cloud/sandbox/ls.js.map +1 -1
  127. package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -1
  128. package/dist/cmd/cloud/sandbox/mkdir.js +7 -5
  129. package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -1
  130. package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -1
  131. package/dist/cmd/cloud/sandbox/rm.js +7 -5
  132. package/dist/cmd/cloud/sandbox/rm.js.map +1 -1
  133. package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -1
  134. package/dist/cmd/cloud/sandbox/rmdir.js +7 -5
  135. package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -1
  136. package/dist/cmd/cloud/sandbox/run.js +1 -1
  137. package/dist/cmd/cloud/sandbox/run.js.map +1 -1
  138. package/dist/cmd/cloud/sandbox/snapshot/build.js.map +1 -1
  139. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
  140. package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -1
  141. package/dist/cmd/cloud/sandbox/upload.js +7 -5
  142. package/dist/cmd/cloud/sandbox/upload.js.map +1 -1
  143. package/dist/cmd/cloud/sandbox/util.d.ts +2 -2
  144. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -1
  145. package/dist/cmd/cloud/sandbox/util.js +14 -13
  146. package/dist/cmd/cloud/sandbox/util.js.map +1 -1
  147. package/dist/cmd/cloud/ssh.d.ts.map +1 -1
  148. package/dist/cmd/cloud/ssh.js +3 -3
  149. package/dist/cmd/cloud/ssh.js.map +1 -1
  150. package/dist/cmd/cloud/storage/create.js.map +1 -1
  151. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  152. package/dist/cmd/cloud/storage/get.d.ts.map +1 -1
  153. package/dist/cmd/cloud/storage/get.js +5 -11
  154. package/dist/cmd/cloud/storage/get.js.map +1 -1
  155. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  156. package/dist/cmd/cloud/storage/list.js +6 -6
  157. package/dist/cmd/cloud/storage/list.js.map +1 -1
  158. package/dist/cmd/cloud/stream/create.d.ts.map +1 -1
  159. package/dist/cmd/cloud/stream/create.js +7 -4
  160. package/dist/cmd/cloud/stream/create.js.map +1 -1
  161. package/dist/cmd/cloud/stream/delete.d.ts.map +1 -1
  162. package/dist/cmd/cloud/stream/delete.js +25 -4
  163. package/dist/cmd/cloud/stream/delete.js.map +1 -1
  164. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  165. package/dist/cmd/cloud/stream/get.js +91 -62
  166. package/dist/cmd/cloud/stream/get.js.map +1 -1
  167. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  168. package/dist/cmd/cloud/stream/list.js +66 -38
  169. package/dist/cmd/cloud/stream/list.js.map +1 -1
  170. package/dist/cmd/cloud/stream/util.d.ts +20 -0
  171. package/dist/cmd/cloud/stream/util.d.ts.map +1 -1
  172. package/dist/cmd/cloud/stream/util.js +27 -3
  173. package/dist/cmd/cloud/stream/util.js.map +1 -1
  174. package/dist/cmd/cloud/vector/util.d.ts.map +1 -1
  175. package/dist/cmd/cloud/vector/util.js +3 -3
  176. package/dist/cmd/cloud/vector/util.js.map +1 -1
  177. package/dist/cmd/dev/index.js.map +1 -1
  178. package/dist/cmd/git/account/add.js.map +1 -1
  179. package/dist/cmd/git/list.js.map +1 -1
  180. package/dist/cmd/project/add/database.d.ts +2 -0
  181. package/dist/cmd/project/add/database.d.ts.map +1 -0
  182. package/dist/cmd/project/add/database.js +123 -0
  183. package/dist/cmd/project/add/database.js.map +1 -0
  184. package/dist/cmd/project/add/domain.d.ts +2 -0
  185. package/dist/cmd/project/add/domain.d.ts.map +1 -0
  186. package/dist/cmd/project/add/domain.js +152 -0
  187. package/dist/cmd/project/add/domain.js.map +1 -0
  188. package/dist/cmd/project/add/index.d.ts +2 -0
  189. package/dist/cmd/project/add/index.d.ts.map +1 -0
  190. package/dist/cmd/project/add/index.js +35 -0
  191. package/dist/cmd/project/add/index.js.map +1 -0
  192. package/dist/cmd/project/add/storage.d.ts +2 -0
  193. package/dist/cmd/project/add/storage.d.ts.map +1 -0
  194. package/dist/cmd/project/add/storage.js +123 -0
  195. package/dist/cmd/project/add/storage.js.map +1 -0
  196. package/dist/cmd/project/auth/init.js.map +1 -1
  197. package/dist/cmd/project/index.d.ts.map +1 -1
  198. package/dist/cmd/project/index.js +7 -0
  199. package/dist/cmd/project/index.js.map +1 -1
  200. package/dist/cmd/project/reconcile.d.ts.map +1 -1
  201. package/dist/cmd/project/reconcile.js +32 -0
  202. package/dist/cmd/project/reconcile.js.map +1 -1
  203. package/dist/cmd/support/report.js.map +1 -1
  204. package/dist/cmd/support/system.js +2 -2
  205. package/dist/cmd/support/system.js.map +1 -1
  206. package/dist/config.d.ts +6 -3
  207. package/dist/config.d.ts.map +1 -1
  208. package/dist/config.js +31 -7
  209. package/dist/config.js.map +1 -1
  210. package/dist/errors.d.ts +2 -1
  211. package/dist/errors.d.ts.map +1 -1
  212. package/dist/errors.js +5 -0
  213. package/dist/errors.js.map +1 -1
  214. package/dist/index.d.ts +4 -1
  215. package/dist/index.d.ts.map +1 -1
  216. package/dist/index.js +3 -0
  217. package/dist/index.js.map +1 -1
  218. package/dist/repl.js +2 -1
  219. package/dist/repl.js.map +1 -1
  220. package/dist/tui/box.d.ts +3 -1
  221. package/dist/tui/box.d.ts.map +1 -1
  222. package/dist/tui/box.js +22 -7
  223. package/dist/tui/box.js.map +1 -1
  224. package/dist/tui/colors.d.ts +0 -3
  225. package/dist/tui/colors.d.ts.map +1 -1
  226. package/dist/tui/colors.js +76 -23
  227. package/dist/tui/colors.js.map +1 -1
  228. package/dist/tui/prompt.d.ts +2 -0
  229. package/dist/tui/prompt.d.ts.map +1 -1
  230. package/dist/tui/prompt.js +44 -3
  231. package/dist/tui/prompt.js.map +1 -1
  232. package/dist/tui/symbols.d.ts +0 -4
  233. package/dist/tui/symbols.d.ts.map +1 -1
  234. package/dist/tui/symbols.js +5 -0
  235. package/dist/tui/symbols.js.map +1 -1
  236. package/dist/tui.d.ts +8 -0
  237. package/dist/tui.d.ts.map +1 -1
  238. package/dist/tui.js +54 -9
  239. package/dist/tui.js.map +1 -1
  240. package/dist/types.d.ts +37 -2
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/types.js +1 -0
  243. package/dist/types.js.map +1 -1
  244. package/dist/version-check.d.ts.map +1 -1
  245. package/dist/version-check.js +5 -0
  246. package/dist/version-check.js.map +1 -1
  247. package/package.json +6 -6
  248. package/src/agent-detection.ts +457 -160
  249. package/src/ai-help.ts +393 -0
  250. package/src/api.ts +1 -1
  251. package/src/auth.ts +226 -17
  252. package/src/banner.ts +5 -0
  253. package/src/cache/agent-intro.ts +62 -0
  254. package/src/cache/index.ts +2 -0
  255. package/src/cache/resource-region.ts +28 -7
  256. package/src/catalyst.ts +16 -0
  257. package/src/cli.ts +375 -93
  258. package/src/cmd/ai/detect.ts +54 -0
  259. package/src/cmd/ai/index.ts +18 -1
  260. package/src/cmd/ai/intro.ts +154 -0
  261. package/src/cmd/ai/opencode/run.ts +5 -0
  262. package/src/cmd/build/ast.ts +97 -0
  263. package/src/cmd/build/vite/bun-dev-server.ts +2 -0
  264. package/src/cmd/build/vite/docs-generator.ts +15 -1
  265. package/src/cmd/build/vite/env-types-generator.ts +145 -0
  266. package/src/cmd/build/vite/index.ts +15 -0
  267. package/src/cmd/build/vite/public-asset-path-plugin.ts +8 -2
  268. package/src/cmd/build/vite/vite-builder.ts +31 -11
  269. package/src/cmd/cloud/db/create.ts +16 -16
  270. package/src/cmd/cloud/db/delete.ts +19 -19
  271. package/src/cmd/cloud/db/get.ts +32 -17
  272. package/src/cmd/cloud/deploy-fork.ts +2 -0
  273. package/src/cmd/cloud/deploy.ts +17 -0
  274. package/src/cmd/cloud/env/import.ts +6 -6
  275. package/src/cmd/cloud/env/list.ts +11 -11
  276. package/src/cmd/cloud/env/push.ts +6 -6
  277. package/src/cmd/cloud/keyvalue/util.ts +3 -3
  278. package/src/cmd/cloud/machine/list.ts +3 -3
  279. package/src/cmd/cloud/region/index.ts +3 -3
  280. package/src/cmd/cloud/region-lookup.ts +82 -22
  281. package/src/cmd/cloud/sandbox/cp.ts +9 -4
  282. package/src/cmd/cloud/sandbox/create.ts +2 -2
  283. package/src/cmd/cloud/sandbox/delete.ts +10 -7
  284. package/src/cmd/cloud/sandbox/download.ts +8 -5
  285. package/src/cmd/cloud/sandbox/env.ts +8 -5
  286. package/src/cmd/cloud/sandbox/exec.ts +10 -5
  287. package/src/cmd/cloud/sandbox/get.ts +13 -7
  288. package/src/cmd/cloud/sandbox/list.ts +47 -73
  289. package/src/cmd/cloud/sandbox/ls.ts +9 -5
  290. package/src/cmd/cloud/sandbox/mkdir.ts +9 -5
  291. package/src/cmd/cloud/sandbox/rm.ts +9 -5
  292. package/src/cmd/cloud/sandbox/rmdir.ts +9 -5
  293. package/src/cmd/cloud/sandbox/run.ts +1 -1
  294. package/src/cmd/cloud/sandbox/snapshot/build.ts +31 -31
  295. package/src/cmd/cloud/sandbox/snapshot/get.ts +17 -17
  296. package/src/cmd/cloud/sandbox/upload.ts +8 -5
  297. package/src/cmd/cloud/sandbox/util.ts +15 -14
  298. package/src/cmd/cloud/ssh.ts +2 -4
  299. package/src/cmd/cloud/storage/create.ts +16 -16
  300. package/src/cmd/cloud/storage/delete.ts +19 -19
  301. package/src/cmd/cloud/storage/get.ts +5 -16
  302. package/src/cmd/cloud/storage/list.ts +12 -6
  303. package/src/cmd/cloud/stream/create.ts +8 -4
  304. package/src/cmd/cloud/stream/delete.ts +28 -4
  305. package/src/cmd/cloud/stream/get.ts +102 -64
  306. package/src/cmd/cloud/stream/list.ts +76 -44
  307. package/src/cmd/cloud/stream/util.ts +39 -3
  308. package/src/cmd/cloud/vector/util.ts +3 -3
  309. package/src/cmd/dev/index.ts +4 -4
  310. package/src/cmd/git/account/add.ts +5 -5
  311. package/src/cmd/git/list.ts +7 -7
  312. package/src/cmd/project/add/database.ts +145 -0
  313. package/src/cmd/project/add/domain.ts +181 -0
  314. package/src/cmd/project/add/index.ts +35 -0
  315. package/src/cmd/project/add/storage.ts +147 -0
  316. package/src/cmd/project/auth/init.ts +6 -6
  317. package/src/cmd/project/index.ts +7 -0
  318. package/src/cmd/project/reconcile.ts +40 -0
  319. package/src/cmd/support/report.ts +5 -5
  320. package/src/cmd/support/system.ts +2 -2
  321. package/src/config.ts +40 -12
  322. package/src/errors.ts +7 -0
  323. package/src/index.ts +11 -0
  324. package/src/repl.ts +4 -1
  325. package/src/tui/box.ts +24 -9
  326. package/src/tui/colors.ts +83 -26
  327. package/src/tui/prompt.ts +55 -3
  328. package/src/tui/symbols.ts +6 -0
  329. package/src/tui.ts +55 -9
  330. package/src/types.ts +46 -2
  331. package/src/version-check.ts +6 -0
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { getSandboxRegion, createSandboxClient, clearSandboxRegionCache } from './util';
4
+ import { createSandboxClient, clearSandboxRegionCache } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxDestroy } from '@agentuity/server';
6
+ import { sandboxDestroy, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  const SandboxDeleteResponseSchema = z.object({
9
9
  success: z.boolean().describe('Whether the operation succeeded'),
@@ -17,7 +17,7 @@ export const deleteSubcommand = createCommand({
17
17
  aliases: ['del', 'remove', 'destroy'],
18
18
  description: 'Delete a sandbox',
19
19
  tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth'],
20
- requires: { auth: true, org: true },
20
+ requires: { auth: true, apiClient: true },
21
21
  idempotent: true,
22
22
  examples: [
23
23
  {
@@ -40,7 +40,7 @@ export const deleteSubcommand = createCommand({
40
40
  },
41
41
 
42
42
  async handler(ctx) {
43
- const { args, options, opts, auth, config, logger, orgId } = ctx;
43
+ const { args, options, opts, auth, config, logger, apiClient } = ctx;
44
44
 
45
45
  if (!opts.confirm) {
46
46
  const confirmed = await tui.confirm(`Delete sandbox "${args.sandboxId}"?`, false);
@@ -56,10 +56,13 @@ export const deleteSubcommand = createCommand({
56
56
  }
57
57
 
58
58
  const started = Date.now();
59
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
60
- const client = createSandboxClient(logger, auth, region);
61
59
 
62
- await sandboxDestroy(client, { sandboxId: args.sandboxId, orgId });
60
+ // Resolve sandbox to get region and orgId using CLI API
61
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
62
+
63
+ const client = createSandboxClient(logger, auth, sandboxInfo.region);
64
+
65
+ await sandboxDestroy(client, { sandboxId: args.sandboxId, orgId: sandboxInfo.orgId });
63
66
  const durationMs = Date.now() - started;
64
67
 
65
68
  await clearSandboxRegionCache(config?.name, args.sandboxId);
@@ -2,16 +2,16 @@ import { z } from 'zod';
2
2
  import { writeFileSync } from 'node:fs';
3
3
  import { createCommand } from '../../../types';
4
4
  import * as tui from '../../../tui';
5
- import { createSandboxClient, getSandboxRegion } from './util';
5
+ import { createSandboxClient } from './util';
6
6
  import { getCommand } from '../../../command-prefix';
7
- import { sandboxDownloadArchive } from '@agentuity/server';
7
+ import { sandboxDownloadArchive, sandboxResolve } from '@agentuity/server';
8
8
 
9
9
  export const downloadSubcommand = createCommand({
10
10
  name: 'download',
11
11
  aliases: ['dl'],
12
12
  description: 'Download files from a sandbox as a compressed archive',
13
13
  tags: ['slow', 'requires-auth'],
14
- requires: { auth: true, org: true },
14
+ requires: { auth: true, apiClient: true },
15
15
  examples: [
16
16
  {
17
17
  command: getCommand('cloud sandbox download sbx_abc123 ./backup.tar.gz'),
@@ -46,9 +46,12 @@ export const downloadSubcommand = createCommand({
46
46
  },
47
47
 
48
48
  async handler(ctx) {
49
- const { args, opts, options, auth, logger, orgId, config } = ctx;
49
+ const { args, opts, options, auth, logger, apiClient } = ctx;
50
+
51
+ // Resolve sandbox to get region and orgId using CLI API
52
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
53
+ const { region, orgId } = sandboxInfo;
50
54
 
51
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
52
55
  const client = createSandboxClient(logger, auth, region);
53
56
 
54
57
  const format = opts.format ?? detectFormat(args.output);
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { getSandboxRegion, createSandboxClient } from './util';
4
+ import { createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxSetEnv } from '@agentuity/server';
6
+ import { sandboxSetEnv, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  export const envSubcommand = createCommand({
9
9
  name: 'env',
10
10
  description: 'Set or delete environment variables on a sandbox',
11
11
  tags: ['slow', 'requires-auth'],
12
- requires: { auth: true, org: true },
12
+ requires: { auth: true, apiClient: true },
13
13
  examples: [
14
14
  {
15
15
  command: getCommand('cloud sandbox env sbx_abc123 MY_VAR=value'),
@@ -42,9 +42,12 @@ export const envSubcommand = createCommand({
42
42
  },
43
43
 
44
44
  async handler(ctx) {
45
- const { args, opts, options, auth, config, logger, orgId } = ctx;
45
+ const { args, opts, options, auth, logger, apiClient } = ctx;
46
+
47
+ // Resolve sandbox to get region and orgId using CLI API
48
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
49
+ const { region, orgId } = sandboxInfo;
46
50
 
47
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
48
51
  const client = createSandboxClient(logger, auth, region);
49
52
 
50
53
  const envMap: Record<string, string | null> = {};
@@ -2,9 +2,9 @@ import { z } from 'zod';
2
2
  import { Writable } from 'node:stream';
3
3
  import { createCommand } from '../../../types';
4
4
  import * as tui from '../../../tui';
5
- import { getSandboxRegion, createSandboxClient } from './util';
5
+ import { createSandboxClient } from './util';
6
6
  import { getCommand } from '../../../command-prefix';
7
- import { sandboxExecute, executionGet, writeAndDrain } from '@agentuity/server';
7
+ import { sandboxExecute, executionGet, writeAndDrain, sandboxResolve } from '@agentuity/server';
8
8
  import type { Logger } from '@agentuity/core';
9
9
 
10
10
  // Server-side long-poll wait duration (max 5 minutes supported by server)
@@ -23,7 +23,7 @@ export const execSubcommand = createCommand({
23
23
  aliases: ['execute'],
24
24
  description: 'Execute a command in a running sandbox',
25
25
  tags: ['slow', 'requires-auth'],
26
- requires: { auth: true, org: true },
26
+ requires: { auth: true, apiClient: true },
27
27
  examples: [
28
28
  {
29
29
  command: getCommand('cloud sandbox exec abc123 -- echo "hello"'),
@@ -34,6 +34,7 @@ export const execSubcommand = createCommand({
34
34
  description: 'Execute with timeout',
35
35
  },
36
36
  ],
37
+
37
38
  schema: {
38
39
  args: z.object({
39
40
  sandboxId: z.string().describe('Sandbox ID'),
@@ -51,8 +52,12 @@ export const execSubcommand = createCommand({
51
52
  },
52
53
 
53
54
  async handler(ctx) {
54
- const { args, opts, options, auth, config, logger, orgId } = ctx;
55
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
55
+ const { args, opts, options, auth, logger, apiClient } = ctx;
56
+
57
+ // Resolve sandbox to get region and orgId using CLI API
58
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
59
+ const { region, orgId } = sandboxInfo;
60
+
56
61
  const client = createSandboxClient(logger, auth, region);
57
62
  const started = Date.now();
58
63
 
@@ -1,10 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { cacheSandboxRegion } from './util';
4
+ import { cacheSandboxRegion, createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxGet } from '@agentuity/server';
7
- import { getGlobalCatalystAPIClient } from '../../../config';
6
+ import { sandboxGet, sandboxResolve } from '@agentuity/server';
8
7
 
9
8
  const SandboxResourcesSchema = z.object({
10
9
  memory: z.string().optional().describe('Memory limit (e.g., "512Mi", "1Gi")'),
@@ -51,7 +50,7 @@ export const getSubcommand = createCommand({
51
50
  aliases: ['info', 'show'],
52
51
  description: 'Get information about a sandbox',
53
52
  tags: ['read-only', 'fast', 'requires-auth'],
54
- requires: { auth: true, org: true },
53
+ requires: { auth: true, apiClient: true },
55
54
  idempotent: true,
56
55
  examples: [
57
56
  {
@@ -67,10 +66,17 @@ export const getSubcommand = createCommand({
67
66
  },
68
67
 
69
68
  async handler(ctx) {
70
- const { args, options, auth, logger, orgId, config } = ctx;
71
- const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
69
+ const { args, options, auth, logger, config, apiClient } = ctx;
72
70
 
73
- const result = await sandboxGet(client, { sandboxId: args.sandboxId, orgId });
71
+ // Resolve sandbox to get region and orgId using CLI API
72
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
73
+
74
+ // Create regional client and get full sandbox details
75
+ const client = createSandboxClient(logger, auth, sandboxInfo.region);
76
+ const result = await sandboxGet(client, {
77
+ sandboxId: args.sandboxId,
78
+ orgId: sandboxInfo.orgId,
79
+ });
74
80
 
75
81
  // Cache the region for future lookups
76
82
  if (result.region) {
@@ -2,59 +2,18 @@ import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
4
  import { getCommand } from '../../../command-prefix';
5
- import { sandboxList } from '@agentuity/server';
6
- import { getGlobalCatalystAPIClient } from '../../../config';
7
- import type { SandboxStatus } from '@agentuity/core';
8
-
9
- const SandboxRuntimeInfoSchema = z.object({
10
- id: z.string().describe('Runtime ID'),
11
- name: z.string().describe('Runtime name'),
12
- iconUrl: z.string().optional().describe('URL for runtime icon'),
13
- brandColor: z.string().optional().describe('Brand color for the runtime'),
14
- tags: z.array(z.string()).optional().describe('Runtime tags'),
15
- });
16
-
17
- const SandboxSnapshotUserInfoSchema = z.object({
18
- id: z.string().describe('User ID'),
19
- firstName: z.string().optional().describe("User's first name"),
20
- lastName: z.string().optional().describe("User's last name"),
21
- });
22
-
23
- const SandboxSnapshotOrgInfoSchema = z.object({
24
- id: z.string().describe('Organization ID'),
25
- name: z.string().describe('Organization name'),
26
- slug: z.string().optional().describe('Organization slug'),
27
- });
28
-
29
- const SandboxSnapshotInfoSchema = z.discriminatedUnion('public', [
30
- z.object({
31
- id: z.string().describe('Snapshot ID'),
32
- name: z.string().optional().describe('Snapshot name'),
33
- tag: z.string().nullable().optional().describe('Snapshot tag'),
34
- fullName: z.string().optional().describe('Full name with org slug'),
35
- public: z.literal(true).describe('Public snapshot'),
36
- org: SandboxSnapshotOrgInfoSchema.describe('Organization that owns the public snapshot'),
37
- }),
38
- z.object({
39
- id: z.string().describe('Snapshot ID'),
40
- name: z.string().optional().describe('Snapshot name'),
41
- tag: z.string().nullable().optional().describe('Snapshot tag'),
42
- fullName: z.string().optional().describe('Full name with org slug'),
43
- public: z.literal(false).describe('Private snapshot'),
44
- user: SandboxSnapshotUserInfoSchema.describe('User who created the private snapshot'),
45
- }),
46
- ]);
5
+ import { cliSandboxList } from '@agentuity/server';
47
6
 
48
7
  const SandboxInfoSchema = z.object({
49
- sandboxId: z.string().describe('Sandbox ID'),
50
- name: z.string().optional().describe('Sandbox name'),
51
- description: z.string().optional().describe('Sandbox description'),
8
+ id: z.string().describe('Sandbox ID'),
9
+ name: z.string().nullable().describe('Sandbox name'),
10
+ description: z.string().nullable().describe('Sandbox description'),
52
11
  status: z.string().describe('Current status'),
53
- createdAt: z.string().describe('Creation timestamp'),
54
- region: z.string().optional().describe('Region where sandbox is running'),
55
- runtime: SandboxRuntimeInfoSchema.optional().describe('Runtime information'),
56
- snapshot: SandboxSnapshotInfoSchema.optional().describe('Snapshot information'),
57
- executions: z.number().describe('Number of executions'),
12
+ createdAt: z.string().nullable().describe('Creation timestamp'),
13
+ region: z.string().nullable().describe('Region where sandbox is running'),
14
+ orgId: z.string().describe('Organization ID'),
15
+ orgName: z.string().nullable().describe('Organization name'),
16
+ projectId: z.string().nullable().describe('Project ID'),
58
17
  });
59
18
 
60
19
  const SandboxListResponseSchema = z.object({
@@ -67,7 +26,7 @@ export const listSubcommand = createCommand({
67
26
  aliases: ['ls'],
68
27
  description: 'List sandboxes with optional filtering',
69
28
  tags: ['read-only', 'slow', 'requires-auth'],
70
- requires: { auth: true, org: true },
29
+ requires: { auth: true, apiClient: true },
71
30
  optional: { project: true },
72
31
  idempotent: true,
73
32
  pagination: {
@@ -92,6 +51,10 @@ export const listSubcommand = createCommand({
92
51
  command: getCommand('cloud sandbox list --project-id proj_123'),
93
52
  description: 'List sandboxes for a specific project',
94
53
  },
54
+ {
55
+ command: getCommand('cloud sandbox list --org-id org_123'),
56
+ description: 'List sandboxes for a specific organization',
57
+ },
95
58
  {
96
59
  command: getCommand('cloud sandbox list --limit 10 --offset 20'),
97
60
  description: 'List with pagination',
@@ -108,6 +71,7 @@ export const listSubcommand = createCommand({
108
71
  .optional()
109
72
  .describe('Filter by status'),
110
73
  projectId: z.string().optional().describe('Filter by project ID'),
74
+ orgId: z.string().optional().describe('Filter by organization ID'),
111
75
  all: z.boolean().optional().describe('List all sandboxes regardless of project context'),
112
76
  limit: z.number().optional().describe('Maximum number of results (default: 50, max: 100)'),
113
77
  offset: z.number().optional().describe('Pagination offset'),
@@ -116,57 +80,67 @@ export const listSubcommand = createCommand({
116
80
  },
117
81
 
118
82
  async handler(ctx) {
119
- const { opts, options, auth, project, logger, orgId, config } = ctx;
120
- const client = await getGlobalCatalystAPIClient(logger, auth, config?.name);
83
+ const { opts, options, project, apiClient } = ctx;
121
84
 
122
85
  const projectId = opts.all ? undefined : opts.projectId || project?.projectId;
123
86
 
124
- const result = await sandboxList(client, {
125
- orgId,
87
+ const result = await cliSandboxList(apiClient, {
126
88
  projectId,
127
- status: opts.status as SandboxStatus | undefined,
89
+ orgId: opts.orgId,
90
+ status: opts.status,
128
91
  limit: opts.limit,
129
92
  offset: opts.offset,
130
93
  });
131
94
 
95
+ // Check if results span multiple orgs
96
+ const uniqueOrgIds = new Set(result.sandboxes.map((s) => s.orgId));
97
+ const showOrgColumn = uniqueOrgIds.size > 1;
98
+
132
99
  if (!options.json) {
133
100
  if (result.sandboxes.length === 0) {
134
101
  tui.info('No sandboxes found');
135
102
  } else {
136
103
  const tableData = result.sandboxes.map((sandbox) => {
137
- return {
138
- ID: sandbox.sandboxId,
104
+ const row: Record<string, string | number> = {
105
+ ID: sandbox.id,
139
106
  Name: sandbox.name || '-',
140
- Runtime: sandbox.runtime?.name || '-',
141
107
  Status: sandbox.status,
142
- 'Created At': sandbox.createdAt,
143
- Executions: sandbox.executions,
108
+ Region: sandbox.region || '-',
109
+ 'Created At': sandbox.createdAt || '-',
144
110
  };
111
+ if (showOrgColumn) {
112
+ row.Organization = sandbox.orgName || sandbox.orgId;
113
+ }
114
+ return row;
145
115
  });
146
- tui.table(tableData, [
147
- { name: 'ID', alignment: 'left' },
148
- { name: 'Name', alignment: 'left' },
149
- { name: 'Runtime', alignment: 'left' },
150
- { name: 'Status', alignment: 'left' },
151
- { name: 'Created At', alignment: 'left' },
152
- { name: 'Executions', alignment: 'right' },
153
- ]);
154
116
 
117
+ const columns = [
118
+ { name: 'ID', alignment: 'left' as const },
119
+ { name: 'Name', alignment: 'left' as const },
120
+ { name: 'Status', alignment: 'left' as const },
121
+ { name: 'Region', alignment: 'left' as const },
122
+ { name: 'Created At', alignment: 'left' as const },
123
+ ];
124
+ if (showOrgColumn) {
125
+ columns.push({ name: 'Organization', alignment: 'left' as const });
126
+ }
127
+
128
+ tui.table(tableData, columns);
155
129
  tui.info(`Total: ${result.total} ${tui.plural(result.total, 'sandbox', 'sandboxes')}`);
156
130
  }
157
131
  }
158
132
 
159
133
  return {
160
134
  sandboxes: result.sandboxes.map((s) => ({
161
- sandboxId: s.sandboxId,
135
+ id: s.id,
162
136
  name: s.name,
163
137
  description: s.description,
164
138
  status: s.status,
165
139
  createdAt: s.createdAt,
166
140
  region: s.region,
167
- runtime: s.runtime,
168
- snapshot: s.snapshot,
169
- executions: s.executions,
141
+ orgId: s.orgId,
142
+ orgName: s.orgName,
143
+ projectId: s.projectId,
170
144
  })),
171
145
  total: result.total,
172
146
  };
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { getSandboxRegion, createSandboxClient } from './util';
4
+ import { createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxListFiles } from '@agentuity/server';
6
+ import { sandboxListFiles, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  const FileInfoSchema = z.object({
9
9
  path: z.string(),
@@ -23,7 +23,7 @@ export const lsSubcommand = createCommand({
23
23
  aliases: ['lsf'],
24
24
  description: 'List files in a sandbox directory',
25
25
  tags: ['slow', 'requires-auth'],
26
- requires: { auth: true, org: true },
26
+ requires: { auth: true, apiClient: true },
27
27
  examples: [
28
28
  {
29
29
  command: getCommand('cloud sandbox files sbx_abc123'),
@@ -61,8 +61,12 @@ export const lsSubcommand = createCommand({
61
61
  },
62
62
 
63
63
  async handler(ctx) {
64
- const { args, opts, options, auth, config, logger, orgId } = ctx;
65
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
64
+ const { args, opts, options, auth, logger, apiClient } = ctx;
65
+
66
+ // Resolve sandbox to get region and orgId using CLI API
67
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
68
+ const { region, orgId } = sandboxInfo;
69
+
66
70
  const client = createSandboxClient(logger, auth, region);
67
71
 
68
72
  const result = await sandboxListFiles(client, {
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { createSandboxClient, getSandboxRegion } from './util';
4
+ import { createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxMkDir } from '@agentuity/server';
6
+ import { sandboxMkDir, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  const MkDirResponseSchema = z.object({
9
9
  success: z.boolean(),
@@ -14,7 +14,7 @@ export const mkdirSubcommand = createCommand({
14
14
  name: 'mkdir',
15
15
  description: 'Create a directory in a sandbox',
16
16
  tags: ['slow', 'requires-auth'],
17
- requires: { auth: true, org: true },
17
+ requires: { auth: true, apiClient: true },
18
18
  examples: [
19
19
  {
20
20
  command: getCommand('cloud sandbox mkdir sbx_abc123 /path/to/dir'),
@@ -44,8 +44,12 @@ export const mkdirSubcommand = createCommand({
44
44
  },
45
45
 
46
46
  async handler(ctx) {
47
- const { args, opts, options, auth, logger, orgId, config } = ctx;
48
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
47
+ const { args, opts, options, auth, logger, apiClient } = ctx;
48
+
49
+ // Resolve sandbox to get region and orgId using CLI API
50
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
51
+ const { region, orgId } = sandboxInfo;
52
+
49
53
  const client = createSandboxClient(logger, auth, region);
50
54
 
51
55
  await sandboxMkDir(client, {
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { getSandboxRegion, createSandboxClient } from './util';
4
+ import { createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxRmFile } from '@agentuity/server';
6
+ import { sandboxRmFile, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  const RmFileResponseSchema = z.object({
9
9
  success: z.boolean(),
@@ -14,7 +14,7 @@ export const rmSubcommand = createCommand({
14
14
  name: 'rm',
15
15
  description: 'Remove a file from a sandbox',
16
16
  tags: ['slow', 'requires-auth'],
17
- requires: { auth: true, org: true },
17
+ requires: { auth: true, apiClient: true },
18
18
  examples: [
19
19
  {
20
20
  command: getCommand('cloud sandbox rm sbx_abc123 /path/to/file.txt'),
@@ -31,8 +31,12 @@ export const rmSubcommand = createCommand({
31
31
  },
32
32
 
33
33
  async handler(ctx) {
34
- const { args, options, auth, logger, orgId, config } = ctx;
35
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
34
+ const { args, options, auth, logger, apiClient } = ctx;
35
+
36
+ // Resolve sandbox to get region and orgId using CLI API
37
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
38
+ const { region, orgId } = sandboxInfo;
39
+
36
40
  const client = createSandboxClient(logger, auth, region);
37
41
 
38
42
  await sandboxRmFile(client, {
@@ -1,9 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { createCommand } from '../../../types';
3
3
  import * as tui from '../../../tui';
4
- import { createSandboxClient, getSandboxRegion } from './util';
4
+ import { createSandboxClient } from './util';
5
5
  import { getCommand } from '../../../command-prefix';
6
- import { sandboxRmDir } from '@agentuity/server';
6
+ import { sandboxRmDir, sandboxResolve } from '@agentuity/server';
7
7
 
8
8
  const RmDirResponseSchema = z.object({
9
9
  success: z.boolean(),
@@ -14,7 +14,7 @@ export const rmdirSubcommand = createCommand({
14
14
  name: 'rmdir',
15
15
  description: 'Remove a directory from a sandbox',
16
16
  tags: ['slow', 'requires-auth'],
17
- requires: { auth: true, org: true },
17
+ requires: { auth: true, apiClient: true },
18
18
  examples: [
19
19
  {
20
20
  command: getCommand('cloud sandbox rmdir sbx_abc123 /path/to/dir'),
@@ -44,8 +44,12 @@ export const rmdirSubcommand = createCommand({
44
44
  },
45
45
 
46
46
  async handler(ctx) {
47
- const { args, opts, options, auth, logger, orgId, config } = ctx;
48
- const region = await getSandboxRegion(logger, auth, config?.name, args.sandboxId, orgId);
47
+ const { args, opts, options, auth, logger, apiClient } = ctx;
48
+
49
+ // Resolve sandbox to get region and orgId using CLI API
50
+ const sandboxInfo = await sandboxResolve(apiClient, args.sandboxId);
51
+ const { region, orgId } = sandboxInfo;
52
+
49
53
  const client = createSandboxClient(logger, auth, region);
50
54
 
51
55
  await sandboxRmDir(client, {
@@ -128,7 +128,7 @@ export const runSubcommand = createCommand({
128
128
  }
129
129
  }
130
130
 
131
- const files = parseFileArgs(opts.file);
131
+ const files = await parseFileArgs(opts.file);
132
132
  const hasFiles = files.length > 0;
133
133
 
134
134
  const abortController = new AbortController();
@@ -65,26 +65,26 @@ function buildFileTree(files: SnapshotFileInfo[]): TreeNode {
65
65
  const parts = file.path.split('/');
66
66
  let current = root;
67
67
 
68
- for (let i = 0; i < parts.length; i++) {
69
- const part = parts[i];
70
- if (!part) continue;
71
- if (!current.children.has(part)) {
72
- current.children.set(part, {
73
- name: part,
74
- isFile: i === parts.length - 1,
75
- children: new Map(),
76
- });
77
- }
78
- const child = current.children.get(part);
79
- if (!child) continue;
80
- current = child;
68
+ for (let i = 0; i < parts.length; i++) {
69
+ const part = parts[i];
70
+ if (!part) continue;
71
+ if (!current.children.has(part)) {
72
+ current.children.set(part, {
73
+ name: part,
74
+ isFile: i === parts.length - 1,
75
+ children: new Map(),
76
+ });
77
+ }
78
+ const child = current.children.get(part);
79
+ if (!child) continue;
80
+ current = child;
81
81
 
82
- if (i === parts.length - 1) {
83
- current.size = file.size;
84
- current.isFile = true;
82
+ if (i === parts.length - 1) {
83
+ current.size = file.size;
84
+ current.isFile = true;
85
+ }
85
86
  }
86
87
  }
87
- }
88
88
 
89
89
  return root;
90
90
  }
@@ -647,15 +647,15 @@ export const buildSubcommand = createCommand({
647
647
  }
648
648
  }
649
649
 
650
- if (finalEnv && Object.keys(finalEnv).length > 0) {
651
- console.log('');
652
- tui.info('Environment:');
653
- for (const [envKey, envValue] of Object.entries(finalEnv)) {
654
- console.log(` ${tui.muted('•')} ${envKey}=${tui.maskSecret(envValue)}`);
650
+ if (finalEnv && Object.keys(finalEnv).length > 0) {
651
+ console.log('');
652
+ tui.info('Environment:');
653
+ for (const [envKey, envValue] of Object.entries(finalEnv)) {
654
+ console.log(` ${tui.muted('•')} ${envKey}=${tui.maskSecret(envValue)}`);
655
+ }
655
656
  }
656
- }
657
657
 
658
- if (fileList.length > 0) {
658
+ if (fileList.length > 0) {
659
659
  console.log('');
660
660
  tui.info('Files:');
661
661
  printFileTree(fileList);
@@ -949,15 +949,15 @@ export const buildSubcommand = createCommand({
949
949
  }
950
950
  }
951
951
 
952
- if (finalEnv && Object.keys(finalEnv).length > 0) {
953
- console.log('');
954
- tui.info('Environment:');
955
- for (const [envKey, envValue] of Object.entries(finalEnv)) {
956
- console.log(` ${tui.muted('•')} ${envKey}=${tui.maskSecret(envValue)}`);
952
+ if (finalEnv && Object.keys(finalEnv).length > 0) {
953
+ console.log('');
954
+ tui.info('Environment:');
955
+ for (const [envKey, envValue] of Object.entries(finalEnv)) {
956
+ console.log(` ${tui.muted('•')} ${envKey}=${tui.maskSecret(envValue)}`);
957
+ }
957
958
  }
958
- }
959
959
 
960
- if (finalMetadata && Object.keys(finalMetadata).length > 0) {
960
+ if (finalMetadata && Object.keys(finalMetadata).length > 0) {
961
961
  console.log('');
962
962
  tui.info('Metadata:');
963
963
  for (const key of Object.keys(finalMetadata)) {