@agentuity/cli 0.0.105 → 0.0.107

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 (225) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +93 -21
  3. package/dist/cli.js.map +1 -1
  4. package/dist/cmd/build/ast.d.ts.map +1 -1
  5. package/dist/cmd/build/ast.js +130 -4
  6. package/dist/cmd/build/ast.js.map +1 -1
  7. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  8. package/dist/cmd/build/entry-generator.js +8 -2
  9. package/dist/cmd/build/entry-generator.js.map +1 -1
  10. package/dist/cmd/build/vite/metadata-generator.d.ts +2 -1
  11. package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
  12. package/dist/cmd/build/vite/metadata-generator.js +14 -0
  13. package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
  14. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  15. package/dist/cmd/build/vite/registry-generator.js +8 -9
  16. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  17. package/dist/cmd/build/vite/vite-builder.d.ts +2 -1
  18. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  19. package/dist/cmd/build/vite/vite-builder.js +1 -0
  20. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  21. package/dist/cmd/build/vite-bundler.d.ts +2 -1
  22. package/dist/cmd/build/vite-bundler.d.ts.map +1 -1
  23. package/dist/cmd/build/vite-bundler.js +2 -1
  24. package/dist/cmd/build/vite-bundler.js.map +1 -1
  25. package/dist/cmd/cloud/db/create.d.ts.map +1 -1
  26. package/dist/cmd/cloud/db/create.js +11 -2
  27. package/dist/cmd/cloud/db/create.js.map +1 -1
  28. package/dist/cmd/cloud/db/delete.d.ts.map +1 -1
  29. package/dist/cmd/cloud/db/delete.js +13 -2
  30. package/dist/cmd/cloud/db/delete.js.map +1 -1
  31. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  32. package/dist/cmd/cloud/deploy.js +7 -42
  33. package/dist/cmd/cloud/deploy.js.map +1 -1
  34. package/dist/cmd/cloud/env/delete.js +1 -1
  35. package/dist/cmd/cloud/env/delete.js.map +1 -1
  36. package/dist/cmd/cloud/env/import.js +4 -4
  37. package/dist/cmd/cloud/env/import.js.map +1 -1
  38. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  39. package/dist/cmd/cloud/env/pull.js +7 -9
  40. package/dist/cmd/cloud/env/pull.js.map +1 -1
  41. package/dist/cmd/cloud/env/push.js +2 -2
  42. package/dist/cmd/cloud/env/push.js.map +1 -1
  43. package/dist/cmd/cloud/env/set.js +3 -3
  44. package/dist/cmd/cloud/env/set.js.map +1 -1
  45. package/dist/cmd/cloud/index.d.ts.map +1 -1
  46. package/dist/cmd/cloud/index.js +2 -0
  47. package/dist/cmd/cloud/index.js.map +1 -1
  48. package/dist/cmd/cloud/sandbox/cp.d.ts +3 -0
  49. package/dist/cmd/cloud/sandbox/cp.d.ts.map +1 -0
  50. package/dist/cmd/cloud/sandbox/cp.js +334 -0
  51. package/dist/cmd/cloud/sandbox/cp.js.map +1 -0
  52. package/dist/cmd/cloud/sandbox/create.d.ts +3 -0
  53. package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -0
  54. package/dist/cmd/cloud/sandbox/create.js +105 -0
  55. package/dist/cmd/cloud/sandbox/create.js.map +1 -0
  56. package/dist/cmd/cloud/sandbox/delete.d.ts +3 -0
  57. package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -0
  58. package/dist/cmd/cloud/sandbox/delete.js +72 -0
  59. package/dist/cmd/cloud/sandbox/delete.js.map +1 -0
  60. package/dist/cmd/cloud/sandbox/exec.d.ts +3 -0
  61. package/dist/cmd/cloud/sandbox/exec.d.ts.map +1 -0
  62. package/dist/cmd/cloud/sandbox/exec.js +211 -0
  63. package/dist/cmd/cloud/sandbox/exec.js.map +1 -0
  64. package/dist/cmd/cloud/sandbox/execution/get.d.ts +3 -0
  65. package/dist/cmd/cloud/sandbox/execution/get.d.ts.map +1 -0
  66. package/dist/cmd/cloud/sandbox/execution/get.js +96 -0
  67. package/dist/cmd/cloud/sandbox/execution/get.js.map +1 -0
  68. package/dist/cmd/cloud/sandbox/execution/index.d.ts +3 -0
  69. package/dist/cmd/cloud/sandbox/execution/index.d.ts.map +1 -0
  70. package/dist/cmd/cloud/sandbox/execution/index.js +24 -0
  71. package/dist/cmd/cloud/sandbox/execution/index.js.map +1 -0
  72. package/dist/cmd/cloud/sandbox/execution/list.d.ts +3 -0
  73. package/dist/cmd/cloud/sandbox/execution/list.d.ts.map +1 -0
  74. package/dist/cmd/cloud/sandbox/execution/list.js +100 -0
  75. package/dist/cmd/cloud/sandbox/execution/list.js.map +1 -0
  76. package/dist/cmd/cloud/sandbox/get.d.ts +3 -0
  77. package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -0
  78. package/dist/cmd/cloud/sandbox/get.js +95 -0
  79. package/dist/cmd/cloud/sandbox/get.js.map +1 -0
  80. package/dist/cmd/cloud/sandbox/index.d.ts +3 -0
  81. package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -0
  82. package/dist/cmd/cloud/sandbox/index.js +45 -0
  83. package/dist/cmd/cloud/sandbox/index.js.map +1 -0
  84. package/dist/cmd/cloud/sandbox/list.d.ts +3 -0
  85. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -0
  86. package/dist/cmd/cloud/sandbox/list.js +120 -0
  87. package/dist/cmd/cloud/sandbox/list.js.map +1 -0
  88. package/dist/cmd/cloud/sandbox/run.d.ts +3 -0
  89. package/dist/cmd/cloud/sandbox/run.d.ts.map +1 -0
  90. package/dist/cmd/cloud/sandbox/run.js +152 -0
  91. package/dist/cmd/cloud/sandbox/run.js.map +1 -0
  92. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts +3 -0
  93. package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -0
  94. package/dist/cmd/cloud/sandbox/snapshot/create.js +65 -0
  95. package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -0
  96. package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts +3 -0
  97. package/dist/cmd/cloud/sandbox/snapshot/delete.d.ts.map +1 -0
  98. package/dist/cmd/cloud/sandbox/snapshot/delete.js +66 -0
  99. package/dist/cmd/cloud/sandbox/snapshot/delete.js.map +1 -0
  100. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts +3 -0
  101. package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -0
  102. package/dist/cmd/cloud/sandbox/snapshot/get.js +154 -0
  103. package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -0
  104. package/dist/cmd/cloud/sandbox/snapshot/index.d.ts +3 -0
  105. package/dist/cmd/cloud/sandbox/snapshot/index.d.ts.map +1 -0
  106. package/dist/cmd/cloud/sandbox/snapshot/index.js +27 -0
  107. package/dist/cmd/cloud/sandbox/snapshot/index.js.map +1 -0
  108. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts +3 -0
  109. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -0
  110. package/dist/cmd/cloud/sandbox/snapshot/list.js +83 -0
  111. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -0
  112. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts +3 -0
  113. package/dist/cmd/cloud/sandbox/snapshot/tag.d.ts.map +1 -0
  114. package/dist/cmd/cloud/sandbox/snapshot/tag.js +63 -0
  115. package/dist/cmd/cloud/sandbox/snapshot/tag.js.map +1 -0
  116. package/dist/cmd/cloud/sandbox/util.d.ts +15 -0
  117. package/dist/cmd/cloud/sandbox/util.d.ts.map +1 -0
  118. package/dist/cmd/cloud/sandbox/util.js +50 -0
  119. package/dist/cmd/cloud/sandbox/util.js.map +1 -0
  120. package/dist/cmd/cloud/secret/delete.d.ts.map +1 -1
  121. package/dist/cmd/cloud/secret/delete.js +3 -3
  122. package/dist/cmd/cloud/secret/delete.js.map +1 -1
  123. package/dist/cmd/cloud/secret/import.js +6 -6
  124. package/dist/cmd/cloud/secret/import.js.map +1 -1
  125. package/dist/cmd/cloud/secret/index.d.ts.map +1 -1
  126. package/dist/cmd/cloud/secret/index.js +1 -0
  127. package/dist/cmd/cloud/secret/index.js.map +1 -1
  128. package/dist/cmd/cloud/secret/pull.d.ts.map +1 -1
  129. package/dist/cmd/cloud/secret/pull.js +7 -9
  130. package/dist/cmd/cloud/secret/pull.js.map +1 -1
  131. package/dist/cmd/cloud/secret/push.js +3 -3
  132. package/dist/cmd/cloud/secret/push.js.map +1 -1
  133. package/dist/cmd/cloud/secret/set.d.ts.map +1 -1
  134. package/dist/cmd/cloud/secret/set.js +3 -3
  135. package/dist/cmd/cloud/secret/set.js.map +1 -1
  136. package/dist/cmd/cloud/storage/create.d.ts.map +1 -1
  137. package/dist/cmd/cloud/storage/create.js +13 -2
  138. package/dist/cmd/cloud/storage/create.js.map +1 -1
  139. package/dist/cmd/cloud/storage/delete.d.ts.map +1 -1
  140. package/dist/cmd/cloud/storage/delete.js +13 -2
  141. package/dist/cmd/cloud/storage/delete.js.map +1 -1
  142. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  143. package/dist/cmd/cloud/stream/list.js +2 -13
  144. package/dist/cmd/cloud/stream/list.js.map +1 -1
  145. package/dist/cmd/dev/index.d.ts.map +1 -1
  146. package/dist/cmd/dev/index.js +1 -0
  147. package/dist/cmd/dev/index.js.map +1 -1
  148. package/dist/cmd/profile/create.d.ts.map +1 -1
  149. package/dist/cmd/profile/create.js +1 -0
  150. package/dist/cmd/profile/create.js.map +1 -1
  151. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  152. package/dist/cmd/project/template-flow.js +27 -10
  153. package/dist/cmd/project/template-flow.js.map +1 -1
  154. package/dist/config.d.ts +0 -2
  155. package/dist/config.d.ts.map +1 -1
  156. package/dist/config.js +3 -0
  157. package/dist/config.js.map +1 -1
  158. package/dist/env-util.d.ts +16 -8
  159. package/dist/env-util.d.ts.map +1 -1
  160. package/dist/env-util.js +46 -18
  161. package/dist/env-util.js.map +1 -1
  162. package/dist/tui.d.ts +20 -3
  163. package/dist/tui.d.ts.map +1 -1
  164. package/dist/tui.js +82 -23
  165. package/dist/tui.js.map +1 -1
  166. package/dist/types.d.ts +42 -4
  167. package/dist/types.d.ts.map +1 -1
  168. package/dist/types.js +23 -0
  169. package/dist/types.js.map +1 -1
  170. package/package.json +4 -4
  171. package/src/cli.ts +99 -21
  172. package/src/cmd/build/ast.ts +163 -4
  173. package/src/cmd/build/entry-generator.ts +8 -2
  174. package/src/cmd/build/vite/metadata-generator.ts +17 -1
  175. package/src/cmd/build/vite/registry-generator.ts +8 -11
  176. package/src/cmd/build/vite/vite-builder.ts +3 -1
  177. package/src/cmd/build/vite-bundler.ts +4 -1
  178. package/src/cmd/cloud/db/create.ts +13 -2
  179. package/src/cmd/cloud/db/delete.ts +15 -2
  180. package/src/cmd/cloud/deploy.ts +7 -43
  181. package/src/cmd/cloud/env/delete.ts +1 -1
  182. package/src/cmd/cloud/env/import.ts +4 -4
  183. package/src/cmd/cloud/env/pull.ts +7 -16
  184. package/src/cmd/cloud/env/push.ts +2 -2
  185. package/src/cmd/cloud/env/set.ts +3 -3
  186. package/src/cmd/cloud/index.ts +2 -0
  187. package/src/cmd/cloud/sandbox/cp.ts +531 -0
  188. package/src/cmd/cloud/sandbox/create.ts +114 -0
  189. package/src/cmd/cloud/sandbox/delete.ts +80 -0
  190. package/src/cmd/cloud/sandbox/exec.ts +254 -0
  191. package/src/cmd/cloud/sandbox/execution/get.ts +106 -0
  192. package/src/cmd/cloud/sandbox/execution/index.ts +25 -0
  193. package/src/cmd/cloud/sandbox/execution/list.ts +111 -0
  194. package/src/cmd/cloud/sandbox/get.ts +104 -0
  195. package/src/cmd/cloud/sandbox/index.ts +46 -0
  196. package/src/cmd/cloud/sandbox/list.ts +129 -0
  197. package/src/cmd/cloud/sandbox/run.ts +170 -0
  198. package/src/cmd/cloud/sandbox/snapshot/create.ts +71 -0
  199. package/src/cmd/cloud/sandbox/snapshot/delete.ts +74 -0
  200. package/src/cmd/cloud/sandbox/snapshot/get.ts +188 -0
  201. package/src/cmd/cloud/sandbox/snapshot/index.ts +28 -0
  202. package/src/cmd/cloud/sandbox/snapshot/list.ts +90 -0
  203. package/src/cmd/cloud/sandbox/snapshot/tag.ts +70 -0
  204. package/src/cmd/cloud/sandbox/util.ts +59 -0
  205. package/src/cmd/cloud/secret/delete.ts +8 -3
  206. package/src/cmd/cloud/secret/import.ts +6 -6
  207. package/src/cmd/cloud/secret/index.ts +1 -0
  208. package/src/cmd/cloud/secret/pull.ts +7 -16
  209. package/src/cmd/cloud/secret/push.ts +3 -3
  210. package/src/cmd/cloud/secret/set.ts +8 -3
  211. package/src/cmd/cloud/storage/create.ts +15 -2
  212. package/src/cmd/cloud/storage/delete.ts +15 -2
  213. package/src/cmd/cloud/stream/list.ts +2 -9
  214. package/src/cmd/dev/index.ts +1 -0
  215. package/src/cmd/profile/create.ts +1 -0
  216. package/src/cmd/project/template-flow.ts +29 -13
  217. package/src/config.ts +3 -0
  218. package/src/env-util.ts +52 -21
  219. package/src/tui.ts +131 -39
  220. package/src/types.ts +43 -16
  221. package/dist/schemas/deploy.d.ts +0 -24
  222. package/dist/schemas/deploy.d.ts.map +0 -1
  223. package/dist/schemas/deploy.js +0 -26
  224. package/dist/schemas/deploy.js.map +0 -1
  225. package/src/schemas/deploy.ts +0 -28
@@ -0,0 +1,334 @@
1
+ import { z } from 'zod';
2
+ import { readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from 'node:fs';
3
+ import { dirname, resolve, basename, join, relative } from 'node:path';
4
+ import { createCommand } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+ import { createSandboxClient } from './util';
7
+ import { getCommand } from '../../../command-prefix';
8
+ import { sandboxWriteFiles, sandboxReadFile, sandboxExecute, executionGet, } from '@agentuity/server';
9
+ const POLL_INTERVAL_MS = 500;
10
+ const MAX_POLL_ATTEMPTS = 600;
11
+ function parsePath(pathArg) {
12
+ const colonIndex = pathArg.indexOf(':');
13
+ if (colonIndex === -1) {
14
+ return { sandboxId: null, path: pathArg };
15
+ }
16
+ const prefix = pathArg.slice(0, colonIndex);
17
+ const path = pathArg.slice(colonIndex + 1);
18
+ if (prefix.startsWith('snbx_') || prefix.startsWith('sbx_')) {
19
+ return { sandboxId: prefix, path };
20
+ }
21
+ return { sandboxId: null, path: pathArg };
22
+ }
23
+ const SandboxCpResponseSchema = z.object({
24
+ source: z.string().describe('Source path'),
25
+ destination: z.string().describe('Destination path'),
26
+ bytesTransferred: z.number().describe('Number of bytes transferred'),
27
+ filesTransferred: z.number().describe('Number of files transferred'),
28
+ });
29
+ export const cpSubcommand = createCommand({
30
+ name: 'cp',
31
+ aliases: ['copy'],
32
+ description: 'Copy files or directories to or from a sandbox',
33
+ tags: ['slow', 'requires-auth'],
34
+ requires: { auth: true, region: true, org: true },
35
+ examples: [
36
+ {
37
+ command: getCommand('cloud sandbox cp ./local-file.txt snbx_abc123:/path/to/file.txt'),
38
+ description: 'Copy a local file to a sandbox',
39
+ },
40
+ {
41
+ command: getCommand('cloud sandbox cp snbx_abc123:/path/to/file.txt ./local-file.txt'),
42
+ description: 'Copy a file from a sandbox to local',
43
+ },
44
+ {
45
+ command: getCommand('cloud sandbox cp --recursive ./local-dir snbx_abc123:/path/to/dir'),
46
+ description: 'Copy a local directory to a sandbox recursively',
47
+ },
48
+ {
49
+ command: getCommand('cloud sandbox cp -r snbx_abc123:/path/to/dir ./local-dir'),
50
+ description: 'Copy a directory from a sandbox to local recursively',
51
+ },
52
+ ],
53
+ schema: {
54
+ args: z.object({
55
+ source: z.string().describe('Source path (local path or sandboxId:/remote/path)'),
56
+ destination: z
57
+ .string()
58
+ .describe('Destination path (local path or sandboxId:/remote/path)'),
59
+ }),
60
+ options: z.object({
61
+ timeout: z.string().optional().describe('Operation timeout (e.g., "5m", "1h")'),
62
+ recursive: z.boolean().default(false).optional().describe('Copy directories recursively'),
63
+ }),
64
+ aliases: {
65
+ recursive: ['r'],
66
+ },
67
+ response: SandboxCpResponseSchema,
68
+ },
69
+ async handler(ctx) {
70
+ const { args, opts, options, auth, region, logger, orgId } = ctx;
71
+ const source = parsePath(args.source);
72
+ const destination = parsePath(args.destination);
73
+ if (source.sandboxId && destination.sandboxId) {
74
+ logger.fatal('Cannot copy between two sandboxes. Use a local path as source or destination.');
75
+ }
76
+ if (!source.sandboxId && !destination.sandboxId) {
77
+ logger.fatal('At least one path must include a sandbox ID (e.g., snbx_abc123:/path/to/file)');
78
+ }
79
+ const client = createSandboxClient(logger, auth, region);
80
+ const recursive = opts.recursive ?? false;
81
+ if (source.sandboxId) {
82
+ return await downloadFromSandbox(client, logger, orgId, source.sandboxId, source.path, destination.path, opts.timeout, recursive, options.json ?? false);
83
+ }
84
+ else {
85
+ return await uploadToSandbox(client, logger, orgId, destination.sandboxId, source.path, destination.path, opts.timeout, recursive, options.json ?? false);
86
+ }
87
+ },
88
+ });
89
+ function getAllFiles(dirPath, basePath = dirPath) {
90
+ const files = [];
91
+ const entries = readdirSync(dirPath, { withFileTypes: true });
92
+ for (const entry of entries) {
93
+ const fullPath = join(dirPath, entry.name);
94
+ if (entry.isDirectory()) {
95
+ files.push(...getAllFiles(fullPath, basePath));
96
+ }
97
+ else if (entry.isFile()) {
98
+ files.push(fullPath);
99
+ }
100
+ }
101
+ return files;
102
+ }
103
+ async function uploadToSandbox(client, logger, orgId, sandboxId, localPath, remotePath, timeout, recursive, jsonOutput) {
104
+ const resolvedPath = resolve(localPath);
105
+ if (!(await Bun.file(resolvedPath).exists())) {
106
+ const stat = statSync(resolvedPath, { throwIfNoEntry: false });
107
+ if (!stat) {
108
+ logger.fatal(`Local path not found: ${localPath}`);
109
+ }
110
+ }
111
+ const stat = statSync(resolvedPath);
112
+ if (stat.isDirectory()) {
113
+ if (!recursive) {
114
+ logger.fatal(`${localPath} is a directory. Use -r/--recursive to copy directories.`);
115
+ }
116
+ return await uploadDirectory(client, logger, orgId, sandboxId, resolvedPath, remotePath, timeout, jsonOutput);
117
+ }
118
+ return await uploadSingleFile(client, logger, orgId, sandboxId, resolvedPath, localPath, remotePath, timeout, jsonOutput);
119
+ }
120
+ async function uploadSingleFile(client, logger, orgId, sandboxId, resolvedPath, displayPath, remotePath, _timeout, jsonOutput) {
121
+ const buffer = readFileSync(resolvedPath);
122
+ let targetPath = remotePath;
123
+ if (!remotePath || remotePath === '' || remotePath.endsWith('/')) {
124
+ const baseDir = remotePath || '';
125
+ targetPath = baseDir ? baseDir + basename(resolvedPath) : basename(resolvedPath);
126
+ }
127
+ const files = [{ path: targetPath, content: buffer }];
128
+ await sandboxWriteFiles(client, { sandboxId, files, orgId });
129
+ if (!jsonOutput) {
130
+ tui.success(`Copied ${displayPath} → ${sandboxId}:${targetPath} (${buffer.length} bytes)`);
131
+ }
132
+ return {
133
+ source: displayPath,
134
+ destination: `${sandboxId}:${targetPath}`,
135
+ bytesTransferred: buffer.length,
136
+ filesTransferred: 1,
137
+ };
138
+ }
139
+ async function uploadDirectory(client, logger, orgId, sandboxId, localDir, remotePath, _timeout, jsonOutput) {
140
+ const allFiles = getAllFiles(localDir);
141
+ if (allFiles.length === 0) {
142
+ logger.fatal(`Directory is empty: ${localDir}`);
143
+ }
144
+ const files = [];
145
+ let totalBytes = 0;
146
+ const effectiveRemotePath = remotePath || basename(localDir);
147
+ const baseRemotePath = effectiveRemotePath.endsWith('/')
148
+ ? effectiveRemotePath.slice(0, -1)
149
+ : effectiveRemotePath;
150
+ for (const filePath of allFiles) {
151
+ const relativePath = relative(localDir, filePath);
152
+ const targetPath = `${baseRemotePath}/${relativePath}`;
153
+ const buffer = readFileSync(filePath);
154
+ files.push({ path: targetPath, content: buffer });
155
+ totalBytes += buffer.length;
156
+ }
157
+ await sandboxWriteFiles(client, { sandboxId, files, orgId });
158
+ if (!jsonOutput) {
159
+ tui.success(`Copied ${localDir} → ${sandboxId}:${baseRemotePath} (${allFiles.length} files, ${totalBytes} bytes)`);
160
+ }
161
+ return {
162
+ source: localDir,
163
+ destination: `${sandboxId}:${baseRemotePath}`,
164
+ bytesTransferred: totalBytes,
165
+ filesTransferred: allFiles.length,
166
+ };
167
+ }
168
+ async function downloadFromSandbox(client, logger, orgId, sandboxId, remotePath, localPath, timeout, recursive, jsonOutput) {
169
+ if (recursive) {
170
+ return await downloadDirectory(client, logger, orgId, sandboxId, remotePath, localPath, timeout, jsonOutput);
171
+ }
172
+ return await downloadSingleFile(client, logger, orgId, sandboxId, remotePath, localPath, timeout, jsonOutput);
173
+ }
174
+ async function downloadSingleFile(client, logger, orgId, sandboxId, remotePath, localPath, _timeout, jsonOutput) {
175
+ const stream = await sandboxReadFile(client, { sandboxId, path: remotePath, orgId });
176
+ const chunks = [];
177
+ const reader = stream.getReader();
178
+ while (true) {
179
+ const { done, value } = await reader.read();
180
+ if (done)
181
+ break;
182
+ if (value)
183
+ chunks.push(value);
184
+ }
185
+ const buffer = Buffer.concat(chunks);
186
+ let targetPath = localPath;
187
+ if (localPath.endsWith('/') || localPath === '.') {
188
+ targetPath = resolve(localPath, basename(remotePath));
189
+ }
190
+ else {
191
+ targetPath = resolve(localPath);
192
+ }
193
+ const dir = dirname(targetPath);
194
+ mkdirSync(dir, { recursive: true });
195
+ writeFileSync(targetPath, buffer);
196
+ if (!jsonOutput) {
197
+ tui.success(`Copied ${sandboxId}:${remotePath} → ${targetPath} (${buffer.length} bytes)`);
198
+ }
199
+ return {
200
+ source: `${sandboxId}:${remotePath}`,
201
+ destination: targetPath,
202
+ bytesTransferred: buffer.length,
203
+ filesTransferred: 1,
204
+ };
205
+ }
206
+ async function downloadDirectory(client, logger, orgId, sandboxId, remotePath, localPath, timeout, jsonOutput) {
207
+ const listExecution = await sandboxExecute(client, {
208
+ sandboxId,
209
+ options: {
210
+ command: ['find', remotePath, '-type', 'f'],
211
+ timeout,
212
+ },
213
+ orgId,
214
+ });
215
+ const listChunks = [];
216
+ if (listExecution.stdoutStreamUrl) {
217
+ await streamToBuffer(listExecution.stdoutStreamUrl, listChunks, logger);
218
+ }
219
+ await waitForExecution(client, orgId, listExecution.executionId, logger);
220
+ const fileList = Buffer.concat(listChunks)
221
+ .toString('utf-8')
222
+ .trim()
223
+ .split('\n')
224
+ .filter((f) => f.length > 0);
225
+ if (fileList.length === 0) {
226
+ logger.fatal(`No files found in directory: ${remotePath}`);
227
+ }
228
+ const baseRemotePath = remotePath.endsWith('/') ? remotePath.slice(0, -1) : remotePath;
229
+ const baseLocalPath = resolve(localPath);
230
+ let totalBytes = 0;
231
+ for (const remoteFile of fileList) {
232
+ const relativePath = remoteFile.startsWith(baseRemotePath + '/')
233
+ ? remoteFile.slice(baseRemotePath.length + 1)
234
+ : basename(remoteFile);
235
+ const localFilePath = join(baseLocalPath, relativePath);
236
+ try {
237
+ const stream = await sandboxReadFile(client, { sandboxId, path: remoteFile, orgId });
238
+ const chunks = [];
239
+ const reader = stream.getReader();
240
+ while (true) {
241
+ const { done, value } = await reader.read();
242
+ if (done)
243
+ break;
244
+ if (value)
245
+ chunks.push(value);
246
+ }
247
+ const buffer = Buffer.concat(chunks);
248
+ totalBytes += buffer.length;
249
+ const dir = dirname(localFilePath);
250
+ mkdirSync(dir, { recursive: true });
251
+ writeFileSync(localFilePath, buffer);
252
+ if (!jsonOutput) {
253
+ logger.info(`Downloaded ${remoteFile} (${buffer.length} bytes)`);
254
+ }
255
+ }
256
+ catch (err) {
257
+ logger.warn(`Failed to read file: ${remoteFile}, skipping: ${err}`);
258
+ continue;
259
+ }
260
+ }
261
+ if (!jsonOutput) {
262
+ tui.success(`Copied ${sandboxId}:${baseRemotePath} → ${baseLocalPath} (${fileList.length} files, ${totalBytes} bytes)`);
263
+ }
264
+ return {
265
+ source: `${sandboxId}:${baseRemotePath}`,
266
+ destination: baseLocalPath,
267
+ bytesTransferred: totalBytes,
268
+ filesTransferred: fileList.length,
269
+ };
270
+ }
271
+ async function waitForExecution(client, orgId, executionId, logger) {
272
+ let attempts = 0;
273
+ while (attempts < MAX_POLL_ATTEMPTS) {
274
+ await sleep(POLL_INTERVAL_MS);
275
+ attempts++;
276
+ try {
277
+ const execInfo = await executionGet(client, { executionId, orgId });
278
+ if (execInfo.status === 'completed' ||
279
+ execInfo.status === 'failed' ||
280
+ execInfo.status === 'timeout' ||
281
+ execInfo.status === 'cancelled') {
282
+ if (execInfo.status === 'failed' || execInfo.status === 'timeout') {
283
+ logger.fatal(`Execution ${execInfo.status}: ${executionId}`);
284
+ }
285
+ return;
286
+ }
287
+ }
288
+ catch (err) {
289
+ if (err instanceof Error && err.name === 'AbortError') {
290
+ throw err;
291
+ }
292
+ logger.debug('poll error: %s', err);
293
+ continue;
294
+ }
295
+ }
296
+ logger.fatal('Execution timed out waiting for completion');
297
+ }
298
+ async function streamToBuffer(url, chunks, logger) {
299
+ const maxRetries = 10;
300
+ const retryDelay = 200;
301
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
302
+ try {
303
+ if (attempt > 0) {
304
+ logger.debug('stream retry attempt %d', attempt + 1);
305
+ await sleep(retryDelay);
306
+ }
307
+ const response = await fetch(url);
308
+ if (!response.ok || !response.body) {
309
+ continue;
310
+ }
311
+ const reader = response.body.getReader();
312
+ while (true) {
313
+ const { done, value } = await reader.read();
314
+ if (done) {
315
+ return;
316
+ }
317
+ if (value) {
318
+ chunks.push(Buffer.from(value));
319
+ }
320
+ }
321
+ }
322
+ catch (err) {
323
+ if (err instanceof Error && err.name === 'AbortError') {
324
+ throw err;
325
+ }
326
+ logger.debug('stream error: %s', err);
327
+ }
328
+ }
329
+ }
330
+ function sleep(ms) {
331
+ return new Promise((resolve) => setTimeout(resolve, ms));
332
+ }
333
+ export default cpSubcommand;
334
+ //# sourceMappingURL=cp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cp.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/cp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const createSubcommand: import("../../..").CommandDefinition;
2
+ export default createSubcommand;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/create.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB,sCAiG3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ import { createCommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { createSandboxClient, parseFileArgs } from './util';
5
+ import { getCommand } from '../../../command-prefix';
6
+ import { sandboxCreate } from '@agentuity/server';
7
+ const SandboxCreateResponseSchema = z.object({
8
+ sandboxId: z.string().describe('Unique sandbox identifier'),
9
+ status: z.string().describe('Current sandbox status'),
10
+ stdoutStreamUrl: z.string().optional().describe('URL to the stdout output stream'),
11
+ stderrStreamUrl: z.string().optional().describe('URL to the stderr output stream'),
12
+ });
13
+ export const createSubcommand = createCommand({
14
+ name: 'create',
15
+ description: 'Create an interactive sandbox for multiple executions',
16
+ tags: ['slow', 'requires-auth'],
17
+ requires: { auth: true, region: true, org: true },
18
+ examples: [
19
+ {
20
+ command: getCommand('cloud sandbox create'),
21
+ description: 'Create a sandbox with default settings',
22
+ },
23
+ {
24
+ command: getCommand('cloud sandbox create --memory 1Gi --cpu 1000m'),
25
+ description: 'Create a sandbox with resource limits',
26
+ },
27
+ {
28
+ command: getCommand('cloud sandbox create --network --idle-timeout 30m'),
29
+ description: 'Create a sandbox with network and custom timeout',
30
+ },
31
+ {
32
+ command: getCommand('cloud sandbox create --env KEY=VAL'),
33
+ description: 'Create a sandbox with a specific environment variable',
34
+ },
35
+ ],
36
+ schema: {
37
+ options: z.object({
38
+ memory: z.string().optional().describe('Memory limit (e.g., "500Mi", "1Gi")'),
39
+ cpu: z.string().optional().describe('CPU limit in millicores (e.g., "500m", "1000m")'),
40
+ disk: z.string().optional().describe('Disk limit (e.g., "500Mi", "1Gi")'),
41
+ network: z.boolean().optional().describe('Enable outbound network access'),
42
+ idleTimeout: z
43
+ .string()
44
+ .optional()
45
+ .describe('Idle timeout before sandbox is reaped (e.g., "10m", "1h")'),
46
+ env: z.array(z.string()).optional().describe('Environment variables (KEY=VALUE)'),
47
+ file: z
48
+ .array(z.string())
49
+ .optional()
50
+ .describe('Files to create in sandbox (sandbox-path:local-path)'),
51
+ snapshot: z.string().optional().describe('Snapshot ID or tag to restore from'),
52
+ dependency: z
53
+ .array(z.string())
54
+ .optional()
55
+ .describe('Apt packages to install (can be specified multiple times)'),
56
+ }),
57
+ response: SandboxCreateResponseSchema,
58
+ },
59
+ async handler(ctx) {
60
+ const { opts, options, auth, region, logger, orgId } = ctx;
61
+ const client = createSandboxClient(logger, auth, region);
62
+ const started = Date.now();
63
+ const envMap = {};
64
+ if (opts.env) {
65
+ for (const e of opts.env) {
66
+ const [key, ...valueParts] = e.split('=');
67
+ if (key) {
68
+ envMap[key] = valueParts.join('=');
69
+ }
70
+ }
71
+ }
72
+ const files = parseFileArgs(opts.file);
73
+ const hasFiles = files.length > 0;
74
+ const result = await sandboxCreate(client, {
75
+ options: {
76
+ resources: opts.memory || opts.cpu || opts.disk
77
+ ? {
78
+ memory: opts.memory,
79
+ cpu: opts.cpu,
80
+ disk: opts.disk,
81
+ }
82
+ : undefined,
83
+ network: opts.network ? { enabled: true } : undefined,
84
+ timeout: opts.idleTimeout ? { idle: opts.idleTimeout } : undefined,
85
+ env: Object.keys(envMap).length > 0 ? envMap : undefined,
86
+ command: hasFiles ? { exec: [], files } : undefined,
87
+ snapshot: opts.snapshot,
88
+ dependencies: opts.dependency,
89
+ },
90
+ orgId,
91
+ });
92
+ if (!options.json) {
93
+ const duration = Date.now() - started;
94
+ tui.success(`created sandbox ${tui.bold(result.sandboxId)} in ${duration}ms`);
95
+ }
96
+ return {
97
+ sandboxId: result.sandboxId,
98
+ status: result.status,
99
+ stdoutStreamUrl: result.stdoutStreamUrl,
100
+ stderrStreamUrl: result.stderrStreamUrl,
101
+ };
102
+ },
103
+ });
104
+ export default createSubcommand;
105
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACrD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC7C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uDAAuD;IACpE,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACjD,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,sBAAsB,CAAC;YAC3C,WAAW,EAAE,wCAAwC;SACrD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,+CAA+C,CAAC;YACpE,WAAW,EAAE,uCAAuC;SACpD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,mDAAmD,CAAC;YACxE,WAAW,EAAE,kDAAkD;SAC/D;QACD;YACC,OAAO,EAAE,UAAU,CAAC,oCAAoC,CAAC;YACzD,WAAW,EAAE,uDAAuD;SACpE;KACD;IACD,MAAM,EAAE;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC7E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC1E,WAAW,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2DAA2D,CAAC;YACvE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACjF,IAAI,EAAE,CAAC;iBACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,sDAAsD,CAAC;YAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC9E,UAAU,EAAE,CAAC;iBACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CAAC,2DAA2D,CAAC;SACvE,CAAC;QACF,QAAQ,EAAE,2BAA2B;KACrC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,GAAG,EAAE,CAAC;oBACT,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;YAC1C,OAAO,EAAE;gBACR,SAAS,EACR,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI;oBACnC,CAAC,CAAC;wBACA,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,IAAI,EAAE,IAAI,CAAC,IAAI;qBACf;oBACF,CAAC,CAAC,SAAS;gBACb,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gBACrD,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;gBAClE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACxD,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;gBACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,YAAY,EAAE,IAAI,CAAC,UAAU;aAC7B;YACD,KAAK;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACtC,GAAG,CAAC,OAAO,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,QAAQ,IAAI,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO;YACN,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,eAAe,EAAE,MAAM,CAAC,eAAe;SACvC,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const deleteSubcommand: import("../../..").CommandDefinition;
2
+ export default deleteSubcommand;
3
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/delete.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB,sCA+D3B,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ import { createCommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { createSandboxClient } from './util';
5
+ import { getCommand } from '../../../command-prefix';
6
+ import { sandboxDestroy } from '@agentuity/server';
7
+ const SandboxDeleteResponseSchema = z.object({
8
+ success: z.boolean().describe('Whether the operation succeeded'),
9
+ sandboxId: z.string().describe('Sandbox ID'),
10
+ durationMs: z.number().describe('Operation duration in milliseconds'),
11
+ message: z.string().optional().describe('Status message'),
12
+ });
13
+ export const deleteSubcommand = createCommand({
14
+ name: 'delete',
15
+ aliases: ['del', 'rm', 'remove', 'destroy'],
16
+ description: 'Delete a sandbox',
17
+ tags: ['destructive', 'deletes-resource', 'slow', 'requires-auth'],
18
+ requires: { auth: true, region: true, org: true },
19
+ idempotent: true,
20
+ examples: [
21
+ {
22
+ command: getCommand('cloud sandbox delete abc123'),
23
+ description: 'Delete a sandbox',
24
+ },
25
+ {
26
+ command: getCommand('cloud sandbox rm abc123'),
27
+ description: 'Delete using alias',
28
+ },
29
+ {
30
+ command: getCommand('cloud sandbox rm abc123 --confirm'),
31
+ description: 'Delete without confirmation prompt',
32
+ },
33
+ ],
34
+ schema: {
35
+ args: z.object({
36
+ sandboxId: z.string().describe('Sandbox ID'),
37
+ }),
38
+ options: z.object({
39
+ confirm: z.boolean().optional().default(false).describe('Skip confirmation prompt'),
40
+ }),
41
+ response: SandboxDeleteResponseSchema,
42
+ },
43
+ async handler(ctx) {
44
+ const { args, options, opts, auth, region, logger, orgId } = ctx;
45
+ if (!opts.confirm) {
46
+ const confirmed = await tui.confirm(`Delete sandbox "${args.sandboxId}"?`, false);
47
+ if (!confirmed) {
48
+ logger.info('Cancelled');
49
+ return {
50
+ success: false,
51
+ sandboxId: args.sandboxId,
52
+ durationMs: 0,
53
+ message: 'Cancelled',
54
+ };
55
+ }
56
+ }
57
+ const started = Date.now();
58
+ const client = createSandboxClient(logger, auth, region);
59
+ await sandboxDestroy(client, { sandboxId: args.sandboxId, orgId });
60
+ const durationMs = Date.now() - started;
61
+ if (!options.json) {
62
+ tui.success(`deleted sandbox ${tui.bold(args.sandboxId)} in ${durationMs}ms`);
63
+ }
64
+ return {
65
+ success: true,
66
+ sandboxId: args.sandboxId,
67
+ durationMs,
68
+ };
69
+ },
70
+ });
71
+ export default deleteSubcommand;
72
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const execSubcommand: import("../../..").CommandDefinition;
2
+ export default execSubcommand;
3
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/sandbox/exec.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,cAAc,sCA6KzB,CAAC;AA4DH,eAAe,cAAc,CAAC"}